As I've mentioned in previous post, OffChain Luxembourg has begun rolling out the "Innopay" brand, powered by HBD payments. What does that mean in practice I'll explain in this post:
Labour is extremely expensive in Luxembourg, who sports the highest "minimum salary" in the EU. High salaries for the staff jeopardize the profitability of low-margin businesses such as restaurants, especially since, unlike in the US:
there is no tipping culture in Europe, the waiters are supposed to be paid by the owner and get very few tips
social protections are good and the less scrupulous staff doesn't shy away from stretching it with generous sick days and absences.
Big, mid-market restaurants (Indie's has 70 tables between the main room, the terrace and the upper floor) need to not only fill as many tables as possible, but also to keep customers happy and not waiting too long for a waiter to show up.
The combination of these two factors make an automatic "self order-and-pay" particularly interesting in its case: customers take a seat and, provided they are enrolled in Innopay, open their phone's camera and read a QR-code for the drink and /or dish they want to order.
Here's how that would look outside on the terrace at the back where customers might otherwise feel a bit stranded, as they are at the mercy of a waiter remembering to come take their orders.
The main development is a Vercel+Neon DB server-side app that polls the public HAF_SQL database every 5s looking for transfers to @indies.cafe and checking their memo.
When one such transfer is found, it gets displayed in a very basic web interface that can be accessed at indies.innopay.lu from the laptop that is always open behind the bar's counter, and a "doorbell" sound is also emitted.
I developed this with Grok. But despite the application being rather simple, doing "back-and-forth"-s between Grok and VS Code became unwieldy.
So I installed Cursor to try it out (everybody is raving about Cursor) and fired it up and asked it to explain the project. I thought it would be helpful to display here Cursor's analysis of the project:
I'll explore the project structure and key files to provide you with a comprehensive summary of this project.
Read file: package.json Read file: README.md Read file: app/page.tsx Read file: app/page.tsx Read file: app/api/poll-hbd/route.ts Read file: app/api/fulfill/route.ts Read file: lib/db.ts Ran tool Read file: menu/qrcodegen.ts Based on my exploration of the project, here's a comprehensive summary of the IndiesMenu project:
Project Overview
IndiesMenu is a Next.js-based restaurant order management system designed for a café called "Indies Cafe" that accepts cryptocurrency payments through the Hive blockchain. The system monitors HBD (Hive Backed Dollar) transfers and manages customer orders in real-time.
Key Features
🍽️ Order Management System
Real-time order monitoring: Polls the Hive blockchain every 5 seconds for new HBD transfers to
@indies.cafe
Order fulfillment tracking: Staff can mark orders as fulfilled, removing them from the pending queue
Table assignment: Orders are automatically parsed to identify table numbers from memo fields
Order timing: Tracks when orders were received and highlights late orders (>10 minutes)
🔊 Audio Notifications
Sound alerts: Plays doorbell and chime sounds when new orders arrive
Audio unlock: Requires user interaction to enable audio (browser security requirement)
Toast notifications: Visual pop-up notifications for new orders with order details
💰 Cryptocurrency Integration
Hive blockchain integration: Monitors HBD transfers using HAF (Hive Application Framework)
Payment processing: Accepts HBD payments with order details in transaction memos
QR code generation: Separate menu system generates QR codes for easy payment
Technical Architecture
Frontend (Next.js 15)
React 19 with TypeScript
Tailwind CSS for styling
React Toastify for notifications
Real-time polling with 5-second intervals
Backend APIs
/api/poll-hbd
: Fetches new HBD transfers from HAF and stores them in database
/api/fulfill
: Marks orders as fulfilled in the database
/api/haf-test
: Testing endpoint for HAF integrationDatabase Layer
PostgreSQL (Neon database) for production
SQLite (better-sqlite3) for local development
Transfer tracking: Stores order details, fulfillment status, and timestamps
External Integrations
HAF (Hive Application Framework): Queries blockchain for HBD transfers
Hive blockchain: Monitors transfers to
@indies.cafe
accountProject Structure
indiesmenu/ ├── app/ # Next.js app directory │ ├── api/ # API routes │ │ ├── poll-hbd/ # HBD transfer polling │ │ ├── fulfill/ # Order fulfillment │ │ └── haf-test/ # HAF testing │ ├── page.tsx # Main order dashboard │ └── layout.tsx # App layout ├── lib/ │ └── db.ts # Database configuration ├── menu/ # QR code generation system │ ├── qrcodegen.ts # QR code generator │ └── innologo-71x47.png # Logo for QR codes └── public/sounds/ # Audio notification files
Use Case
This system is designed for a café that:
Accepts crypto payments via Hive blockchain
Needs real-time order management for staff
Wants automated notifications for new orders
Requires order fulfillment tracking to manage workflow
The system essentially bridges the gap between cryptocurrency payments and traditional restaurant operations, providing a seamless experience for both customers (who can pay with crypto) and staff (who get real-time order notifications and management tools).
What I plan next:
a customer-facing web interface for Innopay users to be able to choose anything from both the drinks and the food menus of (any) restaurant
a payment interface to on-board new users to Innopay
a smartphone app that simplifies things for the normies.
Let me know in the comments if reading this emboldens you to make Innopay yours too and deploy it in Germany (Aachen: @detlev , elsewhere @uwelang ) or anywhere else ( @meno , @jga )