Custom software · E-commerce · Robotics and programming education
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.
- Client
- Robocode training institute
- Industry
- Robotics and programming education
- 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
- Technical SEO
- QA and testing
- Support and ongoing development
The result, in numbers
- 18
- modules with isolated schemas
- 2,831
- automated tests
- 154
- site and panel pages
in one deployment, on one database
1,922 domain and API, 697 panel, 212 site
57 public, 97 administrative
The challenge
Robocode is four businesses at once: an academy, an equipment shop, an examination and certification body, and a network of representatives and instructors across different cities. Each of those normally has its own software — and that is exactly where it breaks.
With four separate systems, a user registers four times, a student who bought a course is a stranger in the shop, a representative's commission has to be added up by hand from two reports, and for one simple number — how much did we sell this month — a manager has to line up three spreadsheets.
Three further constraints had no off-the-shelf answer. Login from Shad: much of the audience is schoolchildren, who must sign in from the national student network without a phone number. A second storefront: the Shad landing page needs its own catalogue, shipping methods and gateway, but on the same data and the same stock. And heavy video: a two-gigabyte file does not survive a plain upload over a domestic Iranian connection.
The solution
One platform was built to run all four businesses, but inside it are 18 modules with real boundaries: each owns its own database schema and never touches another module's tables.
For the user the result is simple: one identity, one cart, one payment, one report. A student who buys a course has the same account in the shop, one loyalty balance, and a manager reads the sales figure from one dashboard rather than three files.
The three hard problems were solved like this:
Login from Shad runs as a server-to-server exchange with a merchant token and a one-time hash valid for ten minutes; the account is created without a phone number.
The second storefront was solved with a concept called Surface: the main shop and the Shad landing page have their own catalogue, shipping methods, orders and gateway — on the same data and the same stock, without duplicating the system.
Two-gigabyte video is uploaded in chunks and resumes from the same chunk after a dropped connection rather than starting again.
And because money moves along several paths — course purchases, product orders, the wallet, representative commission, refunds — cross-module work goes through an outbox table: granting a course after payment, crediting the wallet after a refund, and 44 other events, with retries and finally a dead-letter queue. None of them is tied into one transaction and none is lost.
Key features
Online exams with detailed report cards
A question bank, exam categories and packages, timed sittings, automatic marking, and a report card with raw scores and percentages broken out.
Certificates and QR membership cards
Bilingual certificates with a template and seal, a QR membership card and a public verification page — anyone can check a certificate themselves. Students can request one from their own panel.
A shop with tiered wholesale pricing
Products with variants and stock, tiered wholesale prices, shipping by geographic zone and weight, free delivery above a threshold, and card-to-card receipts.
Representative, coach and instructor panels
Application and approval, levels and specialisms, a commission policy with automatic settlement, and an itemised earnings report — a partner can see exactly which sale earned what.
Online courses with two-gigabyte video
Chapters and lessons, chunked upload to 2 GB that resumes after a dropped connection, sale by lesson or bundle, a dedicated player and content access control.
Payments, wallet and targeted discount codes
A direct Parsian gateway integration with verification and reversal per the bank contract and protection against duplicate callbacks, a wallet, discount codes with usage caps, and traceable refunds.
Single sign-on from Shad
A student signs in from inside the national student network without a phone number: a server-to-server exchange with a merchant token and a one-time hash that expires in ten minutes.
Two storefronts on one dataset
The main shop and the Shad landing page have their own catalogue, shipping, orders and gateway — on the same stock and the same reporting, without duplicating the system.
Architecture and stack
- Style
- Modular monolith
- Patterns
- Domain-driven designEvent-drivenOutbox pattern
A modular monolith: one unit is deployed, but it is bounded like several services — the simplicity of a single deployment with the boundary discipline of microservices.
Real boundaries, not nominal ones. Each module has its own DbContext and its own schema, all inside one PostgreSQL database with 18 separate schemas. A module cannot join another module's tables; it reads only from that module's public contract. This is the one thing that stops a monolith turning into a tangle, and because it is enforced at the schema level, compliance is not optional.
Event-driven communication with guaranteed delivery. Cross-module work — granting a course after payment, crediting the wallet after a refund, calculating a representative's commission — goes through an outbox table with exponential-backoff retries and finally a dead-letter queue. A successful payment is never rolled back because another module was slow.
Two storefronts on one dataset. The Surface concept lets the main shop and the Shad landing page have their own catalogue, shipping methods, orders and gateway without duplicating the system. If a third storefront is needed, it is a configuration rather than a new deployment.
Live configuration. The gateway, SMS templates, SEO settings, landing content and the SSO connection are all changed from the panel; no redeployment is required. For a system whose operations team are not developers, that is the difference between "tomorrow" and "done".
- Back end and API
- .NET 10C#Entity Framework CoreMediatRHangfireREST API
API, domain and scheduled jobs; 96 projects, 65 versioned controllers
- Database
- PostgreSQL
PostgreSQL 16 — 18 isolated schemas, 109 versioned migrations
- Cache
- Redis
Redis 7 — sessions, one-time codes, rate limiting
- Front end
- Next.jsReact.jsTypeScriptTailwind CSS
Server-rendered public site with SEO — 57 pages, full RTL and the Jalali calendar
- Front end
- Vite
Admin panel with TanStack Query — 97 administrative pages
- Infrastructure and deployment
- Dockernginx
Docker Compose, nginx and Let’s Encrypt — single server, reversible
- CI/CD and monitoring
- SerilogSeq
Structured logging and request tracing
Integrations
- Shad — single sign-on from the national student network, without a phone number
- Parsian bank gateway — verification, reversal and protection against duplicate callbacks
- SMS.ir — transactional and campaign SMS with a full log
- A dedicated mail service with DKIM, SPF and DMARC
Full write-up
Every capability, in detail
Each area is a product in its own right, but all of them sit on one identity, one cart, one payment and one report.
Education
In-person and online courses, a chapter and lesson structure, chunked video upload to 2 GB that resumes after a dropped connection, sale by individual lesson or as a bundle, a dedicated player, and content access control based on what the user has bought.
Examinations
A question bank, exam categories and packages, timed sittings, automatic marking, and a detailed report card with raw scores and percentages.
Shop
Products with variants and stock, tiered wholesale pricing, shipping methods based on geographic zone and weight, free delivery above a set amount, and card-to-card receipt capture.
Payments
A direct Parsian gateway integration with verification and reversal per the bank's contract, a user wallet, targeted discount codes with usage caps, and traceable refunds.
Certificates and cards
Bilingual certificate issuance with a template and seal, a QR membership card with a public verification page, and certificate requests raised by students themselves.
Partner network
Representatives, coaches and instructors with an application and approval flow, levels and specialisms, a commission policy with automatic settlement, and an itemised earnings report.
Communications
Transactional and campaign SMS over SMS.ir with a separate template code per event and a full send log, a newsletter, and in-app announcements with rich text and attachments, targeted by role.
Content and media
A blog and block-based page builder, SEO and metadata settings, a media library with image processing and thumbnails, and secure serving of private files.
Identity
One-time-code login, fine-grained roles and permissions, parent-to-student linking, an address book, and single sign-on from Shad.
The eighteen modules
Each module owns its own database schema and never touches another module's tables; they communicate only through public contracts and events.
Identity — Users, roles, tokens, addresses, Shad identity
Academy — Courses, enrolment, course purchase, content delivery
Exam — Exam categories, exam packages, sittings
Store — Products, orders, shipping
Payment — Transactions, verification, refunds, bank reversal
Pricing — Wallet, coupons, commission, settlement
Certificate — Certificate requests, membership cards
Representative — Coach and instructor applications, levels, specialisms
Notification — Campaigns, announcements, newsletter
Media — Files, image processing, chunked upload
CMS — Articles, page builder, blocks
Settings — Live system configuration without a deployment
Search — The unified catalogue index
Reporting — Sales and performance dashboards
Audit — A record of sensitive changes
Loyalty — Points and rewards
Festival — Events and competitions
Backoffice — Internal tools
Engineering discipline
- 2,831 automated tests — 1,922 domain and API, 697 panel, 212 site. Every bug fix ships with a test that exercises the exact broken case.
- 109 database migrations — schema changes are always versioned and reversible; nothing is applied by hand to the production database.
- 44 integration events — the contract between modules is explicit and typed rather than a direct call across layers.
- 65 API controllers with versioning, layered rate limiting and RFC 7807 error responses.
External integrations
Shad — single sign-on from the national student network: a server-to-server exchange with a merchant token, a one-time hash expiring in ten minutes, and account creation without a phone number.
Parsian bank — purchase request, secure callback, transaction verification after a full match of amount and identifiers, and refunds, with idempotency against duplicate callbacks.
SMS.ir — transactional SMS with a separate template code per event, scheduled campaigns, and a complete send log.
Dedicated mail service — organisational email on the same infrastructure with DKIM, SPF and DMARC, plus brute-force protection.
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
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.
- React.js
- Vite
- TypeScript
- Leaflet
Tehran Municipality · 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

