morteza.moradi

Process

How I build.

Six principles behind every project on this site — how a rough idea becomes something real users run in production.

Scroll
01

Spec before code

Before a line ships, I decide the shape — a data model, an ADR for every load-bearing choice, and a single source-of-truth doc the whole build answers to. The decisions get written down first, so another person could pick up the spec and build from it. The repo reads like a design doc that happens to compile.

ADRsdesign docsspec-first
02

AI as the build environment

I build inside the Claude Code CLI, wired to MCP servers that drive the database, the browser, and n8n as first-class tools. Automations ship as version-controlled code, pushed through an MCP — never clicked together in a UI.

Claude Code CLIMCP serversworkflow-as-code
03

Guardrails, not vibes

Speed is fenced in on purpose: PreToolUse hooks block stray writes, custom skills enforce house conventions, and ADRs keep decisions from drifting. The agent moves fast — inside walls I built first.

hookscustom skillsguardrails
04

Determinism where it counts

The model lives only where it earns its place. The load-bearing core — money in integer cents, server-side RBAC, append-only audit logs written in the same transaction as the change — stays deterministic, typed, and provable.

server-side RBACaudit logsinteger cents
05

Tested and scanned, every push

Each push runs the gate: unit, integration, and end-to-end tests, plus Snyk scanning and automated dependency patching — all in GitHub Actions. It's green, or it doesn't ship.

VitestPlaywrightSnykGitHub Actions
06

Shipped and watched

Production on Vercel, Supabase, Neon, Render and Stripe, with Prometheus and Grafana watching it run and CI/CD deploying continuously. Real users, real money, watched continuously.

VercelSupabaseStripeGrafana

Every project here was built this way.

Repos are private by design — client IP and live products. Happy to screen-share the codebase, ADRs, and CI on a call.