Stack baseline — decide once, build on it

SkillFiles & storage

The pinned default technology stack for SMB Product-Builder products. One source of truth so the architect, app-scaffolder, auth-engineer, and senior-dev never re-decide the stack per build — they build ON it. Covers framework, ORM/DB, auth, UI, payments/email/SMS, files, jobs, testing, hosting, and observability, with the chosen default + the one sanctioned alternative for each. Applied whenever a new product is scaffolded or a stack choice would otherwise be improvised. Re-deciding the stack every build is the biggest silent time sink; this kills it.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Stack baseline — decide once, build on it skill

What this skill tells your AI

The instructions your AI receives, as published by avelikiy/great_cto in skills/stack-baseline/SKILL.md and read by ahel’s review.

Every SMB product builds on the SAME proven stack unless there's a concrete reason not to. Re-deciding framework/ORM/auth/host per build wastes the first hour of every project and fragments the codebase across products. This is the default; deviate only with a written reason in ARCH.

The pinned stack

LayerDefaultSanctioned alternativeNotes
FrameworkNext.js (App Router, TS)RemixServer actions + RSC; one repo front+back
UITailwind + shadcn/uimatches the site; design-advisor tokens map to it
Charts (dashboard/analytics)ECharts (shipped)Rechartspolished specs generated at build time via Flint → compiled to native ECharts; Flint is dev-only, never a runtime dep. Contract: references/dashboard-viz.md
DBPostgresthe only DB; integer cents, tz-aware timestamps
ORM / migrationsDrizzlePrismatyped schema + SQL migrations; migration-ready-schema applies
AuthAuth.js (NextAuth v5)Clerk (fast path, per-MAU cost)owned by auth-engineer; session + RBAC + multi-tenant
PaymentsStripe (+ Connect)owned by subscription-billing-engineer / integrations-engineer
EmailResendPostmarktransactional; SPF/DKIM/DMARC via lifecycle-messaging
SMSTwilio (Messaging Service)Telnyx10DLC; consent via lifecycle-messaging
File storageCloudflare R2 / S3private buckets, presigned URLs
Background jobsInngesta Postgres-backed queuereminders, syncs, dunning
TestingVitest (unit) + Playwright (e2e)senior-dev unit; e2e-test-engineer browser
HostingVercelCloudflare Pages/WorkersNext.js-native; preview per PR
DB hostNeon (serverless PG)Supabasebranchable; env-wired by infra-provisioner
ObservabilitySentryerrors + traces on the deployed product
Analyticsprivacy-light (Plausible)no heavy 3rd-party trackers

Rules

  1. One framework, one DB, one ORM, one auth lib across all products. Consistency > per-product optimization.
  2. Pin it in .great_cto/PROJECT.md at scaffold time (stack: line) so every later agent reads it instead of guessing — and an existing PROJECT.md's stack always wins.
  3. Money in integer cents; timestamps tz-aware; IDs are stable (compose with migration-ready-schema).
  4. Auth, payments, email/SMS, jobs are owned by their specialist (auth-engineer, billing/integrations, lifecycle-messaging) — this skill only names the default library; the specialist owns the contract.
  5. Deviation needs a written reason in ARCH's Components section (e.g. "Clerk over Auth.js because the customer needs SSO/SCIM on day one").

Output

When applied, write the stack into ARCH's Components section and PROJECT.md:

## Stack (baseline)
framework: Next.js (App Router, TS) · UI: Tailwind + shadcn
db: Postgres (Neon) · orm: Drizzle · auth: Auth.js (→ auth-engineer)
payments: Stripe · email: Resend · sms: Twilio · files: R2 · jobs: Inngest
test: Vitest + Playwright · host: Vercel · obs: Sentry
deviations: <none | reason>

Signals

GitHub stars
92
Forks
13
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
stack-baseline
Source
github.com/avelikiy/great_cto