
Full-stack engineer — platform architecture, agent orchestration, infrastructure
- Next.js
- TypeScript
- Tailwind CSS
- FastAPI
- Python
- SQLite
- Oracle Cloud
- systemd
- Cloudflare Tunnel
- Claude Code
- Google Antigravity
Autonomous system
The problem
A large catalogue of web tools is unbounded manual work. Every tool needs demand research, implementation, editorial content, metadata, deployment and distribution. That sequence is identical every time and it does not compress — which makes it the wrong thing for a person to keep doing, and an odd thing to hire for at zero revenue.
The thinking
Treat the catalogue as the output of a system rather than as the work. Autonomous agents choose what to build from real search data, write the tool and its content, and push it. The infrastructure notices the change and deploys it. My role moved from writing tools to designing the machine that writes them — and, more often, to reading what the machine produced and finding the flaw in my own design that explained it.
The temptation was to build tools faster. The decision was to stop building tools and build the thing that builds them. That trade is only worth it if the system can also recover on its own — so the interesting work was never the generation, it was the deploy loop, the failover, and making agents surface what they could not do instead of silently repeating it.
The system
- Build layer — two AI engines on scheduled cycles, each run choosing between building a tool and doing distribution work
- Account layer — rotating credentials with quota detection, so a rate-limited engine fails over instead of failing
- Deploy layer — dated releases, atomic symlink swap, health check, automatic rollback on failure
- Delivery layer — static frontend on the edge, a single ARM instance for tools that genuinely need a server
- Coverage layer — search indexing and submission driven by live coverage data rather than a fixed list
- Operator layer — one dashboard showing agent state, cycle history and anything an agent could not resolve alone
The experience
The only person using the operator surface is me, and usually because something is wrong. So it leads with what is broken rather than what is running, and an agent that gets stuck writes down what it tried and what it needs — not a copy of the error.
The details
Autonomous tool builds
An agent selects a tool from validated demand, implements it, writes its editorial content and metadata, and pushes it without review.
Multi-engine orchestration
Two different AI engines run on staggered schedules, with locks so a long cycle delays the next tick instead of colliding with it.
Account rotation
Quota exhaustion is detected from the engine's own output and the next credential takes over, so a limit costs a retry rather than a cycle.
Self-deploying backend
Agents build server-side tools they have no network path to deploy. The host watches the repository and ships the change itself, health-checked and reversible.
Atomic releases
Each deploy is a complete, separate release. Going live is a symlink swap; going back is the same swap in reverse.
Coverage pipeline
Indexing state is read per URL and drives what gets submitted, instead of pushing a hardcoded list at a search engine daily.
Operator dashboard
The only human surface. Agents raise blockers here when they hit something only a person can resolve — a credential, an account, a decision.
Zero-cost infrastructure
Backend, agents, dashboard and scheduler run on free-tier compute behind an outbound-only tunnel, with no inbound port beyond SSH.
The result
The platform runs without me. Tools are researched, built, deployed and submitted for indexing on a schedule set once, on infrastructure that costs nothing to keep running. What I maintain is no longer the catalogue — it is the system's judgement, and the parts of it that turn out to be wrong.
Lessons
- Automation amplifies whichever metric you point it at, including the wrong one. Output was never the constraint.
- An agent that cannot deploy its own work will keep reporting the same blocker until the pipeline changes, not the prompt.
- Measure before optimising — the obvious explanation for a system's behaviour survived contact with the data about half the time.
- Scale earns attention from search engines the same way it earns it from people: slowly, and not because there is more of it.