Skip to content

Commit 394c6df

Browse files
authored
Merge pull request #8 from fritzhand/claude/install-ga4-432gka
Add a dedicated Ecosystem news page
2 parents df140ed + 9c15ac7 commit 394c6df

88 files changed

Lines changed: 533 additions & 5 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.mjs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ const news = (() => {
6969
})();
7070
const hostOf = (u) => { try { return new URL(u).hostname.replace(/^www\./, ""); } catch { return ""; } };
7171
const tickerItem = (n) => `<a class="ticker-item" href="${attr(n.url)}" target="_blank" rel="noopener"><span class="ti-src">${esc(n.source || hostOf(n.url))}</span><span class="ti-title">${esc(n.title)}</span></a>`;
72+
const NEWS_MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
73+
const fmtNewsDate = (iso) => { const m = /^(\d{4})-(\d{2})-(\d{2})/.exec(iso || ""); return m ? `${NEWS_MONTHS[+m[2] - 1]} ${+m[3]}, ${m[1]}` : ""; };
74+
const newsSlug = (n) => (n.id || "n-" + hostOf(n.url) + "-" + (n.date || "")).replace(/[^a-z0-9-]/gi, "-").toLowerCase();
75+
const newsCard = (n) => `
76+
<article class="news-card" id="${newsSlug(n)}">
77+
<div class="nc-head">
78+
<span class="nc-src">${esc(n.source || hostOf(n.url))}</span>
79+
${n.date ? `<time class="nc-date" datetime="${attr(n.date)}">${esc(fmtNewsDate(n.date))}</time>` : ""}
80+
</div>
81+
<h3 class="nc-title"><a href="${attr(n.url)}" target="_blank" rel="noopener">${esc(n.title)} ${ICONS.external}</a></h3>
82+
${n.summary ? `<p class="nc-summary">${esc(n.summary)}</p>` : ""}
83+
<div class="nc-foot">${(n.tags || []).map((t) => `<span class="nc-tag">${esc(t)}</span>`).join("")}<span class="nc-host">${esc(hostOf(n.url))}</span></div>
84+
</article>`;
7285

7386
/* ---------------- taxonomy labels ---------------- */
7487
const CAT_LABEL = { grant: "Grant", equity: "Equity", "loan-credit": "Loan / Credit", incubation: "Incubation", "market-access": "Market Access", mixed: "Mixed", other: "Other" };
@@ -243,6 +256,7 @@ const NAV_PAGES = [
243256
{ href: "finder.html", title: "Scheme Finder", icon: "compass" },
244257
{ href: "lifecycle.html", title: "Lifecycle Map", icon: "sprout" },
245258
{ href: "needs.html", title: "What do you need?", icon: "target" },
259+
{ href: "news.html", title: "Ecosystem news", icon: "news" },
246260
]},
247261
{ group: "Browse", items: [
248262
{ href: "directory.html", title: "All schemes", icon: "grid" },
@@ -463,13 +477,14 @@ const write = (rel, html) => { mkdirSync(dirname(join(OUT, rel)), { recursive: t
463477
const seq = tickerItems.map(tickerItem).join("");
464478
const tickerHTML = tickerItems.length ? `
465479
<div class="news-ticker" role="region" aria-label="Latest Indian startup ecosystem news">
466-
<span class="ticker-tag">${ICONS.news}<span>News</span></span>
480+
<a class="ticker-tag" href="news.html">${ICONS.news}<span>News</span></a>
467481
<div class="ticker-viewport">
468482
<div class="ticker-track" style="animation-duration:${tickerDur}s">
469483
<div class="ticker-seq">${seq}</div>
470484
<div class="ticker-seq" aria-hidden="true">${seq}</div>
471485
</div>
472486
</div>
487+
<a class="ticker-more" href="news.html">All news ${ICONS.arrow}</a>
473488
</div>` : "";
474489

475490
const body = `
@@ -1121,6 +1136,40 @@ ${rel.length ? `
11211136
}));
11221137
});
11231138

