2024-12-05 13:00:17 +00:00
@import nu.marginalia.WebsiteUrl
@import nu.marginalia.search.model.NavbarModel
@import nu.marginalia.search.model.SearchFilters
@import nu.marginalia.search.model.SearchProfile
2024-12-17 20:40:52 +00:00
@import nu.marginalia.search.svc.SearchFrontPageService.IndexModel
@import nu.marginalia.search.svc.SearchFrontPageService.NewsItem
2024-12-18 14:12:22 +00:00
@import nu.marginalia.search.svc.SearchFrontPageService.NewsItemCluster
2024-12-05 13:00:17 +00:00
@param NavbarModel navbar
@param WebsiteUrl websiteUrl
2024-12-17 20:40:52 +00:00
@param IndexModel model
2024-12-10 18:13:13 +00:00
2024-12-05 13:00:17 +00:00
<!DOCTYPE html>
<html lang="en">
2024-12-06 20:38:36 +00:00
@template.part.head(title = "Marginalia Search", allowIndexing = true)
2024-12-05 13:00:17 +00:00
2024-12-13 14:22:01 +00:00
<body class="min-h-screen bg-slate-100 dark:bg-gray-900 dark:text-white font-sans " >
2024-12-05 13:00:17 +00:00
@template.part.navbar(navbar = navbar)
2024-12-13 14:22:01 +00:00
<header class="border-b border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 shadow-md">
2024-12-06 20:38:36 +00:00
<div class="max-w-[1400px] mx-auto px-4 py-2 sm:py-4">
2024-12-05 13:00:17 +00:00
<div class="flex items-center">
2024-12-06 20:38:36 +00:00
<div class="hidden sm:block md:w-32 md:mr-16 md:ml-16"><h1 class="text-md sm:text-xl mr-8 font-serif whitespace-nowrap"><a href="/">Marginalia Search</a></h1></div>
2024-12-09 13:55:37 +00:00
<div class="w-full p-2 border-none backdrop-blur-sm">
@template.serp.part.searchform(query = "", profile = SearchProfile.NO_FILTER.filterId, filters = new SearchFilters(websiteUrl))
2024-12-06 20:38:36 +00:00
</div>
2024-12-05 13:00:17 +00:00
</div>
</div>
</header>
2024-12-17 20:40:52 +00:00
@if (model.news().isEmpty())
2024-12-11 13:33:57 +00:00
<div class="max-w-7xl mx-auto flex flex-col space-y-4 fill-w">
2024-12-13 14:22:01 +00:00
<div class="border dark:border-gray-600 dark:bg-gray-800 bg-white rounded p-2 m-4 ">
<div class="text-slate-700 dark:text-white text-sm p-4">
2025-01-05 18:08:02 +00:00
<div class="fas fa-wrench mr-1 text-margeblue dark:text-slate-200"></div>
This is the new design and home of Marginalia Search. Migration to the new domain <pre class="inline text-red-800 dark:text-red-100">marginalia-search.com</pre> is currently <em>in progress</em>,
so mind that some things may be a bit broken for a day or two. <a href="https://about.marginalia-search.com/article/redesign/" class="underline text-liteblue dark:text-blue-200">Read more</a>.
<p class="my-4"></p>
If you have any issues or feedback regarding this change, please email
2025-01-05 15:56:38 +00:00
<a href="mailto:contact@marginalia-search.com" class="underline text-liteblue dark:text-blue-200">contact@marginalia-search.com</a>.
2024-12-06 14:56:11 +00:00
</div>
</div>
2024-12-05 13:00:17 +00:00
<div class="mx-auto flex flex-col sm:flex-row my-4 sm:space-x-2 space-y-2 sm:space-y-0 w-full md:w-auto px-2">
2024-12-13 14:22:01 +00:00
<div class="flex flex-col border dark:border-gray-600 rounded overflow-hidden dark:bg-gray-800 bg-white p-6 space-y-3">
<div><i class="fas fa-sailboat mx-2 text-margeblue dark:text-slate-200"></i>Explore the Web</div>
<ul class="list-disc ml-6 text-slate-700 dark:text-white text-xs leading-5">
2024-12-05 13:00:17 +00:00
<li>Prioritizes non-commercial content</li>
<li>Tools for both search and discovery</li>
<li>Find lost old websites</li>
</ul>
</div>
2024-12-13 14:22:01 +00:00
<div class="flex flex-col border dark:border-gray-600 rounded overflow-hidden dark:bg-gray-800 bg-white p-6 space-y-3 ">
2025-01-05 18:08:02 +00:00
<div><i class="fas fa-hand-holding-hand mx-2 text-margeblue dark:text-slate-200"></i>Open Source</div>
2024-12-13 14:22:01 +00:00
<ul class="list-disc ml-6 text-slate-700 dark:text-white text-xs leading-5">
2024-12-11 13:33:57 +00:00
<li>Custom index and crawler software</li>
<li>Simple technology -- no AI or cloud</li>
2024-12-05 13:00:17 +00:00
<li>AGPL license</li>
</ul>
2024-12-13 14:22:01 +00:00
<div class="text-xs text-liteblue dark:text-blue-200 pt-4">
2024-12-05 13:00:17 +00:00
<i class="fas fa-link"></i>
<a href="https://git.marginalia.nu/" class="underline">Git Repository</a>
</div>
</div>
2024-12-13 14:22:01 +00:00
<div class="flex flex-col border dark:border-gray-600 rounded overflow-hidden dark:bg-gray-800 bg-white p-6 space-y-3 ">
<div><i class="fas fa-lock mx-2 text-margeblue dark:text-slate-200"></i> Privacy by default</div>
<ul class="list-disc ml-6 text-slate-700 dark:text-white text-xs leading-5">
2024-12-05 13:00:17 +00:00
<li>Filter out tracking and adtech</li>
<li>No user or search data shared with 3rd parties</li>
<li>No long-term retention of queries or IP addresses</li>
</ul>
2024-12-13 14:22:01 +00:00
<div class="text-xs text-liteblue dark:text-blue-200 pt-4">
2024-12-05 13:00:17 +00:00
<i class="fas fa-link"></i>
2025-01-05 15:56:38 +00:00
<a href="https://about.marginalia-search.com/article/privacy/" class="underline">Privacy Statement</a>
2024-12-05 13:00:17 +00:00
</div>
</div>
2024-12-11 13:33:57 +00:00
2024-12-05 13:00:17 +00:00
</div>
</div>
2024-12-17 20:40:52 +00:00
@else
<div class="max-w-7xl mx-auto flex flex-col space-y-4 fill-w m-4">
2025-01-01 16:17:54 +00:00
<div class="my-4 text-black dark:text-white font-serif text-xl mx-8 place-items-baseline flex">
Subscriptions
<div class="grow"></div>
<a class="text-sm font-sans" href="/export-opml">
<i class="fas fa-download mr-2"></i>
Export as OPML
</a>
</div>
2024-12-18 14:12:22 +00:00
@for (NewsItemCluster cluster : model.news())
!{NewsItem item = cluster.first();}
<div class="border dark:border-gray-600 rounded bg-white dark:bg-gray-800 flex flex-col overflow-hidden mx-4 space-y-2">
<a class="flex space-x-2 flex-row place-items-baseline bg-margeblue text-white p-2 text-md" href="/site/${item.domain()}">
<i class="fas fa-globe mr-2"></i>
<span>${item.domain()}</span>
</a>
<div class="text-black dark:text-white flex place-items-middle mx-2">
<div class="flex flex-col space-y-1">
<a class="text-l text-liteblue dark:text-blue-200 visited:text-purple-800 dark:visited:text-purple-200" href="${item.url()}" rel="ugc external nofollow">${item.title()}</a>
2024-12-17 20:40:52 +00:00
</div>
<div class="grow"></div>
2024-12-18 14:12:22 +00:00
<div class="flex text-xs whitespace-nowrap">
2024-12-17 20:40:52 +00:00
${item.date().substring(0, 10)}
</div>
</div>
2024-12-18 14:12:22 +00:00
<div class="text-sm text-gray-800 dark:text-gray-100 mx-2">$unsafe{item.description()}</div>
@for (var remainder : cluster.rest())
<div class="flex flex-col space-y-1 dark:border-gray-600 border-t pt-2 mx-2">
<div class="text-black dark:text-white flex place-items-middle">
<a class="text-sm text-liteblue dark:text-blue-200 visited:text-purple-800 dark:visited:text-purple-200" href="${remainder.url()}" rel="ugc external nofollow">${remainder.title()}</a>
<div class="grow"></div>
<div class="flex text-xs whitespace-nowrap">
${remainder.date().substring(0, 10)}
</div>
</div>
</div>
@endfor
<div class="pt-2"></div>
2024-12-17 20:40:52 +00:00
</div>
@endfor
2024-12-25 13:42:00 +00:00
<div class="mx-4 text-sm text-gray-800 dark:text-gray-200">Last updated: ${model.refreshDate()}</div>
2024-12-17 20:40:52 +00:00
</div>
@endif
2024-12-05 13:00:17 +00:00
@template.part.footerLegal()
2024-12-06 20:38:36 +00:00
<script lang="javascript" src="js/typeahead.js"></script>
2024-12-05 13:00:17 +00:00
</body>
</html>