Projects

AI systems that run unsupervised in front of real customers.

Seven in production right now. The engineering is in deciding what the agent isn't allowed to do.

A business operated entirely from WhatsApp: orders typed into a chat that issue invoices, record expenses, update the CRM and feed a dashboard.

In productionFinance & accounting

A SaaS a business runs entirely from WhatsApp

The owner types an order into a chat. The system issues the invoice, records the expense, updates the CRM and feeds a dashboard. It replaced the management software they were paying for.

22 tools in the agent, a separate read-only role for their accountant, and EU VAT validated against the official registry rather than a regex.

React · TypeScript · Supabase · n8n · Gemini Flash · Stripe

Course platform overview: content paced by release date, progress that survives navigation, subscription tiers, and row-level security deciding visibility.

In productionOnline educationSince Oct 2025

Learning platform with a real-time community wall

A full learning platform: courses with content released on a schedule, progress tracking, billing and role-based access, built and shipped for a client with real students on it.

The community wall went from brief to production in about ten days. Real-time posting, moderation and access rules tied to what each student had actually paid for — the interesting part was never the feed, it was making sure the wall and the billing agreed on who could see what.

Next.js · TypeScript · Supabase · PostgreSQL · Stripe · Vercel

Tiered memory: Redis holds the live conversation, PostgreSQL holds what has to outlive the session, and deciding what gets promoted between the two is the design work.

In productionConsumer productSince Feb 2025

Consumer assistant built for conversations that run for months

No menus, no forms, no flow to follow. The user just talks, and keeps talking — for months.

A conversation that long outgrows any context window, so memory is tiered: Redis holds the live conversation, Postgres holds what has to survive it. Answers are retrieved from the corpus rather than packed into the prompt, which is what keeps the cost flat as the history grows.

The memory of a conversational agent isn't a database problem. It's an editorial one: deciding what deserves to be remembered.

n8n · Redis · Supabase · PostgreSQL · retrieval over a private corpus

One template deployed three times: a training platform and a CRM in the same product, with an assistant that both operates it and briefs the consultant.

In productionFinancial services

One platform, three academies

A CRM and a training platform in one product, running for three organisations across financial advice, insurance, banking and legal. Their consultants train inside it — video, documents, resources — and work the pipeline in the same place: lead through to client, then post-sale tracking built so cross-selling has somewhere to start from. It also carries the presentation deck a consultant walks a client through, writing their financial snapshot straight into the CRM as the meeting happens.

It isn't three products. It's one template, cloned three times — which is an advantage right up until a clone arrives quietly missing fourteen columns and the client tells you the numbers aren't saving.

Then there's language: three locales, one of them Greek, around 3,600 keys. The untranslated-string detector reported zero while half the deck was still in Spanish, because it was validating the dictionary and not the code. The fix wasn't reviewing harder. It was a gate — a lint rule that errors on literal strings, and a parity check that blocks the commit when the three locales drift apart.

An AI assistant sits on top with two jobs: operating the platform, and coaching the consultant before a client meeting. Built once, shipped three times. That's the point, not a caveat.

React 19 · Vite · TypeScript strict · Supabase (Postgres + RLS + Edge Functions) · TanStack Query · Tailwind + shadcn/ui · n8n · i18n es/en/el · PWA · Vercel

In developmentInsurance

Voice agent for an insurance and financial advisory firm

A voice agent that answers the phone, qualifies the caller and books into a calendar. Currently in development — a phone call gives you no time to recover from a mistake, so the work right now is in the failure paths, not the happy one.

Retell · n8n · WhatsApp Business API

Notes from production

Context persistence failure mode: a silent tool failure announced as success and written into conversation history.

What production taught me

An agent will lie to itself across turns if you only persist what it said.

A tool failed silently in one of my systems. The model announced success anyway. That announcement was written into conversation history, and on the next turn the model read its own fiction as fact and acted on it.

The fix was persisting the tool execution log into the context alongside the assistant message, so the agent's memory holds what happened instead of what it claimed happened. That failure mode is invisible until it isn't.

Coverage map: process automation, the AI layer and the web application underneath, owned end to end by one person.

One person instead of three suppliers

Agents need somewhere to live. I build the layer they sit on as well as the agent itself: process automation with n8n, the AI layer, and the web application underneath.

Discovery, architecture, build, deploy and handover, owned end to end. No coordination tax, no handoffs.

I came to this from industrial engineering, an MBA and years in financial consulting. I start from the business process, not the model.

15 hours
recovered weekly for one client
7
systems in production — 3 agents, 4 platforms
~10 days
from brief to production, real-time community wall

Have something like this in mind?

Tell me what your business is losing time on and I will tell you if it can be automated.