Hijama Business
A trilingual booking site (English, Bangla, Arabic) for a Hijama and massage business in East London.
What this is
A booking website for a Hijama (cupping therapy) and massage business in East London. The pages read in English, Bangla, or Arabic. Booking and payment sit in the same flow. The operator side is a small dashboard for managing bookings and content. In active build; not deployed yet.
How it’s put together
The site runs on Next.js with TypeScript on the front, Postgres in Frankfurt for the data, Stripe for payment, and a transactional email provider with EU residency for confirmations and reminders. Marketing pages are static so they stay fast on mobile; the booking flow is server-rendered so prices and slots are never stale. The operator avoids storing passwords by signing in with a magic link plus a one-time code, which keeps the heavier security plumbing out of a one-person clinic’s scope.
What I learned building it
A few things stand out from this build rather than the usual list of frameworks.
Translation isn’t the hard part of multilingual; layout is. Arabic is right-to-left, so the page mirrors. Icons point the wrong way, padding switches sides, text alignment flips. Almost every internationalisation bug I hit was about how the layout reads in a mirror, not about how the words read in a different language. I learned to write the components once and let the locale decide the direction, instead of forking layouts per language.
Content should live outside the code. Translation strings sit in flat files a non-developer can edit. Anyone in the family who runs the clinic can change a service description without needing me, a build step, or a deploy. That decision was load-bearing for handover: a website nobody but the original developer can update isn’t really finished.
Privacy on a small clinic site is mostly about defaults. The exact address is revealed in the booking confirmation email after payment, not on the public pages. The card form is hosted on Stripe’s domain so card details never touch the server. These aren’t clever decisions, they’re the boring defaults you have to actually choose.
Status
Mid-build. The live link goes here once deployed.