Commit Graph
134 Commits
Author SHA1 Message Date
github-actions[bot] 2b0374bef6 chore: update social cache [skip ci] 2026-02-06 10:35:50 +00:00
phranck 8d1e5a5461 Fix: Auto-refresh timer respects cache TTL remaining time 2026-02-06 11:10:31 +01:00
phranck 48cb66de57 Chore: Filter [skip ci] commits from dashboard 2026-02-06 10:57:05 +01:00
github-actions[bot] 39825a210a chore: update social cache [skip ci] 2026-02-06 08:35:48 +00:00
github-actions[bot] 83be2d64e0 chore: update social cache [skip ci] 2026-02-06 06:46:21 +00:00
github-actions[bot] b19a2aa114 chore: update social cache [skip ci] 2026-02-06 04:11:52 +00:00
github-actions[bot] 15596701ef chore: update social cache [skip ci] 2026-02-06 01:14:20 +00:00
phranck 60051ce07f Fix: Stack and center footer text on phones/tablets (< 1024px) 2026-02-06 00:55:20 +01:00
phranck 40134628a9 Fix: Center dashboard header on phones, reload icon below 2026-02-06 00:52:39 +01:00
phranck fe7ce838ef Fix: Disable HeroTerminal power button on phones only (< 768px)
Terminal is still visible on phones but the interactive power-on
feature is disabled. Tablets and larger screens keep full functionality.
2026-02-06 00:50:40 +01:00
phranck 3b44a47300 Fix: Hide HeroTerminal on mobile, reduce top padding 2026-02-06 00:48:54 +01:00
phranck d47d7e47b6 Fix: Hide package badge and code preview on mobile 2026-02-06 00:47:34 +01:00
phranck 1c60cfaea7 Fix: Mobile responsive - CommitList, footer, hide heatmap
- CommitList: Hide SHA on mobile, smaller text, icon-only expand button
- Footer: Center cache status on mobile, hide rate limit
- Heatmap: Hidden on mobile (< 640px) - not useful on small screens
2026-02-06 00:44:57 +01:00
phranck f4a149abc6 Fix: Heatmap responsive - horizontal scroll on mobile
On screens < 600px: fixed cell size (10px), horizontal scroll enabled,
day labels sticky on left. On larger screens: cells fill available width.
2026-02-06 00:42:41 +01:00
phranck b0028258e1 Fix: Responsive design for mobile (iPhone SE)
- SiteNav: Add hamburger menu for mobile, hide desktop links on small screens
- StatCard: Stack vertically on mobile (icon+label top, number bottom)
- Icon: Add line3Horizontal and xmark custom icons for hamburger menu
2026-02-06 00:36:28 +01:00
phranck 79d717e52a Chore: Remove CC license from website footer 2026-02-06 00:32:14 +01:00
phranck 16c530dfc1 Fix: Keep data visible during background refresh
Adds isRefreshing state separate from loading. During auto-refresh,
existing data remains visible (no skeleton flash). Only the spinner
icon shows refresh activity. Removes manual refresh button.
2026-02-06 00:16:43 +01:00
phranck 0aac32f16d Feat: Add smooth list animations for commit updates
Uses Framer Motion for enter/exit/reorder animations. New commits
slide in from the top, existing commits smoothly animate to their
new positions. Adds ~40KB to the bundle.
2026-02-06 00:10:44 +01:00
phranck ef493c7184 Feat: Add localStorage cache + auto-refresh to dashboard
Prevents redundant GitHub API calls on page reload. Data is cached in
localStorage with a 5-minute TTL and auto-refreshed in the background.
Force-refresh button with 60s cooldown. Footer shows last-updated time
and countdown to next refresh.
2026-02-06 00:03:03 +01:00
github-actions[bot] ac958a0844 chore: update social cache [skip ci] 2026-02-05 22:21:55 +00:00
github-actions[bot] 9409182c90 chore: update social cache [skip ci] 2026-02-05 20:27:09 +00:00
github-actions[bot] 34eda1912d chore: update social cache [skip ci] 2026-02-05 18:45:20 +00:00
github-actions[bot] e104668069 chore: update social cache [skip ci] 2026-02-05 16:41:05 +00:00
github-actions[bot] 3193360cf6 chore: update social cache [skip ci] 2026-02-05 14:42:58 +00:00
github-actions[bot] ab15305be5 chore: update social cache [skip ci] 2026-02-05 14:23:53 +00:00
phranck 64fe55eda2 Feat: replace Branches stat card with Open Issues on dashboard 2026-02-05 12:17:39 +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 60c8edf795 Fix: pad heatmap to full year and update activity cache with 52 weeks 2026-02-05 01:27:16 +01:00
phranck 3ca22e1944 Fix: cap heatmap cell size via MIN_COLUMNS to prevent oversized cells 2026-02-05 01:10:39 +01:00
phranck c77142ede6 Fix: add missing useEffect import and fix AvatarMarquee overflow 2026-02-05 01:02:30 +01:00
phranck 32b30b7387 Reapply "feat: fall back to cached weeklyActivity from weekly-activity-cache.json when /stats/commit_activity is unavailable"
This reverts commit b89c78f014.
2026-02-04 22:04:31 +01:00
phranck 59b2a303ce Reapply "perf: preload stargazer avatars for instant Stargazers panel"
This reverts commit 15633047bc.
2026-02-04 22:04:31 +01:00
phranck b89c78f014 Revert "feat: fall back to cached weeklyActivity from weekly-activity-cache.json when /stats/commit_activity is unavailable"
This reverts commit c891e6ca6e.
2026-02-04 21:59:49 +01:00
phranck 15633047bc Revert "perf: preload stargazer avatars for instant Stargazers panel"
This reverts commit e9cea4b2bf.
2026-02-04 21:59:49 +01:00
phranck e9cea4b2bf perf: preload stargazer avatars for instant Stargazers panel 2026-02-04 21:57:19 +01:00
phranck c891e6ca6e feat: fall back to cached weeklyActivity from weekly-activity-cache.json when /stats/commit_activity is unavailable 2026-02-04 21:54:39 +01:00
phranck 4f57e49d0b Fix: Marquee hover stops only for visible avatars; prevent heatmap popover flicker 2026-02-04 21:42:22 +01:00
phranck abfc3a05e9 feat(dashboard): add iOS-like swipe/drag with momentum to marquee
- Touch swipe on mobile, mouse drag on desktop
- Momentum scrolling with friction-based deceleration
- Click vs drag detection (5px threshold)
- Cursor grab/grabbing visual feedback
- Popover visibility bounded to 5% edge margin
2026-02-04 21:28:42 +01:00
phranck a6930f17be feat(dashboard): add stargazer avatar marquee with horizontal scroll
- Create generic AvatarMarquee component for horizontal scrolling avatars
- Extract StargazerPopoverContent for social links display
- Refactor StargazersPanel to use AvatarMarquee
- Reorder StatCards: Stars, Contributors, Forks, Releases | Commits, Branches, Open PRs, Merged PRs
- Add fade-in/out masks at edges
- Smooth brake/accelerate on hover
- Popover visibility bounded to visible area
- Add cursor-pointer to Refresh button
- Performance: memoized callbacks, stable props
- Add .env.local to .gitignore
2026-02-04 21:23:15 +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 df564fba42 Perf: Preload hard-drive-boot audio for faster playback 2026-02-04 16:11:12 +01:00
phranck 3b1f25855e Fix: Only add Authorization header when token is non-empty 2026-02-04 14:49:54 +01:00
phranck f9b106e509 Feat: Unified IconBadge component for SF Symbols
- Add IconBadge component with sm/md/lg variants
- Refactor FeatureCard to use IconBadge
- Update ArchHighlight and RepoInfo for consistency
- Add DASHBOARD_GITHUB_TOKEN to CI for rate limit
2026-02-04 14:18:54 +01:00
phranck 5855f10154 add dashboard page 2026-02-04 03:20:39 +01:00
phranck 9f5f24d02c Feat: CRT power-on/off raster animations + reduce initial cursor delay
- Feat: CRT shutdown animation — vertical collapse → horizontal collapse → phosphor afterglow dot
- Feat: CRT boot animation — horizontal line expands vertically (deflection warm-up)
- Fix: No content flash during zoom-back (powered=false before shutdownPhase clears)
- Fix: Edge glow only visible when powered on
- Chore: Reduce initial cursor delay from 18s to 1.5s (BIOS appears almost immediately)
- Chore: Terminal script tweaks (login name, drive detection, grade spacing)
2026-02-02 16:18:17 +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 85dd84aee8 Chore: Third-pass cleanup — timer safety, dead assets, ref hygiene
- HeroTerminal: all timers now flow through scheduleTimer/pendingTimersRef,
  eliminating seekTimeoutRef/zoomTimerRef/powerOffTimerRef entirely;
  poweringOnRef guards against rapid double-click race condition
- TerminalScreen: trim lineRefsRef to ROWS in pushLine to prevent
  unbounded stale DOM ref accumulation
- Remove ~1.1MB unused audio duplicates (mp3 copies of m4a files,
  unreferenced seek2 in both formats)
- Remove unused favicon-16.png
2026-02-02 15:10:59 +01:00
phranck 67ed7e25e1 Fix: Preload power-on beep for instant first-click playback 2026-02-02 14:53:54 +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 aecc111f3c Feat: Nav icons, theme switcher hydration fix, and pulse animation
- Add SF Symbol icons to nav links (book for Docs, </> for GitHub)
- Fix theme button onClick broken by hydration mismatch: start with
  null on both server and client, sync via useEffect after mount
- Active theme dot pulses with 3s ease-in-out glow animation
- Stronger glow on active theme indicator (triple-layer box-shadow)
2026-02-02 13:48:42 +01:00