Case study · OrdiniaFallstudie · Ordinia
A production platform, built end to end by one developer. Eine Produktionsplattform, komplett gebaut von einem Entwickler.
Ordinia is a multi-tenant ordering platform for small Italian food businesses: each one gets its own branded web shop, WhatsApp order flow, catering pre-orders and payments. I designed, built, deployed and operated all of it, from the database schema to the servers. Ordinia ist eine mandantenfähige Bestellplattform für kleine italienische Lebensmittelbetriebe: Jeder Betrieb bekommt einen eigenen Webshop, Bestellabwicklung über WhatsApp, Catering-Vorbestellungen und Zahlungen. Ich habe alles konzipiert, entwickelt, deployt und betrieben, vom Datenbankschema bis zu den Servern.
The problemDas Problem
Small food shops lose margin to marketplaces and hours to WhatsApp.Kleine Lebensmittelbetriebe verlieren Marge an Plattformen und Stunden an WhatsApp.
Delis, gastronomie and caterers in Italy take most orders by phone and WhatsApp, by hand, or pay commission to delivery marketplaces. Ordinia gives each business its own shop on its own domain, takes orders and pre-orders, notifies the customer on WhatsApp, and keeps the menu and Google Business Profile in sync, without the owner learning new software.
Feinkostläden, Gastronomien und Caterer in Italien nehmen die meisten Bestellungen per Telefon und WhatsApp entgegen, von Hand, oder zahlen Provision an Lieferplattformen. Ordinia gibt jedem Betrieb einen eigenen Shop unter eigener Domain, nimmt Bestellungen und Vorbestellungen an, benachrichtigt Kunden über WhatsApp und hält Speisekarte und Google-Unternehmensprofil synchron, ohne dass der Inhaber neue Software lernen muss.
What I builtWas ich gebaut habe
Frontend, backend, infrastructure and AI, in one codebase.Frontend, Backend, Infrastruktur und KI, in einer Codebasis.
Multi-tenant platformMandantenfähige Plattform
One schema per tenant with row-level security in Postgres, a wildcard subdomain per shop plus custom domains, and an onboarding flow that provisions the database and deploys the container through an API.
Ein Schema pro Mandant mit Row-Level-Security in Postgres, eine Subdomain pro Shop plus eigene Domains, und ein Onboarding, das Datenbank und Container automatisch über eine API bereitstellt.
Backend & web appsBackend & Web-Apps
A TypeScript backend organised in domain modules (orders, catalog, catering, pre-orders, billing, customers), a Next.js storefront and admin, and SvelteKit for the marketing site and the platform console.
Ein TypeScript-Backend in fachlichen Modulen (Bestellungen, Katalog, Catering, Vorbestellungen, Abrechnung, Kunden), ein Next.js-Shop mit Admin-Bereich und SvelteKit für Marketing-Website und Plattform-Konsole.
IntegrationsIntegrationen
WhatsApp Business messaging with approved templates, Google Business Profile through a per-tenant encrypted OAuth vault, Stripe for subscriptions and payments, and signed webhooks for automated imports.
WhatsApp-Business-Nachrichten mit freigegebenen Vorlagen, Google-Unternehmensprofil über einen verschlüsselten OAuth-Tresor pro Mandant, Stripe für Abos und Zahlungen sowie signierte Webhooks für automatische Importe.
AI featuresKI-Funktionen
Menu import from a photo, generated dish details and AI dish images, behind a provider-agnostic router that picks the cheapest model good enough for each job, with generation running on a Postgres-native job queue.
Menü-Import aus einem Foto, generierte Gerichtdetails und KI-Bilder, hinter einem anbieterunabhängigen Router, der für jede Aufgabe das günstigste ausreichende Modell wählt, mit einer Postgres-basierten Job-Queue.
Infrastructure & deliveryInfrastruktur & Delivery
Docker on ARM servers at Hetzner, Traefik routing, GitHub Actions CI. Each image is built once, soaked on staging, then promoted byte-identical to production. No hand-deploys.
Docker auf ARM-Servern bei Hetzner, Traefik-Routing, CI mit GitHub Actions. Jedes Image wird einmal gebaut, auf Staging getestet und dann bitgenau in Produktion übernommen. Keine manuellen Deployments.
Observability & complianceObservability & Compliance
OpenTelemetry traces and metrics into Grafana with alerting, structured logs with correlation IDs, an audit trail, and GDPR flows such as consent tracking and customer data erasure.
OpenTelemetry-Traces und -Metriken in Grafana mit Alerting, strukturierte Logs mit Korrelations-IDs, ein Audit-Trail und DSGVO-Abläufe wie Einwilligungsverwaltung und Löschung von Kundendaten.
How I workWie ich arbeite
Fast, but with an engineering trail you can follow.Schnell, aber mit nachvollziehbarer Engineering-Dokumentation.
- Decisions are written downEntscheidungen werden dokumentiertEach significant choice gets a short ADR: context, options, decision. Your team can see why the code looks the way it does.Jede wichtige Entscheidung bekommt ein kurzes ADR: Kontext, Optionen, Entscheidung. Ihr Team sieht, warum der Code so aussieht, wie er aussieht.
- Small pull requests, tested in CIKleine Pull Requests, in der CI getestetChanges ship in reviewable slices with tests, through staging before production.Änderungen kommen in überprüfbaren Schritten mit Tests, über Staging vor der Produktion.
- AI agents, with guardrailsKI-Agenten, mit klaren LeitplankenI use AI coding agents to move faster, inside the same rules: ADRs, tests, CI and review. That's how one developer shipped 1,600+ PRs in seven months.Ich setze KI-Coding-Agenten ein, um schneller zu liefern, innerhalb derselben Regeln: ADRs, Tests, CI und Review. So hat ein Entwickler über 1.600 PRs in sieben Monaten geliefert.
- Your stack, your processIhr Stack, Ihr ProzessI adapt to your repo, conventions and tools. Italy-based, same time zone as DACH, reachable during your working day.Ich passe mich Ihrem Repository, Ihren Konventionen und Tools an. Sitz in Italien, gleiche Zeitzone wie DACH, während Ihrer Arbeitszeit erreichbar.
The honest outcomeDas ehrliche Ergebnis
Technically, it works: Ordinia runs in production, with a live shop on its own custom domain.
Technisch funktioniert es: Ordinia läuft in Produktion, mit einem Live-Shop unter eigener Domain.
Commercially, it didn't take off. I built ahead of demand. The lesson I take into client work: validate with the people who pay before scaling the build, and keep the scope tied to what moves the business.
Wirtschaftlich hat es nicht abgehoben. Ich habe vor der Nachfrage gebaut. Die Lektion für meine Kundenarbeit: zuerst mit den zahlenden Nutzern validieren, dann ausbauen, und den Umfang an dem ausrichten, was das Geschäft voranbringt.
For agenciesFür Agenturen
Short on developers this month? I can take the overflow.Diesen Monat zu wenig Entwickler? Ich übernehme die Projektspitzen.
Frontend, backend, DevOps or LLM features, as a contractor, under your brand. The easiest start is one small, paid task, so you can judge the work before committing to more.
Frontend, Backend, DevOps oder LLM-Funktionen, als Freelancer, unter Ihrer Marke. Der einfachste Einstieg ist eine kleine, bezahlte Aufgabe, damit Sie die Arbeit beurteilen können, bevor Sie mehr vergeben.
Email meE-Mail schreiben → ciao@ordinia.net