Verified 2026-09-06HTTP 200 · 13 rute publice
What needed to be solved
A medical centre with a catalogue of hundreds of tariffed services needed each service to have its own page, searchable, with price and unit of measure — not a PDF with the price list. In addition, prices and staff change, so the clinic had to be able to edit them itself, and appointments had to reach reception immediately, not in an email inbox.
What we built
Next.js 14.2.35 (App Router) with React 18, TypeScript and Tailwind. Each item in the medical catalogue became its own static route: 521 `page.tsx` files in `src/app`, of which 481 under `/servicii` — 184 physiotherapy, 122 advisory services, 61 periodic medical examinations, 27 gynaecology, 26 ozone therapy, 23 treatment packages, 18 alternative medicine, 12 diagnostics, the rest by departments. The production sitemap lists 890 addresses. The site is bilingual ro/ru. Editable content (doctors, packages, treatments, articles, settings, images) is stored in a local SQLite database via `better-sqlite3`, with WAL journalling and active foreign keys, administered from `/admin` through 20 API routes; authentication uses `jose` for session and `bcryptjs` for password, and password changes invalidate existing sessions. Appointment and contact forms are validated with `zod` + `react-hook-form` and send the formatted message directly to Telegram, via the Bot API. There is also a price calculator on `calculator`.
What can be checked from outside
- 890 addresses in the production sitemap: `curl -s https:/`sitemap.xml` | grep -c '<loc>'` → 890 (2026-09-06).
- Public attribution: the footer on `https://constructorul.md/` contains “MegaPromoting” with a link to `megapromoting.com` (2026-09-06); in history, the commit `Add MegaPromoting link to footer` (2026-01-27).