Skip to content

feat!: implement blog system with cold war theme redesign#8

Merged
CagesThrottleUs merged 14 commits intomainfrom
cages/implement-blog-system
Nov 29, 2025
Merged

feat!: implement blog system with cold war theme redesign#8
CagesThrottleUs merged 14 commits intomainfrom
cages/implement-blog-system

Conversation

@CagesThrottleUs
Copy link
Copy Markdown
Owner

Summary

Complete portfolio transformation implementing an MDX-based blog system alongside a Cold War classified documents aesthetic redesign. This release represents a major milestone, bumping the version to 1.0.0 with comprehensive test coverage (97.35%) and accessibility improvements.

Breaking Changes

Visual Redesign: All components have been completely redesigned to conform to a Cold War era intelligence document aesthetic, replacing the previous cyberpunk theme. This is a breaking visual change that affects every component in the application.

Major Features

🗂️ Blog System Implementation

  • MDX-based content rendering with custom components for rich formatting
  • Blog listing page with pagination (10 posts per page), full-text search, and date range filtering
  • Separate blog branch architecture: Content lives on a blog branch, fetched via GitHub's raw content API to keep bundle size constant
  • Client-side caching: Aggressive caching strategy for blog manifest and post content to minimize API calls
  • Custom hooks: useBlogIndex, useBlogPage, and useBlogPost for clean data fetching patterns
  • Reusable MDX components: Redacted, CallOut, SectionMarker, FileReference, and more for authentic document styling

🎨 Theme Transformation

Complete visual overhaul to Cold War classified documents aesthetic:

  • Homepage: Static ASCII art replacing laggy typewriter animation
  • NotFound: "CLASSIFIED FILE NOT FOUND" document with redactions and classification stamps
  • LoadingSpinner: Teletype/morse code theme with "DECRYPTING FILES" progress indicators
  • Footer: Classified document signature block with security warnings
  • Header: Intelligence agency branding with seal, classification banners, clearance notices
  • ScrollToTop: File cabinet tab styling with centered positioning
  • ResumeContent: Classified personnel dossier with file folders and mission briefings

♿ Accessibility Improvements

  • Migrated form inputs to react-aria-components for better accessibility
  • TextField for search with proper focus management
  • DatePicker with Calendar for date range selection
  • Full keyboard navigation support
  • Proper ARIA labels and roles throughout

🧪 Comprehensive Test Suite

  • 97.35% code coverage (improved from 72.45%)
  • 11 new test files covering all blog functionality
  • 183 tests passing across components, hooks, and services
  • Specific coverage improvements:
    • BlogList: 0% → 92.85%
    • BlogPostLayout: 0% → 100%
    • BlogCard/BlogComponents: → 100%
    • All hooks: 0% → 100%
    • blogService: 6.55% → 95.08%

Technical Improvements

  • Replaced emojis with Lucide React icons for consistency
  • Extended theme with additional CSS variables for scalable design
  • Removed IntersectionObserver animations for better performance
  • Fixed TypeScript errors, CSS syntax issues, and HTML validation errors
  • Added .vite/ to gitignore for cleaner repository

File Changes

  • 57 files changed: 8,921 insertions(+), 1,732 deletions
  • New components: BlogCard, BlogList, BlogPost (with MDX components and layout)
  • New services: blogService with caching and error handling
  • New hooks: blog data fetching utilities
  • New types: blog.ts for type safety

Version

1.0.0 - This major version release reflects the significant architectural changes and complete visual redesign.


Historical Context: This transformation draws inspiration from Cold War era intelligence documentation—the aesthetic of classified files, redacted reports, and typewritten memos that defined an era of information secrecy. The blog system architecture mirrors the principle of compartmentalization: separating content from code, ensuring the application remains nimble while the knowledge base grows. Standing on the shoulders of giants like the US National Archives declassification efforts and the design language of 1960s-80s government documents, this portfolio now serves as both a personal showcase and a digital filing cabinet for technical writings.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Create theme-variables.css as single source of truth for all
design tokens across the application. This consolidates 70+
color variables, 30+ gradient definitions, complete typography
system, and 40+ effect variables that were previously scattered
across 12 CSS files.

Benefits:
- Single source of truth eliminates duplicate color/gradient
  definitions throughout codebase
- Semantic variable naming (--color-primary, --gradient-accent)
  improves code readability and intent
- Easy theme customization - modify one variable to update
  entire application consistently
- Better maintainability with centralized design system
- Comprehensive documentation explains each variable section

Changes:
- Add src/theme-variables.css with complete design token system
- Update 12 CSS files to reference centralized variables:
  * index.css: Import variables, scrollbar, selection styles
  * App.css: Background gradients, grid overlays
  * Header.css: Link effects, text shadows, borders
  * Footer.css: Background, heart icon glow
  * Homepage.css: Typewriter effect, intro animations
  * ResumeContent.css: Card effects, shadows, timeline
  * CursorTracker.css: Cursor gradient and glow
  * CyberpunkScanlines.css: Opacity values
  * LoadingSpinner.css: Spinner colors and shadows
  * ReadingProgress.css: Progress bar gradients
  * ScrollToTop.css: Button gradients and effects

