ADR 0001: Adopt the product-forge method and the reference profile
- Status
- Accepted
- Date
- Deciders
- Founder, product team
Context
Trovensa started on 2026-09-13 with two inputs and no code: the brand kit (version 1.0: logos, fonts, tokens, contrast tables, voice guide; copied to shared/brand/) and a product brief describing an agentic drug-development platform that is being designed, not built. Seven surfaces are wanted at once (marketing site, docs, API, web app, agent runtime, deck, infra) with one vocabulary, honest status language and executable gates. The workspace /Users/sathish/autowork/acore/clinical-trials-platform was scaffolded with scaffold.mjs (product-forge plugin 0.1.0) into forge.config.json, PRODUCT-PLAN.md, PRODUCT-CONTRACT.md, CLAUDE.md, CLAIMS-REGISTER.md, CHANGELOG.md, shared/attribution-words.json and one directory per surface with its gate scripts.
Decision
Build Trovensa with the product-forge method (discover, decide, contract, build in parallel, gates, release, record, verify live) on the reference profile: vinext static site, Nextra docs, FastAPI + SQLAlchemy + Alembic API with an APScheduler worker, Next 15 web app with MSAL, a Python agent runtime container, an HTML fragment deck, Terraform + Kustomize infra. forge.config.json is the single source of names, hosts, words and palette; PRODUCT-CONTRACT.md fixes every shared name before code; writers own disjoint directories; every surface has check and verify aggregates. Deviations from the profile are recorded as as-built deltas in the contract and in later ADRs.
Consequences
- Every surface reads brand values from
forge.config.json; no hex, host or product name is hard-coded outside token files andlib/content.ts. - Status words are exactly
available,preview,designed,planned,roadmap; all four products start asdesigned. - Delivered work carries no attribution text; the commit hook, the copy gates and the agent lint enforce
shared/attribution-words.json. - Release to a cloud account is deferred (ADR 0010); infra is written and validated locally.
Alternatives considered
- Hand-rolled monorepo without the method: faster first commit, but no contract, no gates and no honesty rules; rejected.
- A single web application without docs, deck or agent: smaller, but the brief and the brand kit already define positioning, docs and an agent role; rejected.
Follow-ups
- Choose a git remote and set
org.gitHost/org.gitOrg(currentlylocal/trovensa). - Register the domain
trovensa.comand confirm the four hosts before any release.