Skip to content
comark

Case study · Public sector

A council website, and the system its staff run it from

Basma Local Council publishes services, news, tenders, jobs and forms for its residents in Arabic and Hebrew. We built the public site, the admin dashboard staff publish from, and the API and database behind both.

Client
Basma Local Council
Industry
Public sector
Languages
Arabic · Hebrew
Stack
Next.js · React · NestJS · TypeORM · MySQL · TipTap

A whole council's information, kept current by its own staff.

A local council publishes a lot: resident services, news, tenders, jobs, events, forms, council protocols, reports, emergency information and freedom of information.

Many kinds of content

Tenders, jobs, events, protocols and reports each have their own fields; tenders and jobs have their own categories, and tenders are active or ended.

Two languages, right to left

Residents read Arabic and Hebrew, so the site works in both, right to left, with a language switch in the header.

Staff publish it themselves

The council's staff, not developers, add tenders, post jobs and build the forms residents fill in.

Two front ends, one API and one database.

The public site and the admin dashboard are separate apps. Both read and write through the same NestJS API, which owns the MySQL database.

  • Public site · Next.js · next-intl · Arabic and Hebrew

  • Admin dashboard · React · Vite · TipTap editor

  • Council API · NestJS and TypeORM: content, tenders, forms and submissions, search and users.

  • MySQL · content, forms and submissions

  • PDF export · Puppeteer

  • Image processing · sharp

  • Email · nodemailer

Search, newsletter sign-ups, contact messages and editor uploads go through the same API.

Four decisions behind the site and the dashboard.

One API for both sides

The site and the dashboard share one NestJS API with modules per section. What staff save in the dashboard is what residents read on the site.

Forms built in the dashboard

Staff design custom forms with a form builder, preview them, and read applicants' submissions in the dashboard. Residents apply online on the public site.

Tenders as structured records

Each tender has a category and an active status. The site splits active from ended, shows counts, and lets residents search and sort, with a page per tender.

Settings staff can change

Option sets, validation patterns, the homepage slider, popups and site settings live in the dashboard, so routine changes don't need a developer.

What residents and staff get, in Arabic and Hebrew.

Services from the homepage

A two-step category search and service tiles: online payment, forms, phone directory, tenders, emergency and GIS.

Tenders

Categories for HR, suppliers and the consultants and suppliers database, with counts, search, sort and a page per tender.

News, events and jobs

Articles and job listings with their own categories, and events, all managed in the dashboard.

Forms and online applications

Downloadable forms, and custom forms residents fill in online.

Council records

Council protocols, reports, municipal departments, a contacts directory and a download center.

An admin dashboard

Roles and users, a rich-text editor, the homepage slider, popups and site settings.

Screens

Real screens, as they run today.

The Basma homepage
The Basma homepage on a phone
The Basma tenders page with category tabs, counters and search

1 of 3

The Basma homepage

The Basma homepage

Your project next

Tell us what yours must do. We'll come back with an architecture.

Start a project for a scoped proposal, or talk to an engineer first.