Costhub

Costhub

web · Technical Lead Sep 2025 – Sep 2026

From September 2025 to September 2026 I was the Technical Lead of Costhub, a cost management platform for restaurant and hospitality groups, built for a client. The part we delivered is the admin environment: the place where the operators of each business enter and check the data that a separate customer-facing app then turns into daily figures.

It covers turnover, payroll and labour cost as separate KPIs, invoices with automatic price suggestions, a shared registry of suppliers and products, and food cost and inventory audits. The food cost audit calculates recipe cost to the cent and expands nested batch recipes into their real ingredients, so the cost of a dish matches what the kitchen uses. Access is controlled per store and per module, with view and edit rights and a store admin role, and that model was migrated on the live system.

Costhub monthly analytics: profit and loss, net profit and cost ratio, food cost, payroll and prime cost KPIs

Monthly KPIs, as shown on the Costhub site.

The panel works in Greek and English, has a dark mode and installs as a progressive web app.

Architecture

The FastAPI backend and the Next.js frontend (React 19, Tailwind, on Vercel) are separate deployments, and the frontend's API types are generated from the FastAPI OpenAPI schema instead of being written by hand. The API runs on Railway with PostgreSQL and Alembic migrations. Longer jobs go through Redis to Celery workers outside the request, so the panel stays responsive while they run, and Celery Beat schedules the nightly ones. Email goes out through SendGrid and uploaded invoices and images are stored on Bunny.

Costhub: the Next.js admin calls FastAPI, which uses Supabase Auth, PostgreSQL, SendGrid, Bunny, and Redis as the broker for Celery workers Costhub: the Next.js admin calls FastAPI, which uses Supabase Auth, PostgreSQL, SendGrid, Bunny, and Redis as the broker for Celery workers

The admin panel, the API and its workers.

Sign-in goes through the API to Supabase Auth, which keeps passwords out of our own code, and the API enforces the per-store permissions on top of it. Work was delivered in paired milestones, each one an API change and the matching UI change, reviewed together.

See the full project at mycosthub.com.