Skip to content

feat(site): add marketing landing page and generated docs site - #486

Merged
tickernelz merged 2 commits into
mainfrom
site/landing
Nov 4, 2026
Merged

tickernelz merged 2 commits into
mainfrom
site/landing

Conversation

@tickernelz

Copy link
Copy Markdown
Owner

What

Adds site/: a marketing landing page and a docs site for https://opencode-mem.zhafron.my.id, plus .github/workflows/site.yml (GitHub Pages via Actions).

  • Landing: benefit-led English copy ("Your agent finally remembers."), with/without contrast, three-step how it works, features (README names kept as is), Dreaming, nested shared project memory, the real web UI (v2.40.1) in a device frame, privacy, social proof, an FAQ that answers objections, and a closing CTA. No testimonials, logos, or unverifiable numbers.
  • Memory animation: a hand-written canvas 2D constellation (site/src/scripts/memory-field.ts, lazy-loaded through IntersectionObserver after first paint). The hero recalls a memory node, auto-capture types into a terminal and flies a memory card into the graph, Dreaming dims the graph and merges small memories into brighter nodes, and nested repos draw branch lines into one shared memory. prefers-reduced-motion renders a still, finished state.
  • Docs: Astro 7.4.5 + Starlight 0.42.8, generated at build from README.md and .github/i18n/* (en, de, zh, ar, tr, nl) via site/docs-map.json. The build fails when a README heading or config option is unmapped. Pagefind provides search.
  • Tokens: Muted Violet is read from web/src/app.css at build time (web/ is untouched). Fonts: Bricolage Grotesque for display, JetBrains Mono for code and accents.
  • Numbers: stars, forks, version, and npm downloads come from the GitHub and npm APIs at build time, with a snapshot fallback. Current snapshot: 1,818 stars, 183 forks, v2.40.1, 112,646 downloads (2025-11-03..2026-11-02), fetched 2026-11-04.

Safety for the package and releases

  • package.json files stays ["dist", "package.json"], so site/ never ships to npm.
  • release.yml triggers only on v* tags; site.yml triggers on site/**, README.md, .github/i18n/**, web/src/app.css, and favicons. Deploy runs only on main in this repo. A nightly build refreshes the numbers.
  • Root eslint.config.js and .prettierignore now skip site build output and generated content.

Measurements (Lighthouse 13.6 mobile, local astro preview, 3 runs each)

Page Perf A11y BP SEO LCP (median) TBT CLS
Plan baseline (CSS-only prototype) 100 – – – 1.13 s – –
Landing / 100 100 100 100 0.90 s 0 ms 0
Docs /docs/ 100 100 100 100 0.75 s 0 ms 0
Docs /docs/configure/dreaming/ 100 100 100 100 0.75 s 0 ms 0

Eager landing JS is 3,937 B external plus 948 B inline. check-dist.mjs fails the build above a 12 KB budget. The animation is a separate lazy chunk. Every text color pair passes WCAG AA (lowest is light muted on background, 4.97:1).

Plan decisions (ZHA-4429 Q2–Q8)

  • Q2 motion: the brief overrides "light" with a full memory animation, built as hand-written canvas 2D (no three.js, no Lenis). It measured better than the plan's light baseline (LCP 0.90 s vs 1.13 s).
  • Q3 live web UI demo: not in the first release. Real screenshots of the sim mode instead.
  • Q4 analytics: none.
  • Q5 location: site/ in this repo, Pages from Actions.
  • Q6 i18n: docs in all 6 README languages; landing English only, with strings in site/src/i18n/en.ts ready for translation.
  • Q7 Pages: already enabled by Wira. Setting the repo/npm homepage after launch is left for Zhafron.
  • Q8 display font: Bricolage Grotesque for headlines (the brief asked for warmer, larger display type than the plan), with JetBrains Mono kept for the wordmark, code, and accents.

Zhafron asked for a site that sells the outcome instead of reading like a
spec, with a living memory animation. The landing uses benefit-led copy, a
lazy canvas memory constellation, and real web UI screenshots. Docs are
generated from README.md and .github/i18n at build time; the build fails when
a README heading or config option is not mapped.

Proof: local build plus check-dist pass; Lighthouse mobile on landing, docs
index and a config page scores 100 in all four categories with landing LCP
0.90 s and docs LCP 0.75 s. The npm files field is unchanged and the Pages
workflow only triggers on site paths, so releases and the package stay as is.
Hendra's review of #486 found captured memory nodes never recycled, so new
nodes linked to faded ones and lost visible edges over time. Captured nodes now
reuse four slots and only link to visible nodes.

The eager JS budget missed static imports (preload-helper); check-dist now
follows them recursively (6550 B, matching the reviewer's measurement). The
Site workflow also runs on src/config.ts and opencode-mem.example.jsonc, which
feed the config-option gate, and typechecks site/ with astro check, which caught
two index errors in Showcase.astro.

Proof: astro check 0 errors, negative control fails; build plus check-dist pass;
90 capture cycles in headless Chrome with 0 errors and a 2 MB JS heap.
@tickernelz
tickernelz merged commit 1055d37 into main Nov 4, 2026
9 checks passed
@EyJunge1
EyJunge1 deleted the site/landing branch November 4, 2026 19:12
@EyJunge1 EyJunge1 mentioned this pull request Nov 4, 2026
3 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant