Proposals answered within 2 business days
All case studies
SaaSVideoPerformance

Video menu platform for restaurants with HLS streaming and QR codes

Client: In-house product: a restaurant menu SaaSIndustry: Hospitality16 September 2026
Results
menu server response time, about 3 times shorter than the compared provider
57-77 ms
weight of a menu with 146 photos after automatic optimisation
16.4 → 6.0 MB
database restore from backup on a test cluster
2 min

Challenge

Restaurants usually have a PDF menu or a QR code leading to a list of items. We wanted every dish to have a short, looping video that loads quickly even on a weak signal at the table.

Video for many restaurants means heavy transfer, a risk of data leaking between venues and media delivery costs that easily get out of hand.

Approach

For video we chose a specialised CDN, because the standard plans of popular CDNs exclude this kind of use, and our own delivery network would be too expensive to maintain. We tested both options on a phone over 4G: the times were identical, so cost and terms of service decided.

Files are kept in object storage with no egress fees. Video paths are versioned and immutable, so updating a dish does not require manual cache purging.

Implementation

A worker transcodes each video to HLS in three quality levels (1080p, 720p, 480p) with two-second segments, and photos to four WebP sizes with a placeholder thumbnail. Restaurant data is isolated by a second layer in the database (RLS), checked with queries: venue A sees its own data, venue B sees nothing, and writes to other venues' data are rejected.

An early security audit found three critical problems, including open registration and the possibility of privilege escalation. All were fixed. The database has a full backup every night and continuous change logging with 30-day retention.

Results

The menu server responds in 57-77 ms, while the compared provider needed 186 ms in the same measurement. A menu with 146 photos weighs 6.0 MB instead of 16.4 MB on high-density screens and 2.7 MB on the others. 207 photos were processed in 3 minutes, with no errors.

Restore test: a temporary cluster came up in about 2 minutes with data consistent with production. The storage migration covered 1,450 objects without changing a single address.

How it is built

Architecture
Monorepo (Turborepo): Next.js serves the public menu, the panel and the API, while a separate worker processes media. PostgreSQL on CloudNativePG through Prisma, BullMQ queues on Redis.
Video
ffmpeg transcodes to HLS in three qualities (1080p, 720p, 480p) with 2 s segments and a poster. Paths are versioned and immutable, so the CDN needs no manual purging. Playback through hls.js.
Images
sharp generates WebP in four widths and a placeholder thumbnail (LQIP), and the browser picks the size that fits the screen.
Delivery
Files in Cloudflare R2, with no egress fees. Video through a specialised CDN, the application behind Cloudflare. Original files are blocked by a WAF rule.
Data isolation
Row Level Security with a separate database role without superuser privileges and with RLS enforced. Code runs in the context of a specific restaurant, and cross-tenant operations go through an explicitly marked path.
Performance and backups
Public menu cache, dish availability changes pushed live (SSE over Redis). Full database backup every night and continuous WAL to R2 with 30-day retention, with restore verified in practice.

Technologies

  • Next.js
  • React
  • Prisma
  • PostgreSQL
  • BullMQ
  • Redis
  • ffmpeg
  • HLS
  • sharp
  • Cloudflare R2
  • Bunny CDN
  • Kubernetes
Case studies

More case studies

Real estate

AI sales assistant platform for property developers, powered by live inventory

A chat on the developer’s website answers questions about available flats and prices using live data. In a test of 106 scenarios, the number of answers containing invented facts fell to zero.

View case study
Education and personal development

AI coach on WhatsApp with participant memory and handover to humans

A thirty-day programme run as a WhatsApp conversation, with the author’s knowledge base and a memory of each participant. AI resolved 92% of cases without human involvement, and difficult conversations went to the coaches.

View case study
Real estate

Sales and after-sales system for a developer, with 3D walkthroughs built from floor plans

An offer generator with open tracking, a defects dashboard with the statutory 14-day deadline, complaints with a phone line, and 360° walkthroughs generated automatically from floor plans for 81 of 82 flats.

View case study
Healthcare

Health app taken over, with a new product catalogue and 47 languages

We took over the app from the previous contractor: an audit, security and payment fixes, a new product search and localisation into 47 languages, without stopping sales.

View case study
Real estate

Automated system for statutory reporting of flat prices to dane.gov.pl

An audit of 612 files against the act and the ministry template, a fix to the generator at the source, and automatic upload of 409 overdue resources to a portal that has no write API.

View case study
Construction

Public tender analytics platform with a competitor relationship graph

The application combines data from the Public Procurement Bulletin, KRS, GUS and the VAT White List. It shows who is bidding, at what price and how they are connected, instead of manual searching before every tender.

View case study
Technology

Kubernetes platform with GitOps and image signing for 32 applications

We are moving several dozen applications from a single server to a Kubernetes cluster with Git-based deployments, a security policy and backups whose restoration we check every week.

View case study
Media

AI short-video factory with human approval in a mobile web app

Script, illustrations, voiceover, subtitles and render in a single pipeline. A person approves every episode in a phone app, and publishing runs in scheduled slots.

View case study
Customer service

Voice AI assistant for a helpline, with a custom audio pipeline for Polish

A phone line where the caller talks to an AI. We rebuilt the whole audio path so that conversation in Polish flows, and the system detects the end of an utterance by meaning, not by silence.

View case study
Pharma

Analytics dashboard for a group of e-prescription online shops, with no patient data

The dashboard collects orders from many shops in real time, while patients' personal data never leaves the shops. Privacy by design from the first version.

View case study