anhedral 0.8.5 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -34
- package/assets/anhedral-cli-init-technical.svg +8 -8
- package/assets/anhedral-cli-init.svg +9 -9
- package/assets/security/LICENSES.txt +63 -0
- package/assets/security/audit-deps.mjs +295 -0
- package/assets/security/braces-regression.mjs +102 -0
- package/assets/security/braces@3.0.3.patch +285 -0
- package/assets/security/decode-uri-component@0.2.2.patch +149 -0
- package/assets/security/decoder-regression.mjs +37 -0
- package/assets/security/forge-regression.mjs +46 -0
- package/assets/security/manifest.json +53 -0
- package/assets/security/node-forge@1.4.0.patch +26 -0
- package/dist/access.d.ts +10 -0
- package/dist/access.js +93 -0
- package/dist/auth-schema-snapshot.d.ts +346 -0
- package/dist/auth-schema-snapshot.js +347 -0
- package/dist/auth-schema.d.ts +1 -0
- package/dist/auth-schema.js +57 -0
- package/dist/bin.js +353 -10
- package/dist/bounded-file.d.ts +2 -0
- package/dist/bounded-file.js +30 -0
- package/dist/capabilities.d.ts +19 -33
- package/dist/capabilities.js +73 -71
- package/dist/cloudflare.d.ts +14 -0
- package/dist/cloudflare.js +66 -0
- package/dist/command.js +12 -3
- package/dist/delivery.d.ts +118 -0
- package/dist/delivery.js +611 -0
- package/dist/dependencies.d.ts +22 -0
- package/dist/dependencies.js +109 -67
- package/dist/dependency-order.d.ts +2 -0
- package/dist/dependency-order.js +24 -0
- package/dist/index.d.ts +18 -1
- package/dist/index.js +12 -1
- package/dist/managed-hosting.d.ts +49 -0
- package/dist/managed-hosting.js +373 -0
- package/dist/management.d.ts +3 -0
- package/dist/management.js +47 -0
- package/dist/platforms/desktop.d.ts +2 -2
- package/dist/platforms/desktop.js +22 -12
- package/dist/platforms/extension.d.ts +2 -2
- package/dist/platforms/extension.js +12 -4
- package/dist/platforms/mobile.d.ts +2 -2
- package/dist/platforms/mobile.js +13 -7
- package/dist/pnpm-policy.d.ts +4 -0
- package/dist/pnpm-policy.js +66 -0
- package/dist/project-state.d.ts +28 -0
- package/dist/project-state.js +226 -0
- package/dist/provider-readiness.d.ts +30 -0
- package/dist/provider-readiness.js +87 -0
- package/dist/provision.d.ts +46 -0
- package/dist/provision.js +197 -0
- package/dist/readiness.d.ts +4 -1
- package/dist/readiness.js +80 -8
- package/dist/registry/add.d.ts +22 -0
- package/dist/registry/add.js +198 -0
- package/dist/registry/bootstrap.d.ts +2 -0
- package/dist/registry/bootstrap.js +14 -0
- package/dist/registry/commands.d.ts +2 -0
- package/dist/registry/commands.js +99 -0
- package/dist/registry/context.d.ts +3 -0
- package/dist/registry/context.js +21 -0
- package/dist/registry/options.d.ts +2 -0
- package/dist/registry/options.js +65 -0
- package/dist/registry/receipt.d.ts +3 -0
- package/dist/registry/receipt.js +73 -0
- package/dist/registry/remote.d.ts +25 -0
- package/dist/registry/remote.js +168 -0
- package/dist/registry/resolve.d.ts +10 -0
- package/dist/registry/resolve.js +98 -0
- package/dist/registry/types.d.ts +64 -0
- package/dist/registry/usage.d.ts +1 -0
- package/dist/registry/usage.js +38 -0
- package/dist/render.js +3 -3
- package/dist/repository.d.ts +24 -0
- package/dist/repository.js +96 -0
- package/dist/scaffold/api.d.ts +2 -0
- package/dist/scaffold/api.js +13 -0
- package/dist/scaffold/auth.d.ts +3 -0
- package/dist/scaffold/auth.js +95 -0
- package/dist/scaffold/bootstrap.d.ts +2 -0
- package/dist/scaffold/bootstrap.js +34 -0
- package/dist/scaffold/compose.d.ts +4 -0
- package/dist/scaffold/compose.js +34 -0
- package/dist/scaffold/database.d.ts +2 -0
- package/dist/scaffold/database.js +43 -0
- package/dist/scaffold/documentation.d.ts +3 -0
- package/dist/scaffold/documentation.js +91 -0
- package/dist/scaffold/environment.d.ts +2 -0
- package/dist/scaffold/environment.js +5 -0
- package/dist/scaffold/files.d.ts +25 -0
- package/dist/scaffold/files.js +108 -0
- package/dist/scaffold/integrations.d.ts +3 -0
- package/dist/scaffold/integrations.js +7 -0
- package/dist/scaffold/services.d.ts +5 -0
- package/dist/scaffold/services.js +84 -0
- package/dist/scaffold/web.d.ts +2 -0
- package/dist/scaffold/web.js +102 -0
- package/dist/scaffold/workspace.d.ts +3 -0
- package/dist/scaffold/workspace.js +150 -0
- package/dist/security-backports.d.ts +3 -0
- package/dist/security-backports.js +26 -0
- package/dist/stack-registry.d.ts +80 -0
- package/dist/stack-registry.js +424 -0
- package/dist/standard.d.ts +6 -17
- package/dist/standard.js +41 -585
- package/dist/transaction.js +46 -26
- package/dist/util.js +12 -2
- package/dist/vercel.d.ts +98 -0
- package/dist/vercel.js +796 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vinext.d.ts +1 -0
- package/dist/vinext.js +83 -0
- package/dist/workspace-graph.d.ts +7 -0
- package/dist/workspace-graph.js +73 -0
- package/docs/application-stack-standard.md +75 -674
- package/docs/delivery-workflow.md +83 -0
- package/docs/managed-hosting-architecture.md +87 -0
- package/docs/sponsorships.md +25 -0
- package/package.json +23 -28
- package/dist/project.d.ts +0 -4
- package/dist/standard-products.d.ts +0 -2
- package/dist/standard-products.js +0 -6
- /package/assets/{images/svg/logo-white-subtract.svg → anhedral-mark.svg} +0 -0
- /package/dist/{project.js → registry/types.js} +0 -0
|
@@ -1,703 +1,104 @@
|
|
|
1
1
|
# Anhedral Application Stack & Delivery Standard
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Anhedral builds client-owned applications using established frameworks and provider tools. Default web apps use Vinext, React, TypeScript, Tailwind, shadcn/ui and Lucide on Cloudflare Workers. Native Next.js on Vercel is the established alternative. React is the UI layer within these full-stack frameworks, not a standalone web-app recipe. Add components only when the product needs them, prefer free-first plans where suitable, and keep source, accounts, data, billing and recovery customer-owned.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Respect existing account, budget, audience and release authorization. Request only missing approval for paid activation, material spending, architecture changes or release.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Stack selection
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- **Free-first** where suitable.
|
|
11
|
-
- **OpenAI/Codex-operated** for development and operations.
|
|
12
|
-
- **Computer Use and Control Chrome throughout development.**
|
|
13
|
-
- **GitHub-first** for source control and delivery.
|
|
14
|
-
- **Next.js-first** for web applications.
|
|
15
|
-
- **pnpm + Turborepo** for TypeScript/JavaScript monorepos.
|
|
16
|
-
- **shadcn monorepo initialization for every new project.**
|
|
17
|
-
- **macOS** as the Anhedral development environment.
|
|
18
|
-
- Add applications, packages, providers, and infrastructure only when required.
|
|
19
|
-
- Keep client accounts, source, infrastructure, billing, and recovery client-owned.
|
|
9
|
+
Cloudflare first. **Default** = preferred when needed; **Option** = choose for the stated requirement. Alternatives are grouped beside their defaults. Preserve justified existing stacks.
|
|
20
10
|
|
|
21
|
-
|
|
11
|
+
### Foundation and clients
|
|
22
12
|
|
|
23
|
-
|
|
13
|
+
| Capability | Default — when | Options — when |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| Shared source | **Default:** [TypeScript](https://www.typescriptlang.org/docs/), [pnpm](https://pnpm.io/), [Turborepo](https://turborepo.dev/docs), [Zod](https://zod.dev/) — shared code, builds and validation. | — |
|
|
16
|
+
| Web | **Default:** [Vinext + React](https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/) — full-stack web on Workers. | **Option:** [Next.js + OpenNext](https://opennext.js.org/cloudflare) — existing Next app on Workers; [Next.js + Vercel](https://vercel.com/docs/frameworks/nextjs) — native Next hosting. |
|
|
17
|
+
| UI | **Default:** [Tailwind](https://tailwindcss.com/docs/), [shadcn/ui](https://ui.shadcn.com/docs) — web styling/components. | **Option:** [CSS Modules](https://nextjs.org/docs/app/getting-started/css) — bespoke styling or existing CSS. |
|
|
18
|
+
| Mobile | **Default:** [Expo](https://docs.expo.dev/) — React Native iOS/Android. | **Option:** [SwiftUI](https://developer.apple.com/documentation/swiftui) / [Compose](https://developer.android.com/compose) — platform-specific UI; [Flutter](https://docs.flutter.dev/) — Dart shared UI; [Capacitor](https://capacitorjs.com/docs) — package web UI with native access. |
|
|
19
|
+
| Desktop | **Default:** [Electron](https://www.electronjs.org/docs/latest/) — reuse web UI with Chromium/Node. | **Option:** [Tauri](https://v2.tauri.app/) — smaller system-webview packages; [GPUI](https://github.com/zed-industries/zed/blob/main/crates/gpui/README.md) — GPU-rendered Rust UI, separate UI code and pre-1.0 APIs; [SwiftUI/AppKit](https://developer.apple.com/documentation/appkit) — Apple-specific desktop experience. |
|
|
20
|
+
| Extensions | **Default:** [WXT](https://wxt.dev/guide/introduction.html) — browser extensions. | **Option:** [Chrome extension APIs](https://developer.chrome.com/docs/extensions) — direct implementation or existing extension. |
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
### Backend and data
|
|
26
23
|
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|**General compute**|**Cloudflare Workers**|Containers|Containers for Linux/native dependencies or workloads that do not fit Workers.|
|
|
37
|
-
|**PostgreSQL**|**Neon + Drizzle + Hyperdrive**|—|Relational PostgreSQL persistence.|
|
|
38
|
-
|**Cloudflare SQL**|**D1 + Drizzle**|Neon|D1 when SQLite semantics are sufficient.|
|
|
39
|
-
|**Local data**|**SQLite + filesystem**|—|Offline/device-local applications.|
|
|
40
|
-
|**Authentication**|**Clerk or Better Auth**|No auth|Clerk for managed identity; Better Auth for application-managed auth; no auth when unnecessary.|
|
|
41
|
-
|**Files**|**Private R2 + Worker binding**|Local filesystem|R2 for remote files; filesystem for local files.|
|
|
42
|
-
|**Cache/config**|**KV**|—|Eventually consistent configuration/cache, never authoritative transactional state.|
|
|
43
|
-
|**Realtime**|**Durable Objects + WebSockets**|—|Presence, rooms, collaboration, and stateful realtime coordination.|
|
|
44
|
-
|**Jobs**|**Queues**|—|Deferred/asynchronous processing.|
|
|
45
|
-
|**Scheduled work**|**Cron Triggers**|—|Recurring scheduled work.|
|
|
46
|
-
|**Durable workflows**|**Workflows**|—|Resumable multi-step processes.|
|
|
47
|
-
|**AI**|**OpenAI SDK or AI SDK**|Workers AI|OpenAI SDK for direct OpenAI use; AI SDK for streaming/tools/provider abstraction; Workers AI when Cloudflare inference is advantageous.|
|
|
48
|
-
|**Domain**|**GoDaddy broker + Cloudflare nameservers**|—|Use GoDaddy for domain registration/brokerage and Cloudflare for authoritative DNS.|
|
|
49
|
-
|**Inbound Mail**|**Cloudflare Email Routing**|—|Incoming domain-email routing for business and application mail.|
|
|
50
|
-
|**Outbound Mail**|**Cloudflare Email Sending**|Resend|Business and application mail; use Resend when selected as the alternative sending provider.|
|
|
51
|
-
|**Payments**|**Stripe**|RevenueCat + Stripe|Add RevenueCat when web/App Store/Play Store entitlements need unified management.|
|
|
52
|
-
|**Operational telemetry**|**Cloudflare Observability**|Sentry|Add Sentry when additional crash/runtime diagnostics are required.|
|
|
53
|
-
|**Product analytics**|**Basin**|PostHog|PostHog when replay, experiments, funnels, or other required capabilities justify it.|
|
|
54
|
-
|**TS/JS auditing**|**Fallow**|—|Standard static/codebase audit for TypeScript and JavaScript. Use in development and PR checks.|
|
|
55
|
-
|**Source**|**Git + GitHub**|Cloudflare Artifacts|GitHub by default. Artifacts when it provides a concrete advantage and required controls are supported.|
|
|
56
|
-
|**CI/CD**|**GitHub Actions**|Workers Builds|Workers Builds when equivalent controls are available and useful.|
|
|
57
|
-
|**Development agent**|**OpenAI / Codex**|—|Primary implementation, reasoning, testing, and operational agent.|
|
|
58
|
-
|**Interactive development**|**Computer Use + Control Chrome**|—|Used heavily throughout implementation, iteration, setup, automation, and verification.|
|
|
59
|
-
|**Cloudflare operations**|**Cloudflare plugin + `cf` + API/MCP**|Dashboard when useful|Provisioning, deployment, configuration, analytics, observability, and operations.|
|
|
24
|
+
| Capability | Default — when | Options — when |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| API/runtime | **Default:** [Workers](https://developers.cloudflare.com/workers/) + [Hono](https://hono.dev/docs/getting-started/cloudflare-workers) — APIs, webhooks and services. | **Option:** framework server routes — integrated web backend; [Containers](https://developers.cloudflare.com/containers/) — Linux/native dependencies. |
|
|
27
|
+
| Database | **Default:** [Neon serverless driver](https://neon.com/docs/serverless/serverless-driver) + [Drizzle](https://orm.drizzle.team/docs/connect-neon) — direct HTTP for CRUD and independent queries; no Hyperdrive required. | **Option:** [Hyperdrive + Neon](https://developers.cloudflare.com/hyperdrive/examples/connect-to-postgres/postgres-database-providers/neon/) — pg/postgres.js, connection reuse or optional caching, justified by workload/latency measurements; Neon WebSocket driver — session/interactive transactions; [D1 + Drizzle](https://orm.drizzle.team/docs/sqlite/connect-cloudflare-d1) — Worker-native SQLite; [SQLite](https://www.sqlite.org/docs.html) / [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) — local/offline data. |
|
|
28
|
+
| Authentication | **Default:** [Better Auth](https://better-auth.com/docs/adapters/drizzle) — own identities, sessions and organizations. | **Option:** [Clerk](https://clerk.com/docs) — managed authentication and identity features. |
|
|
29
|
+
| Files | **Default:** [R2](https://developers.cloudflare.com/r2/) — uploads, attachments and archives. | **Option:** local files — device-only apps; existing S3-compatible storage — migration has no benefit. |
|
|
30
|
+
| Realtime/state | **Default:** [Durable Objects + hibernating WebSockets](https://developers.cloudflare.com/durable-objects/best-practices/websockets/) — rooms, presence and coordinated events. | **Option:** [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) — one-way updates; polling — infrequent changes; [KV](https://developers.cloudflare.com/kv/) — read-heavy, eventually consistent cache/config. |
|
|
31
|
+
| Background work | **Default:** [Queues](https://developers.cloudflare.com/queues/) — jobs/retries; [Workflows](https://developers.cloudflare.com/workflows/) — durable multi-step work; [Cron](https://developers.cloudflare.com/workers/configuration/cron-triggers/) — schedules. | **Option:** [DO alarms](https://developers.cloudflare.com/durable-objects/api/alarms/) — entity timers; [K2](https://developers.cloudflare.com/k2/) — retained replayable streams, beta acceptable. |
|
|
32
|
+
| Placement | **Default:** standard Workers placement — request-proximate execution. | **Option:** [Placement](https://developers.cloudflare.com/workers/configuration/placement/) — database/backend round trips dominate. |
|
|
60
33
|
|
|
61
|
-
|
|
34
|
+
Start with direct Neon HTTP; use non-interactive transaction batches where suitable, or WebSocket/standard-driver transactions when interactive sessions are needed. Benchmark before adding Hyperdrive. Its pooling operates on Cloudflare infrastructure; Neon PgBouncer operates near Postgres. With Hyperdrive use pg/postgres.js against Neon’s non-pooled endpoint, not the Neon serverless driver or stacked poolers. Disable result caching for authoritative auth, permissions, entitlements and balances. Neither Neon nor D1 is universally faster/cheaper; offline sync remains application work.
|
|
62
35
|
|
|
63
|
-
|
|
36
|
+
### AI, media and communication
|
|
64
37
|
|
|
65
|
-
|
|
38
|
+
| Capability | Default — when | Options — when |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| Inference | **Default:** [Workers AI](https://developers.cloudflare.com/workers-ai/) — supported models fit; [AI Gateway](https://developers.cloudflare.com/ai-gateway/) — routing/controls/telemetry. | **Option:** [OpenAI/other providers through Gateway](https://developers.cloudflare.com/ai-gateway/usage/providers/) — required models; [AI SDK](https://ai-sdk.dev/docs/introduction) — shared model interfaces and streaming UI. |
|
|
41
|
+
| Retrieval/agents | **Default:** [AI Search](https://developers.cloudflare.com/ai-search/) — managed RAG. | **Option:** [Vectorize](https://developers.cloudflare.com/vectorize/) — custom vector pipeline; [Agents SDK](https://developers.cloudflare.com/agents/) — stateful agents. |
|
|
42
|
+
| Isolated execution | — | **Option:** [Sandboxes](https://developers.cloudflare.com/sandbox/) — user/agent code; [Browser Run](https://developers.cloudflare.com/browser-run/) — automation, screenshots/PDFs; [Containers](https://developers.cloudflare.com/containers/) — custom runtime. |
|
|
43
|
+
| Calls | **Default:** [RealtimeKit](https://developers.cloudflare.com/realtime/realtimekit/) — audio/video/screensharing. | **Option:** [Realtime SFU + TURN](https://developers.cloudflare.com/realtime/) — custom WebRTC; [LiveKit](https://docs.livekit.io/) — existing ecosystem or voice-agent requirements. |
|
|
44
|
+
| Images/video | **Default:** [Images](https://developers.cloudflare.com/images/) — transforms/delivery; [Stream](https://developers.cloudflare.com/stream/) — encoding/playback/live video. | **Option:** [R2](https://developers.cloudflare.com/r2/) — originals/downloads without managed processing; [Media over QUIC](https://developers.cloudflare.com/moq/) — specialized low-latency transport. |
|
|
45
|
+
| Email | **Default:** [Email Service](https://developers.cloudflare.com/email-service/) — email workflows, sending beta acceptable. | **Option:** [Resend](https://resend.com/docs) — established transactional email provider. |
|
|
46
|
+
| Notifications | **Default:** [Expo Push](https://docs.expo.dev/push-notifications/overview/) — Expo mobile notifications. | **Option:** [APNs](https://developer.apple.com/documentation/usernotifications) / [FCM](https://firebase.google.com/docs/cloud-messaging) — direct native delivery; [Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) — browser notifications. |
|
|
66
47
|
|
|
67
|
-
|
|
48
|
+
Durable Objects coordinate calls/events; SFU/TURN handle media. WebSockets do not replace background push.
|
|
68
49
|
|
|
69
|
-
|
|
50
|
+
### Commerce and access
|
|
70
51
|
|
|
71
|
-
|
|
52
|
+
| Capability | Default — when | Options — when |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| Web billing | **Default:** [Stripe Checkout](https://docs.stripe.com/payments/checkout) + [Billing](https://docs.stripe.com/billing) — payments, subscriptions and usage billing. | **Option:** [Connect](https://docs.stripe.com/connect) — marketplaces/payouts; [Tax](https://docs.stripe.com/tax) — tax calculation. |
|
|
55
|
+
| Cross-store purchases | **Default:** [RevenueCat](https://www.revenuecat.com/docs/web/integrations/stripe) — supported store/web subscriptions and entitlements. | **Option:** [StoreKit](https://developer.apple.com/documentation/storekit) / [Play Billing](https://developer.android.com/google/play/billing) — own purchase lifecycle integrations. |
|
|
56
|
+
| Access enforcement | **Default:** Workers + chosen database — entitlement projections, seats, grants and credit/usage ledger. | **Option:** [Monetization Gateway](https://developers.cloudflare.com/monetization-gateway/) — eligible x402 requests, closed beta acceptable. |
|
|
72
57
|
|
|
73
|
-
|
|
74
|
-
pnpm dlx shadcn@latest init --monorepo --template next
|
|
75
|
-
```
|
|
58
|
+
Stripe/stores remain purchase authorities; RevenueCat does not cover every Stripe pricing model. Verify webhooks, process idempotently and reconcile refunds/restores. Cloudflare hosts enforcement; it does not replace payment processing.
|
|
76
59
|
|
|
77
|
-
|
|
60
|
+
### Security, analytics and operations
|
|
78
61
|
|
|
79
|
-
|
|
62
|
+
| Capability | Default — when | Options — when |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| Public protection | **Default:** [DNS/TLS](https://developers.cloudflare.com/directory/), [WAF](https://developers.cloudflare.com/waf/), [Turnstile](https://developers.cloudflare.com/turnstile/) — domains, HTTPS and abuse controls. | **Option:** [API Shield](https://developers.cloudflare.com/api-shield/) — additional API protection; [Access + Tunnel](https://developers.cloudflare.com/cloudflare-one/) — staff tools/private origins. |
|
|
65
|
+
| Specialized security/networking | — | **Option:** [Load Balancing](https://developers.cloudflare.com/load-balancing/) — multiple origins; [Spectrum](https://developers.cloudflare.com/spectrum/) — TCP/UDP proxying; [Data Localization](https://developers.cloudflare.com/data-localization/) — regional processing requirements. |
|
|
66
|
+
| Credentials | **Default:** [Worker secrets](https://developers.cloudflare.com/workers/configuration/secrets/) — server credentials. | **Option:** [Secrets Store](https://developers.cloudflare.com/secrets-store/) — shared account secrets, beta acceptable. |
|
|
67
|
+
| Website analytics | **Default:** [free Web Analytics](https://www.cloudflare.com/web-analytics/) — traffic/performance. | **Option:** [PostHog](https://posthog.com/docs) — product funnels, cohorts and replay. |
|
|
68
|
+
| Operational telemetry | **Default:** [Workers Observability](https://developers.cloudflare.com/workers/observability/) — logs/traces/errors. | **Option:** [Sentry](https://docs.sentry.io/platforms/javascript/) — cross-client error monitoring; [Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/) — custom telemetry; [Basin](https://developers.cloudflare.com/basin/) — event ingestion and analytical SQL on R2/Iceberg. |
|
|
69
|
+
| Feature delivery | — | **Option:** [Flagship](https://developers.cloudflare.com/flagship/) — targeted exposure; [PostHog](https://posthog.com/docs/feature-flags) — existing flags/experiments. |
|
|
70
|
+
| Content/source tooling | — | **Option:** [Artifacts](https://developers.cloudflare.com/artifacts/) — durable versioned source/artifacts, beta acceptable; [GitHub](https://docs.github.com/) — customer-owned Git source. |
|
|
71
|
+
| Customer platforms | — | **Option:** [Cloudflare for SaaS](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/) — customer domains; [Workers for Platforms](https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/) — customer code. |
|
|
80
72
|
|
|
81
|
-
|
|
82
|
-
- Use `apps/*` for applications/services.
|
|
83
|
-
- Use `packages/*` for reusable packages.
|
|
84
|
-
- Keep the generated Next.js app when Next.js is required.
|
|
85
|
-
- Remove or replace the starter app when the project is mobile-only, desktop-only, extension-only, or uses another explicitly selected application template.
|
|
86
|
-
- Never retain an unused Next.js application solely because it initialized the repository.
|
|
87
|
-
- Add application-specific templates inside the established monorepo.
|
|
73
|
+
### Development, releases and accounts
|
|
88
74
|
|
|
89
|
-
|
|
75
|
+
| Capability | Default — when | Options — when |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| Agent tooling | **Default:** [Cloudflare Codex plugin](https://developers.cloudflare.com/agent-setup/codex/) — Cloudflare Skills/MCP and agent operations. | **Option:** [cf CLI](https://developers.cloudflare.com/cf/) — broad API/project operations, beta acceptable. |
|
|
78
|
+
| Cloud releases | **Default:** [Wrangler](https://developers.cloudflare.com/workers/wrangler/) + [Workers Builds](https://developers.cloudflare.com/workers/ci-cd/builds/) — Worker development/releases. | **Option:** [GitHub Actions](https://docs.github.com/en/actions) — custom CI; [Vercel](https://vercel.com/docs/deployments) — selected native Next stack. |
|
|
79
|
+
| Native builds | **Default:** [EAS](https://docs.expo.dev/build/introduction/) — hosted Expo builds. | **Option:** [local Expo builds](https://docs.expo.dev/build-reference/local-builds/) — local CI; platform toolchains — GPUI/Tauri/native clients. |
|
|
80
|
+
| Distribution/accounts | **Default:** customer-owned [Apple](https://developer.apple.com/programs/), [Play](https://play.google.com/console/about/), [Chrome](https://developer.chrome.com/docs/webstore/register) accounts — selected stores. | **Option:** direct desktop distribution — signed/notarized packages; [free Cloudflare account creation](https://developers.cloudflare.com/changelog/post/2026-08-04-free-dashboard-button/) — eligible separate customer accounts. |
|
|
90
81
|
|
|
91
|
-
|
|
92
|
-
Mobile-only
|
|
82
|
+
Use customer-owned resources. Implement backup/recovery, authorization, replay, offline sync and ledger correctness explicitly. Select specialized capabilities as needed; alternatives are choices, not dependencies to install together.
|
|
93
83
|
|
|
94
|
-
|
|
95
|
-
└── mobile/
|
|
96
|
-
```
|
|
84
|
+
The CLI generates Vinext, Next.js, Expo, Electron, WXT and Hono applications plus selected provider starters. Neon starters use the direct serverless HTTP driver with Drizzle. Alternatives in the table require deliberate project implementation. A starter does not establish configured infrastructure or working product behavior. The bundled capability registry and `new --dry-run --json` describe generated requirements.
|
|
97
85
|
|
|
98
|
-
|
|
99
|
-
Extension-only
|
|
86
|
+
The bundled stack registry in `src/stack-registry.ts` owns each item’s identity, version, source recipe, setup requirements, environment variables, bindings, destinations and composition constraints. Product IDs and capability views derive from that catalog. Foundations include pnpm/Turborepo, TypeScript, ESLint and shared UI; the official shadcn bootstrap is pinned in `src/dependencies.ts`. The resolver validates selections and orders dependencies; focused modules under `src/scaffold/` install the resolved recipes inside the staging transaction. `registry list|view` exposes the catalog, dry-run plans expose concrete destinations, and `anhedral.registry.json` records installed recipes and local workspace references. Package names must be unique, workspace references must resolve, and dependency cycles fail before commit. `doctor` verifies the installed receipt and workspace graph against the setup plan. To add a supported part, declare one catalog entry with its recipe and composition policy, then exercise composition and rollback in the registry tests. Build and release tooling regenerate matching plugin catalogs. Incremental `add` stages bundled or declarative local/HTTPS registry items, resolves dependencies, rejects unsafe paths and installation hooks, and refuses to replace edited source. Receipts record source integrity and generated-file hashes. Runtime relocation and older projects without fingerprints require explicit migration. This is an Anhedral recipe schema; shadcn JSON interoperability is not supported. Stack alternatives without generator recipes remain deliberate implementation choices.
|
|
100
87
|
|
|
101
|
-
|
|
102
|
-
└── extension/
|
|
103
|
-
```
|
|
88
|
+
## Implementation rules
|
|
104
89
|
|
|
105
|
-
|
|
106
|
-
|
|
90
|
+
- Start new projects with the official shadcn pnpm/Turborepo monorepo; use `apps/*` and genuinely shared `packages/*`. Web/Electron use React, TypeScript, Tailwind, shadcn/ui and Lucide; Expo uses React Native Reusables; WXT uses Chrome Side Panel. Preserve suitable existing architecture.
|
|
91
|
+
- Vinext is the default Worker framework; verify its actual compatibility. Native Next.js uses Vercel; explicit Next.js on Workers uses OpenNext. Shared/mobile APIs use Hono/OpenAPI; web-only endpoints can use framework routes.
|
|
92
|
+
- Select one database and one identity provider. Generator alternatives remain deliberate flags, not automatic migrations. Better Auth requires a database; authentication is optional. Configure origins/sessions and enforce tenant/resource authorization server-side. Hosting privacy is separate from product identity.
|
|
93
|
+
- Keep R2 private and authorize file operations in Workers. Keep secrets server-side, environments separate and migrations reviewed. KV is not authoritative transactional state. Bound retries, concurrency, AI usage and paid consumption; implement idempotency, quotas and recovery.
|
|
94
|
+
- Use customer-owned source, accounts, billing and recovery. Domain registration/brokerage uses GoDaddy and Cloudflare DNS; preserve existing mail/DNSSEC. Configure actual sender domains and inbound destinations; routing does not migrate mailboxes.
|
|
95
|
+
- Codex and browser/native tools implement and verify product flows; Fallow audits TS/JS. A starter, installed package or successful deployment does not prove a configured integration or working application.
|
|
96
|
+
- Record decisions and connections in the application's `docs/architecture.md`; keep tested behavior, environment, release/source identity and unresolved gaps in `docs/verification.md`. Update these existing files after relevant changes.
|
|
107
97
|
|
|
108
|
-
|
|
109
|
-
├── web/
|
|
110
|
-
├── mobile/
|
|
111
|
-
├── desktop/
|
|
112
|
-
├── extension/
|
|
113
|
-
├── api/
|
|
114
|
-
├── jobs/
|
|
115
|
-
└── realtime/
|
|
116
|
-
```
|
|
98
|
+
Follow the [delivery workflow](delivery-workflow.md) for release, acceptance and recovery. The [managed-hosting contract](https://github.com/anhedral/anhedral-init/blob/main/docs/managed-hosting-architecture.md) describes an undeployed client/backend boundary, not an available service. Installed versions, publication and live acceptance require separate evidence.
|
|
117
99
|
|
|
118
|
-
##
|
|
100
|
+
## Maintenance
|
|
119
101
|
|
|
120
|
-
|
|
102
|
+
This file owns stack choices; the delivery guide owns lifecycle/acceptance; the managed contract owns its API; sponsorship owns support information. Update the owning file in the same change when behavior or provider requirements change. Remove stale claims and unused options. Verify current official guidance when selecting a provider; beta availability is not guaranteed. Do not add catalogs, duplicated analyses or progress reports to `docs`. The plugin's bundled stack/delivery files are generated copies, never separate sources of truth.
|
|
121
103
|
|
|
122
|
-
|
|
123
|
-
pnpm dlx @react-native-reusables/cli@latest init
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
Extension:
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
pnpm dlx wxt@latest init
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Standard commands where applicable:
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
dev
|
|
136
|
-
build
|
|
137
|
-
lint
|
|
138
|
-
typecheck
|
|
139
|
-
test
|
|
140
|
-
audit
|
|
141
|
-
check
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
Other languages retain their native toolchains. Turborepo coordinates them where useful but does not replace Cargo, Python tooling, Expo tooling, or other native systems.
|
|
145
|
-
|
|
146
|
-
Commit lockfiles and record important toolchain versions.
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
# 4. Application conventions
|
|
151
|
-
|
|
152
|
-
## Web
|
|
153
|
-
|
|
154
|
-
Default:
|
|
155
|
-
|
|
156
|
-
**Next.js + React + TypeScript + Tailwind CSS + shadcn/ui**
|
|
157
|
-
|
|
158
|
-
Keep the App Router product-driven:
|
|
159
|
-
|
|
160
|
-
```
|
|
161
|
-
app/
|
|
162
|
-
├── page.tsx
|
|
163
|
-
├── dashboard/
|
|
164
|
-
├── projects/
|
|
165
|
-
├── settings/
|
|
166
|
-
└── (admin)/
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Use route groups such as `(admin)` and `(auth)` when they provide a meaningful layout, authorization, or organizational boundary.
|
|
170
|
-
|
|
171
|
-
### Vinext
|
|
172
|
-
|
|
173
|
-
Vinext is an explicit project choice, not an automatic Next.js replacement.
|
|
174
|
-
|
|
175
|
-
Use it only when its Vite/Workers architecture provides a concrete benefit and the project's dependencies and framework behavior have been verified.
|
|
176
|
-
|
|
177
|
-
## Mobile
|
|
178
|
-
|
|
179
|
-
Use:
|
|
180
|
-
|
|
181
|
-
**Expo + React Native + React Native Reusables + TypeScript**
|
|
182
|
-
|
|
183
|
-
Follow the same general package, styling, naming, and domain conventions as web.
|
|
184
|
-
|
|
185
|
-
Share appropriate business logic, contracts, validation, styling, and utilities.
|
|
186
|
-
|
|
187
|
-
Do not force React and React Native to share rendered components when separate implementations are cleaner.
|
|
188
|
-
|
|
189
|
-
## Desktop
|
|
190
|
-
|
|
191
|
-
Use **Electron** when React/TypeScript reuse is useful.
|
|
192
|
-
|
|
193
|
-
Use **GPUI + Rust** when a deliberately Rust-first architecture, native integration, or performance requirement justifies a separate implementation.
|
|
194
|
-
|
|
195
|
-
## Browser extensions
|
|
196
|
-
|
|
197
|
-
Use:
|
|
198
|
-
|
|
199
|
-
**WXT + Chrome Side Panel API**
|
|
200
|
-
|
|
201
|
-
The Chrome Side Panel is the primary extension interface.
|
|
202
|
-
|
|
203
|
-
Use WXT for:
|
|
204
|
-
|
|
205
|
-
- side panel
|
|
206
|
-
- service worker/background logic
|
|
207
|
-
- content scripts
|
|
208
|
-
- browser messaging
|
|
209
|
-
- permissions
|
|
210
|
-
- packaging
|
|
211
|
-
|
|
212
|
-
Do not default to popup-first extension architecture.
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
# 5. Shared packages
|
|
217
|
-
|
|
218
|
-
Create packages only when genuine reusable behavior exists.
|
|
219
|
-
|
|
220
|
-
Typical options:
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
packages/
|
|
224
|
-
├── ui/ # React / shadcn
|
|
225
|
-
├── ui-native/ # React Native Reusables
|
|
226
|
-
├── styling/ # colors, typography, spacing, themes
|
|
227
|
-
├── contracts/ # schemas, types, API/event contracts
|
|
228
|
-
├── api-client/
|
|
229
|
-
├── domain/ # portable business logic
|
|
230
|
-
├── server/ # server-only logic
|
|
231
|
-
├── auth/
|
|
232
|
-
├── db/
|
|
233
|
-
├── local-data/
|
|
234
|
-
├── storage/
|
|
235
|
-
├── billing/
|
|
236
|
-
├── email/
|
|
237
|
-
├── ai/
|
|
238
|
-
├── analytics/
|
|
239
|
-
├── observability/
|
|
240
|
-
├── i18n/
|
|
241
|
-
├── eslint-config/
|
|
242
|
-
├── typescript-config/
|
|
243
|
-
└── test-config/
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
Use **`styling`**, not `tokens`, for shared styling definitions.
|
|
247
|
-
|
|
248
|
-
Share:
|
|
249
|
-
|
|
250
|
-
- styling
|
|
251
|
-
- schemas
|
|
252
|
-
- validation
|
|
253
|
-
- contracts
|
|
254
|
-
- API types
|
|
255
|
-
- event definitions
|
|
256
|
-
- portable business logic
|
|
257
|
-
|
|
258
|
-
Keep platform-specific UI separate where appropriate.
|
|
259
|
-
|
|
260
|
-
Keep privileged/server integrations out of client-safe packages.
|
|
261
|
-
|
|
262
|
-
Never expose server credentials through shared client code.
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
# 6. Cloudflare hosting
|
|
267
|
-
|
|
268
|
-
Cloudflare is the preferred hosted application platform.
|
|
269
|
-
|
|
270
|
-
Typical architecture:
|
|
271
|
-
|
|
272
|
-
```
|
|
273
|
-
Web / Mobile / Desktop / Extension
|
|
274
|
-
│
|
|
275
|
-
▼
|
|
276
|
-
Cloudflare Workers
|
|
277
|
-
Hono / Next.js
|
|
278
|
-
│
|
|
279
|
-
┌──────────┼──────────┐
|
|
280
|
-
▼ ▼ ▼
|
|
281
|
-
Hyperdrive R2 Durable Objects
|
|
282
|
-
│ │
|
|
283
|
-
▼ WebSockets
|
|
284
|
-
Neon
|
|
285
|
-
|
|
286
|
-
Workers
|
|
287
|
-
├── Queues
|
|
288
|
-
├── Cron
|
|
289
|
-
├── Workflows
|
|
290
|
-
├── KV
|
|
291
|
-
├── Observability
|
|
292
|
-
└── Basin
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
Use only required services.
|
|
296
|
-
|
|
297
|
-
## Next.js hosting
|
|
298
|
-
|
|
299
|
-
Default:
|
|
300
|
-
|
|
301
|
-
```
|
|
302
|
-
Next.js
|
|
303
|
-
↓
|
|
304
|
-
OpenNext
|
|
305
|
-
↓
|
|
306
|
-
Cloudflare Workers
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
Alternative:
|
|
310
|
-
|
|
311
|
-
```
|
|
312
|
-
Next.js
|
|
313
|
-
↓
|
|
314
|
-
Vercel
|
|
315
|
-
│
|
|
316
|
-
└─────────────→ Cloudflare infrastructure
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
Vercel may host only the Next.js application while Cloudflare continues to provide:
|
|
320
|
-
|
|
321
|
-
- APIs
|
|
322
|
-
- R2
|
|
323
|
-
- Hyperdrive
|
|
324
|
-
- Durable Objects
|
|
325
|
-
- Queues
|
|
326
|
-
- Workflows
|
|
327
|
-
- analytics
|
|
328
|
-
- other infrastructure
|
|
329
|
-
|
|
330
|
-
Use Vercel when its native Next.js integration, previews, deployment experience, or framework support materially simplifies the project and its applicable plan/cost is appropriate.
|
|
331
|
-
|
|
332
|
-
Cloudflare remains the default.
|
|
333
|
-
|
|
334
|
-
---
|
|
335
|
-
|
|
336
|
-
# 7. APIs
|
|
337
|
-
|
|
338
|
-
Use:
|
|
339
|
-
|
|
340
|
-
**Hono + OpenAPI on Cloudflare Workers**
|
|
341
|
-
|
|
342
|
-
when a shared network API is required by:
|
|
343
|
-
|
|
344
|
-
- mobile
|
|
345
|
-
- desktop
|
|
346
|
-
- extensions
|
|
347
|
-
- integrations
|
|
348
|
-
- external consumers
|
|
349
|
-
- multiple application interfaces
|
|
350
|
-
|
|
351
|
-
Use **Next.js route handlers** when endpoints belong only to the web application and a separate service adds no useful boundary.
|
|
352
|
-
|
|
353
|
-
Do not create `apps/api` automatically.
|
|
354
|
-
|
|
355
|
-
---
|
|
356
|
-
|
|
357
|
-
# 8. Data
|
|
358
|
-
|
|
359
|
-
## PostgreSQL
|
|
360
|
-
|
|
361
|
-
Default:
|
|
362
|
-
|
|
363
|
-
```
|
|
364
|
-
Worker
|
|
365
|
-
↓
|
|
366
|
-
Drizzle
|
|
367
|
-
↓
|
|
368
|
-
Hyperdrive
|
|
369
|
-
↓
|
|
370
|
-
Neon PostgreSQL
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
Use PostgreSQL when relational requirements justify it.
|
|
374
|
-
|
|
375
|
-
Neon remains independently managed.
|
|
376
|
-
|
|
377
|
-
Avoid inappropriate Hyperdrive query caching for correctness-sensitive operations such as:
|
|
378
|
-
|
|
379
|
-
- authentication
|
|
380
|
-
- permissions
|
|
381
|
-
- entitlements
|
|
382
|
-
- balances
|
|
383
|
-
- quotas
|
|
384
|
-
- financial records
|
|
385
|
-
- paid-unit consumption
|
|
386
|
-
|
|
387
|
-
## D1
|
|
388
|
-
|
|
389
|
-
Use:
|
|
390
|
-
|
|
391
|
-
**D1 + Drizzle**
|
|
392
|
-
|
|
393
|
-
when SQLite semantics are sufficient and Cloudflare-native persistence is preferable.
|
|
394
|
-
|
|
395
|
-
D1 is an alternative database choice, not an automatic PostgreSQL replacement.
|
|
396
|
-
|
|
397
|
-
## Local data
|
|
398
|
-
|
|
399
|
-
Use:
|
|
400
|
-
|
|
401
|
-
**SQLite + filesystem**
|
|
402
|
-
|
|
403
|
-
for local/device-resident data.
|
|
404
|
-
|
|
405
|
-
Do not add cloud persistence merely because other applications use it.
|
|
406
|
-
|
|
407
|
-
Offline synchronization requires explicit design for:
|
|
408
|
-
|
|
409
|
-
- identity
|
|
410
|
-
- offline writes
|
|
411
|
-
- conflicts
|
|
412
|
-
- reconciliation
|
|
413
|
-
- authoritative state
|
|
414
|
-
|
|
415
|
-
---
|
|
416
|
-
|
|
417
|
-
# 9. Private files
|
|
418
|
-
|
|
419
|
-
Remote application files use:
|
|
420
|
-
|
|
421
|
-
**private Cloudflare R2 buckets accessed through Worker bindings.**
|
|
422
|
-
|
|
423
|
-
```
|
|
424
|
-
web / mobile / desktop / extension
|
|
425
|
-
↓
|
|
426
|
-
Worker
|
|
427
|
-
↓
|
|
428
|
-
authenticate + authorize
|
|
429
|
-
↓
|
|
430
|
-
private R2 binding
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
Clients never receive R2 credentials.
|
|
434
|
-
|
|
435
|
-
The Worker enforces file-level authorization.
|
|
436
|
-
|
|
437
|
-
Do not make private application buckets public for convenience.
|
|
438
|
-
|
|
439
|
-
Use the local filesystem when files are intentionally device-local.
|
|
440
|
-
|
|
441
|
-
---
|
|
442
|
-
|
|
443
|
-
# 10. Authentication
|
|
444
|
-
|
|
445
|
-
Choose per project.
|
|
446
|
-
|
|
447
|
-
### Clerk
|
|
448
|
-
|
|
449
|
-
Use when managed identity reduces implementation and maintenance.
|
|
450
|
-
|
|
451
|
-
### Better Auth
|
|
452
|
-
|
|
453
|
-
Use when application-managed authentication is preferred.
|
|
454
|
-
|
|
455
|
-
### No authentication
|
|
456
|
-
|
|
457
|
-
Use when accounts are unnecessary.
|
|
458
|
-
|
|
459
|
-
Do not add authentication merely because other projects use it.
|
|
460
|
-
|
|
461
|
-
Cloudflare Access may separately protect internal applications or staging environments.
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
# 11. Realtime and asynchronous work
|
|
466
|
-
|
|
467
|
-
Use **Durable Objects + WebSockets** for:
|
|
468
|
-
|
|
469
|
-
- rooms
|
|
470
|
-
- presence
|
|
471
|
-
- collaboration
|
|
472
|
-
- connection coordination
|
|
473
|
-
- stateful realtime behavior
|
|
474
|
-
|
|
475
|
-
Use **Queues** for asynchronous jobs.
|
|
476
|
-
|
|
477
|
-
Use **Cron Triggers** for scheduled work.
|
|
478
|
-
|
|
479
|
-
Use **Workflows** for durable, resumable multi-step processes.
|
|
480
|
-
|
|
481
|
-
Use **Containers** when suitable workloads require:
|
|
482
|
-
|
|
483
|
-
- Linux binaries
|
|
484
|
-
- native dependencies
|
|
485
|
-
- heavier compute
|
|
486
|
-
- isolated processing
|
|
487
|
-
|
|
488
|
-
Define retries, idempotency, concurrency, and failure handling where applicable.
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
# 12. AI
|
|
493
|
-
|
|
494
|
-
Normal choices:
|
|
495
|
-
|
|
496
|
-
### OpenAI SDK
|
|
497
|
-
|
|
498
|
-
Use when directly integrating OpenAI.
|
|
499
|
-
|
|
500
|
-
### AI SDK
|
|
501
|
-
|
|
502
|
-
Use when the application benefits from:
|
|
503
|
-
|
|
504
|
-
- streaming
|
|
505
|
-
- tool calling
|
|
506
|
-
- provider abstraction
|
|
507
|
-
- structured AI UI patterns
|
|
508
|
-
- established templates/examples
|
|
509
|
-
|
|
510
|
-
Prefer official examples and suitable Next.js templates over unnecessary custom infrastructure.
|
|
511
|
-
|
|
512
|
-
### Workers AI
|
|
513
|
-
|
|
514
|
-
Optional.
|
|
515
|
-
|
|
516
|
-
Use when Cloudflare-hosted inference provides a concrete project advantage.
|
|
517
|
-
|
|
518
|
-
AI Gateway and related Cloudflare AI services may be selected when their routing, observability, control, or cost features justify them.
|
|
519
|
-
|
|
520
|
-
---
|
|
521
|
-
|
|
522
|
-
# 13. Domain and mail
|
|
523
|
-
|
|
524
|
-
Use:
|
|
525
|
-
|
|
526
|
-
```
|
|
527
|
-
Domain → GoDaddy broker + Cloudflare nameservers
|
|
528
|
-
Inbound Mail → Cloudflare Email Routing
|
|
529
|
-
Outbound Mail → Cloudflare Email Sending (default) / Resend (alternative)
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
Purchase the domain through GoDaddy registration/brokerage in the client's account. The client owns registration, renewal, billing, and recovery access.
|
|
533
|
-
|
|
534
|
-
Then add the domain as a zone in the client's Cloudflare account, verify its DNS records, and set the registrar's nameservers to those assigned by Cloudflare. Verify the zone is active before connecting application domains and mail. Registration remains with the registrar; Cloudflare manages authoritative DNS.
|
|
535
|
-
|
|
536
|
-
Use Cloudflare Email Routing for inbound mail and Cloudflare Email Sending for outbound business and application mail. Resend is an alternative outbound sending provider when selected for the project.
|
|
537
|
-
|
|
538
|
-
Configure domain verification, routing destinations, sender authentication, and environment-specific sending credentials or bindings for the selected provider.
|
|
539
|
-
|
|
540
|
-
---
|
|
541
|
-
|
|
542
|
-
# 14. Payments
|
|
543
|
-
|
|
544
|
-
Use **Stripe** for web payments and subscriptions.
|
|
545
|
-
|
|
546
|
-
Add **RevenueCat** when subscriptions span web, App Store, and Play Store ecosystems and unified entitlement management is useful.
|
|
547
|
-
|
|
548
|
-
Keep separate concepts for:
|
|
549
|
-
|
|
550
|
-
- billing
|
|
551
|
-
- subscriptions
|
|
552
|
-
- entitlements
|
|
553
|
-
- credits
|
|
554
|
-
- quotas
|
|
555
|
-
- seats
|
|
556
|
-
- consumption
|
|
557
|
-
|
|
558
|
-
Paid-unit consumption must be transactional and idempotent.
|
|
559
|
-
|
|
560
|
-
---
|
|
561
|
-
|
|
562
|
-
# 15. Analytics and observability
|
|
563
|
-
|
|
564
|
-
## Operations
|
|
565
|
-
|
|
566
|
-
Use **Cloudflare Observability** for:
|
|
567
|
-
|
|
568
|
-
- logs
|
|
569
|
-
- errors
|
|
570
|
-
- traces
|
|
571
|
-
- latency
|
|
572
|
-
- deployments
|
|
573
|
-
- request behavior
|
|
574
|
-
- operational investigation
|
|
575
|
-
|
|
576
|
-
Add **Sentry** when additional runtime or crash diagnostics are required.
|
|
577
|
-
|
|
578
|
-
## Product analytics
|
|
579
|
-
|
|
580
|
-
Use **Basin** for:
|
|
581
|
-
|
|
582
|
-
- application events
|
|
583
|
-
- analytical datasets
|
|
584
|
-
- analytical queries
|
|
585
|
-
|
|
586
|
-
Add **PostHog** when requirements such as:
|
|
587
|
-
|
|
588
|
-
- session replay
|
|
589
|
-
- funnels
|
|
590
|
-
- experiments
|
|
591
|
-
- specialized product analytics
|
|
592
|
-
|
|
593
|
-
justify it.
|
|
594
|
-
|
|
595
|
-
Do not install every analytics platform by default.
|
|
596
|
-
|
|
597
|
-
Operational telemetry and product analytics are separate concerns.
|
|
598
|
-
|
|
599
|
-
---
|
|
600
|
-
|
|
601
|
-
# 16. TypeScript/JavaScript auditing
|
|
602
|
-
|
|
603
|
-
Use **Fallow** as the standard TypeScript/JavaScript codebase auditing tool.
|
|
604
|
-
|
|
605
|
-
Fallow complements linting, typechecking, testing, builds, and runtime verification.
|
|
606
|
-
|
|
607
|
-
Use it for:
|
|
608
|
-
|
|
609
|
-
- unused code
|
|
610
|
-
- unused dependencies
|
|
611
|
-
- circular dependencies
|
|
612
|
-
- duplication
|
|
613
|
-
- complexity
|
|
614
|
-
- architecture-boundary problems
|
|
615
|
-
- dependency issues
|
|
616
|
-
- styling/design-system drift
|
|
617
|
-
|
|
618
|
-
During development:
|
|
619
|
-
|
|
620
|
-
```
|
|
621
|
-
pnpm exec fallow
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
For PR/change auditing:
|
|
625
|
-
|
|
626
|
-
```
|
|
627
|
-
pnpm exec fallow audit
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
Use `fallow audit` in PR checks where applicable to identify problems introduced by the change.
|
|
631
|
-
|
|
632
|
-
The deterministic gate should generally include:
|
|
633
|
-
|
|
634
|
-
```
|
|
635
|
-
format / lint
|
|
636
|
-
↓
|
|
637
|
-
typecheck
|
|
638
|
-
↓
|
|
639
|
-
Fallow audit
|
|
640
|
-
↓
|
|
641
|
-
tests
|
|
642
|
-
↓
|
|
643
|
-
build
|
|
644
|
-
↓
|
|
645
|
-
integration checks
|
|
646
|
-
```
|
|
647
|
-
|
|
648
|
-
`pnpm check` should run the project's required deterministic gate.
|
|
649
|
-
|
|
650
|
-
Fix legitimate findings. Use narrow documented exceptions for intentional behavior rather than broad ignores.
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
# 17. Anhedral developers
|
|
655
|
-
|
|
656
|
-
Anhedral development is **agent-driven on macOS**.
|
|
657
|
-
|
|
658
|
-
The core environment is:
|
|
659
|
-
|
|
660
|
-
```
|
|
661
|
-
macOS
|
|
662
|
-
├── OpenAI / Codex
|
|
663
|
-
├── Computer Use
|
|
664
|
-
├── Control Chrome
|
|
665
|
-
├── terminal + development servers
|
|
666
|
-
├── native apps / simulators
|
|
667
|
-
├── provider plugins
|
|
668
|
-
├── APIs / MCP
|
|
669
|
-
└── CLIs
|
|
670
|
-
```
|
|
671
|
-
|
|
672
|
-
## Developer tooling
|
|
673
|
-
|
|
674
|
-
|Tool|Primary use|
|
|
675
|
-
|---|---|
|
|
676
|
-
|**OpenAI / Codex**|Primary coding and reasoning agent: planning, implementation, debugging, review, testing, and operations.|
|
|
677
|
-
|**Computer Use**|Dynamic testing, fast iteration, macOS interaction, application testing, setup automation, task automation, debugging, and cross-application workflows.|
|
|
678
|
-
|**Control Chrome**|Browser development, rapid UI iteration, authentication flows, integrations, console/network inspection, dashboards, and deployed-app verification.|
|
|
679
|
-
|**Cloudflare plugin + `cf` + API/MCP**|Cloudflare provisioning, configuration, deployments, logs, observability, analytics, and operations.|
|
|
680
|
-
|**GitHub plugin**|Repositories, branches, worktrees, PRs, issues, checks, reviews, and releases.|
|
|
681
|
-
|**Neon integration/API**|PostgreSQL projects, branches, databases, migrations, and operations.|
|
|
682
|
-
|**Stripe plugin**|Products, prices, payments, subscriptions, test transactions, and billing operations.|
|
|
683
|
-
|**RevenueCat integration**|Products, offerings, subscriptions, and entitlements.|
|
|
684
|
-
|**Email integrations**|Application email and supported mailbox/email workflows.|
|
|
685
|
-
|**Slack plugin**|Project context, communication, decisions, notifications, and workflows.|
|
|
686
|
-
|**[Cloudflare security audit](https://github.com/cloudflare/security-audit-skill)**|Repository security reviews and verified vulnerability findings.|
|
|
687
|
-
|**Next.js skills/tools**|Framework conventions, implementation, routing, rendering, debugging, and optimization.|
|
|
688
|
-
|**Vercel plugin**|Projects, deployments, environments, logs, and operations when Vercel is selected.|
|
|
689
|
-
|
|
690
|
-
---
|
|
691
|
-
|
|
692
|
-
# 18. Accounts and access
|
|
693
|
-
|
|
694
|
-
Configure only the services selected by the project.
|
|
695
|
-
|
|
696
|
-
- **Cloudflare:** client-owned account, account ID, authorized plugin/OAuth or scoped API token, and a plan supporting the selected services. Add billing or DNS access only when required.
|
|
697
|
-
- **Domain and mail:** client-owned GoDaddy domain access, Cloudflare nameservers/DNS access, Email Routing destinations, and Cloudflare Email Sending setup or Resend credentials when selected.
|
|
698
|
-
- **Neon / Hyperdrive:** authorized Neon project access, database connection credentials, separate migration/runtime roles, and Hyperdrive origin configuration.
|
|
699
|
-
- **Private R2 / Pipelines:** Worker bindings for application storage; authorized sink writes to the selected private bucket. Cloudflare's managed setup requires the Workers Pipelines app's **Pipelines Setup** grant. Keep ingestion private unless an authorized public endpoint is required.
|
|
700
|
-
- **Auth and optional providers:** Better Auth secret/URL or Clerk keys; selected AI, email, payments, analytics, and observability credentials, domains, and webhooks.
|
|
701
|
-
- **GitHub / CI:** repository access, protected deployment secrets, and environment-specific resource identifiers.
|
|
702
|
-
|
|
703
|
-
Keep secrets server-side and out of source control. Obtain approval for paid activation, broader access, and required terms. Configure resource bindings, verify selected integrations in the deployed application, and record remaining setup before production approval.
|
|
104
|
+
Generated `pnpm audit:deps` checks all dependencies and verifies reviewed security backports against patch hashes, installed package hashes and regression checks. Unknown advisories and altered backports fail closed.
|