Skip to content

feat: visual redesign — split-screen layout, glass-morphism & aurora#45

Closed
andimrob wants to merge 167 commits intomainfrom
feat/visual-redesign
Closed

feat: visual redesign — split-screen layout, glass-morphism & aurora#45
andimrob wants to merge 167 commits intomainfrom
feat/visual-redesign

Conversation

@andimrob
Copy link
Owner

@andimrob andimrob commented Feb 18, 2026

Summary

  • Split-screen sticky sidebar — name, section nav, social links, and theme toggle live in a fixed left panel on desktop; main content scrolls independently
  • Font swap — Satoshi (headings) + Instrument Sans (body) via self-hosted WOFF2
  • Dark mode atmosphere — animated aurora glows using CSS @property for smooth color cycling (salmon → turquoise → amber → violet), noise texture overlay, glass-morphism cards
  • Experience & Projects redesign — glass-card containers, colour-tinted borders, category emojis, stagger reveal animations
  • Prism easter egg preserved — nav links removed from header on desktop; prism pill lives as a compact floating widget in the top-right corner, still flips to show quips
  • Layout fixesmax-w-screen-xl cap for large screens; footer moved inside flex container to prevent sidebar losing sticky position at scroll end; first section top-padding removed to align "About Me" with the name

Screenshots

Desktop

Desktop view

Mobile

Mobile view

Test plan

  • 93 unit tests passing
  • pnpm lint clean (warnings only, no errors)
  • pnpm typecheck clean
  • pnpm build succeeds
  • Verified desktop layout at 1280px and 1920px
  • Verified mobile layout at 390px
  • Dark mode aurora animation verified
  • Prism easter egg still works on desktop (compact pill, top-right)
  • Sidebar remains sticky through footer scroll
  • All existing interactive features intact (cursor glow, X-Ray mode, confetti, sounds)

🤖 Generated with Claude Code


Summary by cubic

Redesigned the site with a split-screen desktop layout, glass cards, and an animated dark‑mode aurora. Improves readability and navigation with cleaner typography and smoother section reveals.

  • New Features

    • Split-screen desktop layout with a sticky sidebar (name, nav, social, theme).
    • Glass-card styling with staggered reveals; dark‑mode aurora and subtle noise texture.
    • Experience revamped; Skills folded in; Projects removed.
    • Prism nav: magnetic cursor tilt, click‑to‑flip quips with coin rewards and confetti on the 5th flip, scroll‑spy underline, 1s auto‑rotate back; mobile tilt fixed.
  • Refactors

    • Extracted Sidebar; reorganized within a max-w-screen-xl container; Footer moved inside to keep the sidebar sticky.
    • Font swap to Satoshi (headings) and Instrument Sans (body); updated SectionHeading/Hero/Header and RevealSection widths.
    • Simplified prism effects: removed drag‑to‑flip and idle peek, halved flip duration, added click jitter; fixed Unicode in quips.
    • Added desktop and mobile screenshots; tests remain green (93 passing).

Written for commit 85db695. Summary will update on new commits.

