2 Commits

Author SHA1 Message Date
2b28f27e79 Close the keystore gitignore trap, and ship the font licences
.gitignore had "*.keystore" followed by "!debug.keystore", which
deliberately un-ignored a signing key. Nothing leaked - no keystore has
ever been in the tree - but had one landed there it would have been
committed silently. The negation is gone and *.jks is covered too.

public/fonts/ redistributes Space Grotesk and Space Mono, and the SIL
Open Font License requires its text to accompany the fonts. Both are
included, fetched from each typeface's own repository rather than
written from memory, and kept as separate files because the copyright
lines differ: Space Grotesk 2020, Space Mono 2016.

Added a README there recording which file is which family, why only the
latin subsets are shipped, and the two glyphs that fall outside them and
so render from a system fallback - which is why the pickers draw their
caret as SVG instead of typing it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 21:27:48 +03:00
956dc57763 Phase 2: React scaffolding, self-hosted fonts, design tokens
Vite builds to dist/, deliberately not www/. www/ is still produced by
sync-www.sh for the Phase 1 APK, which stays installable throughout the
port; cutover is a one-line webDir change in capacitor.config.json.
base is relative because Capacitor serves the bundle from the APK, where
absolute asset paths would 404.

index.html omits viewport-fit=cover on purpose. That string is what
makes Capacitor's SystemBars plugin pass insets through to the page;
without it the plugin pads the decor view and the layout is always
between the status and gesture bars. Phase 1 learned this the hard way.

Fonts are self-hosted for offline use, latin subsets only: three files
at 68K, against the 133K Barlow costs today. Space Grotesk is variable,
so one file covers 400-700. Dropped latin-ext and vietnamese.

Carets are drawn as SVG, not typed. U+25BE and U+23EE sit outside every
Latin subset and would fall back to a system font mid-label.

base.css carries the settled palette and the measured vertical budget as
tokens, so a component cannot quietly exceed it:
  8 + 44 + 8 + 525 + 8 + 84 + 8 + 50 = 735

Verified: typecheck clean, 103 tests, vite build emits with the fonts
copied, and www/ is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 01:05:09 +03:00