Erwan Mevel

Erwan Mevel

AI-native product engineer. I ship full products, from web and mobile to back end and payments, on my own by steering coding agents.

Paris area, France · Open to relocating to the US / Canada (visa sponsorship needed) or working remotely · Fluent English

MyPokerSeries: ~165k lines, web + iOS + Android, live in production with paying subscribers, built by one person.

01

How I build

I don't type most of the code myself. I direct coding agents, mostly Claude Code, and I'm responsible for everything they produce: the architecture, the product decisions and the quality.

  1. Spec.

    I write down what the feature must do, its edge cases and how we'll know it works.

  2. Task breakdown.

    I split the work into small steps an agent can do and I can check.

  3. Agents build.

    Claude Code writes the code. Each repo has instruction files (CLAUDE.md, AGENTS.md) listing the verification commands, known pitfalls, database rules and deploy steps, so agents start with the full context and don't repeat old mistakes.

  4. Review every diff.

    Nothing ships without me reading it. I check type checks, lint, and project-specific audit scripts (i18n coverage, exports), plus migrations that check their own invariants.

  5. Debug.

    When something breaks in production, I find the root cause from logs, devices and the database, then add the lesson to the instruction files.

  6. Release.

    Web on Vercel, mobile through EAS Build and over-the-air updates, Edge Functions through the Supabase CLI.

Why one person can ship like a team: agents take care of the typing. My job is to decide what to build, keep the architecture consistent and refuse anything that isn't right. With that loop, I took one product from a first prototype to both app stores and paying users in 11 months.

02

Projects

★ Flagship

MyPokerSeries

Live-poker companion SaaS · Web + iOS + Android · EN/FR · Nov 2025 to present

lines in a monorepo
~ 165k
commits since Nov 2025
2,756
on both stores since 19 Sept 2026
Web + iOS + Android
in production with paying subscribers (Stripe + RevenueCat)
Live
app.mypokerseries.com
MyPokerSeries web app: worldwide tournament schedule with country filters and structure ratings
Web schedule
app.mypokerseries.com
MyPokerSeries web app: tournament detail with structure rating, schedule, buy-in and structure
Tournament detail with ratings
MyPokerSeries mobile app: trip overview with net result, currency view and bankroll chart
Mobile bankroll
MyPokerSeries mobile app: The Rail, with friends playing live and an activity feed
The Rail

What it is. A companion app for live tournament players: a worldwide tournament schedule with structure ratings, trip and multi-currency bankroll tracking (140+ currencies), friends and crews with live status, and staking/swap tools.

My role. I'm the only engineer and I lead the product. My co-founder is non-technical. The first prototype was built on Lovable (Nov 2025 to Mar 2026). Since then I've run all development in Claude Code: specs, agent instruction files, reviews, debugging and releases.

Stack and scale

  • ~165k lines in a monorepo: React/Vite/TypeScript web app, Expo/React Native apps (on both stores since 19 Sept 2026), shared package for business rules and types
  • 2,756 commits since Nov 2025
  • Supabase: 42 tables all under row-level security (115 policies), 131 SQL functions, 20 Deno Edge Functions, 7 pg_cron jobs, pgmq push queue, realtime
  • Stripe (web) + RevenueCat (in-app) kept in sync through webhooks · native Google/Apple sign-in · EAS over-the-air updates · Sentry

Hard problems solved

  • Silent OTA failure. Over-the-air updates downloaded but never applied. Device logs showed the build ignored local env vars, so the bundle crashed and rolled back without any error. I moved the vars to EAS environments and added a post-release manifest check.
  • Multi-currency bankroll. Every transaction converts at the FX rate of its own date, across 140+ currencies. Trips, crews and stats roll up into one currency while each row keeps its native amount.
  • Deals mirrored across two accounts. Each side of a swap, backing or staking deal has its own record: invite/accept, synced results, locked terms. This is enforced by RLS and security-definer RPCs, never by shared editing.
  • Localized push pipeline. Trigger → pgmq queue → cron → Expo, sent in each recipient's language. I tracked down four failure modes that produced no error at all.
  • Free tier that doesn't leak paid data. Deterministic daily sampling of ratings, and placeholder rows instead of blurred real data. The blur on React Native is done with SVG filters.
In progress, launch Nov 2026

LasVegasJaunt

Rebuilding a 12-year-old travel site with a team of coding agents

