feat: add split-screen layout with sticky sidebar#44
Closed
feat: add split-screen layout with sticky sidebar#44
Conversation
Subject Line: What Happened:
Caveat was loaded but never referenced — removes an unnecessary network request on every page load. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vite serves static/ as root, so the runtime path should be /fonts/SimpleCakes.ttf, not /static/fonts/SimpleCakes.ttf. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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
- Add sticky sidebar on desktop with name tag, typed name, social links, and navigation - Add colorful gradient underline effect to nav links - Create responsive mobile header - Restructure app into two-column layout - Move content sections to scrollable right panel
✅ Deploy Preview for symphonious-blancmange-7aafce ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
1 issue found across 7 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="src/index.css">
<violation number="1" location="src/index.css:41">
P2: Setting `--prism-h` to `auto` makes the `calc()` in the prism transforms invalid (auto can’t be divided), so the 3D faces won’t translate. Use a length value for `--prism-h` and override it where needed instead of `auto`.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
b8d49c3 to
55a2352
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Redesigns the site with a Brittany Chiang-inspired split-screen layout featuring:
Changes
Sidebarcomponent with all profile info and navigationMobileHeaderfor responsive mobile viewApp.tsxto use two-column flex layoutVisual Preview
Test Plan
pnpm run build)Summary by cubic
Adds a split-screen layout with a sticky sidebar and rebuilds the Experience and Projects sections with rich content and tech badges. Improves navigation, accessibility, and visual polish across the site.
New Features
Refactors
Written for commit 55a2352. Summary will update on new commits.