I'm Dmytro from Ukraine. For the past few weeks I've been building Mapiko, a web platform where anyone can create a map and decide who can add pins: only you, everyone, subscribers, by approval or by invitation. Most of the code, the deploys and even part of the marketing go through Claude Code. Here's how that's set up and where it bit me.

The product in one paragraph

It started as a neighbourhood safety map for Kyiv and grew into a platform. Communities use it for shelters, volunteer points or city issues: pins can expire after a set time, get confirmed or refuted by votes and go through moderation. I'm now adapting the same base for teams that work across many locations (merchandisers, real estate agents, store networks): import addresses from a spreadsheet, custom statuses, "I was here" visits with photos, assigned pins and multi-stop routes. Here's a read-only demo, no sign-up needed.

Stack

  • Symfony 8 / PHP 8.4, PostgreSQL + PostGIS
  • Nuxt 4 + MapLibre GL, OpenFreeMap tiles with our own style
  • Mercure for realtime updates
  • Docker Compose on a single 4 GB VPS, Cloudflare in front
  • Ukrainian, Russian and English UI from day one

How the AI part is organised

  • One main session is the tech lead. It plans, merges and deploys, and it's the only one allowed to commit. Production deploys only happen when I type the version and "deploy".
  • Tasks go to sub-agents in parallel, each in its own git worktree with its own test database, so they don't step on each other.
  • A full local test run before every release (PHPUnit, Vitest, E2E) by a separate agent. This became essential when GitHub Actions was blocked for a while by a billing issue.
  • A second review by an agent that didn't write the code. Last week it caught a bug where saving a template would silently drop custom statuses.
  • The platform has its own MCP server, so the agent can read the moderation queue and stats and prepare blog and email drafts. Publishing and sending is always me.

What broke

  1. Green tests don't mean a working site. After one release every blog article returned 500 on SSR: a composable was called inside a head callback, outside the setup context. No test opened a real article page. Lesson: post-deploy checks should open live pages of every type, not just hit the API.
  2. Agents are confidently wrong about things they can't see. I was told that visits from a directory would show up by source in our stats. They wouldn't, so we added referrer-domain tracking.
  3. Hard limits beat instructions. Tests only run against a test database, sub-agents can't run docker compose (a hook blocks it), and production is read-only for agents. Rules in a prompt get forgotten; hooks don't.

What I'd love feedback on

  • Is "your map, your rules" clear from the landing page?
  • If you run a field team: what would make you switch from a spreadsheet plus Google Maps?

Thanks for reading!