document.body.innerHTML = ...nukes the DOM, kills all event listeners, and breaks the audio engine- Replace with a hidden result
<div>that gets shown/hidden — same pattern used in other missions
- Currently
window.location.href = type + ".html"is an instant hard navigation - Add a CSS fade-out on mission launch (100ms) — one class + one timeout, massive perceived quality boost
- If a user refreshes mid-mission, all progress is lost
- Store
currentQuestion,score,timerLeftinsessionStorageand restore on load
- The hub already has skeleton CSS defined but it's not wired up
- Show skeletons while
getUserData()resolves, then swap in real XP/rank data
- Options buttons are clickable but not keyboard-accessible (no
Enter/Spaceshortcut, no focus trap in modals) - Add
keydownlisteners and proper focus management to the login modal and tour card
- All mission scripts load on every page even when not needed
- Each mission HTML should only load its own JS — audit and remove cross-page script leaks
- A PWA-ready service worker caching the shell (HTML/CSS/common JS) would make this deployable as an installable app — a huge differentiator for a portfolio project
- Firebase Hosting already supports this; just needs a
sw.js+ manifest
password.jsrecalculates entropy on everykeyup— wrap in a 150ms debounce
- After mission completion, let users replay only the questions they got wrong
- Requires storing wrong answers in
sessionStorage— minimal code, high educational value
- Firestore already stores XP as a running total; add a
xpHistory: arrayUnion({ts, delta, mission})write inupdateXP() - Render as a sparkline chart on
profile.htmlusing Canvas API (no library needed)
- The share button exists but only copies text
- Use Canvas API to generate a shareable rank card image (rank, XP, badge) —
canvas.toBlob()→ Web Share API withfiles
- Explains the module system, adaptive engine, and Firebase data model
- Signals professional project hygiene to anyone reviewing the repo
- Currently the rules live only in the Firebase console — add a
firestore.rulesfile so the security posture is auditable and version-controlled
- Run Lighthouse on the live URL, document the scores, and add a badge to the README
- Performance, Accessibility, Best Practices, SEO scores are a concrete signal of quality
og:title,og:description,og:image— makes the link preview look professional when shared on LinkedIn/Twitter
| Priority | Task | Effort | Impact |
|---|---|---|---|
| 1 | 4.4 — Expose Hacker Terminal track in Settings | 5 min | Free win (code already exists) |
| 2 | 2.1 — Page transitions | 30 min | High visual polish |
| 3 | 2.4 — Keyboard navigation & focus traps | 1 hr | Accessibility + credibility |
| 4 | 1.2 — Fix showResult() DOM nuke |
1 hr | Code correctness |
| 5 | 3.2 — Service Worker / PWA | 2 hr | Major differentiator |
| 6 | 1.1 — Split common.js |
3 hr | Long-term maintainability |
| 7 | 4.2 — XP history timeline on Profile | 2 hr | Profile page wow factor |
| 8 | 5.x — Portfolio docs (CONTRIBUTING, ARCHITECTURE, Lighthouse, OG tags) | 1 hr | Repo professionalism |