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