================================================================================ PRISM NOTES - SESSION LOG Project history, decisions, and architectural milestones ================================================================================ [2026-01-14 16:30] ARCHITECTURE DECISION: Migrate to Vite Frontend + Bun Backend - Decision: Adopt Vite as frontend bundler to enforce TypeScript everywhere - Reasoning: Current .js tool deviation and CDN Tailwind are pragmatically expensive Triggers met: >5 tools, tools interact with PocketBase (type safety needed) - Architecture (FINAL): * Backend: Bun + Hono (server.ts remains unchanged) * Frontend: TypeScript + Vite + PostCSS Tailwind * Tools: Convert to .ts, compiled by Vite bundler * Package Manager: Bun exclusively (one bun.lock, no npm/pnpm conflicts) - Benefits: * Type safety everywhere (no vanilla JS) * HMR in dev (fast reloads <100ms) * Optimized bundles (minified, tree-shaken) * Tools scale cleanly as .ts modules * Removes CDN Tailwind and .js tool deviations - Implementation Plan (Next Session): 1. Setup Vite config + package.json scripts (~15 mins) 2. Convert index.html to Vite entry point (~30 mins) 3. Extract inline scripts to .ts modules (~1 hour) 4. Convert all tools to .ts: screen-capture, screen-record, user-alert, user-email-lookup (~2 hours) 5. Configure Tailwind with PostCSS for Vite (~15 mins) 6. Update Monica persona (Bun backend + Vite frontend standard) (~20 mins) 7. Clean DEVIATIONS.txt (remove CDN Tailwind, .js tools entries) (~10 mins) 8. Test build pipeline and dev experience (~30 mins) Total: ~4-5 hours - Current State: * User email lookup component created and integrated (NOT committed yet) * All other work committed and synced * Ready for Vite migration on next session - Notes for Next Session: * Start with: `git status` to see uncommitted email-lookup work * Decide: Include email-lookup work in Vite migration OR commit first * Vite setup: Use `npm init vite@latest` as template, adapt to Bun * Key files to create: vite.config.ts, tailwind.config.js, postcss.config.js * Key files to convert: index.html → src/main.ts, all tools to .ts * Build commands: "build": "vite build", "dev": "bun run build && PORT=3030 bun run --watch server.ts" [2026-01-14 16:00] MONICA SESSION: User Email Lookup Feature - New Standalone Component - Feature Request: Add hover tooltips showing email addresses when hovering over names in sharing UI - Architecture Decision: Created as standalone component in /tools/user-email-lookup/ Reasoning: Self-contained, reusable utility with single responsibility (email lookup) - Implementation: * Created /tools/user-email-lookup/index.js (window.setupUserEmailLookup API) * Created /tools/user-email-lookup/README.md (complete documentation) * Integrated into index.html noteForm and conversationForm * Uses existing Associations collection for first_name → email lookups * Implements email caching to minimize PocketBase queries * Uses MutationObserver for dynamic capsule detection * Shows email in native browser tooltip on hover - Features: * On note creation, user types names (e.g., "John, Sarah, Mike") * Each name creates a capsule in selectedUsersContainer * Hovering over capsule shows email (first hover queries DB, subsequent cached) * Cache persists for page session, can be cleared via window.clearEmailLookupCache() - Integration Points: * Script loaded: * Initialized: showNoteForm() and showConversationForm() * Container: #selectedUsersContainer (for both notes and conversations) - Status: Implemented and integrated, NOT YET COMMITTED - Note: Will be converted to .ts as part of Vite migration (next session) [2026-01-14 15:45] MONICA SESSION: Standards Alignment Fixes - Feature Request: Add hover tooltips showing email addresses when hovering over names in sharing UI - Architecture Decision: Created as standalone component in /tools/user-email-lookup/ Reasoning: Self-contained, reusable utility with single responsibility (email lookup) - Implementation: * Created /tools/user-email-lookup/index.js (window.setupUserEmailLookup API) * Created /tools/user-email-lookup/README.md (complete documentation) * Integrated into index.html noteForm and conversationForm * Uses existing Associations collection for first_name → email lookups * Implements email caching to minimize PocketBase queries * Uses MutationObserver for dynamic capsule detection * Shows email in native browser tooltip on hover - Features: * On note creation, user types names (e.g., "John, Sarah, Mike") * Each name creates a capsule in selectedUsersContainer * Hovering over capsule shows email (first hover queries DB, subsequent cached) * Cache persists for page session, can be cleared via window.clearEmailLookupCache() - Integration Points: * Script loaded: * Initialized: showNoteForm() and showConversationForm() * Container: #selectedUsersContainer (for both notes and conversations) - Status: Implemented and ready for testing - Next: Test with real Associations data and refine if needed [2026-01-14 15:45] MONICA SESSION: Standards Alignment Fixes - Action: Addressed audit findings - minor alignment issues - Fixes Applied: * Added DEVIATION entry for tool .js files (screen-capture, screen-record, user-alert) Reasoning: Standalone utilities with direct browser execution, not business logic Review date: 2026-03-01 * Updated README.md: Fixed port references (5500 → 3030) Enforced port 3030 explicitly in documentation * Created tools/user-alert/README.md (was missing, had only index.js) Documentation: Features, usage, API, PocketBase schema, troubleshooting * Enhanced tool file comments: - screen-record/index.js: Added detailed @description, @usage, @dependencies, @integration - user-alert/index.js: Added detailed @description, @usage, @dependencies, @integration, @gotchas * Maintained screen-capture README.md (already present) - Standards Violations Documented: * CDN Tailwind + Vanilla JS frontend → DEVIATIONS.txt (review 2026-02-14) * Tool files in .js → DEVIATIONS.txt (review 2026-03-01) - Audit Status: All minor issues resolved - Next: Frontend TypeScript + Bun build conversion deferred per user guidance [2026-01-14 15:15] MONICA SESSION: Audit & Standards Enforcement Setup - Action: Established formal audit process and standards compliance tracking - Created logs/AUDIT_CHECKLIST.txt with 44 systematic compliance checks - Created logs/DEVIATIONS.txt for quick-reference of non-standard but accepted deviations - Updated git.instructions with: * RULE 8: User-controlled commits and syncs (no unprompted operations) * AUDIT PROCESS section: Mandatory at project start and before commits * COMPONENT-FIRST ARCHITECTURE: Evaluates new features for standalone component status - Audit Result: 40 passes, 2 failures (both documented), 1 warning - Findings: * package-lock.json present (npm violation of Bun-exclusive standard) — REMOVED * Vanilla JS frontend (documented deviation) — ACCEPTED * Tailwind CDN (documented deviation) — ACCEPTED - Status: STANDARDS COMPLIANT after removal of npm lock file [2026-01-11 TODO] Screen Capture Window Visibility Issue - INVESTIGATE LATER - Issue: Prism Notes window still appears in getDisplayMedia() dialog options even though visibility is hidden before dialog opens - Attempted Fix: Used visibility:hidden on app elements before getDisplayMedia() - Result: Not working - window still shows in screen selector - Root Cause: Unclear - may be timing issue or browser caching of window list - Workaround: User can manually select other screen/window instead - Investigation Needed: * Try alternative hiding methods (display:none, opacity:0, positioning off-screen) * Check if timing delay needed before getDisplayMedia() * Verify with different browsers (Chrome vs Edge vs Firefox) * Consider if OS-level window management interferes - Impact: Minor UX issue - doesn't prevent functionality, just less elegant - Priority: LOW - defer until screen capture feature stabilized otherwise [2026-01-10 20:10] MONICA SESSION: Fixed Container Injection Bug - Issue: Refactor commit (cee9157) had CONTAINERS + initializeContainers() code but ALSO kept all old HTML in DOM, creating duplicates and preventing injection - Root Cause: During refactor, old HTML wasn't removed before injection system added - Fix Applied: * Removed all duplicate HTML container elements from DOM (login, notesList, noteDetail, noteForm) * Restored CONTAINERS object with all 6 templates (login, notesList, noteDetail, noteForm, conversationForm, conversationsList) * Restored initializeContainers() function to inject templates on page load * Called initializeContainers() BEFORE updateAuthUI() to ensure DOM ready * Added conversation feature support (was added in refactor, now working) - Result: Page now dynamically injects all containers from template literals - Status: Fixed and committed (c733930) - Next: Verify rendering works correctly when accessing page [2026-01-10 14:00] Container Refactoring: Template Literals (Option 1) - Decision: Extracted all container HTML to template literals in index.html - Reasoning: Allows independent container updates without touching markup Each container is now self-contained and versioned separately - Implementation: * Created CONTAINERS object with keys: login, notesList, noteDetail, noteForm, conversationForm, conversationsList * Added initializeContainers() function that injects all templates on page load * Containers maintained in-file for simplicity during active development - Future Intent: Migrate to Option 2 (separate files in containers/) when project becomes more established and needs full file separation - Status: Functional and ready for independent container updates ================================================================================