Skip to Content
EngineeringDecisions (ADRs)ADR 0001 Adopt the product-forge method

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 and lib/content.ts.
  • Status words are exactly available, preview, designed, planned, roadmap; all four products start as designed.
  • 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 (currently local / trovensa).
  • Register the domain trovensa.com and confirm the four hosts before any release.