Azis Abdul Bachar

Jul – Oct 2026 · Live at yourspace.co.id · Private repository

YourSpace

A single-provider booking platform for a mental health practice in the Indonesian market. Customers book services and events; the practice runs everything from an admin panel.

  • 156commits between 14 July and 17 October 2026
  • 3parts: backend, marketing site, docs
  • 56database migrations, each with an up and a down
  • 21features specified as PRDs before building

What is in it

  • Public booking flow with a service catalog, per-service staff mapping and ordering, business hours with multiple ranges, and blocked dates
  • Admin panel with staff roles and permissions
  • Events with registration modes, custom fields, public and private visibility, check-in and staff commission
  • Payment links and payment methods
  • Vouchers and commissions with payout tracking
  • A finance ledger with audit logs
  • WhatsApp message templates with automatic sending, and web push notifications
  • Reschedule links for customers and direct rescheduling by the admin
  • Customer list with filters and export
  • First-party analytics: visitor attribution and a booking funnel from landing page to confirmed booking
  • Installable PWA branding and local-time display for visitors

The parts

PartStackWhat it does
booking-appGo, Chi, Templ, sqlx, PostgreSQLThe main backend: public booking flow, admin panel, event booking and check-in, payment links, and the public content API. About 310 Go files, 55 test files and 56 database migrations.
landing-pageNext.js 15, React 19, Tailwind 4The marketing site. It renders content the practice authors in the admin panel, fetched from the backend and revalidated every minute, so there is no separate CMS.
docs and localMarkdown, Traefik42 documents in 21 dated feature folders, each with a PRD and task list. A Traefik setup mirrors production subdomain routing for local development.

How the backend is organised

Every feature follows one layering: entity, use case, repository, controller. Each use case lives in its own package with a narrow interface for only the repository methods it calls, controllers depend on use-case interfaces and never on repositories, and all dependency wiring happens in a single file. Validation errors accumulate per form field, every error path is logged, and tests use hand-written fakes beside the code.

Features are written up first: each dated folder under docs/ holds a PRD with the problem, scope and decisions, and a task list.

In use

  • 375bookings created since mid-July: 126 appointments and 249 event registrations, cancellations included
  • 88appointments completed
  • 17events scheduled, from 24 July to 8 November
  • 85event check-ins
  • 17k+first-party analytics events recorded across the booking funnel