Skip to content

Rewrite portfolio with LOJIK Labs aesthetic#1

Open
dgonzap30 wants to merge 4 commits into
mainfrom
redesign-lojik-aesthetic
Open

Rewrite portfolio with LOJIK Labs aesthetic#1
dgonzap30 wants to merge 4 commits into
mainfrom
redesign-lojik-aesthetic

Conversation

@dgonzap30
Copy link
Copy Markdown
Owner

@dgonzap30 dgonzap30 commented May 23, 2026

Summary

Replaces the Astro + glassmorphism blob design with a single-file static site using LOJIK Labs' editorial-dark visual language. Drops the Astro build pipeline entirely — GitHub Pages now serves index.html directly.

Aesthetic — direct port of LOJIK tokens:

  • Bg #0a0a0c, surfaces #15151a / #1f1f26
  • Slate accent #a8b5c4, single hot-red #ff3c2c reserved for the primary CTA arrow
  • Clash Display (display) + Satoshi (body) + JetBrains Mono (eyebrows/labels) via Fontshare + Google Fonts
  • Interlocked-L LOJIK brandmark, pulsing-dot eyebrow labels, bracket-corner card hovers, hr-glow dividers, fine grid + noise overlay

Sections

  • Hero with live "what I'm shipping" board (Mövee, Medivoz, The Protocol, Coco)
  • Tech marquee
  • 4-row thesis stack: Velocity · Ownership · Verticals · Stack
  • Work: Mövee, Medivoz, The Protocol, QuokkaQ, Passway + smaller bets (Nudge, Coco, DemoPilot)
  • 5-column stack list, numbers, contact, footer

Files

  • Rewrites index.html (single file, inline CSS + JS, ~1.4k lines)
  • Replaces favicon.svg (gradient "D" → monochrome LOJIK mark)
  • Removes _astro/ build output and favicon.ico

Test plan

  • gh pr checkout and open index.html locally — verify Fontshare + Google Fonts load
  • Hero pill, h1 italic "stack", lede, CTA arrow renders red, meta row
  • Hover a project card — bracket corners draw in, card lifts
  • Resize to mobile width — pill nav collapses to hamburger, hero board stacks below copy
  • Reveal animations fire as sections enter viewport
  • Reduced-motion preference: marquee + reveals + hover lift all disabled

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Style

    • Complete visual redesign with stylesheet now inlined, updated typography, metadata, and theme color
    • Redesigned fixed navigation and responsive layout for desktop and mobile
  • New Features

    • Added hero, marquee, About, Work, Stack, Numbers, Contact sections and Footer
    • Scroll-reveal animations and dynamic marquee population on load
    • Mobile navigation toggle with accessibility attributes and body scroll lock

Review Change Stack

Replace Astro + glassmorphism blob design with single-file static
site using LOJIK's editorial-dark visual language: layered surfaces,
slate accent, single hot-red CTA, Clash Display + Satoshi + JetBrains
Mono, interlocked-L brandmark, eyebrow labels, bracket-corner card
hovers, hr-glow dividers. Drops the Astro build pipeline entirely.

- Hero with live "what I'm shipping" board
- 4-row thesis stack (Velocity / Ownership / Verticals / Stack)
- Work grid: Mövee, Medivoz, The Protocol, QuokkaQ, Passway,
  plus Nudge / Coco / DemoPilot as smaller bets
- 5-column stack list, numbers, contact

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 23, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: eca50e66-883e-4819-88cf-24c898d7daae

📥 Commits

Reviewing files that changed from the base of the PR and between 6047c50 and d370535.

📒 Files selected for processing (1)
  • index.html

📝 Walkthrough

Walkthrough

Single-file site replacement: inlines CSS and fonts, restructures content into anchored sections (Hero, Marquee, About, Work, Stack, Numbers, Contact, Footer), and adds client-side JS for marquee population, reveal animations, and mobile menu behavior.

Changes

Portfolio Site Redesign

