How I work

On my solo projects, I frame, the AI codes, I test for real and I keep control of what goes to production. The rules below describe that workflow, and how I adapt it in a team.

Per-project documentation

Notion is the product source of truth: vision, roadmap, decisions, open questions. Nothing gets coded before the plan is validated.

In the repository, five Markdown files live next to the code and are updated at every step. They give the AI the memory it lacks from one session to the next.

Division of roles with the AI, solo

I wrote code by hand for years (Node.js, Haxe, Python, Go, SQL) and I read everything the AI produces. On my personal projects, Claude Code does the heavy lifting: the code, the documentation, a review of its own code and static analysis (format, lint, typecheck). I define what is expected, I review, I test with real data and real user journeys, and I validate. The cycle:

  1. The AI codes, documents, and delivers code that compiles and passes analysis.
  2. I test locally, with real data.
  3. I validate or report what is wrong, and we iterate.
  4. Commit on the AI's branch, only after validation.

Rules designed for a solo developer who is also their own user:

In a team

Alone, I am the only reviewer and the only user. In a team, code has to be read, picked up and maintained by others, so the frame changes:

Git and environments

Database and migrations

A single self-hosted Supabase on the VPS, shared between projects: one Postgres database, one schema per project, shared user accounts and storage. RLS enabled on every table exposed to the API: the public key ends up in the bundle, security comes from row-level rules.

Every schema change is two files:

Full pg_dump every night, kept fourteen days, restorable schema by schema.

Hosting and deployment

An Ubuntu VPS: nginx and certbot in front of everything, Docker Compose for services, a deploy user without sudo. Shared services (Supabase, n8n, nginx blocks) live in a separate infrastructure repository, the reference for every project. Two deployment models, one per repository type:

Each project keeps what is its own in its repository: workflow, nginx block, migrations, .env.example. GitHub secrets use the same names in every repository. A single n8n instance, with [dev] and [prod] workflows per project, versioned in the project's repository and imported by its deployment.

Tracking

Jira for tickets (epics, stories, bugs) and releases, GitHub for code and PRs, Notion for knowledge and decisions. User feedback is collected directly inside the apps.

Tech stack

Data
BigQuerydbtTrinoPostgreSQLMySQLSQL ServerMongoDB
Data visualisation
SupersetTableauPower BI
Development
PythonNode.jsJavaScript / TypeScriptReactFlutter / DartGoHaxePHPC#REST APIs
Automation and AI
n8nClaude CodeGeminiHugging Face
Infrastructure
UbuntuDocker ComposenginxcertbotSupabaseGitHub ActionsGCP (Cloud Run)
Organisation
NotionJiraGitHubSlackClickUp