feat(www): landing page (#25)

* design: landing page spec + app icon asset

* chore(www): add anime.js, fonts, and landing page screenshot assets

* feat(www): add design tokens, fonts, shared layout

* feat(www): add landing page sections and styling

* feat(www): add theme toggle and anime.js viewport animations

* feat(www): feedback updates — no hero card, os-aware download, footer email, lowercase colored heading

* feat(www): remove screenshot borders, move macos hint below ctas, mobile github fallback

* feat(www): keep hero CTAs side by side

* feat(www): set initial nav border to transparent

* feat(www): add Rybbit prod-only, sitemap, SEO head, OG image, robots.txt, 404 page

* docs(AGENTS): include www landing page version in release sync checklist

* chore(www): add railpack.json for Dokploy deploy (force node provider, TZ)

* chore(www): use bun for Railpack deploy (packageManager + standalone www/bun.lock)

* docs(AGENTS): note www/bun.lock sync for Railpack deploys

* chore(www): add vitest test tooling

* feat(www): add FAQ data source

* feat(www): add SEO JSON-LD builders

* feat(www): add Seo JSON-LD component

* feat(www): wire Seo component and social/meta tags into Layout

* feat(www): add homepage JSON-LD, keyword H1, data-driven FAQ

* fix(www): point Roadmap footer link to GitHub

* feat(www): add lastmod to sitemap

* perf(www): self-host anime.js

* refactor(www): move nav and footer into shared Layout

* feat(www): add changelog page

* fix(www): make shared component styles global in Layout

* perf(www): optimize screenshots with Astro Image (webp/avif + srcset)

* feat(www): add web app manifest

* feat(www): add helpful links to 404 page

* fix(www): shorten homepage H1 copy

* fix(www): OS-aware navbar download + footer layout

* feat(www): build full changelog from v0.7.0 to v0.7.10
This commit is contained in:
2026-08-17 09:16:58 +08:00
committed by GitHub
parent 62eed15844
commit 501fed962c
33 changed files with 2361 additions and 16 deletions
+47
View File
@@ -0,0 +1,47 @@
---
import Layout from "../layouts/Layout.astro";
import { changelogEntries } from "../data/changelog";
import { buildBreadcrumbJsonLd, buildTitle } from "../lib/seo";
const site = "https://getgridline.app";
const jsonLd = [
buildBreadcrumbJsonLd([
{ name: "Home", url: `${site}/` },
{ name: "Changelog", url: `${site}/changelog` },
]),
];
---
<Layout
title={buildTitle("Changelog")}
description="Gridline release notes. Free, open-source database GUI for PostgreSQL, MySQL, SQLite, and Redis."
jsonLd={jsonLd}
>
<main class="pt-32 pb-20 md:pt-44 md:pb-28">
<div class="max-w-[800px] mx-auto px-6">
<p class="font-mono text-xs tracking-[0.15em] uppercase text-[var(--accent)] mb-4">Changelog</p>
<h1 class="font-serif text-4xl md:text-6xl leading-[1.05] tracking-tight mb-10">Release notes</h1>
<div class="space-y-6">
{
changelogEntries.map((entry) => (
<article class="rounded-xl border border-[var(--border)] bg-[var(--surface)] p-6">
<h2 class="text-xl font-semibold mb-1">v{entry.version}</h2>
<p class="text-xs text-[var(--text-muted)] mb-3">{entry.date}</p>
<ul class="space-y-2 text-sm text-[var(--text-muted)]">
{entry.highlights.map((h) => <li>• {h}</li>)}
</ul>
</article>
))
}
</div>
<p class="mt-8 text-sm text-[var(--text-muted)]">
Full release history on{" "}
<a href="https://github.com/AdrianBonpin/gridline/releases" target="_blank" rel="noopener" class="text-[var(--primary)] hover:text-[var(--primary-hover)]">
GitHub Releases
</a>.
</p>
</div>
</main>
</Layout>