Commit Graph
305 Commits
Author SHA1 Message Date
phranck f8c5ea3b6e Fix: Remove duplicate crt-scanline keyframes (old fast version)
The old 'background-position' animation was still present and
overriding the new slower 'translateY' version. Now only the
30s animation remains active.
2026-02-02 00:41:13 +01:00
phranck 8193335039 Fix: Slow down CRT scanline animation from 8s to 30s 2026-02-02 00:39:30 +01:00
phranck 3cbcce9b88 Feat: Add CRT monitor visual effects to terminal
Inspired by cool-retro-term, implements vintage CRT display effects:

**New Component: CRTEffects.tsx**
- Scanlines (horizontal raster lines)
- Screen curvature simulation (vignette)
- Glow/bloom effect
- Subtle flicker animation
- Animated noise overlay (Canvas API)
- Moving scanline sweep

**CSS Animations (globals.css)**
- @keyframes crt-flicker: Subtle brightness variation (0.15s loop)
- @keyframes crt-scanline: Horizontal line sweep (8s loop)

**Integration (HeroTerminal.tsx)**
- CRT effects only active when terminal is powered+zoomed
- Optimized parameters:
  - scanlineIntensity: 0.12
  - curvature: 0.08
  - glowIntensity: 0.25
  - flickerIntensity: 0.02
  - noiseIntensity: 0.04

Effects layer at z-index 200 with mix-blend-mode screen.
All effects are pointer-events-none to preserve interactivity.
2026-02-02 00:37:35 +01:00
phranck e7d68fd4cc Remove: CRT power-on sound completely
- Removed AudioContext setup and management
- Removed playCrtPowerOnSound() function (95 lines)
- Removed audio unlock listeners
- Cleaned up handlePowerOn comment

Audio caused issues with browser autoplay policies and added
unnecessary complexity. Terminal animation works fine without it.
2026-02-02 00:33:59 +01:00
phranck ae552adfce Fix: CRT power-on sound blocked by browser autoplay policy
- Make playCrtPowerOnSound() async with proper AudioContext.resume()
- Add AudioContext unlock on first user interaction (click/touchstart)
- Add error handling for audio failures
- Ensures sound works in all browsers with autoplay restrictions
2026-02-02 00:28:01 +01:00
phranck 9b0a82ab15 Merge pull request #56 from phranck/feat/landing-page-nunito-font
Replace SN Pro with Nunito font on landing page
2026-02-02 00:23:13 +01:00
phranck dc2f0992f4 Feat: Replace SN Pro with Nunito font on landing page
- Remove SN Pro Google Font import from globals.css
- Add Nunito font import with weights 400, 500, 600, 700
- Update CSS variables to use --font-nunito
- Apply Nunito as primary font family for body text
- Keep Geist Mono for monospace elements
2026-02-01 22:15:03 +01:00
phranck f4141d0ecf Test: Strengthen 17 weak test assertions
Replace vague assertions with concrete, specific checks:

**Pattern 1: !buffer.isEmpty → Specific content checks**
- ViewTests.swift (1): Check bold ANSI code + content
- StatusBarTests.swift (4): Check item labels present
- ModifierTests.swift (1): Check border characters
- ButtonTests.swift (3): Check height + border characters
- ComponentViewTests.swift (4): Check titles + content
- ContainerViewTests.swift (1): Check height + content
- FrameBufferTests.swift (2): Check overlay composition

**Pattern 2: Weak contains() → Exact ANSI codes**
- ANSIRendererFullTests.swift (1): contains("1") → contains("\u{1B}[1m")

**Summary:**
- 17 tests strengthened across 8 files
- All tests now assert observable behavior
- No property readback, no empty checks
- 412 tests passing

