# QC Text Builder (Go) Milestone 2 status: - bootstrap app/server/config - Quick Creator client contracts (Bearer token only) - AI template sync endpoint - onboarding/discovery endpoint with local manifest flattening - site build flow via `POST /sites` using local manifest + own text (`content.aiData`) - SQLite persistence (default) for settings, templates, manifests, fields, site builds, and build drafts - build polling (`POST /api/site-builds/{id}/poll`) and background polling supervisor - draft intake/review flow (`draft -> reviewed -> submitted`) before final build - strict MVP scope: no ACP login flow, no DCM/EFL, no image payload handling ## Run 1. Set env vars: - `HTTP_ADDR=:8080` - `DB_DRIVER=sqlite` (default) - `DB_URL=data/qctextbuilder.db` (default, local file) - `QC_BASE_URL=https://qc-api.yggdrasil.dev-mono.net/api/v1` - `QC_TOKEN=` 2. Start: - `go run ./cmd/qctextbuilder` ## API (Milestone 3) - `GET /healthz` - `POST /api/templates/sync` - `GET /api/templates` - `GET /api/templates/{id}` - `POST /api/templates/{id}/onboard` - `PUT /api/templates/{id}/fields` - `POST /api/drafts/intake` (external prefilled draft intake) - `GET /api/drafts` - `GET /api/drafts/{id}` - `PUT /api/drafts/{id}` - `POST /api/site-builds` - `GET /api/site-builds/{id}` - `POST /api/site-builds/{id}/poll` - `POST /api/site-builds/{id}/fetch-editor-url` Draft payload (`POST /api/drafts/intake` / `PUT /api/drafts/{id}`) supports: - `templateId`, optional `manifestId` - `source`, `requestName` - `globalData` (same documented QC fields as build flow) - `fieldValues` keyed by manifest path (`section.keyName`) - `status` (`draft|reviewed|submitted`), `notes` Build request payload (`POST /api/site-builds`) expects: - `templateId` (AI template only, onboarded/reviewed) - `requestName` - `globalData` (`companyName`, `email`, `username` required; all other documented fields optional) - `fieldValues` keyed by manifest paths (`section.keyName`) Documented `globalData` scope supported by UI/API mapping: - `companyName`, `businessType`, `username`, `email`, `phone` - `orgNumber`, `startDate`, `mission`, `descriptionShort`, `descriptionLong`, `siteLanguage` - `address.line1`, `address.line2`, `address.city`, `address.region`, `address.zip`, `address.country` UI note: - `/builds/new` now supports loading an existing draft, reviewing/editing values, saving draft, and only then starting the build. - Template fields in `/builds/new` are grouped block-first by extracted internal block IDs (for example `m1710`, `c7886`, `r4830`) with heuristic fallback for fields without block IDs. - Template field settings in `/templates/{id}` include a persistent `websiteSection` mapping (`hero`, `intro`, `services`, `service_item`, `about`, `team`, `testimonials`, `cta`, `contact`, `footer`, `gallery`, `other`) used by `/builds/new` grouping with fallback when not set.