Selected work
A short list rather than a long one. Client work first, described by what it changed, with the client named where they agreed to it. Then the tools we built and run in public, which you can press instead of reading about. The proposals are kept apart from both and labelled, because a thing we would build is not a thing we have built.
- 2025 · Nutrition practiceFlutter, Firestore
The practice that stopped selling appointments
A nutrition practice could only grow by adding appointments to a week that was already full. We built the patient app and the admin panel that let one practitioner supervise many clients continuously instead, and the client base grew by 150%.
- 2026 · Wholesale distributionNext.js, TypeScript
The catalogue that builds itself, and the invoices behind it
A seller between producers and buyers was spending most of the week rebuilding catalogues, writing the same outreach by hand and typing invoices out of orders. We built the portal that does all four from the same data, so the week goes on selling instead.
- 2025 · Wholesale and distributionPython, Claude API
The supplier invoice queue, read once by a machineOur own tool
Somebody in accounts opens a few hundred PDFs a month and retypes seven fields out of each one. The expensive part is not the typing - it is the transposed ΑΦΜ that nobody catches until ΑΑΔΕ does. This is the queue that reads them and refuses to guess.
- 2026 · HospitalityNext.js, TypeScript
The booking engine that knows about SaturdaysOur own tool
The OTAs take 15 to 18% headline, and up to 30% once the visibility programmes stack. This is the booking engine that wins back the guests who already knew your name - including the stays a template refuses and an OTA happily takes.
- 2025 · Restaurant groupNext.js, TypeScript
Scheduling against tables instead of coversOur own tool
A widget that counts covers will seat two people at a six-top on a Friday, then refuse a party of eight that two adjacent tables would have taken. Both are decided at the moment of booking, which makes them the software's job. This is the allocator that makes them properly.
- 2026 · Dry bulk shippingNext.js, TypeScript
The estimator, with a name against every assumptionOur own tool
When a fixture goes badly the only question worth asking is which assumption was wrong, and a workbook four people emailed around cannot answer it. This is the estimator that can, with a name and a timestamp against every number in it.
- 2025 · Diagnostic imagingNext.js, TypeScript
The scanner is the bottleneck, not the doctorOur own tool
Your practice software gives every doctor a calendar, but the thing you run out of is the scanner - and an unsold scanner hour cannot be sold later. This is the scheduler that books against the machine, and refills a cancellation from the waitlist without anyone phoning a list.
What we can build
Five systems we have specified and not built, one per sector. They are here because the fastest way to find out whether we understand your work is to read us describing somebody else's and tell us where we are wrong.
- Customer supportPython, pgvector
A support assistant that cites where it got thatProposal
A Greek-language assistant answering from a company's own documentation and past tickets, with a citation on every answer and a hard rule about what it does when it does not know.
- Short-term rentalsNext.js, Postgres
Sixty units, one changeover SaturdayProposal
The back office for a managed villa portfolio - owner statements, changeover logistics, access codes and the compliance paperwork each booking generates.
- Restaurant groupNext.js, Flutter
The repeat customer who should not arrive via a platformProposal
An own-channel ordering and booking site for a group, issuing compliant myDATA receipts, with delivery-platform orders landing in the same kitchen queue rather than on a fourth tablet.
- Ship managementNext.js, Postgres
The expiry nobody saw is the detention nobody plannedProposal
A crew and certificate register whose entire value is in what it escalates, and to whom, before a Port State Control inspector finds it first.
- Multi-site clinicsNext.js, Postgres
Three legal entities, one price list, no reconciliation nightProposal
Billing across several entities and insurers, transmitting into myDATA through a certified provider, with the service and VAT mapping treated as the actual project.