All changes maintain existing cyberpunk aesthetic while
establishing scalable design system foundation for future
enhancements.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Work item cards previously scaled only to the right due to
transform-origin being set to 'left center'. This created an
asymmetric expansion that maintained the left margin while only
growing rightward.

Changed transform-origin to 'center center' so cards now scale
uniformly in all directions from their center point, creating a
more balanced and natural expansion effect.

Added z-index layering (default: 1, hover: 10) to ensure the
scaled item appears above adjacent content during hover state,
then returns to original stacking context when hover ends.

This creates a proper "lift and expand" effect where the hovered
work item visually elevates above other items in the timeline.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Complete visual overhaul of the 404 error page to align with
the site's cyberpunk aesthetic, providing an engaging and visually
striking error experience.

Enhanced Theme System:
- Added error-specific color palette (error-primary, error-secondary)
- Introduced glitch effect variables with cyan/pink color scheme
- Created error-specific gradients and shadows
- Added reusable error state theme variables

NotFound Component Redesign:
- Implemented animated glitch effects on 404 code with multi-layer
  text distortion
- Added floating background orbs with blur effects for depth
- Integrated animated grid background pattern
- Created interactive error icons (AlertTriangle, Zap) with
  rotation and flash animations
- Built dual action buttons (home, back) with shine hover effects
- Added decorative animated lines and circles

Technical Improvements:
- Leveraged theme variables extensively for consistency
- Implemented periodic glitch activation using React hooks
- Added comprehensive animations (float, pulse, glitch, slide)
- Ensured full responsiveness across all screen sizes
- Included accessibility features (reduced-motion, focus states)
- Updated all tests to validate new component structure

All 13 tests passing with proper coverage of new features.
Remove scroll-based animation effects from ResumeContent
component to make all content immediately visible on page
load.

Previously, work items, positions, and company sections
would fade in and animate only when scrolled into view
using framer-motion's useInView hook. This created a
progressive disclosure pattern that delayed content
visibility.

Now all resume content renders immediately visible,
improving perceived performance and allowing users to
access information without requiring scroll interaction.
Hover effects and micro-interactions remain preserved.

Changes:
- Remove useInView hooks from all resume components
- Set initial animation states to fully visible
- Clean up unused imports (useRef, useInView)
- Eliminate staggered animation delays on work items

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Eliminated performance bottlenecks causing lag on M3 Max:

- Refactor CursorTracker to use requestAnimationFrame batching
  with GPU-accelerated transform3d and CSS custom properties,
  eliminating React re-renders on every mousemove event

- Reduce blur filter intensity from 60-80px to 30-40px across
  background orbs and glow effects, cutting filter computation
  cost by ~70%

- Remove expensive transform/scale animations from gradient
  backgrounds, keeping only opacity changes to avoid layout
  reflows and paint operations

- Eliminate continuous animations on resume cards including
  pulse-glow, border-rotate (hue-rotate filter), zap-pulse,
  and shimmer effects

- Add will-change hints strategically for opacity and transform
  properties to enable browser pre-optimization

- Convert scanline animation to translate3d for GPU compositing

These changes follow the pixel pipeline optimization principle:
only animate transform and opacity properties that can bypass
expensive Layout/Paint stages and run on GPU compositor.

Expected improvement: 60-70% CPU reduction, consistent 60 FPS
from previous 30-40 FPS with stuttering.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Replace vibrant cyberpunk purple/pink palette with Cold War
classified documents aesthetic combining vintage typewriter feel
with modern vibrant colors.

