A mobile-first app for navigating project management tools, techniques, and frameworks. Inspired by the flash card deck concept, it provides intuitive card-based navigation through PMO tools, methodologies, domain tasks, and advanced techniques. · Built with Manus
Stars
0
Forks
0
Watchers
0
Open Issues
0
Overall repository health assessment
^5.2.2^1.2.12^1.1.15^1.1.7^1.1.10^1.3.3^1.1.12^2.2.16^1.1.15^2.1.16^1.1.15^2.1.7^1.1.16^1.2.14^1.1.15^1.1.7^1.3.8^1.2.10^2.2.6^1.1.7^1.3.6^1.2.3^1.2.6^1.1.13^1.1.10^1.1.11^1.2.8^2.0.7^1.12.0^0.7.1^2.1.1^1.1.1^9.5.3^8.6.0^4.21.2^2.0.5^12.23.22^1.4.1^1.4.2^4.2.0^0.453.0^5.1.5^0.4.6^19.2.1^9.11.1^19.2.1^7.64.0^3.0.6^2.15.2^2.0.7^1.4.0^3.3.1^1.0.7^1.1.2^3.3.5^4.1.12^0.1.1^0.5.15^4.1.34.17.21^3.58.1^24.7.0^19.2.1^19.2.1^5.0.4^2.0.6^10.4.20^0.25.0^10.15.1^8.4.47^3.6.2^4.1.14^4.19.1^1.4.05.6.3^7.1.7^0.0.57^2.1.4196
commits
Checkpoint: SEO fixes for /: (1) Title expanded from "StratAlign" (21 chars) to "StratAlign — PMO Toolkit for Project Managers" (49 chars). (2) Meta description added (145 chars) covering 198 tools, 8 decks, AI finder, templates, and podcasts. (3) Meta keywords tag added with 9 PM-relevant terms. (4) Hero image alt text changed from empty to "Project manager working with PM tools and frameworks". (5) document.title set via useEffect in Home.tsx for SPA navigation. 96 tests passing.
41c9f70View on GitHubCheckpoint: Voice & AI Fix: (1) Maya now uses Studio-O (female) and Chris uses Studio-Q (male) — both previously had wrong gender voices. All 5 characters now have distinct voices: Alex=Journey-D, Sam=Journey-O, Jordan=Journey-F, Maya=Studio-O, Chris=Studio-Q. (2) AI Tool Finder system prompt upgraded to senior consultant persona with specific action guidance and 2-3 sentence reasons per recommendation. Token limit raised to 1200, timeout to 30s. Dark mode text colour fixed in AI summary. "Listen to episode" shortcut button added to each recommendation card. 5 new vitest tests for voice gender correctness. 101 tests passing.
3289237View on GitHubCheckpoint: Root cause: selectCast required complexity score ≥6 to include all 5 characters, but most cards score 2-4. Maya and Chris were almost never selected. Fix: Jordan/Maya/Chris now rotate as guest slots. Simple cards (score ≤1) get Alex+Sam+1 rotating guest. Medium cards (score 2-3) get Alex+Sam+2 rotating guests. Complex cards (score ≥4) get all 5. Updated 22 vitest tests. 96 tests pass.
0ff3c07View on GitHubCheckpoint: Root cause of silent jingle/outro: AudioContext auto-suspends after long async operations (episode generation takes 10-30s). When source.start(0) was called on a suspended context, it fired silently and onended fired immediately. Fixed by awaiting _audioCtx.resume() inside playAudioBuffer() before creating the BufferSource. This ensures the context is always in 'running' state before playback begins.
445051dView on GitHubCheckpoint: Root cause of missing intro jingle found via browser test: loadAudioBuffer returned null when called while a fetch was already in flight (no promise caching). Fixed by storing in-flight Promises in _audioBufferPromises so concurrent callers await the same fetch. unlockAudioContext() now immediately stores both promises so playJingle always gets a real AudioBuffer, not null.
0d02757View on GitHubCheckpoint: Two bugs fixed: (1) outro was firing when stop() was called because audio.src='' triggers onended — fixed with isStoppedRef guard that is set before clearing src and checked at the top of playNext. (2) Jingle buffers now pre-load immediately when AudioContext is unlocked so there's no race condition. All 95 tests pass.
7ba744fView on GitHubCheckpoint: Root cause: user gesture chain breaks after async/await on iOS Safari, so new Audio().play() silently fails. Fix: AudioContext (Web Audio API) is unlocked synchronously in playCard/playDeck on the user tap, stays unlocked permanently. Jingle and outro now use AudioContext.createBufferSource() which never needs a gesture, even after long async fetches.
8853fc1View on GitHubCheckpoint: Root cause: reused HTMLAudioElement had stale onended handler that fired immediately without playing. Fix: playAudioFile() creates a fresh element each time and returns a Promise. Jingle now plays on every episode start (not just non-cached). Outro plays after last segment via clean Promise chain.
8b989ddView on GitHubCheckpoint: Root cause of missing jingle/outro: browser fetch() to CDN was blocked by CORS. Fix: both MP3 files are now in client/public and served as same-origin static assets at /stratalign-intro.mp3 and /stratalign-outro.mp3. AudioContext uses these paths directly — no CORS, no proxy needed.
15d1601View on GitHubCheckpoint: Fix intro jingle and outro stinger not playing on iOS (pre-fetched Blob + fresh audio element per play). Added 10 PM-specific joke templates to the script generation prompt so every episode has at least 2 relatable PM jokes woven naturally into the conversation.
998745aView on GitHubCheckpoint: Fix mindmap node text clipping (accurate char-width, 3 lines for root nodes, light-mode colour) and fix compare card search modal scroll on iOS Safari (height+overflow-hidden+min-h-0)
c60083aView on GitHubCheckpoint: StratAlign Theater v6 — new upbeat intro jingle (BPM=128, synth bass, snare, hi-hats, bright bell) + outro stinger (descending mirror motif) that plays after the final episode segment
cd8abcbView on GitHubCheckpoint: StratAlign Theater v5 — jingle fixed (dedicated audio element, pre-loaded), podcast script rewritten for NPR-meets-The-Office energy with cold opens, personality clashes, and rapid-fire takeaways
438baaaView on GitHubCheckpoint: StratAlign Theater v4 — intro jingle (3.5s broadcast-style arpeggio + chime) plays before fresh episodes, skipped on cache replays
887179fView on GitHub