Stop shipping vibes.Ship verified code.
Describe what you need. Shipwright builds the service, runs the tests, audits for production failures, and fixes what breaks. You get code that works.
Free while in beta · Uses your existing API keys · Your code stays local
Backend
Multi-Model
Opus / Sonnet / Haiku / Gemini
Multi-CLI
Claude Code / Codex / Gemini CLI
Self-Correcting
Pipeline
AI can plan, scaffold, and generate.
None of it is verified.
Youprompt.Codeappears.Itlooksright.Itcompiles.Thetestspass.
Thenyoudeployandtheroutesaren'twired.Theconfigreadsfromenvvarsthatdon'texist.Thetestswereassertingtrue.Theauthmiddlewareisinthefilebutnothingimportsit.
Soyouwriteanotherprompt.
Itgoesincircles.Thecodewasneververified.You'redebuggingoutputfromsomethingthatdoesn'tknowwhatworkingmeans.
Somepeoplethinkthefixismoreagents.AteamofAIagentsthatmanageeachother,revieweachother'scode,coordinatetasks.It'sfaster,sure.Butfasteratwhat?Yougetthesamebrokencode,generatedinparallel.ReviewingcodewithanotherLLMisnotverification.Itisasecondopinionfromthesamesource.
Othersthinktheanswerisbetterspecs.DetailedPRDs,carefultaskbreakdowns,acceptancecriteria.Thathelps.Butaspectellsanagentwhattobuild.Itdoesn'tverifywhatgotbuilt.
Thehardpartwasneverwritingthecode.Itwasknowingifthecodeworks.
What if AI followed the same engineering process your team does?
Plan. Build. Test. Audit. Correct. Ship.
Pick a packA verified, production-ready service you build on top of.. Add your requirements.
Start from a verified, production-ready service. Shape it to your models and business logic with a PRD. Skip the boilerplate entirely.
Specialist agents. Coordinated output.
Each agent has a role and produces a specific artifact. Architecture feeds into test plans. Threat models feed into security checks. Live API research gets cached and shared. Every artifact is validated before planning starts.
32 tickets. 5 dependency layers.
Ticket DAG generated from specs. Dependencies mapped. Six validation layers before a single line of code.
It knows when to ask.
Assumptions flagged. Permission diffs surfaced. You approve what matters, or let it run on auto.
Your models. Your keys. Your call.
Pick which model runs each tier. Bring your own API keys, connect your CLI, or let us handle it.
Agents spin up. Context is scoped.
Each ticket gets its own agent. The orchestrator assembles its context from previous agents' outputs: the relevant spec sections, domain docs, dependency files. No shared 200k-token window. No prompt soup.
Every ticket verified. Every check run.
Unit tests, lint, types, formatting, security audit, license scan, Docker build, container health, and a 47-criteria readiness check. Every check is deterministic tooling, not LLM review. Nothing ships until everything passes.
Something breaks. The pipeline catches it.
47 criteria scanned. Security headers missing. Container running as root. Dead exports in plugins. Every other tool ships this. The pipeline flags it.
Corrective tickets. Automatic re-run.
Each finding becomes a ticket with priority, assignee, and source criteria. The engine assigns the fix. The same automated checks re-run. The loop closes itself.
Full trace. Every decision. Every dollar.
32 tickets completed, 4 corrective fixes, 43/47 criteria passed, $14.20 total cost. Token-level billing, model attribution, and a complete audit trail.
Read the output yourself.
Requirements, architecture, test plans, security models, and audit trails from real pipeline runs.
1# Firebase Auth Pack v1.2 -- Requirements2# Source: PRD + domain research + Firebase Admin SDK docs3# 38 requirements extracted, validated against live API4# 9 capabilities, 22 authenticated endpoints + 2 public56requirements:7 - id: REQ-0018 title: Single token verification with optional revocation check9 risk: high10 acceptance_criteria:11 - POST /verify accepts Firebase ID token in request body12 - Optional checkRevoked flag triggers network revocation check13 - Returns uid, email, emailVerified, claims, iss, aud, iat, exp14 - Returns generic 401 for any verification failure15 - Does NOT distinguish between failure reasons in HTTP response1617 - id: REQ-00318 title: User lookup by UID, email, and phone19 risk: medium20 acceptance_criteria:21 - GET /users/:uid returns full user profile22 - GET /users/by-email/:email returns user by email23 - GET /users/by-phone/:phone returns user by phone (E.164)24 - POST /users/batch accepts up to 100 mixed identifiers25 - Returns 404 for unknown user, 400 for malformed input2627 - id: REQ-00528 title: User CRUD with batch operations29 risk: medium30 acceptance_criteria:31 - POST /users creates user (email, password, displayName, phone)32 - PATCH /users/:uid updates whitelisted properties33 - DELETE /users/:uid deletes single user (204)34 - POST /users/:uid/disable and /enable toggle account state35 - POST /users/batch-delete accepts up to 1000 UIDs36 - GET /users returns paginated listing (maxResults, pageToken)3738 - id: REQ-00739 title: Custom claims management40 risk: high41 acceptance_criteria:42 - PUT /users/:uid/claims sets claims (replaces all existing)43 - DELETE /users/:uid/claims clears all claims (204)44 - Reserved claim names validated before SDK call45 - Claims size validated (max 1000 chars serialized)4647 - id: REQ-00948 title: Session cookie lifecycle49 risk: high50 acceptance_criteria:51 - POST /sessions creates cookie from ID token + expiresIn52 - POST /sessions/verify validates cookie with optional revocation53 - Duration validated (5 min to 14 days per Firebase limits)5455 - id: REQ-01156 title: Custom tokens and refresh token revocation57 risk: high58 acceptance_criteria:59 - POST /tokens/custom mints token for UID with optional claims60 - POST /users/:uid/revoke invalidates all refresh tokens61 - Returns tokensValidAfterTime for confirmation6263 - id: REQ-01364 title: Email action link generation65 risk: medium66 acceptance_criteria:67 - POST /email-actions/password-reset generates reset link68 - POST /email-actions/verification generates verification link69 - POST /email-actions/sign-in generates passwordless sign-in link70 - sign-in requires actionCodeSettings with url + handleCodeInApp7172 # ... 31 more requirements (REQ-002 through REQ-038)73 # Full file: github.com/useshipwright/shipwright/builds/firebase-auth/spec/7475non_functional_requirements:76 - id: NFR-00177 title: Token verification latency78 target: "<50ms p99"79 - id: NFR-00280 title: Test coverage81 target: ">80% line coverage"82 - id: NFR-00383 title: Startup time84 target: "<3s to healthy"8586constraints:87 framework: Fastify 588 language: TypeScript (strict mode)89 runtime: Node.js 22 LTS90 test_runner: vitest91 package_manager: pnpm92 container: Docker (multi-stage, non-root)
Questions? Answers.
Ready to try it?
Run Shipwright on your own PRD. See what your AI-generated code is actually missing.
Free while in beta · Uses your existing API keys · Your code stays local