01Context
What this was
UBCRM started from operating a bar, not from guessing at hospitality software. Customer data, schedules, loyalty, and owner reporting were scattered across memory, notes, and disconnected tools. The product was built as a bachelor thesis around a simple idea: small venues deserve operational software without enterprise ERP weight.
02Problem
What was broken
Before
Bars often run POS, spreadsheets, DMs, and paper loyalty in parallel-no single operational source of truth.
What had to change
Peak service needs quick lookups, role-appropriate access, and staff coordination that does not break when the venue is busy.
- 01Fragmented tooling and inconsistent loyalty
- 02No unified view of customers, staff, inventory, and campaigns
- 03Limited analytics for staffing, stock, and retention
The goal was a two-panel product: an admin/employee hub and a customer-facing loyalty experience-secure, real-time, and tablet-first.
03Solution
What I built
Next.js 14 and TypeScript for the product interface, with interactive sections where service workflows need fast feedback.
Supabase for Postgres, Auth, Realtime, Storage, and RLS so venue and role boundaries are enforced in the database.
Domain modules cover CRM profiles, bookings, staff schedules, inventory signals, loyalty rules, and owner analytics built around the pace of a real venue.
04Decisions
Key implementation decisions
- 01
Row-level security as the security backbone
Staff vs customer vs venue isolation enforced in Postgres-not only in UI-to reduce bypass risk.
- 02
Denormalization for peak-hour reads
Visit counts and last-visit stamps on customer rows to avoid heavy joins during service.
- 03
Realtime with resilient client hooks
Channels reconnect cleanly; optimistic UI for bookings and loyalty where latency hurts UX.
- 04
Materialized analytics paths
Hourly aggregates for dashboards to keep tablets responsive without scanning raw events every view.
05Impact
Operational impact
- Owners replace multiple disconnected tools with one operational hub.
- Staff recognize regulars faster with structured profiles and visit history.
- Inventory and booking signals reduce stockouts and double-booking friction.
- Customers engage through transparent loyalty instead of passive stamp cards.
06Results
Results
- End-to-end thesis-grade system demonstrating ERP-like value at SMB complexity.
- Real-time coordination patterns suitable for noisy, high-touch service floors.
- Security model aligned to multi-tenant venue data.
- Tablet-first UX with touch targets and flows tuned for on-floor use.
07Stack
Technology stack
- Frontend
- Next.js 14 (App Router), TypeScript, Tailwind CSS, shadcn/ui, Lucide React
- Backend
- Supabase (PostgreSQL, Auth, Realtime, Storage), RLS policies, Edge Functions
- Quality
- ESLint, Jest, React Testing Library
- Hosting
- Vercel + Supabase Cloud
