All case studies

Operations · Event rentals

Bibow Playground booking platform

A mobile-first booking site and admin panel for an inflatable playground rental business: customers book from their phone, pay a fee by GCash or BDO, and the team verifies and confirms in one place.

Role
Full-stack web developer
Period
September–November 2026
Status
Live
Read the detailed case study
Bibow admin overview showing new requests, confirmed bookings, and recent bookings
Bibow admin overview showing new requests, confirmed bookings, and recent bookings

01 / The context

What needed to change

Bibow Playground Rentals took bookings through Messenger conversations. Dates, venue details, payment screenshots, and follow-ups lived in chat threads, and customers could not see which dates were open. The business also needed a website that Google could find, since searches for the brand only surfaced its social pages.

Working within real constraints

Most customers book from a phone, often inside Messenger, on mobile data. Payments are manual (GCash and BDO), so the flow had to support receipts without a card gateway. Hosting costs had to stay low, and staff are not technical, so each change shipped with a short illustrated guide.

02 / Workflow in focus

From a phone booking to a confirmed date

  1. The customer picks a package, an open date and time, their contact details, the inflatable, and optional venue photos.
  2. They send the request and receive a private booking link and a booking image to keep. They can pay the fee now or later from that link.
  3. They pay the booking fee by GCash or BDO and attach a screenshot of the receipt.
  4. The team compares the proof with their account, verifies it, and moves the booking to Confirmed. The customer sees the new status on the same link.

03 / Implementation

What I built

  • Built a five-step booking form with live availability, promos applied automatically, and a quote of the known charges.
  • Added private booking links so customers can return, check status, or pay later without refilling the form.
  • Let customers attach up to five venue photos, shrunk on the phone before upload and deleted 30 days after the event.
  • Built an admin panel with calendar, table, and Kanban booking views, payment-proof review, inventory photos, promotions, and payment settings.
  • Added an elevator handling fee, a selectable end time with paid extra hours, and a turnaround buffer between events that customers never see.
  • Prepared the site for search with a sitemap, structured business details, a link preview image, and an owner checklist for Google Search Console and Business Profile.

04 / Delivered capabilities

What the system enables

  • Requests, venue photos, and payment proof sit on one booking record instead of across chat threads.
  • Customers see only open dates and start times, so double-booking depends less on manual checks.
  • Payment verification is a deliberate step: staff review the proof, then confirm.
  • Unpaid requests expire each morning, venue photos clear themselves, and every upload is stored as a small image.
  • The site installs as an app on a phone and is live at bibow-playground.com.

Tools & technologies

  • Svelte 5
  • TypeScript
  • Hono
  • Cloudflare Workers
  • Cloudflare D1
  • Cloudflare R2
  • Drizzle ORM
  • Zod
  • better-auth
  • Turnstile
  • PWA
Technical implementation

A Svelte 5 single-page app and a Hono API run as one Cloudflare deployment. Static pages are served as assets and only /api/* invokes the Worker. D1 holds bookings, inventory, and settings through Drizzle; R2 holds images, with D1 keeping metadata only. Admins sign in with better-auth, customer links use HMAC-derived tokens whose hashes are stored, Turnstile guards the booking form, and one daily cron expires stale requests. Queries are bounded, pages are capped, and booking requests carry an idempotency key so a network retry never creates a second booking.

A useful place to start

What is slowing your
business down?

Tell me about the workflow, the friction, and what a better version would look like.

Schedule a call