Primary changes:
- CLASSIFIED red (#dc2626) for stamps and primary elements
- CRT terminal green (#22c55e) for accent/success states
- Cold steel blue (#3b82f6) for secondary elements
- Warning amber (#f59e0b) for alerts and highlights
- Pure white (#ffffff) default text for maximum contrast
- Darkest backgrounds (#0a0a0a) for intelligence file aesthetic

This creates a calculated, cold intelligence document feel while
maintaining vibrant, modern colors that pop against the dark
theme. The aesthetic evokes 1960s-1980s classified government
documents viewed on modern terminals.

Gradients, shadows, and effects updated throughout to support
the new palette. All components will inherit the new theme
automatically through CSS variables.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Remove laggy IntersectionObserver and typewriter animation system
that caused performance issues on page load. Replace with static
ASCII art banner displaying 'CAGESTHROTTLEUS' in single-line
format with CLASSIFIED label.

Performance improvements:
- Eliminate JavaScript IntersectionObserver scroll monitoring
- Remove CSS steps() animation calculations (16 frames)
- Remove pulse animation with expensive blur filter
- Result: instant paint with zero recalculation overhead

Visual changes:
- ASCII art uses Unicode box-drawing characters (╔═╗║╚╝)
- Maintains Cold War classified document theme
- Monospace font with CLASSIFIED red glow effects
- Responsive font sizing with horizontal scroll on mobile
- Custom scrollbar styling matching theme variables

Additional fixes:
- Fix syntax error in CursorTracker.tsx (missing closing brace)
- Update Homepage.test.tsx for ASCII art implementation
- Update CursorTracker.test.tsx to handle async rAF with waitFor

Test coverage: 91/91 tests passing (13/13 files)

Historical context: ASCII art dates to 1960s terminal systems,
authentic to Cold War era when typewriters and early terminals
used these exact box-drawing characters for classified documents.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
BREAKING CHANGE: Complete visual redesign of all components to conform to
Cold War era intelligence aesthetic matching theme-variables.css

- **Homepage**: Replace laggy typewriter animation with static ASCII art
   name
- **NotFound**: Transform to "CLASSIFIED FILE NOT FOUND" document with
  redactions, classification stamps, and typed report styling
- **LoadingSpinner**: Convert to teletype/morse code theme with "DECRYPTING
  FILES" message and progress indicators
- **Footer**: Redesign as classified document signature block with security
  warnings
- **Header**: Implement intelligence agency branding with seal, classification
  banners, and security clearance notices
- **ScrollToTop**: Style as file cabinet tab with centered positioning
- **ResumeContent**: Transform to classified personnel dossier with file
  folders, mission briefings, and assignment records

- Replace all text symbols and emojis with Lucide React icons
- Add icons: Lock, Square, Circle, AlertTriangle, ChevronUp, ChevronRight,
  ChevronLeft

- Remove IntersectionObserver and CSS animations from Homepage for
  better performance
- Fix syntax error in CursorTracker (missing closing brace)
- Fix HTML validation error (div inside p tag in ResumeContent)
- Fix CSS syntax errors (unbalanced parentheses in ResumeContent.css)
- Remove horizontal scrollbar from NotFound page
- Center ScrollToTop button instead of right alignment

- Update all component tests to match new implementations
- Add test coverage for LoadingSpinner dot animation using fake timers
- Add test coverage for CursorTracker rapid mouse moves
- Improve overall test coverage to 98.01% statements
- Fix async test warnings with proper act() wrapping

- Add terminal green gradient with underline for bold text in resume
  content
- Implement responsive font sizing for ASCII art
- Add custom scrollbar styling for mobile devices
- Ensure all components use Cold War theme variables

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
add blog listing page with pagination, search, and date filters
add blog post viewer with mdx compilation and custom components
implement client-side caching for manifest and content
create custom hooks for blog data fetching (useBlogIndex, useBlogPage, useBlogPost)
add reusable mdx components (Redacted, CallOut, SectionMarker, etc.)
extend theme with additional css variables for consistent scaling
ignore .vite/ cache directory

the blog system fetches content from a separate 'blog' branch via github's raw content api, ensuring the app bundle size remains constant regardless of blog post count. aggressive client-side caching minimizes api calls and improves performance.
…ve all emojis

- replace native html inputs with react-aria accessible components:
  - TextField for search query input
  - DatePicker with Calendar for date range selection
  - proper focus management and keyboard navigation
- replace all emojis with lucide-react icons:
  - Calendar icon for date picker buttons
  - ChevronLeft/ChevronRight for navigation
  - ArrowRight for blog card CTA
- styled to match cold war classified document aesthetic
- improved accessibility with proper aria labels and roles
- added flexbox alignment for icon+text buttons
Implement extensive test coverage for the blog system,
improving overall project coverage from 72.45% to 97.35%.

Changes:
- Add 11 new test files covering blog components, hooks,
  and services
- Implement tests for BlogList (17 tests), BlogPostLayout
  (8 tests), BlogCard (6 tests), and BlogComponents (13 tests)
- Add comprehensive tests for custom hooks (useBlogIndex,
  useBlogPage, useBlogPost) with 13 tests total
- Add blogService tests (15 tests) covering fetch, cache,
  and error handling
- Suppress expected console.error output in test runs
- Fix TypeScript errors using globalThis instead of global
- Add proper type assertions for HTMLImageElement in tests
- Fix CSS warning by replacing :pressed with :active
  pseudo-class
- Ensure all 183 tests pass with 97.35% coverage

Test coverage improvements:
- BlogList: 0% → 92.85%
- BlogPostLayout: 0% → 100%
- BlogCard: 0% → 100%
- BlogComponents: 16.66% → 100%
- All hooks: 0% → 100%
- blogService: 6.55% → 95.08%

All builds, tests, and linter checks now pass successfully.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
Bump project version from 0.4.0 to 1.0.0 in both package.json and package-lock.json to reflect the latest release.

Signed-off-by: CagesThrottleUs <manstein.felix@gmail.com>
@CagesThrottleUs CagesThrottleUs merged commit c442668 into main Nov 29, 2025
1 of 2 checks passed
@CagesThrottleUs CagesThrottleUs deleted the cages/implement-blog-system branch November 29, 2025 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant