Skip to content

feat: portfolio-first site — drop Work and Skills sections, résumé carries career history#156

Merged
jbdevprimary merged 4 commits into
mainfrom
feat/portfolio-first-site
Jun 10, 2026
Merged

feat: portfolio-first site — drop Work and Skills sections, résumé carries career history#156
jbdevprimary merged 4 commits into
mainfrom
feat/portfolio-first-site

Conversation

@jbdevprimary

@jbdevprimary jbdevprimary commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Why

Two user directives plus external research:

  1. "Do we NEED a work section on my website? If they're going to download or view my resume anyway, isn't it redundant?" — yes, it was.
  2. "Symbiont should be the START of the actual roles — anything prior to 2017 were one-year roles, better in the paragraph."
  3. A research pass over exemplar staff-engineer sites (brittanychiang.com, mitchellh.com, brandur.org, jvns.ca, danluu.com, mcfunley.com, leerob.com, matklad, charity.wtf, swyx.io) found: no staff-level engineer site has a skills listing (it's the strongest template/junior tell), and the strong hire-me sites are lobbies — short identity + proof, then the real work, with career detail living in the résumé.

What

  • Site = hero → Open Source tri-panel → contact. Work and Skills sections removed (JobList.tsx, SkillSheet.tsx deleted); nav reduces to Open Source · Contact · Résumé.
  • ClassPass work entry deleted — pre-2017 roles live only in the Earlier Career paragraph (which already carried its $20K/mo cost win, 200–300 instance fleet, and 2015 early-IaC claim). Listed history now starts at Symbiont (2017–20), the long-term salaried role.
  • Résumé (HTML view + DOCX) unchanged as the carrier of full career history and the skills matrix — still 2 pages, QC re-verified.

Verification

  • 24 unit + 13 e2e green (specs updated: no-Work/no-Skills assertions, Symbiont-start assertion), tsc 0 errors, biome clean
  • Full-page screenshot read against the lobby model; DOCX re-rendered via LibreOffice QC

Research follow-ups (not in this PR)

  • Writing presence is the one high-impact gap research flagged that I can't build: even 3–5 short technical posts (the Flipside case studies you mentioned authoring would be perfect) would do more for credibility than any layout change.
  • The React island is now nearly unnecessary (only scroll-spy + one fade remain) — a follow-up can make the index pure Astro, shipping zero framework JS.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Redesigned portfolio as "portfolio-first" landing page highlighting Open Source projects as the primary showcase area.
    • Enhanced resume DOCX rendering with improved layout quality control and multi-engine output validation.
  • Bug Fixes

    • Fixed resume formatting issues with table cell margins and unwanted spacing between sections.
  • Documentation

    • Restructured career history timeline to start with recent roles; earlier experience accessible via resume.

…rries career history

The site is a lobby, not a brochure: hero (identity, proof, action) →
Open Source tri-panel (what a résumé can't show) → contact. Work and
Skills duplicated the résumé, which is one click away in HTML and DOCX.

External research on exemplar staff-engineer sites (Chiang, Hashimoto,
Brandur, Evans, Luu, McKinley, Robinson, matklad, Majors, swyx)
independently flagged the skills listing as the strongest
template/junior tell — no staff-level site has one — and confirmed the
lobby model for hire-me sites when career detail lives in the résumé.

Also: ClassPass work entry deleted — everything pre-Symbiont (2017)
lives in the Earlier Career paragraph (its cost win, fleet scale, and
early-IaC claim were already quoted there). Symbiont, the long-term
salaried role, is the start of the listed history. Nav reduces to
Open Source · Contact · Résumé.

Decision: site shows only what the résumé cannot; career history starts at Symbiont
Why: user directive (redundancy + pre-2017 one-year roles read better as prose); research-validated
Resolves: 'do we NEED a work section' / 'Symbiont should be the start of actual roles'

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jbdevprimary, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 51 minutes and 57 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4513eaf0-90ff-4a28-b08c-5455abab75b9

📥 Commits

Reviewing files that changed from the base of the PR and between 295747d and fac024d.

📒 Files selected for processing (2)
  • .agent-state/decisions.ndjson
  • src/App.tsx
📝 Walkthrough

Walkthrough

This PR restructures the portfolio site to prioritize open-source work over employment history, replacing lucide-react brand icons with custom SVG components, adding OOXML post-processing to fix turbodocx layout defects, enhancing the QC pipeline with dual-engine rendering (LibreOffice and Pages), and updating tests to validate the new structure.

Changes

Portfolio-first site redesign

Layer / File(s) Summary
Brand icon migration to custom SVG components
src/components/BrandIcons.tsx, src/components/HeroSection.tsx
New BrandIcons.tsx exports GithubIcon and LinkedinIcon as inlined 24x24 SVGs with currentColor fill. HeroSection.tsx imports and uses these components instead of deprecated lucide-react exports.
Portfolio-first UI and navigation restructure
src/App.tsx, src/components/sections/JobList.tsx, src/components/sections/SkillSheet.tsx, src/components/SiteNav.tsx, src/content/resume.ts
App hero/intro updated to describe portfolio as a "lobby" and position "Open Source" as the live portfolio area. JobList and SkillSheet components removed entirely. SiteNav anchors updated to exclude work and skills. Resume content removes ClassPass entry with comments clarifying career history is deferred to resume starting with Symbiont.
OOXML post-processing to fix turbodocx layout defects
scripts/resume/postprocess.ts, scripts/resume/build-docx.ts, tests/unit/resume-docx.test.ts
New postprocess.ts replaces hardcoded table cell margins with zeroed values and removes empty paragraphs after tables. build-docx.ts integrates post-processing by unzipping the DOCX, modifying word/document.xml, and re-zipping. New unit test validates that the compiled XML lacks specific margin defects and unwanted empty paragraphs.
QC script dual-engine rendering (LibreOffice and Pages)
scripts/resume/qc.ts
QC pipeline refactored to render through both LibreOffice and Apple Pages (macOS, best-effort). Rasterization logic consolidated into a shared rasterize(pdfPath, prefix) helper run at a configured DPI. LibreOffice and Pages PNGs are emitted under engine-specific prefixes; console output updated to require review from both engines.
Test suite updates for portfolio-first structure
tests/e2e/navigation.spec.ts, tests/e2e/resume.spec.ts
E2E navigation tests updated to drop Work/Skills anchor checks and add assertions that #work and #skills sections are absent. E2E resume tests consolidated to verify hero proof line mentions "Flipside Crypto", job entries start with "Symbiont", and "Senior Systems Operations Engineer" does not appear as a resume entry; "Cloud Platforms" assertion added to skills matrix.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes


Possibly related PRs

  • jbcom/jbcom.github.io#123: Site-overhaul UI changes overlapping with this PR's hero/structural refactor of App.tsx, SiteNav.tsx, HeroSection.tsx, BrandIcons.tsx, and resume content.

🐰 Hops with pride through your portfolio clear,
No work, no skills—just code shines here!
Open Source takes center stage today,
While turbodocx bugs fade away

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: restructuring the site to portfolio-first (removing Work and Skills sections) and moving career history to the résumé starting with Symbiont.
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 feat/portfolio-first-site

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.

@amazon-q-developer amazon-q-developer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review Summary

This PR successfully implements the portfolio-first site redesign by removing Work and Skills sections and simplifying the navigation structure. The changes are clean and well-tested.

Key Changes Verified:

  • Work and Skills sections removed from site (JobList and SkillSheet components no longer imported)
  • Navigation reduced to Open Source and Contact anchors
  • ClassPass work entry removed from resume data (pre-2017 roles consolidated in Earlier Career paragraph)
  • All tests updated to match new structure and assertions verified

Testing: All changes are covered by updated e2e tests that verify the absence of Work/Skills sections and the presence of Open Source content. The PR description confirms 24 unit + 13 e2e tests passing with 0 TypeScript errors and clean biome linting.

No blocking issues identified. The implementation correctly reflects the architectural decision to make the site a "lobby" focused on open-source portfolio with career history delegated to the résumé.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request simplifies the main application page by removing the 'Work' (JobList) and 'Skills' (SkillSheet) sections, as this information is already accessible via the HTML and DOCX resume. The navigation links, associated component files, and E2E tests have been updated or removed accordingly. Additionally, the ClassPass entry was removed from the resume's work history list since it is already covered in the 'Earlier Career' paragraph. Feedback on these changes suggests removing the top border from the 'Open Source' section in src/App.tsx because it is now the first section following the hero, ensuring a cleaner visual layout.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/App.tsx Outdated
jbdevprimary and others added 3 commits June 9, 2026 19:04
…nkedin icons

Unblocks the npm-major dependabot bump (#129) whose lucide upgrade
turned the long-standing deprecation warnings into type errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…X QC

The DOCX showed spacing voids and indented headings that QC missed for
two reasons: it rendered only through LibreOffice (the user views in
Pages — different layout engine) and reviewed downscaled thumbnails.

Root causes in @turbodocx/html-to-docx v1.21.0 (verified in source):
- tblCellMar is hardcoded to 160 twips l/r + 80 t/b on every table, so
  layout tables (heading rules, title/date rows) rendered indented
  against body text with inflated padding
- an empty paragraph is emitted after every table — a dead line between
  each heading rule and its section body

postprocess.ts rewrites word/document.xml after conversion: zeroes the
cell margins and strips the dead paragraphs (whitespace-tolerant match;
keeps the OOXML-required trailing paragraph before sectPr). Structural
tests lock both invariants.

qc.ts now renders through BOTH local engines at 200 DPI — LibreOffice
(Word proxy, CI-available) and Apple Pages via AppleScript (the engine
that exposed these bugs) — emitting <engine>-<page>.png for review.

Decision: fix converter defects by post-processing OOXML in our build, not by switching converters
Why: turbodocx hardcodes the values (no options); it remains the only converter validated in both Word-proxy and Pages engines
Resolves: 'docx showing weird spacing gaps and alignment issues' + 'need a way to capture the docx as it actually shows up'

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…st section after the hero

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jbdevprimary jbdevprimary merged commit 4ff9097 into main Jun 10, 2026
12 of 13 checks passed
@jbdevprimary jbdevprimary deleted the feat/portfolio-first-site branch June 10, 2026 00:19
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