Custom software · Municipal — cultural affairs
EventFlow for Tehran: the cultural events of 22 districts on one system
The integrated cultural events and venues system for Tehran: a multi-stage approval chain, a mapped cultural atlas, geofenced field reporting and citizen surveys — three clients, web, mobile and API, on one core.
- Client
- Tehran Municipality
- Industry
- Municipal — cultural affairs
- Year
- 2025
- Status
- Live
- Discovery and analysis
- UX and UI design
- Software architecture
- Front-end development
- Back-end and API development
- Database design
- Third-party integrations
- Deployment and DevOps
- QA and testing
- Support and ongoing development
The result, in numbers
- 22
- Tehran districts on the system
- 3
- clients on one core
with each district’s areas and neighbourhoods
web, mobile app and API
The challenge
The cultural events of Tehran's 22 districts run to hundreds of programmes a year, and each one passes through several hands before it happens: content, budget, deputy, headquarters.
The problem had four heads. Approvals stalled somewhere nobody could name. Cultural venues — cultural centres, neighbourhood houses, Quran houses, parks — had no current record a citizen could consult to find out what was on where. Field reports proved nothing: a photograph with no evidence of where or when. And evaluation effectively did not happen, because collecting citizen feedback was harder than running the event.
One more constraint shaped the design: a field officer does not always have a stable connection, and an app built assuming an open internet breaks in the field.
The solution
EventFlow was built: one platform with three clients — a web panel for the cultural unit, the districts and headquarters; a mobile app for the field officer and the citizen; and an API that feeds both.
The event cycle is governed by a state machine inside the domain: draft → content approval → budget approval → deputy and headquarters → dispatch to districts and delivery → evaluation → closure. Programmes and sub-activities are versioned and the change history is kept.
Beside it sits a public cultural atlas: venues with categories, photographs, facilities and coordinates, on a map and open to citizens without signing in, each with a district approval flow. Venue services — classes, bookings for halls, libraries and workshops, club membership — sit on those venues, switched on per venue.
Field reports are captured inside a geofence and a time window and wait in an offline queue until the network returns; the reachability probe was tuned against our own server so national filtering does not make the system report itself offline. Evaluation runs on a question bank and single-use tokens, asking citizens and delivery teams different things.
Under all of it sits the access layer an organisation this size requires: the geographic hierarchy of districts, areas and neighbourhoods alongside the organisational one, capability-based permissions — each endpoint guarded by a named capability rather than a raw role — multi-tenancy, and an audit trail on every access.
Key features
A multi-stage approval chain
Content, budget, deputy and headquarters — with a checklist gate at each stage and returns carrying a recorded reason.
A mapped cultural atlas
Cultural centres, neighbourhood houses, Quran houses and parks with photographs, facilities and coordinates — open to citizens without a login.
Enrolment, booking and membership
Classes, bookings for halls, workshops and free consultations, and club membership — enabled per venue.
Geofenced field reporting
A photograph only at the location and inside the event’s time window; offline queue and automatic sync.
Token-based citizen surveys
A question bank and evaluation plans, with single-use tokens and separate questionnaires for citizens and delivery teams.
Fine-grained access and audit
Capability-based permissions, geographic and organisational scope, multi-tenancy and a full audit trail.
The citizen experience
A Jalali calendar, “near me” by GPS, festivals, competitions and cultural ambassadors.
In-app updates
The app fetches and installs a new version from the organisation’s own server, with forced updates supported.
Architecture and stack
- Style
- Monolith
- Patterns
- Clean architectureDomain-driven design
Clean Architecture with domain-driven principles: the business core — entities, the event state machine and the rules — at the centre with no outward dependencies; the application layer with services, DTOs and FluentValidation around it; infrastructure and presentation in the outermost layers. The reason is plain: this system had three clients on day one and was expected to gain more, and rules written into controllers would have been rewritten with every new client.
Permissions are capability-based rather than role-based: each endpoint is guarded by a named capability, the user's geographic and organisational scope is applied on top, and every access lands in the audit trail. In an organisation with 22 districts and several headquarters layers, raw roles cannot express who may do what.
Infrastructure: Entity Framework Core over SQL Server, scheduled jobs with Hangfire, object storage for images, centralised logging with Seq, and spatial data with NetTopologySuite — which is what the field-report geofence and "near me" run on. Deployment is Docker Compose behind nginx, with automatic incremental schema setup when the service starts.
- Front end
- React.jsViteTypeScriptLeaflet
Web panel for the cultural unit, districts and headquarters
- Front end
- React NativeExpo
Field and citizen app, offline-capable
- Back end and API
- .NET 10ASP.NET CoreC#REST APIClean Architecture
Versioned REST, JWT, capability-based authorisation, multi-tenancy
- Database
- SQL ServerEntity Framework Core
- Infrastructure and deployment
- HangfireNetTopologySuiteSeq
Scheduled jobs, spatial data and geofencing, centralised logging
- CI/CD and monitoring
- Dockernginx
Docker Compose behind nginx, automatic schema setup
Integrations
- Object storage for event and venue images
- Mapping and spatial data for the atlas and geofencing
Related services and products
Have a similar project in mind?
Fifteen minutes is enough to say what it needs, how long it takes and where to start.
Similar projects
Custom software · E-commerce
Robocode: academy, online exams, shop and a partner network on one platform
The integrated platform for the Robocode academy on .NET 10: online and in-person courses, exams with report cards, a shop with wholesale pricing, certificate issuance with QR verification, a partner and instructor panel with commission, and single sign-on from Shad.
- .NET 10
- C#
- Entity Framework Core
- MediatR
Robocode training institute · 2025
Custom software
Shaylin aesthetic clinic: online booking, a specialist magazine and one admin panel
A complete platform for the Shaylin aesthetic clinic on .NET 10 and Next.js: booking by treatment, practitioner and Jalali calendar, a before-and-after gallery, a magazine with a page builder, an installable PWA with Web Push, and one admin panel.
- Next.js
- React.js
- TypeScript
- Vite
Shaylin aesthetic clinic · 2025
Custom software
Rosha counselling clinic: from online booking to counsellor settlement, on custom WordPress
An integrated clinic management platform on WordPress: online booking with a collision lock, payments and deposits, a 15-module reception desk, a counsellor panel with share calculation, and financial reporting with Persian PDFs. No booking plugin, no off-the-shelf theme.
- WordPress
- PHP
- REST API
- MariaDB
Rosha counselling clinic · 2025