andimrob and others added 26 commits February 11, 2026 23:23
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Install and configure ESLint 9 (flat config) with typescript-eslint,
react-hooks, react-refresh, and eslint-config-prettier. Add Prettier
with project-matching style. Install Storybook 10 with react-vite
framework and addon suite. Add typecheck, lint, format, and storybook
scripts. Remove package-lock.json to standardize on pnpm (resolves #27).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move ref assignment in useActiveSection into useEffect to satisfy
react-hooks/refs rule. Remove unnecessary regex escape in xray.ts.
Apply Prettier formatting to Hero.tsx, confetti.ts, and main.tsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace npm ci with pnpm install --frozen-lockfile using
pnpm/action-setup@v4. Add format:check, lint, and typecheck
steps before the build step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Configure Storybook with @tailwindcss/vite plugin via viteFinal so
Tailwind classes render in stories. Add dark mode toolbar toggle via
decorator that toggles .dark class on <html>. Create Header stories:
Default, WithScrollSections (mock scroll targets), and DarkMode.
Include vitest addon integration for story-based testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The component was a 9-line wrapper around a single <span>. Inline
the element directly and delete CursiveRob.tsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace 9 standalone gradient classes and keyframes (~207 lines) with
a shared base rule and CSS custom properties (~68 lines). Each variant
now only sets --prism-stops, --prism-size, --prism-speed, and
--prism-timing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The identical heading className (~130 chars) was copy-pasted across
About, Experience, and Projects. Extract into a shared SectionHeading
component that takes children.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Every RevealSection consumer wrapped children in an identical
<div className="mx-auto max-w-4xl px-6">. Move this container
into RevealSection itself and remove the wrapper from About,
Experience, and Projects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The identical social link className (~200 chars) was repeated 3 times
in Hero.tsx. Extract into a local SocialLink component that takes
href, label, and SVG children as props.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…Linux, TDD, A/B Testing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nents

Replace the monolithic xray.ts (imperative DOM creation, manual pub/sub,
module globals) with idiomatic React: hooks for state (useXRay, useMousePosition)
and a component (XRayOverlay) that mounts/unmounts via conditional rendering.
60fps animations stay imperative via refs. CursorGlow now receives props
instead of subscribing to a custom event system.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document the current state of testing (1 Storybook story, no unit/integration/e2e tests,
CI not running tests) and propose a phased plan covering pure function tests, hook tests,
component stories, and E2E smoke tests.

https://claude.ai/code/session_01R1f3Cb55HfJHSwXi6hck6U
Phase 1 — Foundation:
- Add `test`, `test:watch`, and `test:coverage` scripts to package.json
- Add Vitest unit test project (jsdom) alongside existing Storybook project
- Add `pnpm run test` step to CI workflow
- Install @testing-library/react, @testing-library/jest-dom, jsdom

Phase 2 — Pure function tests (26 tests):
- src/xray/highlight.test.ts: esc(), highlight(), color constants, JS_RULES

Phase 3 — Hook tests (44 tests):
- src/hooks/useTypewriter.test.ts: typing animation, cursor lifecycle, cleanup
- src/hooks/useTheme.test.ts: localStorage, system preference, toggle
- src/hooks/useActiveSection.test.ts: scroll-based section detection
- src/hooks/usePrismFlip.test.tsx: flip count, quip cycling, confetti/coin triggers
- src/hooks/useRevealOnScroll.test.tsx: IntersectionObserver integration
- src/hooks/useMagneticTilt.test.ts: tilt math, attract range, disabled state
- src/xray/useXRay.test.ts: keyboard toggle, modifier/input filtering

Phase 4 — Component Storybook stories:
- Hero, About, Experience, Projects, Footer, SectionHeading (Default + DarkMode)

https://claude.ai/code/session_01R1f3Cb55HfJHSwXi6hck6U
- highlight.test.ts: verify escaping with empty rules, add string/keyword
  precedence test
- useXRay.test.ts: add SELECT element, sourceHTML loading, ensureFont,
  and non-x key tests
- useActiveSection.test.ts: add "last section wins" test, threshold
  boundary test
- usePrismFlip.test.tsx: add auto-rotate timer and faceBg assertions
- useMagneticTilt.test.ts: validate transform format with regex instead
  of loose string contains
- useRevealOnScroll.test.tsx: replace `as any` casts with typed MockIO
  interface
- useTypewriter.test.ts: assert cursor stays visible during typing

77 tests, all passing.

https://claude.ai/code/session_01R1f3Cb55HfJHSwXi6hck6U
pnpm/action-setup@v4 requires an explicit pnpm version. Add
`packageManager` to package.json so the action picks it up
automatically.

https://claude.ai/code/session_01R1f3Cb55HfJHSwXi6hck6U
`vitest run` without --project runs all projects including the
storybook browser project, which requires Playwright's Chromium to
be installed. CI doesn't have that. Scope test/test:watch/test:coverage
to --project unit and add a separate test:storybook script.

https://claude.ai/code/session_01R1f3Cb55HfJHSwXi6hck6U
Replace Inter with Instrument Sans (Google Fonts) for body text and
self-hosted Satoshi (Fontshare) for headings. Adds font-heading class
to SectionHeading, Hero h1, and Header nav links. Includes unit tests
for SectionHeading and a tasks.md tracking file for the full redesign.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…font swap

- Split-screen sticky sidebar (lg:flex) with typewriter name, section nav,
  social links, and theme toggle; main content scrolls independently
- Satoshi headings + Instrument Sans body via self-hosted WOFF2 fonts
- Dark mode aurora: animated radial glows with CSS @Property color cycling
- Glass-card components for Experience and Projects sections
- Redesigned Experience with category emojis, colour borders, stagger animations
- Projects section with typed data and external link cards
- Personality-forward About copy
- Prism nav easter egg preserved as compact floating widget on desktop
- Max-width container (max-w-screen-xl) for large screen layouts
- Footer moved inside flex container to fix sidebar sticky scroll behaviour
- 93 tests passing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@netlify
Copy link

netlify bot commented Feb 18, 2026

Deploy Preview for symphonious-blancmange-7aafce ready!

Name Link
🔨 Latest commit 85db695
🔍 Latest deploy log https://app.netlify.com/projects/symphonious-blancmange-7aafce/deploys/699f5603dd29c80007e67f53
😎 Deploy Preview https://deploy-preview-45--symphonious-blancmange-7aafce.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 24 files

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="tasks.md">

<violation number="1" location="tasks.md:5">
P3: Avoid committing machine-specific absolute paths in documentation; they leak local directory structure and are not portable for other contributors.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.


**Branch**: `feat/visual-redesign`
**Aesthetic**: "Arcade Cabinet Meets Editorial"
**Plan**: `.claude/projects/-Users-robblakey-src-andimrob-github-io/0d3559b2-1e72-41a5-bdea-6b871d3c8bd3.jsonl`
Copy link

@cubic-dev-ai cubic-dev-ai bot Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Avoid committing machine-specific absolute paths in documentation; they leak local directory structure and are not portable for other contributors.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At tasks.md, line 5:

<comment>Avoid committing machine-specific absolute paths in documentation; they leak local directory structure and are not portable for other contributors.</comment>

<file context>
@@ -0,0 +1,109 @@
+
+**Branch**: `feat/visual-redesign`
+**Aesthetic**: "Arcade Cabinet Meets Editorial"
+**Plan**: `.claude/projects/-Users-robblakey-src-andimrob-github-io/0d3559b2-1e72-41a5-bdea-6b871d3c8bd3.jsonl`
+
+---
</file context>
Fix with Cubic

@andimrob andimrob closed this Feb 25, 2026
@andimrob andimrob force-pushed the feat/visual-redesign branch from c676ded to 85db695 Compare February 25, 2026 20:05
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