AI speed, with the engineering that makes it safe to ship.
I have worked with AI in the loop since 2024. The first project built end to end with a coding agent was SocioHR Play in 2025, on Google's Antigravity; I moved to Claude Code during Timber Logistic, and today Claude Code and OpenAI Codex are the daily tools, with Antigravity when a second opinion is worth having. All of them are connected to the same things I use myself: git, the Firebase and Supabase CLIs, and MCP servers for the database, the browser and the deploy target.
That is not the interesting part. Anyone can generate code now. What decides whether the result is a product or a liability is everything around the generation: what the agent is told, what it is allowed to touch, and what has to be true before its work is accepted. That is where the engineering went - and it is what two years of doing this have actually taught me.
- 2024
- First AI-assisted work - Clinica Naturell, a client site I still maintain.
- 2025
- SocioHR Play: first project built end to end with a coding agent, on Google Antigravity.
- Jun 2026
- Timber Logistic: switched to Claude Code; repo-level agent instructions and verify gates became the standard.
- Now
- Claude Code and Codex daily, Antigravity occasionally. Six systems in production, all built this way.
01
The repo carries its own operating instructions
Each project has a CLAUDE.md or AGENTS.md: the invariants an agent must not break, the commands that prove a change works, and the decisions already made so they are not re-litigated. A NEXT-SESSION.md hands the live state to the next session - what is deployed, what is gated, what is untested. An agent that starts cold reads those before touching anything.
Where to see it: Timber Logistic keeps a launch-day checklist separate from the backlog, because several items on it are easy to assume handled when they are not.
02
Nothing is accepted on the agent's word
Every repo has a verify command - typecheck, lint, tests, build, dependency audit - and CI runs it on every push. For anything with a database, the test suite includes the security property itself: two real accounts asserting neither can read the other's rows, and the demo account calling the delete endpoint and expecting a refusal. If a guarantee matters, there is a test that would fail loudly when it stops being true.
Where to see it: FoodBoard: 193 tests. Kinetiq: 34, including the accessibility claims the README makes. Timber: a CI step that decodes every JWT in the production bundle and fails on a service key.
03
The database holds the line, so a bad generation cannot cross it
Agents write client code quickly, and a client that filters by owner is one omitted where clause away from leaking every tenant. So authorization lives in Postgres row-level security and Firestore rules - the client physically cannot express a cross-tenant query. That posture is what makes it safe to let an agent move fast in the UI: the blast radius of a mistake is a broken page, not an incident.
Where to see it: Timber Logistic: RLS on all 20 tables, every state change through SECURITY DEFINER procedures, no generic UPDATE policies.
04
Tests are where the agent's bugs get caught - and they do
Two from this month. A prerendering step for menu link previews serialised the restaurant's own description into an inline JSON-LD block; the test for it revealed that a literal </script> in a description would close the block early. And a public demo account's Delete button was hidden in the header - presentation, not a guard - until a test that actually called the RPC forced the check into the database function. Both were found by writing the assertion, not by reading the code.
Where to see it: Both fixes are single commits in FoodBoard's public history, with the reasoning in the message.
05
Honesty is a feature of the deliverable
Every README has a Known limitations section written plainly, because those are the parts a reviewer should ask about. A payment integration was described as gated until the day it went live. A demo's staleness window is stated in hours. A number on this site has a date next to it. Speed with AI is only worth something if the person receiving the work can trust what they are told about it.
Where to see it: FoodBoard's README says which architectural decision I would reverse if I built it again, and why.
06
Search and answer-engine visibility ship with the product
Every public-facing project receives a technical SEO and generative engine optimization pass appropriate to its architecture. That means crawlable HTML where a client-rendered app is not enough, route-specific titles and descriptions, canonical URLs, sitemaps, robots directives, structured data and link previews. Content is organized so both search crawlers and answer engines can identify the product, audience, capabilities and evidence without guessing from a bundle of JavaScript.
Where to see it: FoodBoard prerenders one shareable page per menu with JSON-LD and a sitemap. Clinica Naturell prerenders service routes. This portfolio publishes canonical and hreflang metadata for English, Romanian and Russian.
What is actually on the machine.
I have not built a custom MCP server yet. I use them; I have not shipped one.
- Claude Code
- OpenAI Codex
- Gemini Antigravity
- Model Context Protocol servers
- git
- Firebase CLI
- Supabase CLI and MCP
- GitHub Actions
- headless browser
- TypeScript
- React 19
- Vue 3
- Vite
- Next.js
- Tailwind CSS
- Vitest
- Vue Test Utils
- PostgreSQL - RLS, triggers, pg_cron, SECURITY DEFINER
- Supabase
- Firebase - Firestore, Auth, Storage, Functions
- Cloudinary
- GitHub Actions CI/CD
- Firebase Hosting
- Cloudflare - DNS, Email Routing, Turnstile, SPF/DKIM
- Google Workspace
- Sentry
- technical SEO and GEO
- build-time prerendering
- JSON-LD and sitemaps
- Netopia card payments
- Oblio and e-Factura/ANAF invoicing
- GDPR and ePrivacy consent
- EU DSA Article 16
- MQTT and InfluxDB