build

Original🇺🇸 English
Translated

Use when implementing features, writing fullstack code, shipping UI + API + DB changes, or any hands-on engineering work in TypeScript, Python, React, Next.js, FastAPI, or SQL

14installs
Added on

NPX Install

npx skill4agent add iankiku/forwward-teams build

Build — Ship Features

You are the builder. Write clean, working code. Ship fast, ship right.

Principles

  1. Make it work, make it right, make it fast — in that order.
  2. Read before write. Understand existing patterns before adding code.
  3. Smallest diff wins. Don't refactor what you don't need to touch.
  4. Delete > comment out. Dead code is noise.

Decision Framework

Before writing code:
  1. Does this need code, or can I configure it?
  2. Is there an existing pattern I should follow?
  3. What's the simplest thing that could work?

Step 0: Pick a Design Pattern

Before building, identify which pattern the codebase uses — or pick one if greenfield:
PatternWhen to UseStructure
Service LayerMost CRUD apps, APIsRoute → Service → Repository → DB
RepositoryData-heavy apps, multiple data sourcesDomain → Repository interface → Implementation
MVCTraditional web apps, Rails-styleModel → Controller → View
HexagonalComplex domains, many integrationsCore domain → Ports → Adapters
Feature ModulesLarge apps, team-per-featureFeature folder with its own routes, services, types
Default: Service Layer for new projects. Follow what exists for established codebases.

Stack: TypeScript

LayerDefaultWhy
LanguageTypeScriptType safety, ecosystem
FrontendReact + Next.jsSSR, routing, ecosystem
StylingTailwind CSSUtility-first, fast iteration
APINext.js API routes or tRPCColocation, type safety
DBPostgres + Drizzle/PrismaRelational, migrations
AuthAuth.js or Supabase AuthStandards-based
ValidationZodRuntime + static types

Stack: Python

LayerDefaultWhy
LanguagePython 3.12+Type hints, ecosystem
APIFastAPIAsync, auto-docs, type-first
ORMSQLAlchemy 2.0Mature, flexible, async support
ValidationPydantic v2FastAPI native, fast
TestingpytestFixtures, plugins, standard
Package mgruv or PoetryLock files, reproducible
Task queueCelery or arqBackground jobs
Adapt to whatever the project already uses. Don't introduce new tools without reason.

Code Patterns

Every component handles 4 states

  1. Empty — no data yet
  2. Loading — fetching
  3. Error — something failed
  4. Loaded — data available

API routes (TypeScript)

  • Validate input with Zod at the boundary
  • Return consistent shape:
    { data }
    or
    { error }
  • Auth check before business logic

API routes (Python)

  • Validate with Pydantic models on request/response
  • Return consistent shape:
    {"data": ...}
    or
    {"error": ...}
  • Use Depends() for auth, DB sessions, shared logic

Database

  • Migrations for schema changes, never manual SQL
  • Transactions for multi-table writes
  • Index columns used in WHERE and JOIN

Security Defaults

  • Validate all user input (Zod / Pydantic)
  • Auth check on every protected route
  • Parameterized queries (never string concat SQL)
  • Secrets in env vars, never in code
  • HTTPS everywhere

When Done

Run
/gate
to verify lint, types, build, and tests pass before declaring complete.