BIKZ.DEV — CASE No. 19 KORSHI · 2026 FLUTTER + NODE.JS · NEIGHBOURHOOD PLATFORM TWO APPS LIVE IN BOTH STORES · KK / RU NATIVE +7 775 878 17 32 BIKZ.DEV — CASE No. 19 KORSHI · 2026
Case · No. 19
2026
iOS · Android · Web · Flutter + Node.js

KORSHI.

A neighbourhood platform for Kazakhstan's private sector. A resident photographs a broken street light, a pothole or a water leak — the request lands with the chairman of their KSK, with a status the whole street can follow. Two Flutter apps live in both stores, a Node.js + SQLite backend, a React admin panel, and a multi-tenant model where every district is a sealed world of its own. Kazakh and Russian throughout.

Civic platform Two apps 2026
Korshi promo banner — the house-and-leaf mark with the tagline 'a neighbourhood where everyone is heard'
Year
2026
Apps
2
Languages
2
Status
Live
01

About the project

// 2 min read

In Kazakhstan's private sector — the low-rise districts and cottage massifs around the big cities — everything still runs through a WhatsApp group. A broken light, an overflowing bin, a burst pipe: someone writes into a chat of three hundred people, it scrolls away, and nobody knows whether anyone took it. Korshi turns that noise into a record. The resident photographs the problem and sends it once — category, address, photo — and it becomes a tracked request with an owner and a status the resident can follow from «accepted» to «resolved», with a push at every step.

Korshi resident app home — district cover photo, quick-request categories for water, roads, lighting and waste, and a feed of what is happening today
01Resident home — quick request tiles and today's district feed
Korshi news screen — district announcements about a community clean-up, pole replacement and a water issue, each with a category badge
02News — announcements and requests in one filtered feed
Korshi polls screen — an active resident poll with live vote percentages and a confirmation that the vote was counted
03Polls — residents vote on what the district spends on

The product is two separate Flutter apps against one backend. Residents get the reporting side: quick requests with a photo, a live status timeline, polls, announcements and a directory of the people you actually need — the chairman, the local officer, emergency and utility numbers. Chairmen get a working cabinet: the district's whole request queue with photos and addresses, status changes and replies that notify the resident, internal notes only they see, a resident register with invite codes, and the tools to publish announcements and launch polls. A React admin panel adds the operator layer above them, where districts and their chairmen are created.

Korshi chairman app dashboard — district statistics with counts of new, in-progress and resolved requests
04Chairman dashboard — the district at a glance
Korshi chairman app request queue — resident requests with category, address, photo and status controls
05Request queue — statuses, replies and internal notes
Korshi chairman app resident register — residents by street with their status and invite codes
06Resident register — invitations by code, street by street

Every district is a separate tenant. The JWT carries the principal's role and district, and every query is scoped by it — a chairman never sees another district's residents, and residents only ever see their own announcements, polls, contacts and cover. Residents sign in with a phone number and a six-digit invite code issued by their chairman; the moment they set a password the code is retired, so a guessed code can't become a permanent back door. Uploads are validated by magic bytes rather than by filename, and the backend refuses to boot without a real JWT secret.

Korshi contacts screen — chairman, district police officer, emergency service and gas/electricity numbers with call and message buttons
07Contacts — the numbers a private-sector street actually needs
Korshi profile screen rendered in Kazakh — language switch, notification toggles and the resident's own requests
08The same app in Kazakh — both languages are first-class

Underneath: Node.js and Express on TypeScript, SQLite with WAL, Firebase Cloud Messaging for pushes on new requests, status changes, announcements and polls, and the whole stack in Docker behind Caddy with automatic HTTPS. Nightly database snapshots, key-only SSH, a firewall and fail2ban on the host. Shipped end to end — domain model, two apps, admin panel, landing with its legal pages, infrastructure and the release into the App Store and Google Play.

02

Stack

// what we shipped on
Flutter Dart Node.js Express TypeScript SQLite React Vite FCM Docker Caddy App Store Google Play
Next case · No. 07 · 2023

ALMATY REGION TRAVEL.

← Previous: TURAN ASIA