Addresses to-dos.md line 34: "Weak Test Rewrites"
2026-02-01 22:00:22 +01:00
phranck b8918ed6b8 Merge pull request #55 from phranck/test/audit-cleanup
Test: Remove 78 worthless tests
2026-02-01 04:25:40 +01:00
phranck 0e7dd858f8 Docs: Update test count badge and references (498/181 → 412) 2026-02-01 04:22:44 +01:00
phranck 32f06bcd98 Test: Remove 78 worthless tests (property readback, tautologies, redundancies) 2026-02-01 04:20:46 +01:00
phranck 07ad15320c Merge pull request #54 from phranck/feat/seo-improvements
Feat: Comprehensive SEO improvements for landing page
2026-02-01 04:04:49 +01:00
phranck 42b0597075 Feat: Comprehensive SEO improvements for landing page
- Add robots.txt and sitemap.xml (static files for export mode)
- Add OG image (1200x630) with terminal icon + branding
- Add Twitter Card meta tags (summary_large_image)
- Add canonical URL via metadataBase
- Add JSON-LD structured data (SoftwareSourceCode schema)
- Add <main> landmark and skip-navigation link for accessibility
- Add preconnect hints for Google Fonts, Google Static, and Umami
- Add web app manifest (site.webmanifest)
- Add meta keywords for secondary search engines
- Add aria-hidden on decorative SF Symbol icons
2026-02-01 04:00:02 +01:00
phranck 561d38b6cc Merge pull request #53 from phranck/feat/favicon-and-theme-shortcut
Feat: Cropped terminal favicon and keyboard theme cycling
2026-02-01 03:52:16 +01:00
phranck 0ba791c1eb Feat: Cropped terminal favicon and keyboard theme cycling
- Generate cropped favicon from tuikit-logo.png (transparent edges removed)
- Add multi-size favicons (16, 32, 192, 512px + .ico)
- Update metadata.icons in layout.tsx with proper sizes
- Add global 't' keydown listener in ThemeProvider to cycle themes
- Fix TUIKit → TUIkit typo in palette-preview.html
2026-02-01 03:50:00 +01:00
phranck 3e35f14999 Merge pull request #52 from phranck/feat/cursor-blink-and-analytics
Feat: Blinking cursor in headline and Umami analytics
2026-02-01 03:29:23 +01:00
phranck 58140d78fc Feat: Blinking cursor in headline and Umami analytics
- Add blinking terminal cursor (_) to headline via @utility and @keyframes
- Add Umami analytics script to layout head
2026-02-01 03:23:57 +01:00
phranck b4024eaaf2 Merge pull request #51 from phranck/feat/blade-runner-atmosphere
Feat: Blade Runner atmosphere effects, System V terminal rewrite, and visual polish
2026-02-01 02:53:18 +01:00
phranck 620c62c2e8 Feat: Blade Runner atmosphere effects, System V terminal rewrite, and visual polish
- Add full-screen canvas rain overlay (RainOverlay) with theme-colored drops
- Add random-position pulsing spinner lights (SpinnerLights) with drift effect
- Add anamorphic lens flares to HeroTerminal CRT screen
- Rewrite all ~65 terminal interactions for AT&T UNIX System V accuracy (1984)
- Add human-like variable typing speed for David (Joshua sequence)
- Fix AudioContext leak with shared lazy instance
- Fix SpinnerLights timer leak with Set-based cleanup
- Fix stale lineRefsRef in clearScreen, canvas lineWidth jitter
- Fix uncontrolled HeroTerminal timeout refs
- Remove redundant mounted state, WIND_DRIFT constant, opacity no-op
- Replace getComputedStyle polling with MutationObserver for theme changes
- Fix unstable React key causing DOM remounts
- Fix pickInteraction off-by-two for full exhaustion
- Add frosted glass effect to FeatureCards, CodePreview, and Built right box
- Add glowing text to PackageBadge, simplify ThemeSwitcher logic
- Layer content above atmosphere effects with z-index stacking
2026-02-01 02:50:58 +01:00
phranck bf08a745e4 Merge pull request #50 from phranck/feat/terminal-boot-delay-and-chime
Feat: UNIX System V boot, Joshua easter egg, CRT effects and theme fixes
2026-02-01 01:34:34 +01:00
phranck 4af5d1cfc4 Feat: Remove static welcome text and add CRT glass sheen overlay
- Powered-off terminal shows no text (realistic CRT behavior)
- Add permanent glass sheen with diagonal specular highlight in theme color
- Glass overlay covers full screen area with vignette effect
2026-02-01 01:32:29 +01:00
phranck 106eb5b1cd Feat: UNIX System V boot sequence, Joshua easter egg, CRT effects and theme fixes
- Replace Swift/TUIKit boot content with authentic System V Release 3.2 boot sequence
- Rewrite all ~53 terminal interactions as classic UNIX commands
- Add complete WarGames/Joshua easter egg with film-accurate screenplay dialog
- Add CRT power-on sound (degauss thump, mains hum, flyback whine)
- Add scanline sweep animation and random scanline glitch effect
- Restructure CRT layers: black backing, terminal content, inner glow, frame mask
- Update logo to frame-only PNG with transparent center
- Fix theme hydration flash (null initial state, localStorage-first reading)
- Add cursor-pointer and null-safe active indicator to ThemeSwitcher
2026-02-01 01:26:40 +01:00
phranck 713323dded Feat: Add CRT power-on hum and delay boot until zoom animation completes 2026-01-31 23:19:23 +01:00
phranck 965745d5e0 Merge pull request #49 from phranck/feat/animated-terminal-logo
Feat: Interactive CRT terminal animation for Hero section
2026-01-31 23:11:42 +01:00
phranck b8028e83e0 Feat: Replace static logo with interactive CRT terminal animation 2026-01-31 23:09:37 +01:00
phranck 06b80556e5 Merge pull request #48 from phranck/refactor/palette-essentials-block-palette
Refactor: Split Palette into Palette (13) + BlockPalette (3) protocol hierarchy
2026-01-31 21:37:30 +01:00
phranck 3e959d8026 Refactor: Split Palette into Palette (13) + BlockPalette (3) protocol hierarchy
- Reduce Palette protocol from 18 to 13 essential properties
- Add BlockPalette protocol with surfaceBackground, surfaceHeaderBackground, elevatedBackground
- BlockPalette defaults compute via lighter(by:) from background
- Add Color.rgbComponents for universal ANSI/256/RGB conversion
- Make lighter(by:), darker(by:), opacity() work on all color types
- Migrate views to use BlockPalette accessors
- Remove NCursesPalette (to be reworked later)
- Update all 6 palette structs to BlockPalette conformance
- Update DocC articles, topic index, and palette-preview.html
- All 492 tests in 83 suites passing
2026-01-31 21:35:17 +01:00
phranck 1cb13fbd40 Merge pull request #47 from phranck/chore/palette-preview-fixes
Chore: Fix palette preview — responsive + sync SDK colors
2026-01-31 20:57:41 +01:00
phranck bb015d9c5b Chore: Fix palette preview — responsive hue bar, single-column mobile, sync SDK colors
- Move media queries after base styles (fixes 2-column on mobile)
- Fix hue bar losing gradient in vertical layout (flex: none + width: 100%)
- Add statusBarBackground to Backgrounds swatch group
- Add foregroundPlaceholder to all palettes and Foregrounds group
- Remove deleted properties from palette data and swatchGroups
- Update existing palettes with correct SDK values including Violet HSL hex
2026-01-31 20:47:11 +01:00
phranck bba460daa5 Merge pull request #46 from phranck/refactor/remove-derived-palette-properties
Refactor: Remove derived Palette properties
2026-01-31 20:44:52 +01:00
phranck e1f702c921 Refactor: Remove derived Palette properties, views use essentials directly
Remove borderFocused, separator, selection, selectionBackground, disabled,
statusBarForeground, statusBarHighlight from Palette protocol and all
consumers. Views now use palette essentials directly (e.g. palette.accent
instead of palette.borderFocused, palette.foregroundTertiary instead of
palette.disabled). Update tests and DocC articles accordingly.
2026-01-31 20:19:09 +01:00
phranck 66d4547228 Merge pull request #45 from phranck/refactor/palette-backgrounds
Refactor: Restructure Palette background properties
2026-01-31 20:15:40 +01:00
phranck e835c0f57f Refactor: Reduce Palette to essentials, add foregroundPlaceholder
Remove explicit borderFocused, selection, selectionBackground,
statusBarForeground, statusBarHighlight from all palette implementations.
These remain as default-derived properties on the protocol extension.

Add foregroundPlaceholder as 4th foreground level for input field
placeholder text, dimmer than foregroundTertiary.

Fix SwiftLint force_try violations in luminance tests.
2026-01-31 20:10:05 +01:00
phranck b1d2362490 Chore: Increase swatch minimum width for fewer columns 2026-01-31 19:59:04 +01:00
phranck aa1a09b1e7 Chore: Improve swatch labels with proper word breaks and larger font 2026-01-31 19:57:45 +01:00
phranck 769ba91fc1 Chore: Remove terminal preview from palette page, keep swatches only 2026-01-31 19:55:10 +01:00
phranck 2f8bf6047c Fix: Make terminal preview horizontal rules stretch to full width via flexbox 2026-01-31 19:54:21 +01:00
phranck ee5d526c6c Fix: Restore two-column palette grid, swatches fill card width 2026-01-31 19:49:54 +01:00
phranck 2ca69df85a Fix: Align terminal preview borders using flexbox layout 2026-01-31 19:48:27 +01:00
phranck 67f9b5a94b Chore: Tighten terminal preview line-height to 1.3 2026-01-31 19:47:09 +01:00
phranck 7c11ba62c4 Chore: Make palette preview responsive with fluid swatch grid 2026-01-31 19:45:50 +01:00
phranck 142221627d Refactor: Restructure Palette background properties for semantic clarity
Replace generic backgroundSecondary/backgroundTertiary with purpose-specific
background properties (containerBodyBackground, containerCapBackground,
buttonBackground, appHeaderBackground, overlayBackground).

