Skip to content

feat: migrate from Vite SPA to Astro with pandoc resume generation#113

Merged
jbdevprimary merged 953 commits into
mainfrom
feat/astro-migration
Apr 15, 2026
Merged

feat: migrate from Vite SPA to Astro with pandoc resume generation#113
jbdevprimary merged 953 commits into
mainfrom
feat/astro-migration

Conversation

@jbdevprimary
Copy link
Copy Markdown
Contributor

Summary

  • Astro 5 migration: Replace Vite+React SPA with Astro static site using React islands architecture (client:load for interactive components)
  • Pandoc integration: Replace docx npm package and Playwright-based PDF with pandoc for DOCX generation from a new /resume route
  • Hero spacing fixes: Eliminate shadcn Tabs gap-2, tighten hero padding, fix Instrument Serif leading-tight

What changed

Build system

  • Vite → Astro (uses Vite internally)
  • index.html + src/main.tsxsrc/pages/index.astro + src/layouts/Layout.astro
  • vite.config.tsastro.config.mjs

Resume generation

  • scripts/generate-resume-docx.ts (docx npm) → pandoc HTML→DOCX
  • scripts/generate-resume-pdf.ts (Playwright) → kept as fallback, primary is pandoc
  • New src/pages/resume.astro — print-optimized, zero-JS page that pandoc converts

CI/CD

  • release.yml: pandoc/actions/setup@main replaces Playwright for resume gen
  • resume.yml: Same pandoc setup for PR-triggered regeneration
  • ci.yml: Removed Playwright install step from build job

Dependencies

  • Added: astro, @astrojs/react
  • Removed: vite, docx, @vitejs/plugin-react

Preserved

  • All React components (App.tsx, HeroSection, SiteFooter, shadcn/ui)
  • Tailwind CSS v4 + full design system
  • resume.json canonical data source
  • All 12 unit tests passing
  • E2e tests updated for Astro

Test plan

  • pnpm lint — clean
  • pnpm test — 12/12 unit tests pass
  • pnpm build — 2 pages built in ~2.3s
  • Visual verification via Chrome DevTools — all tabs, hero, footer render correctly
  • Pandoc DOCX generation tested locally
  • E2e tests with Playwright against Astro preview server
  • CI pipeline validates on push

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 9, 2026

Warning

Rate limit exceeded

@jbdevprimary has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 12 minutes and 57 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 12 minutes and 57 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, 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 have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ac48905a-f46a-4af3-91e8-7ed4b86072b5

📥 Commits

Reviewing files that changed from the base of the PR and between 181435c and 725fcfe.

⛔ Files ignored due to path filters (3)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • public/Jon_Bogaty_Resume.docx is excluded by !**/*.docx
  • public/Jon_Bogaty_Resume.pdf is excluded by !**/*.pdf
📒 Files selected for processing (26)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .github/workflows/resume.yml
  • .gitignore
  • CLAUDE.md
  • astro.config.mjs
  • biome.json
  • index.html
  • package.json
  • playwright.config.ts
  • scripts/generate-resume-docx.ts
  • scripts/generate-resume-pdf.ts
  • scripts/generate-resume.ts
  • src/App.tsx
  • src/components/HeroSection.tsx
  • src/content/resume.json
  • src/env.d.ts
  • src/index.css
  • src/layouts/Layout.astro
  • src/main.tsx
  • src/pages/index.astro
  • src/pages/resume.astro
  • tests/e2e/navigation.spec.ts
  • tests/e2e/resume.spec.ts
  • tsconfig.json
  • vite.config.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/astro-migration

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.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the project's frontend architecture by transitioning from a Vite-powered React Single Page Application to a more performant Astro static site. This change enhances build efficiency and leverages Astro's partial hydration capabilities for React components. Concurrently, the resume generation process has been streamlined and improved by adopting Pandoc, providing a more robust and flexible solution for creating DOCX and PDF versions of the resume directly from a dedicated, print-optimized Astro page.

Highlights

  • Astro Migration: The project was migrated from a Vite+React SPA to an Astro static site, utilizing React islands for interactive components to improve performance and reduce JavaScript payload.
  • Pandoc Resume Generation: The resume generation process was overhauled, replacing the docx npm package and Playwright-based PDF generation with Pandoc for more robust DOCX and PDF output from a new /resume route.
  • Styling Fixes: Addressed styling issues in the hero section, including removing gap-2 from shadcn Tabs, tightening hero padding, and fixing leading-tight for the Instrument Serif font.
