Skip to content

ReyHaynes/resume.reyhaynes.com

Repository files navigation

Resume Portfolio - Reinaldo Haynes

A file-driven, modern, ATS-friendly resume website built with Next.js, featuring a clean design, dark/light theme toggle, and optimized for both web viewing and printing.

Use /app/data/resume.json to modify the resume data. Target the job you want dynamically.

🌟 Features

  • Responsive Design: Mobile-first approach that looks great on all devices
  • Dark/Light Theme: Toggle between themes with system preference detection
  • Print Optimized: Clean print layout with proper page breaks and styling
  • Static Export: Builds to static files for easy deployment
  • Performance Focused: Optimized loading and rendering; SEO-friendly
  • Accessibility: Proper semantic HTML, ARIA labels, and screen-reader ready
  • Skills Visualization: Visual progress bars showing years of experience
  • Optional Analytics: Privacy-focused Firebase Analytics for engagement insights

πŸ“Έ Screenshots

Light Mode

Resume - Light Mode

Dark Mode

Resume - Dark Mode

Print Layout

Resume - Print Layout

πŸš€ Tech Stack

πŸƒβ€β™‚οΈ Quick Start

Prerequisites

  • Node.js 18+
  • npm, yarn, pnpm, or bun

Installation

  1. Clone the repository:
git clone https://github.com/ReyHaynes/resume.reyhaynes.com.git
cd resume.reyhaynes.com
  1. Install dependencies:
npm install
# or
yarn install
# or
pnpm install
  1. Start the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
  1. Open http://localhost:3000 in your browser

πŸ“ Customization

Update Resume Data

Edit the resume content in app/data/resume.json:

{
  "header": {
    "name": "Your Name",
    "title": "Your Title",
    "email": "your.email@example.com",
    "website": "https://yourwebsite.com",
    "websiteLabel": "yourwebsite.com",
    "linkedin": "https://linkedin.com/in/yourprofile",
    "location": "Your Location"
  },
  "summary": "Your professional summary...",
  "experience": [...],
  "skills": [...],
  "education": [...],
  "certifications": [...]
}

Customize Styling

  • Colors: Modify CSS custom properties in app/globals.css
  • Layout: Adjust components in app/components/
  • Typography: Update font settings in app/layout.tsx

Add Company Logos

Place company logos in the public/ directory and reference them in the resume data:

{
  "logo": "/company_logo.jpeg"
}

πŸ“Š Optional: Firebase Analytics

This project includes optional, privacy-focused Firebase Analytics integration for basic page tracking.

Features

  • Minimal Tracking: Only essential page views, engagement time, and scroll milestones
  • Privacy-Focused: No intrusive tracking or personal data collection
  • Optional: App works perfectly without analytics configured
  • Lightweight: Minimal performance impact

Setup (Optional)

  1. Create a Firebase project at Firebase Console
  2. Enable Analytics in your Firebase project
  3. Copy .env.local.example to .env.local:
cp .env.local.example .env.local
  1. Add your Firebase configuration to .env.local:
NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key_here
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=G-XXXXXXXXXX

What's Tracked

  • Page Views: Basic page visit tracking
  • Engagement Time: Time spent on page (only meaningful engagement >10s)
  • Scroll Milestones: Progress at 25%, 50%, 75%, and 100% scroll depth
  • Performance Metrics: Page load times and rendering performance
  • Device Context: Viewport size, device type, and screen resolution
  • Session Information: Visit patterns and return visitor tracking
  • Exit Intent: Potential exit behavior for engagement insights

Privacy Notes

  • No personal information is collected
  • All tracking is anonymous and aggregated
  • Easy to disable by removing environment variables
  • Fully compliant with privacy best practices

πŸ› οΈ Scripts

  • npm run dev - Start development server with Turbopack
  • npm run build - Build for production (static export)
  • npm run start - Start production server
  • npm run lint - Run ESLint

πŸ—οΈ Project Structure

β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ components/          # React components
β”‚   β”‚   β”œβ”€β”€ Header.tsx       # Header with name and theme toggle
β”‚   β”‚   β”œβ”€β”€ ThemeToggle.tsx  # Dark/light mode toggle
β”‚   β”‚   β”œβ”€β”€ Section.tsx      # Resume sections
β”‚   β”‚   β”œβ”€β”€ ExperienceItem.tsx
β”‚   β”‚   β”œβ”€β”€ Skills.tsx
β”‚   β”‚   β”œβ”€β”€ StandoutSkills.tsx
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ data/
β”‚   β”‚   └── resume.json      # Resume content data
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   β”œβ”€β”€ useTheme.ts      # Theme management hook
β”‚   β”‚   └── useAnalytics.ts  # Analytics tracking hook (optional)
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ theme-script.ts  # Client-side theme script
β”‚   β”‚   β”œβ”€β”€ firebase.ts      # Firebase configuration (optional)
β”‚   β”‚   └── analytics.ts     # Analytics functions (optional)
β”‚   β”œβ”€β”€ providers/
β”‚   β”‚   └── FirebaseProvider.tsx # Firebase provider (optional)
β”‚   β”œβ”€β”€ types/
β”‚   β”‚   └── resume.ts        # TypeScript types
β”‚   β”œβ”€β”€ globals.css          # Global styles and CSS variables
β”‚   β”œβ”€β”€ layout.tsx           # Root layout
β”‚   └── page.tsx             # Main page component
β”œβ”€β”€ public/                  # Static assets and company logos
β”œβ”€β”€ .env.local.example       # Environment variables template
β”œβ”€β”€ next.config.ts           # Next.js configuration
└── package.json

🎨 Theme System

The theme system supports both light and dark modes with:

  • System Preference Detection: Automatically matches user's OS preference
  • Manual Toggle: Switch themes with the toggle button
  • Persistence: Remembers user's choice in localStorage
  • CSS Custom Properties: Seamless color transitions
  • Print Compatibility: Optimized colors for printing

πŸ“± Responsive Design

  • Mobile-first: Optimized for mobile devices
  • Tablet: Adjusted layout for medium screens
  • Desktop: Full layout with sidebar
  • Print: Special print styles for clean paper output

πŸš€ Deployment

This project is configured for static export, making it deployable to:

  • GitHub Pages
  • Vercel
  • Netlify
  • AWS S3 + CloudFront
  • Any static hosting service

Deploy to Vercel

Deploy with Vercel

Manual Deployment

  1. Build the project:
npm run build
  1. The static files will be in the out/ directory
  2. Upload the contents to your hosting service

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is open source and available under the MIT License.

πŸ‘€ Author

Reinaldo Haynes


πŸ’š Made with love...because I hate updating PDFs and Word documents!

⭐ Star this repository if you found it helpful!

About

Personal Resume - Custom ATS Friendly Resume

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published