Platform master — schaal, evolutie en wijzigingen
Dit bestand is de ene centrale referentie voor capaciteitsdoelen, ontwerpkeuzes rond schaalbaarheid en een append-only wijzigingslog. Iedere substantiële wijziging aan architectuur, data-pad, security of capaciteit moet hier eerst gelezen en daarna bijgewerkt worden (zie workflow onderaan).
Detaildocumenten blijven bestaan (
docs/platform/*,docs/telematics/*, ADR’s). Dit master-document vat de noordelijke richting samen en houdt besluiten + log bij één plek.
1. Noordelijke capaciteit (ontwerpdoelen)
| Domein | Doel | Opmerking |
|---|---|---|
| Gebruikers | ≥ 40 miljoen accounts / identiteiten die het platform aankan (registraties, rollen, auth) | Vereist o.a. horizontale schaal van app-laag, caching, DB-strategie (replica’s, sharding/partitionering waar nodig), geen single-node aannames. |
| Trackers | ≥ 600.000 gelijktijdige veldapparaten (ingest + status) | Referentieklasse: Teltonika FMC920 (Codec 8 / AVL — zelfde familie als FMB920). Gateway horizontaal, sticky TCP, event backbone, tijdreeksen in geschikte store. |
| Groei | Toekomstige producten (extra device types, integraties, rapporten) | Nieuwe features documenteren hier en in ADR indien architectuur wijzigt; capaciteit expliciet meenemen. |
Concrete technische uitwerking: o.a. docs/telematics/scaling.md, docs/platform/data-plane.md, ADR’s onder docs/platform/adr/ en docs/telematics/adr/.
2. Referentie-hardware (voorbeeld)
- Teltonika FMC920 — representatief voor een grote fleet: periodieke AVL-records, TCP-sessies, command queue. Ontwerp gateway + workers + opslag alsof honderdduizenden van dergelijke sessies gelijktijdig kunnen bestaan.
3. Ontwerpprincipes (kort)
- Stateless applicatie waar mogelijk; sessies/cache extern (bijv. Redis).
- Horizontale schaal voor gateway, API en workers; geen “één grote machine”-mentaliteit.
- Data: partitionering / tijdreeksen-archief; leespaden voor rapportage gescheiden van hot write-path waar passend.
- Backpressure & limieten — buffers, rate limits, duidelijke foutpaden (zie telematics scaling).
- Observability — metrics, logging, runbooks; SLO’s expliciet houdbaar maken.
- Documentatie — significante beslissingen in ADR; dit master-document bijwerken + logregel toevoegen.
4. Verplichte workflow (mens + agent)
Vóór substantiële code- of infra-wijzigingen:
- Lees dit bestand (relevante secties + laatste logregels).
- Lees
docs/platform/README.mdvoor index; open betrokken ADR’s en telematics/platform docs. - Raadpleeg de lokale agent-audittrail:
.cursor/logs/agent-audit.jsonl(laatste regels) om overlap of recente edits te zien.
Na wijzigingen die architectuur, security, data-model of capaciteit raken:
- Werk de relevante secties in dit document bij (doelen, status, links).
- Voeg een regel toe aan §5 Wijzigingslog (append-only).
- Voeg of werk een ADR bij indien het een blijvende architectuurkeuze is.
5. Wijzigingslog (append-only)
| Datum (UTC) | Gebied | Samenvatting | Details / PR / commit |
|---|---|---|---|
| 2026-05-15 | Docs + Cursor rules | Master-document aangemaakt; schaaldoelen 40M gebruikers / 600k FMC920-klasse devices; workflow gekoppeld aan rules; platform/telematics index en scaling.md op doelen afgestemd. | docs/PLATFORM-MASTER.md, .cursor/rules/platform-scale-evolution.mdc, .cursor/rules/agent-audit-workflow.mdc, docs/platform/README.md, docs/telematics/scaling.md, docs/telematics/README.md |
| 2026-05-15 | GitHub / DX | Repo-naam package.json aligned; GitHub workflows (docs CI, PR labeler, dependency review), Dependabot, issue/PR templates, CODEOWNERS, SECURITY, CONTRIBUTING, scripts voor labels + starter issues, docs/github/SETUP.md. | .github/*, scripts/github/*, CONTRIBUTING.md, SECURITY.md, docs/github/SETUP.md, package.json |
| 2026-05-15 | Docs-site + deploy | Docusaurus (documentation/) bouwt repo-root docs/; nginx-template + render uit .env; secrets PRODUCTION_DOCS_HOST / PRODUCTION_DOCS_URL; Docker build naar /var/www/omnihub-docs; certbot --expand voor extra hostnamen; workflow: patch → docs → ensure → compose. | documentation/, deploy/nginx/omnihub.conf.template, deploy/render-nginx-from-env.sh, deploy/build-documentation-static.sh, deploy/patch-env-github-secrets.sh, deploy/ensure-server-deps.sh, .github/workflows/deploy.yml, .github/DEPLOY-SECRETS.md, .cursor/rules/docusaurus-public-and-domains.mdc |
| 2026-05-15 | GitHub / DX | Script create-roadmap-project.mjs: na gh auth refresh -s project,read:project project aanmaken of hergebruiken, repo koppelen, open issues op board; SETUP §2 uitgebreid. | scripts/github/create-roadmap-project.mjs, scripts/github/create-roadmap-project.ps1, scripts/github/create-roadmap-project.sh, docs/github/SETUP.md |
| 2026-05-15 | GitHub / DX | Project #4 OmniTrack roadmap: aangemaakt, Jjustmee23/omnihub-schoolV2 gekoppeld, 5 open issues op het board gezet. | gh project + scripts/github/create-roadmap-project.mjs |
| 2026-05-15 | Cursor rules | Nieuwe rule github-issues-resolve-and-done.mdc: agents bij “los issue(s)” gh gebruiken, Fixes/Closes, sluiten na merge voor Done op project; kruisverwijzing in platform-scale-evolution.mdc. | .cursor/rules/github-issues-resolve-and-done.mdc, .cursor/rules/platform-scale-evolution.mdc |
| 2026-05-15 | GitHub / DX | Dependabot groups + open-pull-requests-limit: 1 per ecosystem (minder branches/PR’s); PR labeler alleen naar main; lichte CI voor pure dependabot/github_actions/* PR’s in deploy.yml; SETUP-doc met cleanup-hint. | .github/dependabot.yml, .github/workflows/deploy.yml, .github/workflows/pr-labeler.yml, docs/github/SETUP.md |
| 2026-05-15 | GitHub / DX | Roadmap-batch: manifest ~33 issues; populate-omnitrack-roadmap.mjs + labels roadmap / omnitrack-roadmap-batch; SETUP §4b. | scripts/github/roadmap/manifest.json, scripts/github/populate-omnitrack-roadmap.mjs, scripts/github/labels.json, docs/github/SETUP.md |
| 2026-05-15 | GitHub / DX | Project #4: repo gh project link; velden Target date + Delivery phase (gh project field-create); SETUP §2c — 12 gefilterde views + optionele Roadmap-timeline, Status vs Delivery phase, workflows, default view. | gh project link, gh project field-create, docs/github/SETUP.md |
| 2026-05-15 | Product / feedback | In-app supporttickets (categorie/subcategorie), feature-ideeën met stemmen + suggesties + merge; optionele GitHub-export (overheid); dashboardtabs + chauffeur-help; tabellen support_tickets, feature_requests, feature_votes; env GITHUB_FEEDBACK_*; rule feedback-product-github.mdc. | server.ts, src/App.tsx, src/feedback/FeedbackPages.tsx, src/locales/*.json, deploy/env.production.template, .cursor/rules/feedback-product-github.mdc |
| 2026-05-15 | Product / feedback | Semantische dubbele ideeën (Jaccard-tokens + titelgewicht), live preview-duplicates; chauffeur-header Ideas naast Help; GitHub-token uit GITHUB_FEEDBACK_TOKEN_FILE (mtime-cache); feedback rate limits (preview/write/vote/sync). | server.ts, src/App.tsx, src/feedback/FeedbackPages.tsx, src/locales/*.json, deploy/env.production.template, .cursor/rules/feedback-product-github.mdc |
| 2026-05-15 | Security / RBAC | Canonieke Engelse rollen + tabellen user_permissions / user_scopes; routes en Socket op permissies/scopes; legacy NL-rollen migratie; UI + seed op /api/me permissies; feedback-viewer uitzondering voor POST zonder domein-write. | ADR 0005-rbac-roles-scopes-permissions.md, lib/authz.ts, server.ts, seedIraqDemo.ts, src/authzClient.ts, src/App.tsx, src/feedback/FeedbackPages.tsx, src/locales/*.json, .cursor/rules/overheid-operator-ux.mdc, .cursor/rules/feedback-product-github.mdc |
| 2026-05-15 | Deploy / docs | Canonieke productie-domeinen in repo: omnitransitiq.com (app), docs.omnitransitiq.com, track.omnitransitiq.com — templates + DEPLOY-SECRETS.md + Docusaurus/build-defaults aligned met GitHub secrets. | .github/DEPLOY-SECRETS.md, deploy/env.production.template, deploy/build-documentation-static.sh, documentation/docusaurus.config.ts, .cursor/rules/docusaurus-public-and-domains.mdc, docs/PLATFORM-MASTER.md §7 |
| 2026-05-15 | Product / auth | Heropenen eerste setup: optioneel BOOTSTRAP_REOPEN_TOKEN (min. 24 tekens) + POST /api/bootstrap/reopen + login-UI; transactie zet bootstrap_completed=false en heractiveert admin@admin.be; optioneel GitHub secret PRODUCTION_BOOTSTRAP_REOPEN_TOKEN → patch-env. | server.ts, src/App.tsx, src/locales/*.json, deploy/patch-env-github-secrets.sh, deploy/env.production.template, .github/workflows/deploy.yml, .github/DEPLOY-SECRETS.md, README.md, docs/PLATFORM-MASTER.md |
| 2026-05-15 | Product / auth | Demo quick-login: vaste *.@demo.local seed-accounts worden bij elke start gesynchroniseerd (ensureDemoQuickLoginUsers); super-demo gov.super@demo.local verwijderd; inlog vóór bootstrap_completed toegestaan alleen voor e-mailadressen op @demo.local (bootstrap blijft verplicht voor overige accounts). | seedIraqDemo.ts, server.ts, src/App.tsx, src/locales/*.json |
| 2026-05-15 | Product / students | Parent enrollment: map-based pickup (Nominatim reverse via GET /api/geocode/reverse), school type-ahead, optional child login (users.role=student, students.child_login_user_id); buses list for student role; Iraq-oriented address fallback when road is missing. | server.ts, lib/authz.ts, src/authzClient.ts, src/App.tsx, src/locales/*.json, ADR 0005-rbac-roles-scopes-permissions.md |
| 2026-05-15 | Docs-site (publiek) | Gebruikersgids in docs/user-guide/ (ouders, school, chauffeurs, account, help/ideeën); Docusaurus i18n en / ar-IQ / ckb (RTL), vertaalde MD onder documentation/i18n/*/…/user-guide/, thema-strings via documentation/scripts/seed-locale-code-json.mjs; homepage + footer/navbar; sidebar-categorieën; unieke _category_.json keys voor dubbele adr-mappen. | docs/user-guide/*, documentation/docusaurus.config.ts, documentation/sidebars.ts, documentation/src/pages/index.tsx, documentation/scripts/seed-locale-code-json.mjs, documentation/i18n/**, docs/platform/adr/_category_.json, docs/telematics/adr/_category_.json, documentation/README.md, .cursor/rules/docusaurus-public-and-domains.mdc |
| 2026-05-15 | Product / supportdesk | In-app enterprise ticketing: threads (support_ticket_messages), audit (support_ticket_events), queues/filters, SLA policies + deadlines, outbound e-mail jobs (SUPPORT_SMTP_URL), inbound webhook HMAC (SUPPORT_EMAIL_INBOUND_SECRET), macro’s, knowledge base (/api/kb/*); permissies feedback_support_agent, feedback_support_macros_manage, feedback_kb_admin; UI tabs Tickets/Help center. | ADR 0006-in-app-support-desk.md, server.ts, lib/supportDesk.ts, lib/authz.ts, src/authzClient.ts, src/feedback/*, src/locales/*.json, deploy/env.production.template |
| 2026-05-15 | Product / supportdesk | Ticket bijlagen (max 3 × 4 MB, PDF/JPEG/PNG/WebP in Postgres) + authenticated download; UI-split: Support-tab voor iedereen met feedback_support_create, aparte sidebar Ticket desk voor agents (feedback_support_agent + feedback_support_read_all). | server.ts, src/App.tsx, src/feedback/FeedbackPages.tsx, src/feedback/SupportTicketDetailModal.tsx, src/locales/*.json, ADR 0006-in-app-support-desk.md |
| 2026-05-15 | Product / map sim | Bus simulation volgt rijwegen (OSRM driving geometry) i.p.v. rechte lijnen tussen routepunten; cache per bus + beperkte parallel; env BUS_SIM_OSRM, OSRM_ROUTING_URL, BUS_SIM_OSRM_*. | server.ts, deploy/env.production.template |
| 2026-05-15 | Product / schools + students | School campus op kaart (schools.lat/lng, adres, stats in GET /api/schools); school_classes + students.class_id; schoolpersoneel: users_create_school, students_enroll_school, API’s /api/schools/:id/classes en /parents; nationale kaart toont schoolpins; overheid-viewer krijgt read-only scholentab. | server.ts, seedIraqDemo.ts, lib/authz.ts, src/authzClient.ts, src/App.tsx, src/locales/*.json |
| 2026-05-18 | Product / payments + UX | Student wallets (IQD ledger), Mollie top-up + webhook idempotency, driver wallet + withdrawal requests + wallet_payout_review; transport notices/requests + accept → bus capacity; schema (student_wallets, wallet_*, transport_*, driver_served_schools, users.phone, students.date_of_birth); GET /api/buses voor ouder/student/chauffeur zonder fleet_read; driver tabs (home/roster/wallet/…) en ouder/student UI wallet + lijn + inbox; env MOLLIE_API_KEY, APP_PUBLIC_URL, SERVER_PUBLIC_URL, optioneel WALLET_IQD_PER_EUR. | server.ts, lib/walletTransportRoutes.ts, lib/paymentsMollie.ts, lib/authz.ts, src/App.tsx, src/authzClient.ts, src/locales/*.json, deploy/env.production.template, .github/DEPLOY-SECRETS.md, docs/PLATFORM-MASTER.md |
| 2026-05-18 | Deploy / payments | PRODUCTION_MOLLIE_API_KEY (Actions) → server .env MOLLIE_API_KEY; APP_PUBLIC_URL / SERVER_PUBLIC_URL afgeleid van PRODUCTION_APP_URL (optioneel PRODUCTION_SERVER_PUBLIC_URL, PRODUCTION_WALLET_IQD_PER_EUR). | deploy/patch-env-github-secrets.sh, .github/workflows/deploy.yml, .github/DEPLOY-SECRETS.md |
| 2026-05-18 | Product / wallet | Bij chauffeur «on board» (POST /api/trip/action, status → boarded): afschrijving studentwallet (trip_boarding), tarief buses.per_boarding_fee_minor of env WALLET_PER_BOARDING_DEBIT_IQD (default 500 IQD; 0 = uit); bij onvoldoende saldo 402 + geen status/occupancy-wijziging; occupancy++ alleen bij eerste boarded. | lib/walletTransportRoutes.ts, server.ts, src/App.tsx, src/locales/*.json, deploy/env.production.template, docs/PLATFORM-MASTER.md |
| 2026-06-02 | Identity / mobile | Hybride login: e-mail of telefoon + wachtwoord of OTP (SMS/WhatsApp via Twilio) voor accounts zonder wachtwoord; API POST /api/auth/login/method, /api/auth/otp/request, /api/auth/otp/verify; schema users.phone_normalized, auth_otp_challenges; web + Android login-flow; GitHub secrets PRODUCTION_TWILIO_*. | ADR 0007-hybrid-phone-otp-auth.md, lib/phoneNormalize.ts, lib/smsOtp.ts, server.ts, src/App.tsx, android-app/**, deploy/patch-env-github-secrets.sh, .github/DEPLOY-SECRETS.md, src/locales/*.json |
| 2026-05-24 | Mobile / Android | Native Kotlin + Compose app in android-app/ (volledige rol-pariteit, sessie-cookies, Socket.io, MapLibre, Mollie deep link); server: optionele redirectUrl + MOBILE_WALLET_REDIRECT_SCHEME + header X-OmniTrack-Client: android; docs docs/platform/mobile-android.md, locale sync script. | android-app/**, lib/walletTransportRoutes.ts, deploy/env.production.template, docs/platform/mobile-android.md, .github/workflows/android-app.yml |
| 2026-06-02 | Mobile / Play | Play Store: Gradle release signing (keystore.properties + omnitransit-upload.jks lokaal), PLAY-STORE-SETUP.md; privacy policy public/privacy.html → https://omnitransitiq.com/privacy; demo review user demo@demo.be / PLAY_STORE_DEMO_PASSWORD (default test123!). | android-app/**, public/privacy.html, seedIraqDemo.ts, server.ts, deploy/env.production.template |
| 2026-06-02 | Mobile / Android | Feature-pariteit (ronde 2): nationale zoekresultaten (alle entiteiten), map-focus vanuit fleet/schools, gebruikersdetail + scopes, scholen naam/adres, student transfer + parent phone, chauffeur notities met ontvanger, lijnverzoek school-filter, support agent status/priority, driver roster API-fix, transport toUserId. | android-app/app/src/main/java/**, android-app/app/src/main/java/com/omnitransit/app/data/dto/DomainDtos.kt |
| 2026-06-02 | Mobile / Android | Web-pariteit UI: donkere OmniTrack-sidebar (slate-900), gekleurde actieve nav-randen, paginatitels zoals web; chauffeur-shell met slate-header + 6-tab bottom nav + Help/Ideas overlay; Authz showUsersNav/showSchoolsNav gelijk aan App.tsx; Help/Ideas altijd in menu; driver-i18n-keys in src/locales/*.json. | android-app/app/src/main/java/com/omnitransit/app/ui/**, android-app/app/src/main/java/com/omnitransit/app/core/authz/Authz.kt, src/locales/*.json, docs/platform/mobile-android.md |
| 2026-06-05 | Mobile / iOS | Native Swift + SwiftUI app in ios-app/ (Android-pariteit: sessie-cookies, Socket.io, MapLibre, Mollie deep link omnitransitiq://wallet, i18n en/ar-IQ/ckb, alle rollen); XcodeGen project.yml; client header X-OmniTrack-Client: ios; wallet redirect fallback ook voor ios in lib/walletTransportRoutes.ts; locale sync ios-app/scripts/sync-locales.mjs; CI .github/workflows/ios-app.yml (macOS + xcodebuild); docs docs/platform/mobile-ios.md. | ios-app/**, lib/walletTransportRoutes.ts, docs/platform/mobile-ios.md, .github/workflows/ios-app.yml |
| 2026-06-05 | Mobile / iOS App Store | Apple-review gereedheid: PrivacyInfo.xcprivacy, ITSAppUsesNonExemptEncryption, usage descriptions (location/photos/camera), launch screen kleur; in-app LegalFooter + sidebar privacy/account-deletion + DELETE /api/auth/me; uitgebreide feature-schermen (students enroll/edit, wallet ledger, transport, schools, fleet tabs, users CRUD, help categories); APP-STORE-SETUP.md checklist; Release verbergt demo-tiles. | ios-app/OmniTrack/**, ios-app/APP-STORE-SETUP.md, docs/platform/mobile-ios.md |
| 2026-06-05 | Legal / Play Store | Privacy policy herschreven (public/privacy.html) — Data safety-pariteit, subprocessors, kinderen, iOS/Android; account deletion pagina (/account-deletion), DELETE /api/auth/me, in-app links (web + Android login/sidebar/driver); i18n legal.*. | public/privacy.html, public/account-deletion.html, server.ts, src/App.tsx, src/locales/*.json, android-app/**, android-app/PLAY-STORE-SETUP.md |
| 2026-06-05 | Legal / account deletion | lib/deleteUserAccount: transactie, child-login cleanup, parent_id loskoppelen, bescherming bootstrap + Play-review (demo@demo.be); JWT+session via actingUserId; web/Android foutcodes BOOTSTRAP_ACCOUNT/PROTECTED_ACCOUNT; unit tests; Android Toast bij mislukte delete. | lib/deleteUserAccount.ts, lib/deleteUserAccount.test.ts, server.ts, src/App.tsx, android-app/**, src/locales/*.json |
| 2026-06-08 | Mobile / Android v2 | Next-gen native UI (v2.0.0): hero login + glass card, bottom navigation (OmniNextNav.kt), dashboard “More” sheet i.p.v. sidebar drawer; chauffeur compacte bottom nav; Material 3 palette/typography; volledige legacy backup in android-app-legacy/ + restore-from-legacy.ps1; i18n common.more. | android-app/**, android-app-legacy/**, src/locales/*.json, docs/platform/mobile-android.md |
| 2026-06-08 | Mobile / Android + iOS | Plan completion: full-screen NavigationMode met MapLibre + live GPS (FGS Android), off-route hercalc, aankomst; RoutePlanner kaartpreview; Navigate here op bus/school/student/tracker; Android sidebar delete account + DELETE /api/auth/me; iOS ring-markers + dual-layer route; nav.turn* i18n; sync-map-style.mjs. | android-app/**, ios-app/**, src/locales/*.json |
| 2026-06-08 | Mobile / Android + iOS | Post-login Home + moderne sidebar: default Home tab; OmniSidebarModern + OmniIcons (outlined); geen bottom bar op telefoon; Carto Positron Light map-style.json; GET /api/routing/drive (auth + rate limit, OSRM_ROUTING_URL); in-app NavigationMode + RoutePlannerScreen (geen Google Maps); i18n dashboard.home* + nav.*; iOS-pariteit (HomeScreen.swift, DashboardShell, DriverShell). | server.ts, android-app/**, ios-app/**, src/locales/*.json, docs/platform/mobile-android.md, docs/platform/mobile-ios.md |
| 2026-06-08 | Mobile / Android + iOS | Realtime refresh UX: Home/Driver tonen volledige spinner alleen bij eerste load; socket-refresh gedebounced (1,5 s); dubbele socket-listeners in HomeScreen verwijderd — voorkomt eindeloos laden na login bij frequente busUpdate. | android-app/.../HomeScreen.kt, DashboardShell.kt, DriverShell.kt, RealtimeRefreshEffect.kt, ios-app/.../HomeScreen.swift, DashboardShell.swift, DriverShell.swift |
| 2026-06-08 | Product / map + schools | Schoolcampus op kaart per rol: laag-toggle (scholen/bus/stops); overheid ziet alle scholen; schoolpersoneel alleen scoped scholen (school_single × N of schools_all); ouder/student alleen school(en) van ingeschreven kinderen; GET /api/schools gefilterd (fix: ouders zagen voorheen alle scholen). | server.ts, src/App.tsx, docs/PLATFORM-MASTER.md |
| 2026-06-09 | Product / web | Coming Soon-landing voor publieke web (VITE_COMING_SOON, standaard aan in productie-build); /privacy en /account-deletion blijven server-side bereikbaar en prominent gelinkt; API + mobiele apps ongewijzigd. | src/ComingSoonPage.tsx, src/App.tsx, src/lib/productFlags.ts, src/locales/*.json, Dockerfile, deploy/env.production.template |
| 2026-06-09 | Security / auth | Demo-accounts uitgeschakeld (standaard): *@demo.local + Play Store review-user krijgen is_active=false bij start (deactivateAllDemoAccounts); login geblokkeerd tenzij ENABLE_DEMO_LOGINS=1; web-demo-tegels alleen met VITE_ENABLE_DEMO_LOGINS=1; Android release verbergt demo-quick-login. | seedIraqDemo.ts, server.ts, src/lib/productFlags.ts, src/App.tsx, android-app/app/build.gradle.kts, deploy/env.production.template |
| 2026-06-09 | Product / web | Coming Soon → login (alleen web-SPA): verborgen 5× tik op de «Coming soon»-badge opent de normale login-app (sessionStorage omnitrack_cs_unlock per browsersessie); Android/iOS ongewijzigd (eigen native login). | src/ComingSoonPage.tsx, src/App.tsx, src/lib/productFlags.ts, deploy/env.production.template |
| 2026-06-09 | Product / schools + map | Echte scholen Irak (ira_01…ira_28): namen, adressen en coördinaten uit OpenStreetMap/Wikipedia (data/iraq-real-schools.json); upsert-script npm run seed:real-schools; seed writeIraqDemoCoreDataset force-update; productie-VPS bijgewerkt. | data/iraq-real-schools.json, scripts/upsert-real-iraq-schools.mjs, seedIraqDemo.ts, deploy/upsert-real-schools.sql |
| 2026-06-09 | Product / schools + map | +506 extra echte scholen (irq_0001…irq_0506) via Nominatim per Irakese stad (npm run seed:fetch-schools → iraq-real-schools-extra.json); totaal 534 kaartpins (+2 BE demo s1/s2); productie-VPS bijgewerkt. | data/iraq-real-schools-extra.json, scripts/fetch-extra-iraq-schools.mjs, scripts/upsert-real-iraq-schools.mjs |
| 2026-06-09 | Product / students + trips | Huis-/ophaalpunten voor 503 leerlingen nabij hun school (lat/lng + address_line1/address_city); bus routes en trip stops herschikt langs ophaalvolgorde; npm run seed:student-pickups; seed writeIraqDemoCoreDataset aligned; productie-VPS bijgewerkt. | scripts/seed-student-pickup-locations.mjs, seedIraqDemo.ts, deploy/seed-student-pickups.sql |
| 2026-06-09 | Data / Iraq-only | Niet-Irak verwijderd: Belgische scholen s1/s2, bussen met BE-routes, demo@demo.be / nexonsolutions.be / belgium users; alleen ira_* + irq_* scholen blijven; purgeNonIraqData bij serverstart; Play review → play.review@demo.local + ira_01. | scripts/purge-non-iraq-data.sql, seedIraqDemo.ts, server.ts |
| 2026-06-09 | Auth / operators | danny.v@nexonsolutions.be beschermd: uitgesloten van Iraq-purge; ensureNexonOperatorUser bij serverstart (rol government, global scope); account-delete geblokkeerd; optioneel NEXON_OPERATOR_PASSWORD in .env. | seedIraqDemo.ts, server.ts, lib/deleteUserAccount.ts, scripts/purge-non-iraq-data.sql |
| 2026-06-09 | Product / bus-sim | Demo-bussen langs ophaalpunten: open pickup-run (student stops → school) i.p.v. gesloten lus; OSRM-wegen; syncBusPickupRoutesFromStudents bij start; ping-pong heen/terug voor doorlopende sim. | lib/busPickupRoute.ts, server.ts |
| 2026-06-09 | Mobile / package ID | Android + iOS bundle/application ID → com.omnitransit.pro (was .app); Kotlin packages + mapstructuur com/omnitransit/pro/; CI/docs (project.yml, TestFlight workflow). Server/web ongewijzigd. | android-app/**, android-app-legacy/**, ios-app/project.yml, .github/** |
| 2026-06-24 | Auth / Play review | Google Play OTP bypass: whitelisted phone +32999999999 + static code 123456 (PLAY_STORE_REVIEW_PHONE / PLAY_STORE_REVIEW_OTP); no Twilio send; account u_play_review always active with phone OTP (no password); other demo accounts remain disabled. | lib/playStoreOtpReview.ts, seedIraqDemo.ts, server.ts, android-app/PLAY-STORE-SETUP.md, deploy/env.production.template |
| 2026-06-24 | Deploy / secrets | GitHub secrets PRODUCTION_PLAY_STORE_REVIEW_PHONE, PRODUCTION_PLAY_STORE_REVIEW_OTP, PRODUCTION_PLAY_STORE_DEMO_ROLE → .env via patch-env-github-secrets.sh + deploy workflow. | .github/workflows/deploy.yml, deploy/patch-env-github-secrets.sh, .github/DEPLOY-SECRETS.md |
(Nieuwe rijen altijd onderaan toevoegen; oude rijen niet wijzigen.)
6. Status & open punten
- Huidige codebase: kan in fasen draaien (MVP → platform stack); zie
docs/platform/phase-1-mvp.mdendocs/platform/phase-2-v1.md. - Gap-analyse naar 40M/600k: periodiek invullen in
docs/platform/capacity-baseline.csvendocs/platform/load-test-plan.md.
7. Publieke documentatie (Docusaurus) en domeinen
- De map
docs/(Markdown, ADR’s, runbooks) is de bron;documentation/bevat Docusaurus en publiceert die inhoud als statische site (geen secrets in die content). Klant‑handleiding (docs/user-guide/) staat naast technische indexen; vertalingen ar-IQ en ckb voor die gids zitten onderdocumentation/i18n/<locale>/docusaurus-plugin-content-docs/current/user-guide/(korte UI‑teksten blijven insrc/locales/*.json). - Productie: configureer
PRODUCTION_APP_URL,PRODUCTION_TRACKER_HOST, optioneelPRODUCTION_DOCS_HOST(= bv.docs.omnitransitiq.com) enPRODUCTION_DOCS_URLin GitHub Actions secrets; DNS naar de juiste server(s). Details:../.github/DEPLOY-SECRETS.md. - Meerdere servers (schaal): wijs per rol hostnamen toe (app vs. ingest vs. docs-edge); werk dit document + platform-docs bij wanneer je traffic splitst.
Laatste inhoudelijke update van dit document: zie laatste regel in §5.