GenCreator (`frankxai/gencreator.ai`) is built on Next.js 16 (App Router) and React 19 (`fra1` Vercel region). It provides an editable source-to-artifact workspace (`/creator-studio`), a seven-stack operating directory (`/stacks`), and strict release-gate routing for commercial offers (`/products/waitlist`).

## Creator Studio workflow (`/creator-studio`) [#creator-studio-workflow-creator-studio]

The Creator Studio (`app/creator-studio/page.tsx` and `lib/creator-studio/core.ts`) arranges a creator's own notes into reviewable, exportable drafts without requiring an account on first visit.

### 1. Validated workspace brief (`briefSchema`) [#1-validated-workspace-brief-briefschema]

Every run is validated by Zod (`briefSchema` in `lib/creator-studio/core.ts`) before compilation:

| Field | Constraint | Purpose |
|---|---|---|
| `creator` | `1–100` chars | Author attribution attached to exported editions |
| `title` | `3–140` chars | Release headline |
| `audience` | `3–240` chars | Intended reader or viewer segment |
| `source` | `40–20,000` chars | Primary source notes supplied by the creator |
| `sourceLabel` | `1–160` chars | Provenance label (for example notebook or session name) |
| `callToAction` | `3–200` chars | Explicit human action appended to channel drafts |
| `destination` | Valid `https://` URL (`<= 2048` chars, no credentials) | Canonical link destination |
| `channels` | `1–6` unique channels | Selected from `linkedin`, `instagram`, `x`, `newsletter`, `video`, `website` |
| `sourcePermission` | Literal `true` | Confirms the creator owns or has permission to use the source text |

### 2. Deterministic compilation and SHA-256 provenance [#2-deterministic-compilation-and-sha-256-provenance]

`compileCreatorBrief(input)` hashes the raw source via Web Crypto (`crypto.subtle.digest('SHA-256', ...)`) to emit a `sourceDigest` (`sha256:<64-hex-chars>`) and produces a typed `CreatorArtifact` (`kind: 'source_arrangement'`) for each selected channel:

- **LinkedIn post (`linkedin`):** Opening two paragraphs plus CTA and destination URL.
- **Instagram caption (`instagram`):** Lead paragraph plus CTA.
- **X post (`x`):** Lead paragraph plus destination URL.
- **Newsletter (`newsletter`):** Title, full source body, CTA, destination URL, and creator sign-off.
- **Video outline (`video`):** Structured into `Opening`, `Develop the idea`, and `Closing` sections.
- **Website page (`website`):** Standalone, script-free HTML rendered via `renderCreatorWebsite` with HTML entity escaping (`escapeHtml`).

## Stacks directory (`/stacks`) and route redirects [#stacks-directory-stacks-and-route-redirects]

In `app/stacks/stacks.data.ts`, GenCreator organizes creator and infrastructure workflows into **7 stacks** rendered at `/stacks` and `/stacks/[slug]`:

| Slug | Name | Target operator | Core pillars |
|---|---|---|---|
| `writer` | **Writer** | Essayists, novelists, newsletter operators | Strategy, Governance (voice-match score `>= 8`), Data |
| `video` | **Video Creator** | YouTubers, course creators, short-form creators | Strategy, Technology (transcript-based editing), Data |
| `founder` | **Founder** | Solo founders, indie hackers, startup operators | Strategy, Governance (human sign-off on external sends), Technology |
| `musician` | **Musician** | Independent artists, producers, composers | Strategy, Data (prompt + stem archive), Ethics |
| `coach` | **Coach** | Coaches, consultants, educators | Governance (client data isolation), Talent, Data |
| `visual` | **Visual Artist** | Illustrators, designers, photographers | Strategy, Ethics (training reference disclosure), Data |
| `stackguide` | **Starlight StackGuide** | Sovereign local AI stack control plane (`kind: 'infrastructure'`) | Sovereignty (local-first manifests), Memory, Governance |

### Canonical redirects (`next.config.ts`) [#canonical-redirects-nextconfigts]

`gencreator.ai/next.config.ts` enforces five redirects so legacy persona links and `/docs` paths resolve cleanly:

| Source path | Destination | Status |
|---|---|---|
| `/personas` | `/stacks` | `permanent: true` (`308`) |
| `/personas/:slug` | `/stacks/:slug` | `permanent: true` (`308`) |
| `/login` | `/sign-in` | `permanent: true` (`308`) |
| `/apply` | `/studio/apply` | `permanent: false` (`307`) |
| `/docs` and `/docs/:path*` | `https://docs.gencreator.ai` / `https://docs.gencreator.ai/:path*` | `permanent: false` (`307`, PR `#290`) |

## Waitlist routing for unprovisioned offers (`/products/waitlist`) [#waitlist-routing-for-unprovisioned-offers-productswaitlist]

GenCreator refuses to display an active buy button for any product that has not passed its release gate. In `app/products/waitlist/page.tsx` (backed by `commercePosture`, `getProduct`, and `products` in `lib/factory/manifest`):

- Unprovisioned products route to `/products/waitlist?product=<id>` (with `robots: { index: false, follow: true }`).
- The page displays the product's current stage (`not yet for sale`), explains why checkout is disabled (`posture.reason`), lists the named alternatives the product must beat (`product.mustBeat`), and records early-access interest via `ProductWaitlistForm` without fabricating or seeding waitlist counts.
- Live storefront checkout on `/os` is reserved for verified Whop products (`OS Circle`, `Suno Mastery`, `Personal AI CoE Playbook`, `Creator Prompt Pack` in `GO-LIVE.md` §7b) synced via `/api/webhooks/whop`.

## Local verification and smoke checks (`GO-LIVE.md`) [#local-verification-and-smoke-checks-go-livemd]

```bash
# Run the full local verification gate (clean install -> lint -> typecheck -> unit tests)
pnpm go-live

# Run the 15-check production smoke suite and verify environment health
pnpm smoke https://gencreator.ai
curl -s https://gencreator.ai/api/health
```
