About Hanbo
Updated 2026-07-29
Hanbo (หารบ่) helps you split bills fairly, share them with friends, and generate PromptPay QR codes. It supports Service Charge / VAT, receipt OCR, push notifications (FCM), and optional accounts so your bills follow you across devices.
Live: bill.dolity.me
Version 3.0 is built with Nuxt 4, Vue 3, Tailwind CSS v4, DaisyUI v5, and deployed on Cloudflare via NuxtHub and D1.
What's new in 3.0
- Optional accounts — Sign in with email/password or Google (Better Auth). Guest bills created on a device are automatically claimed after login.
- Normalized database — Bills, members, items, payments, guest sessions, and push tokens in a relational D1 schema (Drizzle ORM).
- Payment records — Dedicated
paymentstable with slip verification and status lifecycle (pending/verified/rejected). - Redesigned marketing home — Modular landing sections (hero, how-it-works, features, FAQ, guides).
- SEO platform — Sitemap, robots, Schema.org, canonical URLs, and locale-prefixed routes (
/th/…,/en/…). - Legal & trust pages — About, Contact, Terms, and Privacy with shared layout components.
- Phased production migrations — Scripts to upgrade legacy D1 data safely.
- Developer tooling — Biome, Vitest, and structured D1 backup/validate scripts.
Features
Bill creation & splitting
- Single-page bill editor for name, items, members, optional Service Charge/VAT, and PromptPay
- Receipt OCR: photo or upload → client-side compression → Gemini API to extract items, VAT, and service charge
- Members: add, edit, remove; link PromptPay; assign payer and participants per item
- Member templates to save and reuse groups (per device or logged-in user)
- Thai-first presets for restaurant, bar/drinks, trip, and utilities
- Smart input shortcuts and settlement with downloadable PromptPay QR codes
Sharing & notifications
- Share links at
/bill/share/[id](redirects to locale-prefixed URL) - Guest identity: visitors pick their member slot; persisted via visitor token
- FCM push reminders for unpaid members (Thai/English by locale)
- Share templates with optional “Powered by Hanbo” credit line
- Share-page CTA to create your own bill
Accounts (optional)
- Guest-first: no login required; a device cookie (
hanbo_device_id) owns guest bills - Login / register with email + password or Google OAuth
- Auto-claim: after sign-in, guest bills and templates attach to the authenticated user
- Cross-device sync for logged-in users
Analytics, guides & UX
- Analytics dashboard with spend summary, trends, and insights
- SEO-friendly Thai-focused guides (fair splitting, meals, drinks, trips)
- “How Hanbo calculates” transparency on the home page
- Thai (default) and English i18n with locale prefix strategy
- Light / Dark themes (DaisyUI), mobile-first layout, optional Google Analytics
Tech stack
| Layer | Technology |
|---|---|
| Framework | Nuxt 4, Vue 3, Vue Router 5 |
| Language | TypeScript |
| Styling | Tailwind CSS v4, DaisyUI v5 |
| State | Pinia |
| Auth | Better Auth |
| Backend | NuxtHub, Nitro, server routes |
| Database | Drizzle ORM, Cloudflare D1 |
| Deploy | Cloudflare Workers/Pages, Wrangler |
| SEO / i18n | @nuxtjs/seo, @nuxtjs/i18n |
| Notifications | Firebase Cloud Messaging (FCM) |
| OCR | Google Gemini API |
| Other | @nuxt/icon, @nuxt/image, qrcode / PromptPay helpers |
Main routes
| Route | Description |
|---|---|
/ |
Marketing landing page |
/bill |
My bills list |
/bill/create |
Create / edit bill |
/bill/[id] |
Host bill detail (payment tracker, reminders, QR) |
/bill/share/[id] |
Guest read-only share view |
/analytics |
Expense analytics |
/login |
Sign in / register |
/guides/* |
SEO guide articles |
/about, /contact, /terms, /privacy |
Legal & info pages |
User-facing routes are locale-prefixed (/th/…, /en/…).
API overview
| Method | Path | Purpose |
|---|---|---|
| GET/POST | /api/bills |
List / create bills |
| GET/PATCH/DELETE | /api/bills/[id] |
Bill detail / update / delete |
| POST | /api/bills/claim |
Claim guest bills after login |
| GET | /api/bills/share/[id] |
Shared bill payload |
| GET/POST | /api/bills/share/[id]/identity |
Guest member identity |
| POST | /api/bills/share/[id]/register-push |
Register FCM token |
| POST | /api/bills/[id]/notify |
Send payment reminder |
| POST | /api/ocr/receipt |
Receipt OCR via Gemini |
| POST | /api/verify-slip |
Record verified payment slip |
| GET/POST | /api/templates |
Member template CRUD |
| DELETE | /api/templates/[id] |
Delete template |
Data & migrations
Hanbo 3.0 uses a normalized D1 schema. Upgrades from older production databases use phased migration scripts with validation and backup helpers. Fresh installs use Drizzle migrations under the server database folder.
License
MIT — Dolity
Support our work
If these apps help you, you can buy us a coffee.
Buy me a coffeeOpens in a new tab