تخطي إلى المحتوى الرئيسي

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)

DomeinDoelOpmerking
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.
GroeiToekomstige 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)

  1. Stateless applicatie waar mogelijk; sessies/cache extern (bijv. Redis).
  2. Horizontale schaal voor gateway, API en workers; geen “één grote machine”-mentaliteit.
  3. Data: partitionering / tijdreeksen-archief; leespaden voor rapportage gescheiden van hot write-path waar passend.
  4. Backpressure & limieten — buffers, rate limits, duidelijke foutpaden (zie telematics scaling).
  5. Observability — metrics, logging, runbooks; SLO’s expliciet houdbaar maken.
  6. Documentatie — significante beslissingen in ADR; dit master-document bijwerken + logregel toevoegen.

4. Verplichte workflow (mens + agent)

Vóór substantiële code- of infra-wijzigingen:

  1. Lees dit bestand (relevante secties + laatste logregels).
  2. Lees docs/platform/README.md voor index; open betrokken ADR’s en telematics/platform docs.
  3. 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:

  1. Werk de relevante secties in dit document bij (doelen, status, links).
  2. Voeg een regel toe aan §5 Wijzigingslog (append-only).
  3. Voeg of werk een ADR bij indien het een blijvende architectuurkeuze is.

5. Wijzigingslog (append-only)

Datum (UTC)GebiedSamenvattingDetails / PR / commit
2026-05-15Docs + Cursor rulesMaster-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-15GitHub / DXRepo-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-15Docs-site + deployDocusaurus (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-15GitHub / DXScript 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-15GitHub / DXProject #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-15Cursor rulesNieuwe 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-15GitHub / DXDependabot 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-15GitHub / DXRoadmap-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-15GitHub / DXProject #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-15Product / feedbackIn-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-15Product / feedbackSemantische 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-15Security / RBACCanonieke 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-15Deploy / docsCanonieke 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-15Product / authHeropenen 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-15Product / authDemo 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-15Product / studentsParent 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-15Docs-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-15Product / supportdeskIn-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-15Product / supportdeskTicket 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-15Product / map simBus 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-15Product / schools + studentsSchool 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-18Product / payments + UXStudent 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-18Deploy / paymentsPRODUCTION_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-18Product / walletBij 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-02Identity / mobileHybride 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-24Mobile / AndroidNative 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-02Mobile / PlayPlay Store: Gradle release signing (keystore.properties + omnitransit-upload.jks lokaal), PLAY-STORE-SETUP.md; privacy policy public/privacy.htmlhttps://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-02Mobile / AndroidFeature-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-02Mobile / AndroidWeb-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-05Mobile / iOSNative 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-05Mobile / iOS App StoreApple-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-05Legal / Play StorePrivacy 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-05Legal / account deletionlib/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-08Mobile / Android v2Next-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-08Mobile / Android + iOSPlan 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-08Mobile / Android + iOSPost-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-08Mobile / Android + iOSRealtime 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-08Product / map + schoolsSchoolcampus 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-09Product / webComing 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-09Security / authDemo-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-09Product / webComing 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-09Product / schools + mapEchte scholen Irak (ira_01ira_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-09Product / schools + map+506 extra echte scholen (irq_0001irq_0506) via Nominatim per Irakese stad (npm run seed:fetch-schoolsiraq-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-09Product / students + tripsHuis-/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-09Data / Iraq-onlyNiet-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-09Auth / operatorsdanny.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-09Product / bus-simDemo-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-09Mobile / package IDAndroid + iOS bundle/application IDcom.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-24Auth / Play reviewGoogle 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-24Deploy / secretsGitHub 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


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 onder documentation/i18n/<locale>/docusaurus-plugin-content-docs/current/user-guide/ (korte UI‑teksten blijven in src/locales/*.json).
  • Productie: configureer PRODUCTION_APP_URL, PRODUCTION_TRACKER_HOST, optioneel PRODUCTION_DOCS_HOST (= bv. docs.omnitransitiq.com) en PRODUCTION_DOCS_URL in 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.