532229d488
Establish keysat's durable, vendor-neutral design contract (the standards /design backfill, document-as-is): - design/DESIGN.md — nine-section brand brief distilled from the prior Claude Design system (navy-on-cream-paper identity, sovereignty-first voice, component + motion rules, do's/don'ts). Manrope is canonical display (the README's "Archivo" was a stale placeholder). - design/tokens.tokens.json — W3C DTCG tokens from colors_and_type.css. - design/brand/ — canonical palette.css + logo/mark assets. - design/_imports/2026-06-16-claude-design-system/ — the original system, relocated as dated provenance (nothing imported it). - AGENTS.md — add the Design line (read the contract before UI work); repoint the layout entry. - ROADMAP.md — design-checker cleanup backlog (gold-as-fill + pill-radius blockers, the inline-token-copy consolidation, token gaps).
3.5 KiB
3.5 KiB
ROADMAP — Keysat
Longer-term backlog. Near-term state lives in AGENTS.md → Current state.
Payments & subscriptions
- Per-profile SMTP override (schema fields exist from the keysat-smtp-emails plan; needs the form + send path).
- Rail-preference editing UI — only matters when two providers on one profile both serve the same rail; settable today via
PUT /v1/admin/merchant-profiles/:id/rail-preferences/:rail. - Keysat-side dedup cache for Zaprite contacts (same buyer purchasing recurring twice can create duplicate Zaprite contacts).
- Zaprite declined-card / expired-profile failure-body shapes are undocumented — harden
try_auto_charge_zapriteonce observed in production.
Packaging & distribution
- Multi-arch publish:
Makefilebuildsarm+riscv, butpublish.shonly ships x86_64. Either build + upload all declared arches or narrow the manifestarchclaim. - Align manifest
license: 'LicenseRef-Proprietary'with the LICENSE file'sLicenseRef-Keysat-1.0. - Start9 Community Registry submission — criteria are unpublished; contact Start9 directly when ready.
registry-landingrepurpose — currently a stub; decide whether it becomes a real public page.
Licensing model
- Evaluate Elastic License v2 vs the current custom
LicenseRef-Keysat-1.0(parked decision).
Validation
- Re-test
KEYSAT_INTEGRATION.mdagainst a fresh downstream app to confirm a clean one-shot SDK integration. - End-to-end Zaprite sandbox pass on the multi-merchant-profile webhook routing before relying on it in production.
Design (contract conformance)
The brand contract now lives in design/DESIGN.md + design/tokens.tokens.json (distilled
2026-06-16 from the prior Claude Design system, now archived in design/_imports/). A
design-checker audit (2026-06-16) found high fidelity overall, with these items where the
code contradicts the contract's stated rules or bypasses the token scale:
Blockers (code violates a named "never" rule):
- Gold used as an actionable fill (contract: gold is accent/border only, never a fill).
(a) admin SPA
.featured-pill-toggle.on→web/index.html:418; (b) admin sidebar upgrade CTA#tier-banner-cta→web/index.html:537-542. Fix to navy-fill or gold-border/text. - Primary buy CTA uses pill radius
999px(contract: buttons arer-md8px; pill is badges-only) —keysat-xyz-landing/index.html:384-385. Set to 8px.
Structural (headline):
- All four surfaces inline their own copy of the CSS variables instead of importing the
canonical
design/brand/palette.css(landing :33-56, registry :11-22, docs.css :7-21, admin :9-25). Copies are currently exact but one edit from drift. Consolidate ontopalette.css.
Token gaps / drift (decide: tokenize the as-built value, or snap to an existing token):
14pxcard radius used throughout the marketing landing — not a token (betweenr-lg12 andr-xl18). Snap to a token or add one.- Wordmark letter-spacing is
0.30em(landing) vs0.28em(docs/admin) and has no token — pick one value, add aletterSpacing.wordmarktoken. - Semantic badge text colors (
#205c47/#7a5814/#8a2828) are darker one-offs with no token — addsemantic.*-texttokens or reference existing ones. - Syntax-highlight colors hardcoded as hex (
#d4b985=gold-400,#a6b7cf=navy-300) — switch tovar(). One admin hex#f6f1e7isn't a token (closest cream-50/100) — reconcile. - Sticky-header backdrop on docs/admin (
blur(10px)/blur(8px)) diverges from the contract'sblur(12px)— align if a single header treatment is wanted.