01
Doctor schedules go stale fast
Every schedule change needs a developer and a wait, while patients show up on outdated info.
Family Clinic Website & Admin Panel
A one-page website for a family clinic, with a lightweight admin panel so the owner can update doctor schedules and service info themselves — without waiting on a developer for routine changes.

Klinik Cahaya Medika is an illustrative case study / internal template used to demonstrate an end-to-end process — from planning documents to technical implementation. It is not presented as a client project.
Project Overview
Klinik Cahaya Medika explores how a small family clinic can have a website that stays accurate, without making the owner depend on a developer for routine updates.
9 Screens
5 Admin Endpoints
1 Admin Role
01 / Problem
Doctor schedules, service info, and open/closed status often live apart from the website — in the owner's head, in a WhatsApp group, or in notes that never get updated.
01
Every schedule change needs a developer and a wait, while patients show up on outdated info.
02
Services or prices that change on the ground aren't automatically reflected on the website.
03
Without a clear open/closed status, staff field calls just to confirm today's hours.
04
When data is wrong, it's unclear who changed what and when — hard to trace, harder to fix quickly.
02 / Solution
Public visitors get information that stays accurate; the clinic owner gets full control to keep it that way — without needing to understand code.
03 / Screens
The public pages are designed to be understood fast by prospective patients; the admin panel is designed to be operated fast by a clinic owner who isn't an IT person.

Clinic identity, real-time open/closed status, and a WhatsApp CTA visible without scrolling.

Trust numbers (since 2015, 500+ patients) and a summary of featured services.

Doctor cards with weekly practice hours — sourced from the exact same data the admin edits.

Today's operating hours, address, and an embedded map.

A focused login screen — the only door into the control panel.

Open/closed status, 4 core modules, and a “Recent Activity” log on one screen.

A Monday–Sunday table with a live public-preview panel on the right.

Name, description, and a per-service toggle to show it on the homepage.

Photo upload, name, and specialty — no developer involved.

A full audit log: who changed what, and when.
Every edit screen (schedule, services, doctor profile) has a “Public Preview” panel on the right — the admin sees exactly how the change will look on the homepage before pressing save.
Layout, the schedule table, and admin navigation cards are tested at three core breakpoints, mobile-first.
04 / Features
Every feature answers one specific operational problem, not just a visual add-on.
Status is calculated automatically from doctor schedules — shown in the hero and footer, never stale.
The primary channel to reach patients, matching a communication habit already familiar in Indonesia.
Every edit screen shows the actual public view before the admin presses save.
Edit schedules, services, and doctor profiles straight from the browser — no code involved.
Profile photos are stored safely in object storage with a size limit, no manual developer step.
Every data change is logged automatically as an audit trail — who, what, and when.
05 / Design Approach
Every color, radius, and typeface traces back to one source document — consistent across every screen, and easy to justify.
Nakhoda
#151D18
Cahaya
#497F5D
CTA WhatsApp
#1E9E5A
Latar
#F5FAF6
Jaga (Open)
#67BB6B
Senja (Closed)
#9C7A5B
Signature element
The “Indikator Cahaya” — a light dot with a soft, breathing halo for open/closed status, designed specifically for this clinic's identity rather than a generic traffic-light badge.
Minimum WCAG AA 4.5:1, with extra care above the Cahaya color.
Minimum 44×44px for every interactive element.
A consistent 16px across cards, buttons, and inputs — deliberately not a fully organic shape.
06 / Development Approach
Every layer follows the same contract, with Row Level Security as the primary authorization layer — not just an application-level check.
Layer 01
Public pages, admin forms, the schedule table, and real-time preview.
Next.js 15 / App Router / Tailwind
Layer 02
Thin Route Handlers: validation, admin guard, then call the service.
Route Handlers / Zod / requireAdmin()
Layer 03
Row Level Security as the primary authorization layer, atomic writes via RPC.
Supabase Postgres / RLS / RPC
Layer 04
An explicit region for Indonesian users, on-demand revalidation.
Vercel (sin1) / Supabase SG
07 / What This Shows
01
A connected chain of planning documents, not decisions made quietly on the side.
02
RLS as the primary authorization layer, atomic writes through real database transactions.
03
Color, typography, and radius locked to one traceable source of truth.
04
Trunk-based, Conventional Commits, and commit traceability back to source documents.
Build Something Similar
Noble Dev can help plan a website and lightweight admin panel for a clinic, tutoring center, or service business whose schedule is still managed manually.
Discuss a similar project