MAV Resume is a guided resume builder focused on undergraduate engineering students. It pairs a conversational onboarding experience with data-backed recommendations (UTA course catalog, curated technology list) so students can produce a polished PDF resume, preview it live, and download it without leaving the browser.
- Dual-screen builder workflow – landing page (
/) introduces the product while/builderhosts the editor with a fixed progress header (BuilderHeaderBar) and scroll-snapped sections. - Guided data entry – each section (
PersonalInfoSection,EducationSection,TechnicalSkillsSection,ProjectsSection,ExperienceSection) ships with contextual guides surfaced viaCustomSectionTitledialogs so users know what to write. - Course-aware skill recommendations – selecting UTA courses populates recommended languages/technologies (
TechnicalSkillsSection) using the metadata indata/university-data.tsx. - Live document preview –
ResumePreviewrenders a card-based mock resume that updates with every keystroke thanks to the centralized Zustand store. - PDF generation & export –
ResumeDoc(powered by@react-pdf/renderer) feeds both a modal viewer (ResumeDocPreview) and a one-click download button (ResumeDocDownloadButton). - Local persistence –
useResumeStorewrapszustand/persist, so in-progress resumes survive refreshes and browser restarts. - Accessible UI system – form primitives (
components/ui) reuse shadcn/Radix building blocks with Tailwind CSS v4 + DaisyUI theming to keep interactions consistent.
- Hero (
HeroSection) highlights the core value prop, CTA to open the builder, and marketing imagery (public/MavResumePlaceholder.png). - Sticky
HomeHeaderBarfades in after leaving the hero, mirroring the lightweight brand navigation.
- Layout (
app/builder/layout.tsx) splits the viewport: form stack on the left, persistent preview & export controls on the right. - IntersectionObserver-driven
BuilderHeaderBartracks the active section so users know where they are in the flow. - Each section manages:
- form inputs via
CustomTextField,Combobox,Checkbox,NoteBox - add/remove operations through accordions (
EducationAccordion,ProjectAccordion,ExperienceAccordion) - “Clear inputs” + “Next” CTA to encourage forward motion.
- form inputs via
- The skills section auto-suggests languages/technologies from a curated list (
Technologiesexport) filtered by selected coursework. - Projects & experience forms surface three bullet points by default and allow unlimited entries.
ResumePreviewstitches together modular preview components under a dashed border artboard so content looks resume-like even before export.ResumeDocPreviewopens an @react-pdfPDFViewerinside a Radix dialog for high-fidelity review.ResumeDocDownloadButtonnames the PDF after the student ({Full Name} - Resume.pdf) to keep downloads organized.
| Area | Details |
|---|---|
| Routing | Next.js App Router with two primary routes (/, /builder). |
| State | store/useResumeStore.tsx defines the full resume schema and exposes CRUD helpers; persisted via zustand/middleware. |
| Data | data/university-data.tsx holds universities, degrees, majors, months, course metadata, and the global technology taxonomy used by forms & recommendations. |
| Components | Organized by intent: components/sections (form sections), components/elements (shared widgets, accordions, previews, PDF helpers), components/ui (shadcn primitives), components/guides (content for dialog tips), components/previews (live artboard sections). |
| Styling | Tailwind CSS v4 (via @import "tailwindcss" in app/globals.css), DaisyUI plugin, react-awesome-reveal for entrance animations, Google Fonts (Montserrat, Poppins, Geist). |
| PDF generation | @react-pdf/renderer Document -> Page -> Text layout replicates a traditional single-column resume. |
app/
├─ page.tsx # Landing page
├─ layout.tsx # Root font + theme setup
└─ builder/
├─ layout.tsx # Builder split layout with preview
└─ page.tsx # Section orchestrator & scroll logic
components/
├─ elements/ # Headers, accordions, previews, PDF helpers
├─ sections/ # Form sections mapped 1:1 with resume areas
├─ guides/ # Content that powers Info dialogs
├─ previews/ # Building blocks for ResumePreview
└─ ui/ # Radix/shadcn primitives (accordion, dialog…)
data/
└─ university-data.tsx # Universities, degree/major lists, tech catalog
store/
└─ useResumeStore.tsx # Zustand store + persistence middleware
- Next.js 15 App Router with React 19
- TypeScript everywhere (strict types for resume schema)
- Tailwind CSS 4 + DaisyUI + tw-animate-css for design system tokens and motion
- shadcn/ui + Radix for accessible dialogs, accordions, comboboxes, popovers
- Zustand (with
persist) for client-side state management - @react-pdf/renderer for live PDF creation, preview, and download
- lucide-react & react-icons for iconography
- react-awesome-reveal for intersection-based fade animations
-
Install dependencies
npm install
Node 18.18+ (or any Next.js 15-compatible runtime) is recommended.
-
Run the dev server
npm run dev
Visit
http://localhost:3000for the landing page orhttp://localhost:3000/builderto jump straight into the editor. -
Lint & typecheck
npm run lint
TypeScript is enforced by Next during
next build. -
Create a production build
npm run build npm start
- Tune course-to-skill mapping: edit
utaEngineeringCoursesorTechnologiesindata/university-data.tsxto reflect your department’s catalog. - Adjust resume layout: tweak fonts, spacing, or sections inside
components/elements/ResumeDoc.tsxand mirror major changes in the live preview components for parity. - Swap persistence strategy: the Zustand store currently writes to
localStorageviapersist. Replace or extend the middleware to sync with an API, Supabase, etc. - Branding: update fonts/colors in
app/globals.cssand metadata inapp/layout.tsx.
The app is fully static-client driven, so it deploys cleanly to Vercel, Netlify, or any platform that supports the Next.js App Router. Configure the production command as:
npm install
npm run build
npm start
Issues and PRs are welcome! A few contribution ideas:
- Expand the coursework dataset beyond UTA.
- Add templates or sections (awards, leadership, coursework emphasis).
- Integrate authentication to save multiple resume drafts per student.
Before opening a PR, run npm run lint and ensure the builder flow still exports a PDF without console errors.
Maintained by ACM @ UTA • Built with ❤️ for aspiring Mavericks.