Built with Claude, gated by humans

The model did the typing; the gates, tests and review kept it honest.

StockScore and Wattlas ship through the same operating model. Claude writes the tickets, the mockups, the code and the tests. A human makes the two decisions that matter — the plan and the release. Everything moves in small vertical slices, each one gated, each one readable in a diff.

2
human gates: the plan & the release
0
JSON keys in CI
130
offline tests · no network needed
2
products shipped this way
Operating model

From intent to production

Work enters where teams would raise it and leaves as a promoted release. Claude Cowork structures the ticket while Claude Design supplies the mockups — in parallel. Only two steps need a human.

1 · INTAKE
Jira & Notion

Where work is raised — an idea, a bug, a request.

2 · IN PARALLEL
Cowork ∥ Design

Claude Cowork turns the idea into a clean ticket; Claude Design supplies mockups, tokens and specs.

3 · ISSUE
GitHub issue

Links the ticket and the design together — the contract for the coding session.

4 · CLAUDE CODE ⚑
One issue, one worktree

One branch per issue; parallel sessions can't collide. You approve the plan.

5 · RELEASE ⚑
develop → staging → main

Promoted through protected branches. You approve the release.

Configuration

Configured for Claude Code

A CLAUDE.md file and project settings define how every coding session behaves. The rules live in the repo, not in anyone's head.

CLAUDE.mdrepo root

Loaded every session — the project's standing instructions.

Branch modelWORKFLOW.md

issue-N → develop → staging → main. No shortcuts.

Worktree isolationgit worktrees

One issue, one worktree — parallel sessions can't collide.

Six-block promptissue contract

context · task · refs · constraints · success · halt.

Autonomy + haltCLAUDE.md

Self-execute by default; escalate on risk.

Testing gatesettings.json

Failing-first tests · pre-commit hooks · detect-secrets.

De-risking

Challenged before any code

Significant approaches get stress-tested against a second model — twice — before anything is built. The final decision is always human.

01
Propose

The approach takes shape in the Claude Project.

02
Challenge

A second model attacks it. Two rounds, on purpose.

03 ⚑
Decide

A human weighs the trade-offs and makes the call.

04
Crystallize

The decision becomes a brief; the brief becomes the build.

CI/CD × 2

Two pipeline shapes, same discipline

A cloud product and a static site need different pipelines. What they share: nothing secret sits in either one.

StockScore — secured by default
PR checks → Gemini-call guard → deploy → Cloud Run

Cloud Run front and back, Cloud SQL behind a VPC, every secret in Secret Manager. The pipeline authenticates with Workload Identity Federation — no JSON keys stored anywhere. Gemini runs Flash before Pro, bounded.

Wattlas — a cron, a commit, a redeploy
open APIs → pipeline → data/*.json → redeploy

A scheduled job reruns the Python pipeline daily at 05:17 UTC and commits only what changed; the static site redeploys. The heavy MaStR bulk download runs weekly, isolated and non-fatal. The whole "backend" is a scheduled job that writes files.