- Update Palette protocol and all 7 palette implementations
- Update SemanticColor, Color.Semantic namespace, and view consumers
- Rewrite background hierarchy tests with luminance assertions
- Update DocC articles (PaletteReference, ThemingGuide, AppearanceAndColors)
- Sync landing page CSS variables and components to new naming
- Update palette-preview.html with new property names
- Replace landing page logo with tuikit-logo-blank.png
2026-01-31 19:44:46 +01:00
phranck f6d0e58ef5 Merge pull request #44 from phranck/feat/blue-theme-and-color-sync
Feat: Add Blue/Violet palettes, sync theme colors and order between SDK and landing page
2026-01-31 19:08:15 +01:00
phranck 971190be23 Feat: Add Violet theme to landing page, match SDK cycling order 2026-01-31 19:03:15 +01:00
phranck 2c4e6cc8dc Feat: Add Blue/Violet palettes, sync landing page colors with Swift, fix theme switcher FOUC
- Add BluePalette (VFD-style, #00AAFF base) and VioletPalette (HSL-generated from hue 270°)
- Remove GeneratedPalette entirely (replaced by dedicated VioletPalette)
- Reorder palette cycling: Green → Amber → Red → Violet → Blue → White → NCurses
- Sync all landing page CSS theme colors with exact Swift palette values
- Add blue theme to landing page with matching VFD colors
- Fix theme switcher FOUC: useEffect syncs React state after hydrate
- Update default theme to Green (was Amber)
- Update landing page logo to latest DocC version
2026-01-31 19:01:48 +01:00
phranck 90033f4cfc Merge pull request #43 from phranck/chore/custom-file-header
Chore: Add custom Swift file header template for Xcode
2026-01-31 17:24:59 +01:00
phranck e16055b141 Merge pull request #42 from phranck/fix/theme-flash
Fix: Eliminate theme flash (FOUC) on page reload
2026-01-31 17:09:22 +01:00
phranck 5d19564f82 Chore: Add custom Swift file header template for Xcode 2026-01-31 17:09:05 +01:00
phranck d2a2f0376a Fix: Eliminate theme flash (FOUC) on page reload by applying stored theme before first paint 2026-01-31 16:57:56 +01:00
phranck 10f8419d9e Chore: Update DocC logo to latest version 2026-01-31 16:48:28 +01:00