Commit Graph
8 Commits
Author SHA1 Message Date
phranck cfa8b31631 Refactor: Standardize UI card styling and remove em-dashes
- Unified card headers: gap-3, Icon size 20, text-accent color
- PlansCard: collapsible sections, animated expand/collapse
- update-plans-data.ts: export all plans (no limit)
- Replaced all em-dashes with colons or full sentences
- Content text standardized to text-lg across all cards
- FeatureCard, ArchHighlight descriptions adjusted
2026-02-07 00:24:19 +01:00
phranck 0d10b0255d Feat: Add Plans Dashboard Card with hourly data sync
- Standardize plan file structure (PLAN_TEMPLATE.md): Title → Preface → Context → Spec → Design → Implementation → Checklist
- Rewrite all 24 plan prefaces in natural, action-focused language with markdown support
- Add update-plans-data.ts script: extracts top 5 open + 5 done plans from plans/ directory
- Add PlansCard React component with markdown rendering (react-markdown)
- Integrate PlansCard into dashboard (below activity heatmap)
- Add usePlansCache hook with 5-minute localStorage cache
- Add update-plans-data.yml GitHub Actions workflow (hourly trigger)
- Install react-markdown dependency for markdown-in-JSON rendering
- Update npm scripts: prebuild and update:plans
2026-02-06 23:12:27 +01:00
phranck 631d451eca Feat: optimize social lookup with GitHub Social API, instance validation, and timeouts
Add fetchGitHubSocialAccounts() using /users/{login}/social_accounts API
as primary source. Validate Mastodon domains via NodeInfo instead of
blocklists. Add 5s timeouts to all fetch calls. Expand known instances
list. Skip cross-verification for authoritative sources (github, keybase).
Full refresh now clears cache to prevent stale false positives.
2026-02-05 12:17:33 +01:00
phranck c78d439c4d feat(dashboard): add social account lookup for stargazers
- Add multi-source social search (Keybase, about.me, Linktree, GitHub bio/blog)
- Implement avatar comparison and cross-platform verification
- Create GitHub Action for scheduled cache updates (2h incremental, weekly full)
- Display Mastodon, Bluesky, Twitter links in stargazer popover
- Add smooth hover animations with invisible bridge for better UX
- Add social-overrides.json for manual account mappings
2026-02-04 20:09:55 +01:00
phranck bdb6d0c3f9 Chore: Fourth-pass optimization — bug fix, auto test counts, ESLint clean, constant extraction
- Fix: parseTerminalFormatting used undefined 'key' instead of 'partKey' (TS error)
- Fix: ESLint setState-in-effect errors (4→0) via cleanup patterns and hydration-sync
- Feat: Auto test/suite counts from Swift project at build-time (prebuild script + env vars)
- Refactor: ArchHighlight sub-component eliminates 4× duplicated pattern in page.tsx
- Refactor: BTN_PRIMARY/BTN_SECONDARY constants replace duplicated button classes
- Refactor: CRT geometry object centralizes repeated calc() layer positions
- Refactor: 13 magic numbers → named constants in TerminalScreen (timings, delays)
- Refactor: Icon component extended with custom SVG support (copy icon)
- Refactor: cloudGradient() helper replaces 6× duplicated radial-gradient strings
- Refactor: HIGHLIGHT constants object for syntax highlighter colors
- Refactor: text-glow CSS utility replaces duplicated textShadow inline styles
2026-02-02 15:38:33 +01:00
phranck d549869645 Refactor: Deep optimization pass across landing page codebase
Performance & memory:
- HeroTerminal: fix setInterval one-time random (now recursive setTimeout),
  reuse single Howl for seeks, track all timers via pendingTimersRef
- RainOverlay: cap at 30fps, skip on prefers-reduced-motion
- SpinnerLights: pre-compute boxShadow at spawn, nextId in useRef
- Remove eager audio preloads from <head> (Howler loads lazily)
- CloudBackground: remove unnecessary 'use client' (now Server Component)

Type safety & correctness:
- Import BootStep/SchoolStep/JoshuaStep/TerminalEntry from terminal-parser
  instead of duplicating interfaces; typed terminal-data.ts export
- ThemeProvider: isTheme() type guard replaces unsafe 'as Theme' casts,
  instanceof guard for event.target, try/catch on localStorage.setItem
- useCopyToClipboard: cancel previous timer on rapid clicks, try/catch
  around clipboard API, cleanup on unmount
- TerminalScreen: use config.initialCursorDelay instead of magic 18000,
  type predicate for filter(), track glitch reset timer for cleanup

Accessibility (WCAG):
- prefers-reduced-motion: global CSS rule + JS skip in Rain/Spinner/Glitch
- aria-hidden on decorative elements (Rain, Spinner, Clouds)
- focus-visible ring on ThemeSwitcher, CodePreview, PackageBadge buttons
- aria-pressed on active theme button, nav aria-label, main tabIndex

Code quality:
- Extract useCopyToClipboard hook (CodePreview + PackageBadge)
- bg-frosted-glass CSS utility replaces 3x inline color-mix
- hover:bg-white/* → hover:bg-foreground/* for theme consistency
- Remove dead zoomed prop, stale eslint-disable, move lineRefsRef up
- import type for ReactNode in FeatureCard
2026-02-02 14:21:03 +01:00
phranck 33f993e834 Fix: Remove readonly constraint from terminal data
- Remove 'as const' from generated terminal-data.ts
- Add type assertion for INTERACTIONS array to fix TypeScript error
- Fixes production build failure with readonly type mismatch
2026-02-02 11:12:03 +01:00
phranck fbfbdc3420 Feat: Add terminal script parser and markdown-based terminal content
- Create terminal-parser.ts to parse terminal-script.md
- Add build script (generate-terminal-data.ts) to convert markdown to TypeScript
- Refactor TerminalScreen.tsx to use generated data instead of hardcoded arrays
- Add prebuild script to package.json for automatic data generation
- Install tsx and @types/howler dev dependencies
- Fix parser to preserve spacing in COUNTER prefix (Memory Test:  )
- Update terminal-script.md documentation with [INLINE] tag explanation

Now terminal content can be edited in markdown without touching TypeScript:
1. Edit terminal-script.md
2. Run: npx tsx scripts/generate-terminal-data.ts
3. Reload browser - changes are live
2026-02-02 11:08:12 +01:00