Skip to content

Backlog and improvement history ​

Historical snapshot from the squad review completed on 2026-03-23. The tables below preserve the original audit context and are not the current work queue.

Current planning source ​

Use GitHub issues for current work and GitHub milestones for release planning. Issue status, labels, and milestones replace static counts on this page.

Historical audit snapshot ​


Sprint A — Quick Wins ​

#TaskAreaEffort
12Finish login flow i18n (3 hardcoded strings in LoginView + 1 in useApi)FrontendSmall
25Use useFormatting() consistently (18 files still use inline toLocaleString)FrontendSmall
27Confirm raw fetch() in JoinView is intentional (add code comment)FrontendTiny
30Replace error: any with error: unknown in setup-database.tsAPITiny

Sprint B — Frontend Quality ​

#TaskAreaEffort
21Decompose AppLayout.vue (667 lines → SidebarNav, SettingsDropdown, MobileHeader)FrontendMedium
26Handle orphaned child records on organization soft-deleteAPISmall

Sprint C — Infrastructure & Ops ​

#TaskAreaEffort
33Add staging environment (bicepparam + GitHub env protection)InfraSmall
39Key Vault integration (when upgrading to Standard SWA tier)InfraMedium

Completed on August 30, 2026: Application Insights, Log Analytics, privacy-bounded backend telemetry, baseline alerts, and a guarded daily ingestion cap (#145).

Sprint D — Performance & Polish ​

#TaskAreaEffort
35Add pagination to list endpoints + pagination UIFull-stackMedium
36Replace emoji with icon library (Heroicons/Lucide)FrontendMedium
38Add Cosmos DB query projections (replace SELECT *)APISmall
42Lazy-load locale files (en.ts/no.ts ~800 lines each)FrontendTiny

Completed in the original audit ​

Click to expand completed items

P0 — Security & Data Integrity (9/9) ✅ ​

  1. Replaced custom JWT with jose + throws on missing secret
  2. Rate limiting on /auth/verify-code (5/15min/email)
  3. Capacity race conditions → retry loop with re-check
  4. authTokens partition key /token → /email
  5. Impersonation audit mandatory
  6. Added 10 missing Cosmos containers to Bicep (16/16)
  7. Added @secure() app settings
  8. Added type verification step to CI pipeline
  9. Removed user-scalable=no from viewport (WCAG 1.4.4)

P1 — Reliability & Quality (9/11) ✅ ​

  • HSTS header (#10)
  • Tightened CSP — no unsafe-inline in script-src (#11)
  • Admin error strings internationalized (#13)
  • Zod validation schemas (#14)
  • Fixed 401 handler — router.push + logout (#15)
  • Extracted shared types to models.ts (#16)
  • Backend tests for orders (#17)
  • Fixed silent E2E test failures (#18)
  • ESLint + CI lint pipeline (#19)
  • Global Vue error handler (#20)

P2 — Maintainability (5/10) ✅ ​

  • Replaced all alert()/confirm() with useToast/useConfirm (#22)
  • Added ARIA attributes (#23)
  • Added 404 catch-all route + NotFoundView (#24)
  • Page Object Model for E2E tests (#28)
  • Parallelized dashboard queries with Promise.all (#29)

P3 — Backlog (5/12) ✅ ​

  • Frontend unit tests for composables + auth store (#31)
  • Dependabot + CODEOWNERS + PR template (#34)
  • Lazy-loaded exceljs with dynamic import (#37)
  • Fixed orphaned Norwegian i18n keys (#40)
  • Added apple-touch-icon.png (#41)

Feature Ideas (unscheduled) ​

FeatureAreaNotes
Cross-Organization DashboardFrontendSuper Admin aggregate stats
Event DuplicationFull-stackClone event as template
Batch Order ApprovalFull-stackApprove/reject multiple orders
Offline ModeFrontendCache API data in IndexedDB
Email NotificationsAPIConfirmation emails, reminders
Push NotificationsFrontendPWA push for updates
CSV Import PreviewFrontendValidate before importing
Invitation Links / Public RegistrationFull-stackPhase 6 from old roadmap

Built with VitePress