1139+
/* ================= NEWS ================= */
1140+
{
1141+
const srcNames = [...new Set(news.map((n) => n.source).filter(Boolean))];
1142+
const latest = news.length ? fmtNewsDate(news[0].date) : "";
1143+
const intro = news.length
1144+
? `The latest coverage of India's startup ecosystem — ${news.length} stories from ${srcNames.length} source${srcNames.length === 1 ? "" : "s"}, each linking straight to the publisher.`
1145+
: `A source-linked feed of the latest coverage of India's startup ecosystem.`;
1146+
const body = `
1147+
${crumbs("", [["Home", "index.html"], ["Ecosystem news", null]])}
1148+
<div class="page-head">
1149+
<div class="kicker">Startup ecosystem${latest ? ` · latest ${esc(latest)}` : ""}</div>
1150+
<h1>Ecosystem news</h1>
1151+
<p class="lede">${esc(intro)}</p>
1152+
</div>
1153+
${news.length ? `
1154+
<div class="news-meta">
1155+
<div class="callout tone-info" style="margin:0 0 22px">
1156+
<span class="ic">${ICONS.info}</span>
1157+
<div>Headlines are curated from reputable outlets covering India's startup ecosystem — each links straight to the publisher. Nothing here is written or edited by this site; always verify scheme details on the official portals.</div>
1158+
</div>
1159+
<div class="news-sources"><span class="ns-label">Sources in this feed</span>${srcNames.map((s) => `<span class="nc-tag">${esc(s)}</span>`).join("")}</div>
1160+
</div>
1161+
<div class="news-grid">
1162+
${news.map((n) => newsCard(n)).join("")}
1163+
</div>` : `
1164+
<div class="empty-state" style="margin-top:40px">
1165+
<div class="big">📰</div>
1166+
<h2 style="font-size:1.3rem">No news yet</h2>
1167+
<p class="muted" style="margin-top:8px">This feed is populated from <code>data/news.json</code>. Add source-linked headlines there and rebuild.</p>
1168+
<p style="margin-top:18px"><a class="btn btn-primary" href="directory.html">Browse all schemes</a></p>
1169+
</div>`}`;
1170+
write("news.html", shell({ root: "", active: "news.html", title: "Ecosystem news", description: "Source-linked news about India's startup ecosystem — funding, policy, schemes and incubators.", body }));
1171+
}
1172+
11241173
/* ================= 404 ================= */
11251174
write("404.html", shell({
11261175
root: PATH_PREFIX, active: "", title: "Page not found",

docs/404.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="/startup-india-guide/finder.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="/startup-india-guide/lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="/startup-india-guide/needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="/startup-india-guide/news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

docs/about.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="finder.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

docs/assets/search-index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/assets/site.css

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,14 +455,52 @@ a.stat .l { color: var(--link); }
455455
.ticker-item:hover .ti-title { color: var(--text); text-decoration: underline; text-underline-offset: 2px; }
456456
.ti-src { color: var(--accent); font-weight: 700; font-size: 0.78rem; }
457457
.ti-title { color: var(--text-muted); font-size: 0.84rem; max-width: 44ch; overflow: hidden; text-overflow: ellipsis; }
458+
.ticker-tag:hover { text-decoration: none; color: #fff; filter: brightness(1.12); }
459+
.ticker-more {
460+
display: inline-flex; align-items: center; gap: 5px; flex: none;
461+
padding: 0 15px; font-size: 0.76rem; font-weight: 600; color: var(--text-muted);
462+
white-space: nowrap; border-left: 1px solid var(--border); background: var(--surface);
463+
}
464+
.ticker-more:hover { text-decoration: none; color: var(--primary); background: var(--surface-alt); }
465+
.ticker-more svg { width: 14px; height: 14px; }
458466
@keyframes ticker-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
459-
@media (max-width: 640px) { .ti-title { max-width: 30ch; } }
467+
@media (max-width: 640px) { .ti-title { max-width: 30ch; } .ticker-more { display: none; } }
460468
@media (prefers-reduced-motion: reduce) {
461469
.ticker-track { animation: none; }
462470
.ticker-seq[aria-hidden="true"] { display: none; }
463471
.ticker-viewport { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
464472
}
465473

474+
/* ---------- news page ---------- */
475+
.news-sources { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin: 0 0 24px; }
476+
.news-sources .ns-label {
477+
font-size: 0.72rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em;
478+
color: var(--text-faint); margin-right: 4px;
479+
}
480+
.news-grid { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(min(340px, 100%), 1fr)); margin-top: 6px; }
481+
.news-card {
482+
display: flex; flex-direction: column; gap: 9px;
483+
padding: 18px; background: var(--surface); border: 1px solid var(--border);
484+
border-radius: var(--radius-lg); box-shadow: var(--shadow-1);
485+
scroll-margin-top: 80px;
486+
}
487+
.news-card:target { border-color: var(--accent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 35%, transparent); }
488+
.nc-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
489+
.nc-src { font-size: 0.76rem; font-weight: 700; color: var(--accent); letter-spacing: 0.01em; }
490+
.nc-date { font-size: 0.74rem; color: var(--text-faint); font-family: var(--font-mono); white-space: nowrap; }
491+
.nc-title { font-size: 1rem; line-height: 1.35; font-weight: 700; }
492+
.nc-title a { color: var(--text); display: inline; }
493+
.nc-title a:hover { color: var(--link); text-decoration: underline; text-underline-offset: 2px; }
494+
.nc-title svg { width: 13px; height: 13px; color: var(--text-faint); vertical-align: baseline; flex: none; }
495+
.nc-summary { font-size: 0.875rem; color: var(--text-muted); line-height: 1.5; }
496+
.nc-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin-top: auto; padding-top: 4px; }
497+
.nc-tag {
498+
display: inline-block; font-size: 0.7rem; font-weight: 600; color: var(--text-muted);
499+
background: var(--surface-sunken); border: 1px solid var(--border);
500+
border-radius: var(--radius-pill); padding: 2px 9px;
501+
}
502+
.nc-host { margin-left: auto; font-size: 0.72rem; color: var(--text-faint); font-family: var(--font-mono); }
503+
466504
/* ---------- card grids ---------- */
467505
.grid { display: grid; gap: 16px; margin-top: 20px; }
468506
.grid-2 { grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); }

docs/compare.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="finder.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

docs/directory.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="finder.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

docs/finder.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="finder.html" aria-current="page"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

docs/glossary.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<a class="nav-link" href="finder.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><path d="m16.2 7.8-2.3 6.1-6.1 2.3 2.3-6.1z"/></svg></span>Scheme Finder</a>
6060
<a class="nav-link" href="lifecycle.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M12 20v-8m0 0S9 4 3 4c0 6 5 8 9 8Zm0-3s2-6 9-6c0 5-4 7-9 7"/></svg></span>Lifecycle Map</a>
6161
<a class="nav-link" href="needs.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/></svg></span>What do you need?</a>
62+
<a class="nav-link" href="news.html"><span class="card-icon" style="width:22px;height:22px;border-radius:6px;background:transparent;color:var(--text-faint)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" width="15" height="15"><path d="M4 22h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8M15 18h-5M10 6h8v4h-8V6Z"/></svg></span>Ecosystem news</a>
6263

6364
</div>
6465

0 commit comments

Comments
 (0)