Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 30 additions & 182 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ const featuredTools = pickCoreTools(allTools);
<!-- HERO -->
<section class="hero">
<div class="container">
<div class="masthead-bar">
<span class="masthead-name">ML Systems</span>
<span class="masthead-meta">An open archive · Est. 2026</span>
</div>
<div class="hero-grid">
<div>
<h1 class="hero-h1">
Expand Down Expand Up @@ -101,29 +97,23 @@ const featuredTools = pickCoreTools(allTools);
All articles →
</a>
</div>
<ol class="idx-list">
{featured.map((p, i) => (
<li class="idx-row">
<a class="idx-link" href={`/blog/${p.id}`}>
<span class="idx-num">{String(i + 1).padStart(2, '0')}</span>
<div class="idx-main">
<h3 class="idx-title">{p.data.title}</h3>
<p class="idx-sum">{p.data.summary}</p>
<div class="idx-meta">
{p.data.topicId && <span class="idx-topic">{topicName(p.data.topicId)}</span>}
<span>{p.authors.map((a) => a.data.name).join(', ')}</span>
<span>
{formatDate(p.data.date)} · {p.data.readMin} min
</span>
</div>
</div>
<span class="idx-arrow" aria-hidden="true">
<div class="latest-grid">
{featured.map((p) => (
<a class="article-card" href={`/blog/${p.id}`}>
<div class="article-meta">
{p.data.topicId && <span class="chip chip--sm">{topicName(p.data.topicId)}</span>}
</div>
<h3 class="article-title">{p.data.title}</h3>
<p class="article-summary">{p.data.summary}</p>
<div class="article-foot">
<span>{p.authors.map((a) => a.data.name).join(', ')}</span>
<span>
{formatDate(p.data.date)} · {p.data.readMin} min
</span>
</a>
</li>
</div>
</a>
))}
</ol>
</div>
</div>
</section>
)
Expand All @@ -142,29 +132,23 @@ const featuredTools = pickCoreTools(allTools);
All articles →
</a>
</div>
<ol class="idx-list">
{recent.map((p, i) => (
<li class="idx-row">
<a class="idx-link" href={`/blog/${p.id}`}>
<span class="idx-num">{String(i + 1).padStart(2, '0')}</span>
<div class="idx-main">
<h3 class="idx-title">{p.data.title}</h3>
<p class="idx-sum">{p.data.summary}</p>
<div class="idx-meta">
{p.data.topicId && <span class="idx-topic">{topicName(p.data.topicId)}</span>}
<span>{p.authors.map((a) => a.data.name).join(', ')}</span>
<span>
{formatDate(p.data.date)} · {p.data.readMin} min
</span>
</div>
</div>
<span class="idx-arrow" aria-hidden="true">
<div class="latest-grid">
{recent.map((p) => (
<a class="article-card" href={`/blog/${p.id}`}>
<div class="article-meta">
{p.data.topicId && <span class="chip chip--sm">{topicName(p.data.topicId)}</span>}
</div>
<h3 class="article-title">{p.data.title}</h3>
<p class="article-summary">{p.data.summary}</p>
<div class="article-foot">
<span>{p.authors.map((a) => a.data.name).join(', ')}</span>
<span>
{formatDate(p.data.date)} · {p.data.readMin} min
</span>
</a>
</li>
</div>
</a>
))}
</ol>
</div>
</div>
</section>
)
Expand Down Expand Up @@ -370,142 +354,6 @@ const featuredTools = pickCoreTools(allTools);
</BaseLayout>

<style>
/* Zine masthead — a running rule with mono wordmark + tagline at the ends */
.masthead-bar {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 16px;
padding-bottom: 14px;
margin-bottom: 40px;
border-bottom: 1px solid var(--ink);
font-family: var(--font-mono);
font-size: 12px;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.masthead-name {
font-weight: 600;
color: var(--ink);
}
.masthead-meta {
color: var(--ink-3);
}
@media (max-width: 560px) {
.masthead-meta {
display: none;
}
}

/* Editorial index — numbered, ruled list instead of a card grid */
.idx-list {
list-style: none;
margin: 0;
padding: 0;
border-top: 1px solid var(--line);
}
.idx-row {
border-bottom: 1px solid var(--line);
}
.idx-link {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: baseline;
column-gap: 28px;
padding: 26px 8px;
color: inherit;
text-decoration: none;
transition:
background 0.15s ease,
padding 0.18s ease;
}
.idx-link:hover {
background: var(--accent-soft);
padding-left: 16px;
padding-right: 16px;
}
.idx-num {
font-family: var(--font-mono);
font-size: 13px;
font-weight: 500;
color: var(--ink-4);
letter-spacing: 0.04em;
padding-top: 6px;
transition: color 0.15s ease;
}
.idx-link:hover .idx-num {
color: var(--accent);
}
.idx-main {
min-width: 0;
}
.idx-title {
font-family: var(--font-display);
font-size: clamp(24px, 3.2vw, 34px);
font-weight: 400;
line-height: 1.12;
letter-spacing: -0.015em;
color: var(--ink);
margin: 0 0 10px;
transition: color 0.15s ease;
}
.idx-link:hover .idx-title {
color: var(--accent);
}
.idx-sum {
font-family: var(--font-read);
font-size: 16px;
line-height: 1.55;
color: var(--ink-2);
margin: 0 0 14px;
max-width: 60ch;
}
.idx-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 14px;
font-family: var(--font-mono);
font-size: 11.5px;
letter-spacing: 0.03em;
color: var(--ink-3);
text-transform: uppercase;
}
.idx-topic {
color: var(--accent);
font-weight: 500;
}
.idx-arrow {
font-family: var(--font-mono);
font-size: 18px;
color: var(--ink-4);
align-self: center;
opacity: 0;
transform: translateX(-6px);
transition:
opacity 0.18s ease,
transform 0.18s ease,
color 0.15s ease;
}
.idx-link:hover .idx-arrow {
opacity: 1;
transform: none;
color: var(--accent);
}
@media (max-width: 640px) {
.idx-link {
grid-template-columns: auto 1fr;
column-gap: 16px;
padding: 22px 4px;
}
.idx-arrow {
display: none;
}
.idx-title {
margin-bottom: 8px;
}
}

.kernel-toggle {
background: none;
border: none;
Expand Down
Loading