Changelog
  • .gitignore
    • Added .astro to the list of ignored files.
  • astro.config.mjs
    • Added Astro configuration file, defining site output, React integration, and Vite plugins for Tailwind CSS and path aliases.
  • biome.json
    • Updated linter configuration to ignore .astro files.
  • index.html
    • Removed the old Vite entry HTML file.
  • package.json
    • Updated dev, build, preview, and check scripts to use Astro commands.
    • Replaced generate:resume:docx and generate:resume:pdf scripts with a unified generate:resume script.
    • Added astro and @astrojs/react dependencies.
    • Removed vite, docx, and @vitejs/plugin-react dependencies.
    • Updated project keywords to reflect the Astro migration.
  • playwright.config.ts
    • Updated Playwright's baseURL and port to match Astro's default development server.
  • scripts/generate-resume-docx.ts
    • Removed the dedicated script for DOCX generation using the docx npm package.
  • scripts/generate-resume-pdf.ts
    • Removed the dedicated script for PDF generation using Playwright.
  • scripts/generate-resume.ts
    • Added a new script to generate both PDF and DOCX resume files. This script builds the Astro resume page, then uses Pandoc for conversion, with a Playwright fallback for PDF generation if Pandoc's PDF engines fail.
  • src/App.tsx
    • Modified the Tabs component to remove default gap-2 styling.
  • src/components/HeroSection.tsx
    • Changed the overflow property from hidden to clip for the main section.
    • Adjusted vertical padding (py-16 to py-10, sm:py-24 to sm:py-14) in the content container.
    • Updated the leading class for the main heading from leading-none to leading-tight.
  • src/env.d.ts
    • Updated TypeScript reference types from vite/client to astro/client.
  • src/index.css
    • Expanded the CSS selector for z-index: 1 to include astro-island, body > header, body > main, and body > footer for proper layering in Astro.
  • src/layouts/Layout.astro
    • Added a new Astro layout component to define the base HTML structure, meta tags, and font imports for the site.
  • src/main.tsx
    • Removed the React entry point file.
  • src/pages/index.astro
    • Added the main Astro page, which uses the new Layout.astro and renders the App React component as an Astro island.
  • src/pages/resume.astro
    • Added a new print-optimized Astro page specifically designed for resume generation, containing structured resume data and styling for Pandoc conversion.
  • tests/e2e/navigation.spec.ts
    • Updated e2e tests to reflect changes in tab names (e.g., "Career Timeline" to "About", "Open-Source Projects" to "Projects") and content assertions.
    • Adjusted footer location text assertion to be more flexible.
  • tests/e2e/resume.spec.ts
    • Refactored existing resume-related e2e tests to align with the new tab structure (e.g., "Work tab", "About tab", "Skills tab", "Education tab").
    • Added new e2e tests specifically for the /resume print-optimized page to verify its content and structure.
  • tsconfig.json
    • Updated the extends property to astro/tsconfigs/strict and removed several Vite-specific compiler options.
  • vite.config.ts
    • Removed the Vite configuration file.
Ignored Files
  • Ignored by pattern: .github/workflows/** (3)
    • .github/workflows/ci.yml
    • .github/workflows/release.yml
    • .github/workflows/resume.yml
Activity
  • The project was migrated from Vite to Astro, involving significant changes to the build system and project structure.
  • Resume generation logic was overhauled, moving from docx npm package and Playwright to a Pandoc-based approach.
  • E2e tests were updated to reflect the new Astro-based site structure and content.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

1 similar comment
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@amazon-q-developer
Copy link
Copy Markdown

⚠️ Review Failed

I was unable to finalize my review because the pull request head or merge base was modified since I began my review. Please try again.

Request ID: 1e49adc7-bee9-52ac-bc0b-cfeeb1ae4481

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

Copy link
Copy Markdown
Contributor

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

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 is a significant and well-executed migration from a Vite-based React SPA to an Astro static site, leveraging Astro's island architecture. The resume generation process has been impressively refactored to use pandoc with a robust, multi-layered fallback system. The changes across the codebase, including configuration, dependencies, application logic, and tests, are clean and consistent with the migration goals. I have a couple of minor suggestions for the new resume generation script to enhance its debuggability by logging errors during the fallback process.

Comment on lines +53 to +55
} catch {
// Fallback: use pandoc with default LaTeX engine
console.log('weasyprint not available, trying LaTeX...')
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.

medium

The catch block is currently empty. While the script correctly falls back to another PDF generation method, swallowing the error completely can make debugging difficult if weasyprint fails for an unexpected reason (e.g., misconfiguration, not just unavailability). It would be beneficial to log the error to provide more context on why the fallback was necessary.

} catch (error) {
  // Fallback: use pandoc with default LaTeX engine
  console.log(`weasyprint not available, falling back to LaTeX. Reason: ${error.message}`);

Comment on lines +63 to +65
} catch {
// Final fallback: use Playwright for PDF
console.log('pandoc PDF failed, falling back to Playwright...')
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.

medium

Similar to the previous fallback, this catch block is empty and swallows the error from the pandoc/LaTeX execution. Logging the error here would improve debuggability by showing why the second PDF generation method also failed before falling back to Playwright.

  } catch (error) {
    // Final fallback: use Playwright for PDF
    console.log(`pandoc with LaTeX failed, falling back to Playwright. Reason: ${error.message}`);

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

22 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 9, 2026

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

jbdevprimary and others added 2 commits April 14, 2026 21:46
…work entry

Merge signals from HashSphere variant into canonical resume:
- Label, summary, and Symbiont highlights now lead with AWS/GCP/Azure parity
- Cloud Platforms skill: Azure and GCP expanded to match AWS depth
- Programming skill reordered: Python, Go, TypeScript lead
- Flipside Fireblocks bullet reframed as cross-cloud AWS->GCP migration
- New "Independent" work entry (2026-01-present) covering radioactive-ralph
  (Go orchestrator) and paranoid-passwd (C/WASM/Zig, SLSA L3, Sigstore)
- Flipside entry gains departureContext field noting workforce reduction;
  resume.astro template renders it as muted italic line
- PDF/DOCX regenerated

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jbdevprimary jbdevprimary merged commit 21d5ebd into main Apr 15, 2026
10 checks passed
@jbdevprimary jbdevprimary deleted the feat/astro-migration branch April 15, 2026 02:47
@github-actions
Copy link
Copy Markdown
Contributor

Resume PDF and DOCX have been automatically regenerated from updated source files.

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.

2 participants