Consignment Wine Management & Automated Billing Platform
A three-portal platform managing the full consignment lifecycle — from wine inventory and QR-coded bottle tracking, through automated restaurant billing and delivery verification, to consignor invoicing and granular role-based access control.
Client
Wine Banq
Product
Multi-Portal Operations & Billing Platform
Service
Product Engineering
Engagement
Custom Platform Build & VPS Deployment
Client Overview
Wine Banq is an Australian business supplying rare, back-vintage wines to fine dining restaurants, luxury hotels, and exclusive wine clubs on a consignment model. Restaurants pay only when a bottle is sold — eliminating upfront capital risk. Wine Banq sources bottles from private collectors (consignors), curates personalised wine lists per venue, and manages all logistics, deliveries, and payments in between.
Operations were managed manually — inventory tracked in spreadsheets, deliveries coordinated by hand, billing calculated and chased individually per restaurant, and consignor payouts worked out separately. As the portfolio and number of restaurant partners grew, this approach became unsustainable and error-prone.
Build a unified platform covering the entire Wine Banq operation: inventory management, bottle assignment and delivery, QR-coded bottle sale confirmation, automated restaurant billing with multiple modes, consignor invoicing, complaint handling, deep audit trails, and a granular role-based access system — all across three distinct user portals.
Problem & Challenges
Business Problems
- Inventory, deliveries, and sales tracked manually with no central system or audit trail
- Restaurant billing calculated and chased manually — no automated charge engine
- No way to enforce that restaurants could only sell bottles actually delivered to them
- Consignor payouts calculated separately with no link to recorded sales data
- No structured complaint resolution process when bottles arrived damaged or incorrect
Technical Challenges
- QR code generation per bottle with delivery-gated activation — sales blocked until delivery is confirmed
- Three-mode automated billing engine (daily, weekly, threshold) running via server cron job at midnight
- Stripe card-on-file charging for restaurants with admin and self-service card management
- Granular per-user, per-module RBAC — view, edit, and write permissions configurable independently
- PDF invoice and statement generation for both restaurants and consignors, plus full VPS deployment with SSL, Caddy, and cron configuration
Objectives & Success Criteria
Our Objectives
Success Criteria
Centralise Inventory
Single system for all wine stock with three price tiers per bottle: cost, Wine Banq, and restaurant price
Success Criteria
Delivery Enforcement Live
System prevents sales above confirmed delivered quantity — zero overselling possible
QR-Gated Sales
Generate a unique QR code per bottle — sales only possible on bottles confirmed as delivered
Billing Engine Operational
Cron job running at midnight, automatically charging restaurants based on their billing setting
Automate Restaurant Billing
Charge restaurants automatically based on their billing mode: daily, weekly, or threshold
Three Portals Functional
Admin, Restaurant, and Consignor portals all live with role-appropriate data and actions
Consignor Invoicing
Track sold bottles per consignor, generate invoices, and manage payouts from within the platform
Complaint Workflow Active
Complaints raised by restaurants reach admin for review, with automated credit on approval
Granular Access Control
Per-user, per-module permissions with view, edit, and write levels independently configurable
Full Audit Trail
Every bottle action — assigned, delivered, sold, updated, deleted — logged with timestamp and actor
Our Solution
We built a Next.js 15 platform on a Hostinger VPS with Caddy as the reverse proxy and SSL. Three portals — Admin, Restaurant, and Consignor — share a MongoDB database behind a custom JWT authentication layer, with per-user, per-module permissions enforced at API level. Each bottle gets a system-generated QR code; scanning it hits a public endpoint that the restaurant confirms, logging the sale. A server-side cron job fires at midnight, loops through all restaurants, reads their billing setting, calculates unbilled sales, and charges their Stripe card on file. Consignor invoices are generated as PDFs via @react-pdf/renderer based on recorded sales. A full audit log tracks every state change per bottle, and a complaint system routes issues to admin for credit resolution.
Wine Inventory Management
Full CRUD for bottles with cost price, Wine Banq price, and restaurant price per bottle
Bottle Assignment & Delivery
Assign bottles to restaurants with quantity control; delivery confirmation with authorised signature unlocks QR codes for those bottles only
QR Code Sale System
Unique QR generated per bottle, printed and placed on bottle; customer scan triggers endpoint for restaurant to confirm sale
Automated Billing Engine
Midnight cron job charges restaurants via Stripe based on their billing mode: daily, weekly, or threshold-triggered
PDF Invoicing & Statements
Auto-generate PDF invoices and statements for both restaurants and consignors based on recorded sales data
Granular RBAC
Per-user permissions at view, edit, and write level per module — configurable independently down to individual data fields
Implementation & Delivery
Scope of Work
Vantagon delivered the complete platform — architecture, all three portals, backend API, MongoDB schema, Stripe billing integration, QR code system, PDF invoicing, and full VPS deployment including Caddy reverse proxy configuration, SSL certificates, and server-side cron job setup.
- Three-portal Next.js 15 application — Admin, Restaurant, and Consignor
- Custom JWT authentication with bcryptjs password hashing
- Wine inventory system with three-tier pricing per bottle
- QR code generation per bottle with delivery-gated sale activation
- Bottle assignment and delivery confirmation with authorised signature capture
- Three-mode automated billing engine — daily, weekly, and threshold
- Midnight server cron job for automated restaurant Stripe card charging
- Stripe integration with admin and self-service card management
- PDF invoice and statement generation for both restaurants and consignors via @react-pdf/renderer
- Complaint system with admin approval and automated restaurant credit
- Granular per-user, per-module RBAC with view, edit, and write permission levels
- Full audit log for every bottle state change
- Analytics dashboard with revenue, sales, complaints, top-selling bottles, and custom date filters
- Hostinger VPS deployment with Caddy reverse proxy, SSL certificates, and server cron configuration
- Cloudinary integration for bottle image management
- Resend email integration for billing confirmations and complaint updates
QR Sale System Live
Unique QR codes generating per bottle and sale confirmation endpoint active from day one
Delivery Enforcement Working
Sales correctly blocked above confirmed delivered quantity — overselling architecturally impossible
Billing Engine Operational
Midnight cron charging restaurants automatically via Stripe based on their configured billing mode
Three Portals Launched
Admin, Restaurant, and Consignor portals live simultaneously with full role-appropriate functionality
Full VPS Deployment
Caddy reverse proxy, SSL, and cron job configured and running on Hostinger VPS — complete infrastructure delivered
Technology Stack
Results & Impact
Wine Banq now runs its entire consignment operation through a single platform. Restaurant billing that was previously calculated and chased manually now runs automatically every night. Every bottle is tracked from assignment through delivery, sale, and consignor payout — with a full audit trail and zero possibility of overselling.
300+
Wine Bottles in System
3 Portals
User Roles
3
Automated Billing Modes
Fully Automated
Manual Billing Tasks
Evolution & Long-Term Value
With the full operation now running through the platform, Wine Banq has complete visibility into every bottle from the moment it enters inventory to the moment a consignor is paid. The billing engine runs without intervention, and the audit trail has already helped resolve disputes that would previously have required manual reconciliation. Upcoming features include automated consignor payouts via Stripe Connect and an expanded analytics module with per-consignor and per-restaurant profitability breakdowns.