Las Vegas travel guide & deals · WordPress → Next.js 16 / Supabase / Vercel / Cloudflare

LasVegasJaunt new site: homepage with all-in Las Vegas deals and a rate finder
New site
LasVegasJaunt interactive seating map for a show at Sphere, with section details and lowest ticket price
Interactive seating map
  • The problem: a 12-year-old WordPress site with 36 plugins and hand-entered deals. Goal: one source of truth for deals, shared by the site and a future app.
  • How I run it: Claude Code acts as main engineer and project manager. A planning repo holds a decision log (69 decisions), 85 session hand-offs and one brief per workstream; CLAUDE.md files enforce the rules (never touch production without approval, amounts in cents, Las Vegas time, URL parity). Browser agents collect official photos, seating data and offer inventories from versioned prompts; a separate AI agent ran a hostile UX/SEO review that Claude Code triaged.
  • Built (~33k lines, 279 commits in 4 weeks):
    • Supabase: 12 tables all under RLS; expired offers hidden by the database policy itself; ISR with instant refresh from the admin
    • 20-page admin back office: offers, price-check queue, hotel nightly rates, partner API dashboards
    • Zero-downtime migration: a Cloudflare Worker decides per URL which stack answers, one-click rollback; 495 URLs ready, 289 redirects, SEO parity endpoint
    • Verified prices without scraping: rates parsed in the browser from official calendars; fees and Nevada taxes normalized per seller
    • 40 interactive SVG seating maps stored as typed data
  • Next: partner-email agent and LLM-powered automations, all with human approval.
Private tool, in production

Private accounting app

A tamper-proof accounting system for my own business

The problem. French bookkeeping for a sole proprietorship with multi-currency (EUR/USD) revenue: bank statements, receipts, invoicing, VAT, year-end closing, tax-form figures and the legal audit export (FEC). The rules are strict: validated entries must be immutable and sequentially numbered.

What I built. A private, single-user web app, in production since October 2026 and used every month: bank CSV import with balance checks, a rule-based transaction inbox, AI receipt reading and matching, monthly locking, trial balance, invoicing with PDF generation, fixed assets and depreciation, VAT reports, a year-end closing assistant and a validated FEC export.

Interesting problems

  • Tamper-proof bookkeeping inside Postgres. All accounting logic lives in 91 SQL functions. Immutability triggers, an append-only audit log, and validation/closing done only through privileged functions under a dedicated role. Every rule is tested, including deliberate bypass attempts: 320 assertions and 200 expected-failure checks run on every push.
  • Rebuilding an already-filed fiscal year from raw data. A Python matching pipeline plus one transactional SQL import turned 237 bank transactions into 243 balanced entries; the recomputed tax-form figures matched the filed return within €1 of rounding.
  • AI receipt matching with a human in the loop. An LLM extracts structured fields from PDF and image receipts; SQL scores candidate entries by date, amount (with FX conversion) and issuer; I confirm, nothing posts automatically. Every 2026 entry now has its supporting document.

Stack. React 19, Vite, TypeScript, Tailwind v4, TanStack Query · Supabase (PostgreSQL 17, 26 tables all under RLS, mandatory TOTP MFA enforced in the database, private storage) · Deno Edge Functions (LLM extraction, daily ECB FX rates via pg_cron) · GitHub Actions CI · weekly EU backups with object lock and automated restore test.

How it was built. 62 commits in 17 days, all co-authored with Claude Code, steered by a 569-line spec, a CLAUDE.md of non-negotiable invariants, and a rule: spec first, then SQL and tests, then UI, with my explicit approval before any production change. About 670 automated checks across SQL, Deno and front end, run in CI on every push.

Client websites: Neon Studio

Freelance web studio · Astro, fast static sites

03

Before software

15 years leading infrastructure projects at Sanef (French motorway operator), 2007–2022. I ran highway projects end to end, from €12M to €200M: scope, budget, planning, contractors and stakeholders. One example is the €200M Reims southern bypass (14 km of new motorway).

Building websites on the side since 2013, full-time on software since 2025.

That's where I learned to scope work, deliver under constraints and keep many stakeholders aligned. I use the same skills today to drive agents and ship software.

Engineering degree, INSA Rennes (2005) · Civil Engineering & Urban Planning

04

Contact

Looking for a product engineer, forward deployed engineer, AI engineer or founding engineer role on an AI-native team.