AGENCY
ZGRZ Agency

Citizen web portal for participation in Kharkiv city life

A single web platform where residents get city news and announcements, take part in discussions and polls, accumulate points and redeem them for partner offers — with content managed through Directus and a shared API for web and mobile.

 

Portal
GovTech
Civic Tech
Directus CMS
Back-Office Development
Content Management
Role-Based Access

About the Project

A public web client of the municipal portal for Kharkiv residents. Users read news, browse events, take part in votes and discussions, form their position on initiatives, and accumulate bonus points for activity. There is also a separate catalog of partner offers where points can be redeemed for rewards.

 

About Customer

The Kharkiv City Council is developing a digital communication channel with residents for informing citizens, engaging them in city initiatives, running partner programs, and collecting feedback. It was critical for council representatives to get a tool that runs stably under mixed load and lets them quickly manage content and rules without depending on developers.

 

One product — different scenarios

 

We had to combine a news section, an event feed, voting, discussions, and bonus logic in a way that keeps the interface simple.

 

Shared API

 

The architecture had to support both web and mobile apps through a single API layer, without duplicating business logic.

 

Content management

 

The admin panel had to provide control over publications, moderation, user roles, and access rights, so editors and moderators could work independently.

 

Stability

Publications and votes can produce short spikes in load, so the system needed predictable API responses, thoughtful caching, and pagination.

 

Bonus points

 

The bonus system required a well-ordered data model and checks to avoid double point accruals and disputed cases with rewards.

 

Proposed Solution

We structured the full solution as a set of clear modules: a public web interface, a JavaScript API layer, a managed back office in Directus, and a data model for content, participation, and bonuses. Directus is both a headless CMS with roles and access rights, and the central point for managing content structures and reference data.

 

Public web client on React

 

We designed the visual design and UI logic around the core scenarios: the news feed, events, discussion pages, the voting participation form, and the profile with the points balance and activity history.

 

Node.js API server as a single backend for web and mobile

 

We implemented REST/GraphQL integrations with Directus and dedicated endpoints for user operations: registration/authentication, roles, participation in votes, comments, points transactions, and redemption for partner offers.

 

Directus as a managed back office for content and reference data

 

We designed collections for news, events, partners, rewards, bonus rules, and moderation. Editor, moderator, and administrator roles were separated so the client's team could publish and update sections on its own.

 

Bonus model

 

We modeled the point system as tied to events and transactions, so it is clear what points were credited or debited for and when. At the same time, the system remained extensible so new activity types could be added later.

 

Integrations through the API for city services

 

We structured the API layer so the platform can exchange data with external services for scenarios like booking an appointment, online document verification, and ordering paid services once the counterparties are ready.

 

Together with the customer's team, we defined that the first version should include reading news, viewing events, participating in votes, taking part in discussions, accruing points, and redeeming them for rewards. For every scenario we defined: what the starting point is, what counts as a successful completion, which errors can occur, and where moderation is required. Separately, we agreed which actions should be as simple as possible for the resident and which could stay more complex but only in the admin part.

 

React.js
JavaScript
HTML5
CSS3

+2 Resource

Results

After launch, the city got a working web client of the portal that covers the main scenarios of resident engagement — news, events, participation in votes and discussions, bonus motivation, and partner rewards.

 

1 shared API layer

for web and mobile

20+ entities

in the data model

Transactional accounting of bonuses

tied to events

The admin panel is used

daily and for every process

Protection against duplication

in critical actions and under load

A ready foundation

for connecting city modules through the API

Get in Touch

Or send us a message and we'll get back to you within 15 minutes during business hours

Enter your name

Enter your email

Enter your message

Andrii Trubai

Andrii Trubai

CEO | Head of WebDev department

More Success Stories