site: founding post, headline post layout, masonry grid, source links

- New "Why this exists" post; masthead "founded" links to it
- Post template: serif headline + date in masthead, "Filed under {category}" in footer
- Drop counts from footer Collections list
- Masonry component for home + sources grid; source badges link to /sources/#slug
- Theme toggle (settings page + cog) with dark-mode-aware tokens
- Six new themed find lists; cluster-finds skill
This commit is contained in:
2026-05-03 17:52:14 -04:00
parent c8095d2766
commit e873460465
17 changed files with 683 additions and 251 deletions
+20 -21
View File
@@ -1,7 +1,9 @@
---
import BaseLayout from '../layouts/BaseLayout.astro';
import Masonry from '../components/Masonry.astro';
import sourcesData from '../../sources.json';
import { getAllFinds } from '../lib/find-items';
import { sourceSlug } from '../lib/sources';
import {
buildOgImage,
buildBreadcrumbs,
@@ -83,12 +85,12 @@ const breadcrumbs = buildBreadcrumbs([
ogImage={ogImage}
jsonLd={[collectionPage, itemList, breadcrumbs]}
>
<ul class="grid">
<Masonry>
{
sources.map((source) => {
const recent = (findsBySource.get(source.name) ?? []).slice(0, 5);
return (
<li>
<article id={sourceSlug(source.name)} class="source-item">
<div class="card">
<a href={source.url} class="head-link" target="_blank" rel="noopener">
<div class="head">
@@ -119,29 +121,21 @@ const breadcrumbs = buildBreadcrumbs([
</div>
)}
</div>
</li>
</article>
);
})
}
</ul>
</Masonry>
<p class="back"><a href="/">← back</a></p>
<style>
.grid {
column-count: 3;
column-gap: 1rem;
list-style: none;
margin: 0;
padding: 0;
.source-item {
scroll-margin-top: 1rem;
}
@media (max-width: 880px) { .grid { column-count: 2; } }
@media (max-width: 520px) { .grid { column-count: 1; } }
.grid > li {
break-inside: avoid;
display: block;
margin: 0 0 1rem;
.source-item:target .card {
border-color: var(--accent);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);
}
.card {
@@ -164,10 +158,11 @@ const breadcrumbs = buildBreadcrumbs([
.head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 0.6rem;
flex-direction: column;
gap: 0.15rem;
margin-bottom: 0.45rem;
min-width: 0;
overflow: hidden;
}
.name {
font-family: ui-sans-serif, system-ui, -apple-system, 'Helvetica Neue', sans-serif;
@@ -178,10 +173,14 @@ const breadcrumbs = buildBreadcrumbs([
transition: color 0.18s ease;
}
.host {
display: block;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 0.72rem;
color: var(--muted);
flex-shrink: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
}
.notes {