# Cafe' internet voucher management system

**URL:** <https://onehack.st/t/cafe-internet-voucher-management-system/325825>\
**Category:** Discussion & Solutions\
**Tags:** help\
**Created:** [Setembro 20, 2026, 10:06am UTC](https://onehack.st/t/cafe-internet-voucher-management-system/325825 "2026-09-20T10:06:14Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Wantok](https://onehack.st/user_avatar/onehack.st/wantok/32/24960_2.png) [@Wantok](https://onehack.st/u/Wantok)\
**Post date:** [Setembro 20, 2026, 10:06am UTC](https://onehack.st/t/cafe-internet-voucher-management-system/325825/1 "2026-09-20T10:06:14Z")

</div>

Hi onehackers,  
Looking for free solutions here regarding wifi voucher management system.  
I have a starlink mini kit and a UniFi AC Pro Access Point. The intention is to provide internet access via a voucher-based wifi access. My problem is I do not know which tool is best suited for my use-case. I’m actually looking for free open-source voucher-based wifi access management system that I can use at my cafe’.  
If we have some expert who’s willing to suggest solutions, kindly provide your input.  
Thanks in advance.

---

<div class="post-metadata">

**Author:** ![WhiteHat](https://onehack.st/user_avatar/onehack.st/whitehat/32/162514_2.png) [@WhiteHat](https://onehack.st/u/WhiteHat)\
**Post date:** [Setembro 23, 2026, 9:59am UTC](https://onehack.st/t/cafe-internet-voucher-management-system/325825/2 "2026-09-23T09:59:36Z")

</div>

### Your cafe already owns the voucher system — it is inside the UniFi app you have not switched on yet 🎫

The free UniFi app does vouchers, and no gateway has to be bought — the access point does the work on its own.

```auto
   Starlink Mini ──► UniFi AC Pro ──► guest types a code
    routes the cafe runs the hotspot the free app prints the codes

```

**Four moves and your cafe has vouchers**

1. Run the free **UniFi Network Application** on anything that stays switched on
2. **Settings → WiFi → your SSID → Hotspot Portal** on
3. **Hotspot → Vouchers** — mint a batch, and set the time, data and speed each code gets
4. Print them for the counter, or let the API sell them while you make coffee

**Four moves, nothing to buy.** Below: the same job on other hardware, and how the vouchers earn money.

_Poll ([view on site](https://onehack.st/t/cafe-internet-voucher-management-system/325825/2))_

> **📶 The free route — switch on what you already own**
>
> | Step | What to do |
> | --- | --- |
> | 1 | Run the free **UniFi Network Application** somewhere that stays on. Self-hosting today means **UniFi OS Server** — Ubuntu 24.04+ or Debian 13+, podman 4.9.3+, 2 GB RAM, and captive portals now serve on port **8444** — [help.ui.com/34210126298775-Self-Hosting-UniFi](https://help.ui.com/hc/en-us/articles/34210126298775-Self-Hosting-UniFi) |
> | 2 | Older route that still works: the Windows/macOS/Linux installer with Java 8 and the bundled database, on [https://localhost:8443](https://localhost:8443) — [help.ui.com/360012282453-Self-Hosting-a-UniFi-Network-Se](https://help.ui.com/hc/en-us/articles/360012282453-Self-Hosting-a-UniFi-Network-Server) |
> | 3 | In the app: **Settings → WiFi → your SSID → enable Hotspot Portal → Captive Portal** — [help.ui.com/115000166827-UniFi-Hotspots-and-Captive-Port](https://help.ui.com/hc/en-us/articles/115000166827-UniFi-Hotspots-and-Captive-Portals) |
> | 4 | Brand it at **Insights → Hotspot → Landing Page** , then mint vouchers under **Hotspot → Vouchers** |
> | 5 | No gateway needed — Ubiquiti’s community answer: the hotspot and captive portal run **in the individual APs** — [community.ui.com/9dce6ff7-cc45-44fd-9d16-0a11d7800eef](https://community.ui.com/questions/Guest-portal-voucher-without-USG/9dce6ff7-cc45-44fd-9d16-0a11d7800eef) |
> 
> Every voucher carries four limits, all free, all set when you mint it — [developer.ui.com/getvouchers](https://developer.ui.com/network/v10.3.58/getvouchers):
> 
> | Field | What it controls |
> | --- | --- |
> | `timeLimitMinutes` | How long the code lives, in minutes |
> | `dataUsageLimitMBytes` | The data cap |
> | `rxRateLimitKbps` / `txRateLimitKbps` | Upload and download speed per voucher |
> | `authorizedGuestLimit` | One device or several on the same code |
> 
> **Three known faults and their fixes**
> 
> | Gotcha | What to do |
> | --- | --- |
> | Network **9.4.11+** broke the voucher redirect when the SSID is also flagged as an isolated “Guest Network” | Leave the isolated-guest flag off on the voucher SSID |
> | Network **10.0.160** removed the **Add Voucher** button for the non-admin Hotspot Manager role | Mint vouchers as an admin |
> | Very large rolls hit a print ceiling near **3000** vouchers | Print in batches rather than one giant roll |
> 
> **The controller runs 24/7.** The APs keep running on their last config without it, and no new codes get issued — [help.ui.com/360012282453-Self-Hosting-a-UniFi-Network-Se](https://help.ui.com/hc/en-us/articles/360012282453-Self-Hosting-a-UniFi-Network-Server).

> **🖥️ The other free stacks — your own box doing the portal**
>
> **Boxes that issue real voucher codes** , not only a splash page:
> 
> | Project | What it does |
> | --- | --- |
> | [github.com/nhAsif/luci-app-ndsvoucher](https://github.com/nhAsif/luci-app-ndsvoucher) | RoseNet Access Portal — a self-contained Go voucher system for OpenWrt with its own LuCI interface and prebuilt packages, updated September 2025. No coding, no separate database |
> | [github.com/openNDS](https://github.com/openNDS) | The openNDS project’s community `theme_voucher` gives OpenWrt real vouchers — a `vouchers.txt` file, strict validation and a QR code on the ticket |
> | [opennds.readthedocs.io](https://opennds.readthedocs.io/) | openNDS itself, the active OpenWrt captive portal (v11, GPL). It has **no voucher engine of its own** — the voucher comes from the theme or a script, so the two lines above matter |
> | [github.com/nodogsplash](https://github.com/nodogsplash) | NoDogSplash v5.0.2 — the simplest splash portal there is, with a BinAuth hook where you bolt your own voucher check on |
> | [docs.opnsense.org](https://docs.opnsense.org/) | OPNsense Captive Portal — voucher manager with validity windows, an API to mint and expire codes, and CSV export you merge into a Word or LibreOffice sheet for branded printouts |
> | [docs.netgate.com/pfsense](https://docs.netgate.com/pfsense/) | pfSense CE vouchers — cryptographically generated rolls, 0–1023 per roll, minutes per roll, CSV export, and **no RADIUS server needed** |
> 
> **OPNsense and pfSense need a small x86 box with two or three network ports.** This route costs hardware; the UniFi route costs nothing.
> 
> **The full stack — one ledger behind every code**
> 
> | Project | What it gives you |
> | --- | --- |
> | [github.com/lirantal/daloradius](https://github.com/lirantal/daloradius) | daloRADIUS 2.3, released May 2026 — the classic web face on FreeRADIUS: users, batch creation, accounting and billing |
> | [github.com/RADIUSdesk/rdcore](https://github.com/RADIUSdesk/rdcore) | RADIUSdesk — generates **memorable two-word vouchers** instead of random strings, sets per-device bandwidth, and serves its own captive login pages |
> | [github.com/openwisp/openwisp-radius](https://github.com/openwisp/openwisp-radius) | OpenWISP RADIUS — Django admin plus a REST API, code generation, CSV import, and captive login pages you configure rather than write |
> | [github.com/giorgioladu/Rabind](https://github.com/giorgioladu/Rabind) | Rabind v0.6.0, May 2026, AGPL — a small PHP panel for FreeRADIUS with voucher creation and live sessions, sized for one cafe rather than one campus |
> | [github.com/Kupiki/Kupiki-Hotspot-Admin-Install](https://github.com/Kupiki/Kupiki-Hotspot-Admin-Install) | The documented single-Raspberry-Pi build: CoovaChilli, FreeRADIUS and daloRADIUS installed by one script — this is the whole stack on hardware you may already own |

> **💰 Turn it into a till — sell vouchers with nobody at the counter**
>
> **The customer pays, the code arrives, nobody stands at the counter.**
> 
> ```auto
> guest pays ──► payment webhook ──► UniFi API mints the code ──► code arrives
> cash Stripe Telegram
> card Paystack · M-Pesa email · QR
> 
> ```
> 
> | Piece | The free tool |
> | --- | --- |
> | 🔑 Mint the code automatically | [developer.ui.com/getvouchers](https://developer.ui.com/network/v10.3.58/getvouchers) — the official UniFi Network API creates and lists vouchers, so your own script can return a code the moment money lands |
> | 💳 Payment to code | [github.com/hotspotbilling/phpnuxbill](https://github.com/hotspotbilling/phpnuxbill) — GPLv2, the most complete free billing-and-print stack, with gateway plugins and a FreeRADIUS path |
> | 📦 Payment to session, containerised | [github.com/mhdhaidarah/samm-docker](https://github.com/mhdhaidarah/samm-docker) — one compose file running FreeRADIUS, PostgreSQL and a FastAPI service where Stripe or PayPal webhooks become live sessions |
> | 📱 Mobile money, end to end | [github.com/mwakidenis/miktrotik-hotspot-billing](https://github.com/mwakidenis/miktrotik-hotspot-billing) — the M-Pesa STK push pattern wired to a hotspot, which is the shape any regional mobile-money wallet follows |
> | 🪙 Take cash with zero fees | [github.com/kleo/unipi](https://github.com/kleo/unipi) — a Raspberry Pi with a coin slot and buttons that vends UniFi vouchers. No processor, no percentage, no internet payment rail at all |
> | ✈ Sell inside Telegram | [github.com/animegasan/mikbotam](https://github.com/animegasan/mikbotam) — a Telegram bot that sells vouchers and delivers the code in chat |
> | 💬 Sell over WhatsApp | [github.com/rmyndharis/OPENWA](https://github.com/rmyndharis/OPENWA) — a self-hosted WhatsApp HTTP gateway, so your own number is the storefront — [africastalking.com/sms](https://africastalking.com/sms) adds SMS and USSD for customers without data |
> | 📧 Vouchers by email | [brevo.com/free-smtp-server](https://www.brevo.com/free-smtp-server/) — a free SMTP relay at 300 emails a day, which is more than a cafe sends |
> | 🔳 A QR on every ticket | [github.com/heuer/segno](https://github.com/heuer/segno) — a pure-Python QR encoder with no dependencies, so every code can carry its own scannable square |
> | 🖨 Print 42 to a sheet | [github.com/kleo/koffe](https://github.com/kleo/koffe) — UniFi vouchers laid out 42 to a page for a paper cutter, printed straight from Chromium to PDF |
> | 🧾 Print to a receipt roll | [github.com/glenndehaan/unifi-voucher-site](https://github.com/glenndehaan/unifi-voucher-site) — 306 stars, with 80 mm thermal and ESC/POS bulk printing plus automatic email |
> | 🏧 A kiosk that dispenses codes | [github.com/etiennecollin/unifi-voucher-manager](https://github.com/etiennecollin/unifi-voucher-manager) — MIT, updated July 2026 — batch up to 1000 vouchers, QR printing, purge expired, and a touch-friendly reception view |
> | 🔌 Print with no drivers at all | [github.com/Fransuelton/escpos-direct](https://github.com/Fransuelton/escpos-direct) — the browser talks ESC/POS straight to the USB printer, so there is no CUPS and no driver to install |
> 
> **Cash vending, zero fees:** a Raspberry Pi, a coin acceptor and a script. No processor, no chargebacks, and no internet needed for the sale.
> 
> **Two facts about the money**
> 
> | Note | Why |
> | --- | --- |
> | Stripe, Paystack, Flutterwave and M-Pesa charge per transaction, never monthly — [docs.stripe.com/webhooks](https://docs.stripe.com/webhooks) and [paystack.com/docs/payments/webhooks](https://paystack.com/docs/payments/webhooks) | The software is free; the rail takes a cut only when money moves |
> | Your Starlink is behind **CGNAT** , so nothing outside can reach a webhook on your Pi — [starlink.com/ac09301b-cef6-a125-c251-856196a77f92](https://starlink.com/mh/support/article/ac09301b-cef6-a125-c251-856196a77f92) | Point the webhook at a free tunnel on the Pi, and the money still lands |

> **🔌 Make it real — wiring, speed tiers, one-device lock, watching it**
>
> | Fact | What it means for you |
> | --- | --- |
> | The Mini **has a built-in Wi-Fi 5 router and one latching Ethernet LAN port** — [starlink.com/specification\_sheet\_mini](https://starlink.com/public-files/specification_sheet_mini.pdf) | It can route the cafe alone, up to 128 devices. It has **no portal and no vouchers** , which is why the AP does that job |
> | To wire it out, remove the Starlink Plug and use the official Mini Ethernet cable or your own RJ45 — [starlink.com/installation\_guide\_mini\_kit](https://starlink.com/public-files/installation_guide_mini_kit.pdf) | This is the physical link to the AC Pro. A plain RJ45 gives up the IP67 rating outdoors, so keep the run inside |
> | **Bypass mode** disables the Mini’s Wi-Fi completely and needs a factory reset to undo — [starlink.com/a0fe8d51-32f7-d2b9-d74a-801e31ad9f6a](https://starlink.com/support/article/a0fe8d51-32f7-d2b9-d74a-801e31ad9f6a) | Use it only when a separate router takes over. Otherwise stay in router mode and let the Mini keep DHCP and NAT |
> | **Double NAT** is the trap when you add the AP — [starlink.com/afa36fff-1070-80b2-be96-eb6f78ef13be](https://starlink.com/gu/support/article/afa36fff-1070-80b2-be96-eb6f78ef13be) | One router only. Let the Mini route and the AP simply serve |
> | **CGNAT blocks all inbound ports** , there are no static IPs, and Residential plans cap at **1,200 concurrent sessions** — [starlink.com/bb372afe-7dd4-ae54-a2af-29cf63d24ddf](https://starlink.com/na/support/article/bb372afe-7dd4-ae54-a2af-29cf63d24ddf) | Your portal works fine on the LAN. Remote access to it, or a webhook, needs an outbound tunnel instead of port forwarding |
> | The AC Pro takes **802.3af/at, 9 W max** , and the single pack **already includes the 48 V PoE adapter** — [techspecs.ui.com/uap-ac-pro](https://techspecs.ui.com/unifi/wifi/uap-ac-pro) | Nothing to buy for power. A 24 V passive injector will not work, and the second port is bridging only |
> | Around **70 clients** is the practical comfort zone per AC Pro against a 250+ headline figure — [community.ui.com/31288a8e-4c6a-46df-9e4c-b572700a2c2a](https://community.ui.com/questions/31288a8e-4c6a-46df-9e4c-b572700a2c2a) | A cafe of 20–50 browsing guests is well inside capacity. The uplink is the real ceiling, not the AP |
> | Total load is roughly **35–50 W** , and the Mini runs −30 °C to +50 °C | A 600 W UPS gives about an hour of uptime, and a plain ceiling gap matters in a hot kitchen — [pimylifeup.com/raspberry-pi-nut-server](https://pimylifeup.com/raspberry-pi-nut-server/) |
> 
> | Want | The free answer |
> | --- | --- |
> | “1 hour at 5 Mbps” versus “1 day at 20 Mbps” | Set `rxRateLimitKbps` and `txRateLimitKbps` on the voucher itself. On plain Linux the same job is [openwrt.org/sqm](https://openwrt.org/docs/guide-user/network/traffic-shaping/sqm), which shapes fairly even on a busy Starlink link |
> | Ready-made Bronze, Silver and Gold tiers | [mikrotikdocs.fyi/htb-isp-tiered-bandwidth](https://mikrotikdocs.fyi/ip/firewall/queues/htb-isp-tiered-bandwidth/) publishes a tiered queue tree you can copy into MikroTik or translate to CAKE |
> | One voucher, one device | FreeRADIUS **Simultaneous-Use** — the official tutorial sets exactly one session per user — [freeradius.org/documentation](https://freeradius.org/documentation/freeradius-server/3.2.11/tutorials/simultaneous_use.html) |
> | Lock a UniFi voucher to a MAC | [github.com/maravento/uhm](https://github.com/maravento/uhm) — UniFi Hotspot Manager, GPLv3: a Linux manager that wraps a self-hosted UniFi hotspot with DHCP, ACLs and firewall rules, so access is pinned at the network layer with no RADIUS deployment |
> | See who is online and what they used | [github.com/Maizil41/RadiusMonitor](https://github.com/Maizil41/RadiusMonitor) — MIT, active into 2026: active users, per-user usage and income worked out from the accounting data |
> | Uptime and per-port usage on the uplink | [librenms.org](https://www.librenms.org/) auto-discovers the AP and graphs it, and [help.ui.com/33502980942615-SNMP-Monitoring-in-UniFi-Netw](https://help.ui.com/hc/en-us/articles/33502980942615-SNMP-Monitoring-in-UniFi-Network) shows how to turn SNMP on for it |
> | Sold-versus-used at the end of the day | [github.com/amolood/phpnuxbill-users-data-usage-plugin](https://github.com/amolood/phpnuxbill-users-data-usage-plugin) turns FreeRADIUS accounting into a per-user usage CSV — the reconciliation is a spreadsheet, not a guess |
> 
> **Ticket states**
> 
> ```auto
> created ──► printed ──► sold ──► in use ──► used up
> 
> ```
> 
> — [truecafe.net/doc/tickets.html](https://truecafe.net/doc/tickets.html)
> 
> | Diagnosis | The free check |
> | --- | --- |
> | Is it actually CGNAT? | Compare the WAN address with the public address — a **100.64.0.0/10** address means CGNAT |
> | AP not adopting | It must share a layer-2 network with the controller with TCP 8080 reachable; the fallback address is **192.168.1.20** and WiFiman finds it — [help.ui.com/360012622613-UniFi-Device-Adoption](https://help.ui.com/hc/en-us/articles/360012622613-UniFi-Device-Adoption) |
> | PoE trouble | **Solid amber** means healthy and waiting to be adopted, not a fault — [help.ui.com/204910134-Understanding-Device-LED-Status-In](https://help.ui.com/hc/en-us/articles/204910134-Understanding-Device-LED-Status-Indicators) |
> 
> **Free monitoring for the link**
> 
> | Tool | What it shows |
> | --- | --- |
> | [github.com/danopstech/starlink](https://github.com/danopstech/starlink) | A docker-compose stack that scrapes the dish itself into Prometheus and Grafana — uptime, latency, throughput and data used, in one command |
> | [grafana.com/24517-starlink](https://grafana.com/grafana/dashboards/24517-starlink/) | The ready-made Starlink dashboard for that exporter, so the graphs are done before you install anything |
> | [github.com/faeton/dishwatch](https://github.com/faeton/dishwatch) | One Go binary, no server: ping, drop, throughput and **dish power draw** in the terminal |
> | [github.com/louislam/uptime-kuma](https://github.com/louislam/uptime-kuma) | Uptime and latency alerts for the link and the AP, with a status page you can show customers |
> | [pimylifeup.com/raspberry-pi-nut-server](https://pimylifeup.com/raspberry-pi-nut-server/) | NUT, the free Network UPS Tools, so a power cut tells you instead of simply closing the cafe |

Switch on the hotspot in the UniFi app, mint a voucher, print a sheet — then let the API sell the next one while the coffee gets made. 🎫

---

<div class="post-metadata">

**Author:** ![BCBC](https://onehack.st/user_avatar/onehack.st/bcbc/32/180083_2.png) [@BCBC](https://onehack.st/u/BCBC)\
**Post date:** [Setembro 23, 2026, 5:48pm UTC](https://onehack.st/t/cafe-internet-voucher-management-system/325825/3 "2026-09-23T17:48:32Z")

</div>

That is a shitload of VERY GOOD information. AWESOME!!! Thank you Lucifer!!!

---

<div class="post-metadata">

**Author:** ![Wantok](https://onehack.st/user_avatar/onehack.st/wantok/32/24960_2.png) [@Wantok](https://onehack.st/u/Wantok)\
**Post date:** [Setembro 24, 2026, 10:58am UTC](https://onehack.st/t/cafe-internet-voucher-management-system/325825/4 "2026-09-24T10:58:44Z")

</div>

Thanks for much for this tone of info. Really helpful 👍
