DesignDevelopmentBackendIntegrationsMaintenance
03
Food Ordering

Pizzeria Bestek

Replaced a third-party ordering platform with a fully-owned custom build for a Croatian coastal pizzeria — zero fees, four languages, email-driven admin.

See live website

Introduction

Pizzeria Bestek is a custom ordering and delivery platform I built for a family-run pizzeria in Biograd na Moru on the Croatian coast. The restaurant replaced a third-party platform that had been taking fees and constraining their brand. The new system is fully owned by the restaurant — every credential, every table, every email template handed over on delivery. It has been running since September 2025 and handles five to ten orders per day, seven days a week.

Background

I came to this project through a local contact — the owner knew me personally and had been looking for a way to leave their existing platform, reataumatica.com. That platform charged fees, didn't localize well for their tourist traffic, and didn't feel like their brand. We agreed on a fixed-price custom build with full asset handover: the restaurant would own the codebase, the Supabase account, the Netlify deployment, and the Resend account.

Biograd na Moru is a coastal tourist town. The restaurant serves locals year-round and tourists every summer. They needed a site that spoke Croatian by default, English for most tourists, German for the large German summer crowd, and Italian for Italian visitors. They needed to handle pickup and delivery, to validate delivery addresses against their actual service zone, and to run the admin workflow without the kitchen staff having to stare at a dashboard.

The Challenge

Email-driven admin workflow. The owner runs the kitchen. They're not going to log into an admin panel every time an order comes in. The workflow had to be "open email, click CONFIRM or DECLINE, get back to work."

Four-language localization with branching email templates. Not just UI strings — validation messages, email subjects, email bodies, decline reasons, date and time formats all had to localize consistently across Croatian, English, German, and Italian. The decline templates for pickup orders and delivery orders are different, because the alternatives to suggest to the customer are different (if pickup is declined, suggest delivery; if delivery is declined, suggest pickup; if both are declined because of timing, give the phone number).

Delivery zone validation before submission, not after. Biograd na Moru has specific delivery boundaries. The worst customer experience is "submit order → wait → decline email because you're out of zone." The validation had to happen at the address input, inline, before the customer submits.

Pickup time picker that respects kitchen reality. The pizzeria's prep time is a rolling window. Customers shouldn't be able to pick "in 5 minutes" (too fast for the kitchen) or "in 90 minutes" (too far out, the kitchen doesn't pre-plan that).

Zero-fee handover. The restaurant had to own everything on delivery — Supabase, Netlify, Resend credentials, domain, codebase. No vendor lock-in, no recurring fees beyond what the infrastructure itself costs.

Our Solution

Three Supabase Edge Functions orchestrate the whole admin flow. send-order-emails fires two emails when a customer places an order: one to the customer (confirmation with pending status) and one to the admin (new order with direct action buttons). admin-order-response is what the CONFIRM and DECLINE buttons hit — it updates the order status, stores the confirmed time or decline reason, and automatically emails the customer with the result in their language. send-email handles the separate contact-form channel.

Localized email templates with per-channel branching. Every email template has four language variants. Pickup decline and delivery decline use different templates because the suggested alternative is different. The customer's selected language is stored on the order record and picked up by the response flow.

In-zone address validation at input. The delivery address field validates against the known Biograd na Moru delivery boundary in real time. Out-of-zone addresses are rejected before submission with a clear message explaining why. In-zone addresses continue through to checkout.

Rolling pickup time window. The time picker only shows slots between 15 and 45 minutes from the current moment — never less, never more. Kitchen prep time is respected; long-range guesses aren't allowed.

Owned infrastructure handover. Supabase Postgres with Row-Level Security on all tables; admin accounts with password hashing and active/inactive flags; CORS properly configured on edge functions; environment variable isolation between client-visible VITE_* and server-only secrets. Every credential transferred to the client on launch.

Outcome

Pizzeria Bestek went live in September 2025 and has been running continuously since — five to ten orders per day, seven days a week, closed only for Easter, Christmas, and New Year. The October 2025 maintenance pass fixed every reported issue. The restaurant owns every credential and pays zero platform fees on orders — each order is 100% revenue instead of ~70% after aggregator commission.

The project was delivered at a fixed price with a clean asset handover. I maintain the system ad-hoc on goodwill when something needs attention, but there's no monthly retainer running.

Conclusion

Small-business ordering platforms don't need to be SaaS. Sometimes the right move is a clean custom build, handed over on delivery, with no vendor lock-in and no platform fees. Pizzeria Bestek is that pattern — fixed-price, four-language, email-driven, fully owned by the restaurant.

More live work

More live work