← All projects

Gotera

Client
Gotera
Industry
Subscription food commerce
Year
2026

A subscription service delivering real injera, made and packed in Ethiopia, to doors in London. Recurring plans, delivery scheduling and a customer account, with the whole storefront managed from its own dashboard.

Gotera subscription plans admin

23

Tables behind plans, deliveries and accounts

2

Countries in one fulfilment flow

1

Dashboard for plans, content and customers

What it covers

  • Subscription plans
  • Recurring billing
  • Delivery scheduling
  • Customer accounts
  • Allergen & product information
  • Content dashboard
  • FAQ management

A subscription is not a shop

A one-off order ends at checkout. A subscription has to survive months of changes: a plan upgrade, a paused month, a new address, a failed payment, a delivery window that no longer suits. Gotera is built around the recurring relationship rather than the single transaction.

Plans, deliveries and the gap between them

A plan is what somebody pays for. A delivery is what actually arrives. Keeping them as separate concerns means a skipped week does not corrupt the billing history, and a billing change does not silently rewrite what is already scheduled.

Made in one country, delivered in another

The product is made and packed in Ethiopia and delivered in London, so the site carries provenance as content rather than as marketing decoration: what teff is, how the injera is fermented, and why that matters to somebody ordering from abroad.

How it was built

Svelte
TypeScript
MySQL
Drizzle
Framework

SvelteKit

Server load functions, form actions and endpoints; SSR by default.

Svelte 5

Runes for reactivity ($state, $derived, $effect).

Language

TypeScript

Strict mode across app and server code.

Data

MySQL

Primary datastore.

Drizzle Kit

Committed SQL migrations rather than push-to-prod diffing.

Drizzle ORM

Typed schema and queries, with migrations generated from the schema.

Auth

Better Auth

Session-based auth with server-side verification.

Forms

Superforms

Progressive-enhancement forms with server-side validation.

Zod

One schema validating both client and server.

UI

Tipex

Rich-text editor for CMS content.

TanStack Table

Sorting, filtering and pagination for admin tables.

Bits UI

Headless primitives behind the component library.

Chart.js

Reporting charts.

Dark mode

System-aware theme switching.

Lucide

Icon set.

Tailwind CSS

Utility-first styling with a project design token layer.

Reporting

jsPDF

Server-side PDF generation for reports and receipts.

jsPDF AutoTable

Tabular report export.

Payments

Stripe

Card payments.

i18n

Paraglide i18n

Compiled translations, English and Amharic.

Infrastructure

Client image compression

Uploads compressed in the browser before hitting the server.

Nodemailer

Transactional email over SMTP.

Inside the system

Gotera subscription plans admin
Plans are data with a kind, a price and a sort order, so a one-off order and a recurring subscription are the same table with different behaviour.
Gotera injera subscription home page
The storefront leads with provenance, because the product is a familiar food arriving from far away.
Gotera subscription plan selection
Plan selection is the checkout: the recurring commitment is the product, not a cart of items.
Back to all projects