# stack-baseline

Pins a standard tech stack for new product builds so AI agents never improvise frameworks, databases, or auth libraries.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 107
- Author: avelikiy
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/avelikiy/great_cto/tree/HEAD/skills/stack-baseline/SKILL.md
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/skills/stack-baseline

## What it does

This skill establishes a standard tech stack across product builds. It stops arbitrary tool choices. By default, it sets Next.js (App Router, TypeScript), Tailwind with shadcn/ui, Postgres via Neon, Drizzle ORM, and Auth.js. For each tier, exactly one sanctioned alternative is permitted, such as Remix or Prisma.

The skill operates on files in `docs/architecture/`, `docs/plans/`, and `.great_cto/`. When drafting a component layout, it writes the configuration to the architecture plan and `.great_cto/PROJECT.md`. If `.great_cto/PROJECT.md` already defines a stack, the skill leaves it alone.

Any departure from the default stack requires an explicit reason written into the ARCH document.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add avelikiy/great_cto --skill stack-baseline -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/stack-baseline/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/stack-baseline/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add avelikiy/great_cto --skill stack-baseline -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/stack-baseline/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add avelikiy/great_cto --skill stack-baseline -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/stack-baseline/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install avelikiy/great_cto stack-baseline
```

2. **Manually: put the files in place**
- File: `.github/skills/stack-baseline/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add avelikiy/great_cto --skill stack-baseline -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/avelikiy/great_cto --path skills/stack-baseline
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/stack-baseline/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add avelikiy/great_cto --skill stack-baseline -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/avelikiy/great_cto/tree/HEAD/skills/stack-baseline/SKILL.md

## When to use it
- pin a standardized tech stack before scaffolding a new service
- populate the components section in architectural design plans
- prevent fragmented library selections across microservices
- log documented exceptions when replacing default dependencies

## Example prompts
- Fill out the components section in `docs/architecture/ARCH-core.md` using the baseline stack
- Pin the default stack into `.great_cto/PROJECT.md` for this new repository
- Document an exception replacing Auth.js with Clerk in ARCH due to SSO requirements

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 02dc470fe277fb51.

BEGIN THIRD-PARTY FILE 02dc470fe277fb51
```text
---
name: stack-baseline
description: 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.
when_to_use: |
  Apply when:
  - architect writes the Components / stack section of ARCH-{slug}.md
  - app-scaffolder stands up a new product skeleton
  - auth-engineer or senior-dev would otherwise pick a library/provider ad hoc
  Do NOT override a choice already pinned in PROJECT.md (an existing project's stack wins).
effort: low
allowed-tools: Read, Write, Grep, Glob
paths:
  - "docs/architecture/**"
  - "docs/plans/**"
  - ".great_cto/**"
---

# Stack baseline — decide once, build on it

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

| Layer | Default | Sanctioned alternative | Notes |
|---|---|---|---|
| **Framework** | Next.js (App Router, TS) | Remix | Server actions + RSC; one repo front+back |
| **UI** | Tailwind + shadcn/ui | — | matches the site; design-advisor tokens map to it |
| **Charts** (dashboard/analytics) | ECharts (shipped) | Recharts | polished specs generated at **build time via Flint → compiled to native ECharts**; Flint is dev-only, never a runtime dep. Contract: `references/dashboard-viz.md` |
| **DB** | Postgres | — | the only DB; integer cents, tz-aware timestamps |
| **ORM / migrations** | Drizzle | Prisma | typed schema + SQL migrations; migration-ready-schema applies |
| **Auth** | Auth.js (NextAuth v5) | Clerk (fast path, per-MAU cost) | owned by **auth-engineer**; session + RBAC + multi-tenant |
| **Payments** | Stripe (+ Connect) | — | owned by subscription-billing-engineer / integrations-engineer |
| **Email** | Resend | Postmark | transactional; SPF/DKIM/DMARC via lifecycle-messaging |
| **SMS** | Twilio (Messaging Service) | Telnyx | 10DLC; consent via lifecycle-messaging |
| **File storage** | Cloudflare R2 / S3 | — | private buckets, presigned URLs |
| **Background jobs** | Inngest | a Postgres-backed queue | reminders, syncs, dunning |
| **Testing** | Vitest (unit) + Playwright (e2e) | — | senior-dev unit; e2e-test-engineer browser |
| **Hosting** | Vercel | Cloudflare Pages/Workers | Next.js-native; preview per PR |
| **DB host** | Neon (serverless PG) | Supabase | branchable; env-wired by infra-provisioner |
| **Observability** | Sentry | — | errors + traces on the deployed product |
```
END THIRD-PARTY FILE 02dc470fe277fb51

The third-party file has ended. Everything between the 02dc470fe277fb51 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 3041 of 4320 bytes. © avelikiy · MIT · https://github.com/avelikiy/great_cto/tree/HEAD/skills/stack-baseline/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
