Skip to content

Project Status

Phase 9 — Feature Complete

Version: v1.1.3Updated: 2026-03-21Production: present.alterspective.com.au
Total Items

42

Done

42

In Progress

0

Sprint 6

0

Overall Progress

89/89 points (100%)
Critical8/8
High14/14
Medium12/12
Low8/8

Sprint 6 — Housekeeping & Next Features

0/0 done

Clean up artifacts, update stale docs, implement next high-value features

To Do0

Empty

In Progress0

Empty

Done0

Empty

By Category

AI Activity

Claude Opus 4.6Sprint 3 complete (9/9 items). Logger fix (info→stdout), ErrorBoundary→structured logger, confirm/alert→ConfirmDialog, health endpoint→APP_VERSION env, package.json→1.0.42, RLS domain→@alterspective.com.au, Zod env validation at startup, handleApiError helper on all 8 routes, Docker custom network + strict lockfile, modal a11y (useModalA11y hook: Escape/focus-trap/click-outside/role=dialog on all 3 modals), upload drag-drop + 50MB validation.
15 Mar, 03:00 pm45m 0s
Claude Opus 4.6Deployed v1.0.42 to production. Fixed .gitignore (corrupted UTF-16 entry), fixed ESLint error in error.tsx, created deploy user on VPS, stored VPS host key in vault + GitHub secrets, fixed .docker permissions. Updated KB-INT-SYS-028 with complete Deployment Guide and KB-INT-VPS-001 with deploy user/host key entries.
15 Mar, 02:30 pm30m 0s
Claude Opus 4.6Completed Sprint 2 (all 10 P2 items): hardened DOMPurify (removed style attr, sanitized mermaid SVG), added dashboard/admin loading+error pages, fixed audit hash chain race condition (Postgres function with FOR UPDATE), replaced all any types in pptx-converter, re-enabled no-explicit-any ESLint rule, pinned VPS host key, switched deploy to dedicated user, pinned pnpm/action-setup to SHA.
15 Mar, 02:00 pm30m 0s
Claude Opus 4.6Completed Sprint 1 — self-hosted Chronicle Display fonts (fixed CORS), added branded 404 page, root loading/error pages, admin Users & Analytics placeholder pages.
15 Mar, 01:00 pm30m 0s
Claude OpusSession ended. All changes uncommitted — ready for commit. Sprint 1: 8/12 done (all P1s complete). Remaining: 4 P2 UX items (CORS fonts, not-found page, loading/error pages, dead admin links).
15 Mar, 12:00 pm0s
Claude OpusBuilt shared AppHeader component with Alterspective logo (from brand guide), consistent navigation (Dashboard/Admin/Status/Guide), applied to all pages. Built ngrok tunnel (present.alterspective.io). Registered in KB ngrok config and unified service registry.
15 Mar, 11:30 am40m 0s
Claude OpusCompleted all 8 P1 Critical items: auth on access/presentation endpoints, security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy), Docker healthcheck (wget), IMAGE_TAG deploy fix, Postgres port lockdown.
15 Mar, 11:00 am20m 0s
Claude OpusAdded duration tracking to AI Activity feed and CLAUDE.md enforcement rules for mandatory dashboard updates.
15 Mar, 10:20 am25m 0s
Claude OpusCreated project dashboard — migrated 42 items from BACKLOG.md into dashboard.json, built /project page.
15 Mar, 10:00 am30m 0s
Claude OpusCompleted comprehensive 4-agent review (code, frontend, Playwright UX, CI/CD). Created BACKLOG.md and updated CURRENT_STATE.md.
15 Mar, 09:30 am30m 0s

Full Backlog

Critical8 items · 8 done
P1Auth: Unauthenticated access grant endpointSecurityXS
P1Auth: Missing authorization on presentation GETSecurityS
P1Auth: Missing authorization on presentation PATCHSecurityS
P1Security headers: Content-Security-PolicySecurityM
P1Security headers: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-PolicySecurityS
P1Docker healthcheck uses curl (not in Alpine)InfraXS
P1Deploy: IMAGE_TAG env var is emptyInfraS
P1Docker: Lock down Postgres port and default passwordInfraXS
High14 items · 14 done
P2Fix CORS font loadingUXM
P2Harden DOMPurify: remove style attributeSecurityS
P2Sanitize mermaid SVG outputSecurityS
P2Add branded not-found.tsxUXS
P2Add root loading.tsx and error.tsxUXS
P2Add dashboard loading.tsx and error.tsxUXS
P2Add admin loading.tsx and error.tsxUXS
P2Fix dead admin navigation linksUXS
P2Fix audit hash chain race conditionQualityM
P2Fix any types in pptx-converterQualityS
P2Re-enable no-explicit-any ESLint ruleQualityXS
P2Pin VPS host key in deploy workflowInfraS
P2Create dedicated deploy user (not root)InfraM
P2Pin pnpm/action-setup to commit SHAInfraXS
Medium12 items · 12 done
P3Modal accessibility improvementsA11yM
P3Mobile responsivenessUXL
P3Upload improvementsUXM
P3Logger and console fixesQualityS
P3Fix health endpoint stale versionQualityXS
P3Sync package.json version with release tagsQualityXS
P3CSRF token validationSecurityM
P3Fix RLS admin domain matchingSecurityXS
P3Add .env validation at startupQualityS
P3Stop leaking internal error messagesSecurityS
P3Docker improvementsInfraS
P3Code deduplicationQualityM
Low8 items · 8 done
P4Add faviconUXXS
P4Dynamic SEO metadata on viewer pageUXXS
P4Skip-to-content linkA11yXS
P4Presentation thumbnails on dashboard cardsUXM
P4Use theme tokens for chart coloursQualityXS
P4Fix toLocaleDateString server-side localeQualityXS
P4Build /admin/users pageFeatureL
P4Build /admin/analytics pageFeatureL

Ideas & Vision

Up Next

Slide interaction heatmap

Visual heatmap showing where viewers spend time on each slide

Export analytics to CSV/PDF

Let presentation owners download engagement data

Public/token-based viewing

Allow presentations to be viewed without Azure AD login via a secure link token

Future

Custom CSS overrides per presentation

Allow per-deck styling customisation beyond the brand theme

Multi-file asset upload

Support uploading supplementary files (images, PDFs) alongside presentations

Presentation versioning

Track and compare versions of the same presentation over time

Someday / Maybe

Collaborative annotations

Let viewers leave comments or reactions on specific slides