Share language and theme across the sites; prepare the 0.1.0 release (#13)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -41,7 +41,7 @@ one-line-per-change index, and detail files live inside the folder (mirrors agen
|
||||
## Details
|
||||
|
||||
- `changelog/<version>/README.md` is the release summary: one line per change with its
|
||||
title and one-sentence summary, linking the detail file relatively; `0.0.2/README.md`
|
||||
title and one-sentence summary, linking the detail file relatively; `0.1.0/README.md`
|
||||
absorbs the section previously kept in the top-level index.
|
||||
- `changelog/README.md` now documents only the layout and the entry conventions (no
|
||||
per-file listing).
|
||||
@@ -0,0 +1,11 @@
|
||||
# Language and theme carry across the landing page and the docs site
|
||||
|
||||
The two sites are separate SPAs deployed to one origin — penguin.ooo and penguin.ooo/docs/ — but each persisted its preferences under its own `localStorage` key (`penguin-landing.*` and `penguin-docs.*`). Picking dark mode or Chinese on one and clicking through to the other therefore dropped the visitor back to the system default, which read as the setting being ignored.
|
||||
|
||||
- Both sites now read and write one shared pair of keys, `penguin-site.theme` and `penguin-site.lang`, via a small `state/site-prefs.ts` module duplicated in each package (they share no package, exactly as `theme.tsx` and `locale.tsx` already are). The keys must stay identical on both sides; if they drift, the sync stops silently.
|
||||
- The retired per-site keys are still read as a fallback, so a returning visitor keeps the choice they made before the change instead of being reset once.
|
||||
- A `storage` listener covers the case where both sites are open at once: switching theme or language in one tab now updates the other without a reload. The site-to-site hop is a full page load and is served by the read on mount.
|
||||
- The docs site's pre-paint theme script reads the shared key too, and the landing page — which had no such script — gained the same one. Without it, arriving at the landing page from a dark docs page flashed a white background before React booted.
|
||||
- Reading `localStorage` is wrapped throughout: it throws outright in cookie-blocked and partitioned contexts, and a preference is not worth taking the page down for.
|
||||
|
||||
Verified against the assembled site (landing at `/`, docs under `/docs/`, one origin): a dark + Chinese choice made on the landing page survives the hop to the docs site and back, a change made on the docs side propagates the other way, and a profile carrying only the retired `penguin-docs.*` keys still renders dark and Chinese.
|
||||
@@ -1,6 +1,8 @@
|
||||
# Version 0.0.2
|
||||
# Version 0.1.0
|
||||
|
||||
Unreleased.
|
||||
Released on 2026-07-21.
|
||||
|
||||
- [2026-07-21] Language and theme are shared between the landing page and the docs site, so a choice made on one carries across to the other. ([details](2026-07-21-site-preferences-sync.md))
|
||||
|
||||
- [2026-07-21] A model is always referenced by an explicit `(provider, model_id)` pair — the provider is never inferred, guessed, or defaulted — together with the fixes from a full review of the release branch, refreshed benchmark results, and the demo videos on the landing page. ([details](2026-07-21-model-reference-and-review-fixes.md))
|
||||
|
||||
Reference in New Issue
Block a user