All apps

Hanbo

Choose a page for Hanbo.

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 payments table 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 coffee

Opens in a new tab