This directory contains Architectural Design Records (ADRs) that document important technical decisions made throughout the project's development.
ADRs capture the context, decision, and consequences of significant architectural choices. They help:
- Preserve decision-making rationale for future reference
- Onboard new team members by explaining why certain approaches were chosen
- Avoid revisiting settled decisions without proper context
- Maintain consistency across the codebase
- Start with
DRfollowed by a three-digit incremented number and an underscore - Use descriptive names that clearly indicate the decision being documented
- Format:
DR###_DESCRIPTIVE_NAME.md - Example:
DR002_Search_Provider.md
Each ADR should follow this general structure:
- Title: Clear, concise description of the decision
- Context: Background information and problem being solved
- Decision: The approach chosen and how it works
- Consequences: Expected outcomes, trade-offs, and implications
- DR001: Structured Data (JSON-LD) Strategy — central JSON-LD / SEO
<head>injection via the Vocsheadoption - DR002: i18n Parity & Translation Pipeline — en as source of truth; checker + CI gate + auto-draft translation engine to keep cn/ko in sync
- DR003: Page filenames must not end in
index— Vocs strips a trailingindexfrom any filename;*-index.mdxpages 404. Useindex.mdxor a non-indexsuffix. - DR004: Translation LLM provider — swappable OpenAI-compatible seam (
llm.mjs) defaulting to OpenRouter + a cheap model, optional review pass, structural + link guards; supersedes DR002 §5–6 internals. - DR005: Styleguide enforcement — mechanical rules in a single
RULESsource enforced byverify-style.mjs, surfaced on PRs as a sticky comment + inline applyable suggestions; judgment rules stay prose. - DR006: PostHog Analytics Integration — restore Mintlify-era PostHog via the Vocs
headoption (snippet, not posthog-js); SPA pageviews viacapture_pageview: 'history_change' - DR007: Analytics Consent Gate — opt-in consent for the DR006 PostHog integration (GDPR/ePrivacy); inits opted-out + cookieless, site-wide banner via the
Layoutslot, withdraw via a footer link