Layer / File(s) Summary
Embedded styling system
index.html
Custom CSS stylesheet embedded in the head replaces external asset, defining theme variables, typography, layout, component styles, animations, and reduced-motion handling.
Navigation and page chrome
index.html
Adds noise overlay, skip link, a fixed primary navigation with desktop links and a mobile menu toggle, plus a separate mobile menu container with ARIA state.
Hero area and now board
index.html
New hero section with reveal-animated intro, CTA/meta, and a "now board" panel showing live/static items.
Marquee placeholder
index.html
Adds a marquee wrapper with an empty #mq-track element for client-side population.
About section and facts card
index.html
About section with eyebrow/title/prose and a facts definition-list card using reveal styling.
Work section redesign
index.html
Replaces Work with "Selected work" grid and "Smaller bets" compact grid; cards include tags and stage/status chips.
Stack enumeration
index.html
Adds a multi-column toolbox-style Stack grid listing primitives for Mobile/Web/Backend/AI/Infra.
Numbers / stats grid
index.html
Responsive grid of numeric/stat blocks with reveal animations.
Contact cards
index.html
Contact section with responsive cards for email, GitHub, and LinkedIn.
Footer and links
index.html
Footer with brand lockup, section links (includes a #thesis link), and updated copyright.
Client-side behavior (marquee, reveal, menu)
index.html
JS populates marquee items into #mq-track, reveals .reveal elements via IntersectionObserver with fallback, and manages mobile menu toggling, ARIA attributes, and body scroll locking.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I stitched a page with hops and flair,
CSS tucked close, JS tidy as hair,
Sections lined up, a marquee in tow,
Reveal the pieces, let the pixels glow,
A rabbit's portfolio, all set to show.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: a complete portfolio rewrite adopting the LOJIK Labs visual aesthetic and design system.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch redesign-lojik-aesthetic

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@index.html`:
- Around line 798-801: The .sr-only rule currently keeps elements clipped and
inaccessible when focused; update the CSS so that .sr-only remains visually
hidden normally but becomes visible when focused/active (e.g., add a selector
like .sr-only:focus, .sr-only:active and override properties such as position,
width, height, margin, overflow, clip, and white-space to make the element
visible and operable). Ensure you modify the existing .sr-only rule and add the
focused/active variant so the "Skip to content" link is usable by keyboard
users.
- Around line 1348-1361: When the mobile menu is open the code in the click
handlers (using toggle and menu and the menu.querySelectorAll("a") listeners)
can leave aria attributes and body scroll locked when the viewport crosses the
CSS breakpoint; add a resize/matchMedia change handler that uses the same CSS
breakpoint media query as your menu to detect when viewport grows past the
breakpoint and in that handler force-close the menu (remove
menu.classList.remove("open")), set toggle.setAttribute("aria-expanded","false")
and menu.setAttribute("aria-hidden","true"), and clear
document.body.style.overflow so the state is reset whenever the breakpoint is
crossed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 44feea68-01f2-49d5-82e8-75c7185d09a3

📥 Commits

Reviewing files that changed from the base of the PR and between 31b1b48 and e3a754d.

⛔ Files ignored due to path filters (2)
  • favicon.ico is excluded by !**/*.ico
  • favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (2)
  • _astro/index.D9jn91_3.css
  • index.html
💤 Files with no reviewable changes (1)
  • _astro/index.D9jn91_3.css

Comment thread index.html
Comment on lines +798 to +801
.sr-only {
position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Skip link stays visually hidden when focused.

Line 814 points to a keyboard-accessibility affordance, but Lines 798-801 keep it clipped even on focus. That makes “Skip to content” effectively unusable for many keyboard users.

♿ Proposed fix
 .sr-only {
   position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
   overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
 }
+.sr-only:focus,
+.sr-only:focus-visible {
+  position: fixed;
+  top: 0.75rem;
+  left: 0.75rem;
+  width: auto;
+  height: auto;
+  margin: 0;
+  padding: 0.55rem 0.8rem;
+  clip: auto;
+  overflow: visible;
+  white-space: normal;
+  z-index: 120;
+  border-radius: 8px;
+  background: var(--elevated);
+  border: 1px solid var(--border);
+  color: var(--text-1);
+}

Also applies to: 814-814

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@index.html` around lines 798 - 801, The .sr-only rule currently keeps
elements clipped and inaccessible when focused; update the CSS so that .sr-only
remains visually hidden normally but becomes visible when focused/active (e.g.,
add a selector like .sr-only:focus, .sr-only:active and override properties such
as position, width, height, margin, overflow, clip, and white-space to make the
element visible and operable). Ensure you modify the existing .sr-only rule and
add the focused/active variant so the "Skip to content" link is usable by
keyboard users.

Comment thread index.html
Comment on lines +1348 to +1361
toggle.addEventListener("click", function () {
var open = menu.classList.toggle("open");
toggle.setAttribute("aria-expanded", open ? "true" : "false");
menu.setAttribute("aria-hidden", open ? "false" : "true");
document.body.style.overflow = open ? "hidden" : "";
});
menu.querySelectorAll("a").forEach(function (a) {
a.addEventListener("click", function () {
menu.classList.remove("open");
toggle.setAttribute("aria-expanded", "false");
menu.setAttribute("aria-hidden", "true");
document.body.style.overflow = "";
});
});
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Mobile menu state is not reset on breakpoint changes.

If the menu is open and viewport grows past Line 172’s breakpoint, the toggle disappears but open/scroll-lock state can persist until another manual interaction.

🛠️ Proposed fix
   if (toggle && menu) {
+    function closeMenu() {
+      menu.classList.remove("open");
+      toggle.setAttribute("aria-expanded", "false");
+      menu.setAttribute("aria-hidden", "true");
+      document.body.style.overflow = "";
+    }
+
     toggle.addEventListener("click", function () {
       var open = menu.classList.toggle("open");
       toggle.setAttribute("aria-expanded", open ? "true" : "false");
       menu.setAttribute("aria-hidden", open ? "false" : "true");
       document.body.style.overflow = open ? "hidden" : "";
     });
     menu.querySelectorAll("a").forEach(function (a) {
       a.addEventListener("click", function () {
-        menu.classList.remove("open");
-        toggle.setAttribute("aria-expanded", "false");
-        menu.setAttribute("aria-hidden", "true");
-        document.body.style.overflow = "";
+        closeMenu();
       });
     });
+    window.addEventListener("resize", function () {
+      if (window.innerWidth >= 720) closeMenu();
+    });
   }

Also applies to: 172-172

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@index.html` around lines 1348 - 1361, When the mobile menu is open the code
in the click handlers (using toggle and menu and the menu.querySelectorAll("a")
listeners) can leave aria attributes and body scroll locked when the viewport
crosses the CSS breakpoint; add a resize/matchMedia change handler that uses the
same CSS breakpoint media query as your menu to detect when viewport grows past
the breakpoint and in that handler force-close the menu (remove
menu.classList.remove("open")), set toggle.setAttribute("aria-expanded","false")
and menu.setAttribute("aria-hidden","true"), and clear
document.body.style.overflow so the state is reset whenever the breakpoint is
crossed.

dgonzap30 and others added 2 commits May 23, 2026 00:25
- Hero: name-first ("Hi, I'm Diego.") with personal lede
- Drop thesis section; replace with About: 4 paragraphs of
  first-person bio + Facts card (Madison/San Diego, music in Logic
  Pro X, golf, languages, brother as cofounder)
- "Currently" board (Mövee / Medivoz / Passway / wrapping CS) in
  place of the LOJIK-style "what I'm shipping live" pulse
- Section headings: "A few things I've built", "My toolbox",
  "Receipts", "Let's talk" — first-person voice throughout
- Nav: drop Thesis + Numbers, add About; "Say hi" on CTA

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- LOJIK Labs founded January 2026, not 2024
- Just graduated UW-Madison; moving to San Diego full time (no
  longer "splits time")
- Grew up in Mexico, came to US at 14 for boarding school (was
  imprecise "between Mexico and the US")
- Spanish is native — replace the "more seriously than résumé"
  line with "slowly working through French and Italian"
- Facts card: split Native (ES · EN) and Learning (FR · IT);
  drop Cursor from editor; drop the standalone "Building since"
  line that was a guess
- "Currently" board: replace CS '26 wrap-up with "Moving · Madison
  → San Diego · Summer '26"

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
index.html (1)

1351-1353: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update footer navigation to a valid in-page target.

Line 1352 links to #thesis, but there is no corresponding section id, so this footer link is broken.

🔧 Proposed fix
-        <a href="`#thesis`">Thesis</a>
+        <a href="`#about`">About</a>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@index.html` around lines 1351 - 1353, The footer contains an anchor with
href="`#thesis`" that points to a non-existent in-page id; either add a
corresponding section element with id="thesis" (e.g., <section
id="thesis">...</section>) or change the footer link in the block containing <a
href="`#thesis`">Thesis</a> to an existing section id (such as the id used for the
thesis content), ensuring the anchor target matches an actual element id so the
footer link works.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@index.html`:
- Around line 1351-1353: The footer contains an anchor with href="`#thesis`" that
points to a non-existent in-page id; either add a corresponding section element
with id="thesis" (e.g., <section id="thesis">...</section>) or change the footer
link in the block containing <a href="`#thesis`">Thesis</a> to an existing section
id (such as the id used for the thesis content), ensuring the anchor target
matches an actual element id so the footer link works.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: def8fc95-dd03-4b4a-970a-e82aefebf12d

📥 Commits

Reviewing files that changed from the base of the PR and between e3a754d and 6047c50.

📒 Files selected for processing (1)
  • index.html

Started shipping production software senior year of college, not
"sophomore year" — the latter read as high school sophomore.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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