Skip to content

Repository files navigation

ResumeFlow

⚑ ResumeFlow

Modern, Drag & Drop Resume Builder β€” Runs 100% in the Browser

License: MIT Vanilla JS HTML5 CSS3 Zero Dependencies PRs Welcome Deploy Jekyll with GitHub Pages dependencies preinstalled


Build a stunning, ATS-friendly resume in minutes β€” no sign-up, no cloud, no backend, fully offline.


Works on Mobile Works on Desktop Works on Tablet No Install



✨ Features

Feature Description
⚑ Real-Time Preview Every keystroke instantly reflects in the A4 resume preview
πŸ–±οΈ Drag & Drop Reorder Pointer-event based 60fps item reordering for Experience, Education & Projects
πŸŒ“ Dark / Light Mode Smooth CSS-variable-driven theme switching with persistent preference
🎨 Custom Accent Color Live color picker syncs accent across the entire resume and UI
πŸ“„ PDF Export Print-to-PDF via browser with pixel-perfect A4 layout
πŸ’Ύ JSON Import / Export Save your full resume state, reload it any time β€” with 5MB validation guard
↩️ Undo / Redo (50 steps) Full history stack with keyboard shortcuts (Ctrl+Z / Ctrl+Y)
πŸ”’ Auto-Save Debounced localStorage persistence β€” your work is never lost
πŸ“± Fully Responsive Adapts from mobile 320px through ultra-wide 4K displays
β™Ώ Accessibility First ARIA roles, keyboard navigation, sr-only labels, and focus management
πŸ›‘οΈ XSS-Safe Rendering All user input is sanitized through a static entity-map escaper
⌨️ Keyboard Shortcuts Ctrl+S Export · Ctrl+P Print · Ctrl+Z Undo · Ctrl+Y Redo

πŸš€ Quick Start

βœ… Option 1 β€” Use it instantly (No install needed!)

🌐 Open in any browser on any device:

Works on mobile, tablet, and desktop β€” no download, no sign-up, no install required.


πŸ’» Option 2 β€” Run locally

# 1. Clone the repository
git clone https://github.com/uxle/Resumeflow.git

# 2. Navigate to the project folder
cd Resumeflow

# 3. Open directly in your browser
open index.html
# Or just double-click index.html in your file manager!

That's it. The app loads instantly β€” no build step, no npm install.


πŸ—‚οΈ Project Structure

Resumeflow/
β”‚
β”œβ”€β”€ index.html                  # Application shell & resume preview markup
β”‚
β”œβ”€β”€ css/                        # Layered CSS architecture (cascade-ordered)
β”‚   β”œβ”€β”€ 01-tokens.css           # Design tokens: colors, spacing, typography, z-index
β”‚   β”œβ”€β”€ 02-base.css             # CSS reset, base elements, scrollbar, selection
β”‚   β”œβ”€β”€ 03-layout.css           # Workspace grid, sticky header, scrollable panels
β”‚   β”œβ”€β”€ 04-controls.css         # Buttons, icon-buttons, color picker wrap
β”‚   β”œβ”€β”€ 05-forms.css            # Input wrappers, textareas, labels, error states
β”‚   β”œβ”€β”€ 06-components.css       # Cards, badges, toggle switches, skill pills
β”‚   β”œβ”€β”€ 07-lists.css            # Dynamic editor list items, drag ghost, placeholder
β”‚   β”œβ”€β”€ 08-resume.css           # A4 paper, resume typography, section layout
β”‚   β”œβ”€β”€ 09-animations.css       # Keyframes, toast notification, reduced-motion
β”‚   └── 10-responsive.css       # Mobile breakpoints, print media queries
β”‚
β”œβ”€β”€ js/                         # Modular JavaScript (execution-ordered)
β”‚   β”œβ”€β”€ 01-config.js            # Frozen CONFIG object β€” all app constants
β”‚   β”œβ”€β”€ 02-utils.js             # escapeHtml, formatText, formatLink, debounce, throttle
β”‚   β”œβ”€β”€ 03-templates.js         # HTML template generators (list items, preview entries)
β”‚   β”œβ”€β”€ 04-store.js             # State class: history, persistence, pub/sub
β”‚   β”œβ”€β”€ 05-app-core.js          # ResumeApp class constructor, DOM cache, lifecycle
β”‚   β”œβ”€β”€ 06-app-render.js        # Multi-pass render engine with DOM reconciliation
β”‚   β”œβ”€β”€ 07-app-handlers.js      # addItem, deleteItem, toggleTheme, switchView
β”‚   β”œβ”€β”€ 08-app-drag.js          # Pointer-event drag & drop with RAF animation loop
β”‚   β”œβ”€β”€ 09-app-io.js            # handleImport, handleExport, scalePreview, showToast
β”‚   └── 10-bootstrap.js         # Event binding, keyboard shortcuts, app entry point
β”‚
β”œβ”€β”€ Example.json                # Sample resume data (Alex Morgan β€” UX Designer)
β”œβ”€β”€ .github/
β”‚   β”œβ”€β”€ ISSUE_TEMPLATE/
β”‚   β”‚   β”œβ”€β”€ bug_report.md
β”‚   β”‚   └── feature_request.md
β”‚   └── PULL_REQUEST_TEMPLATE.md
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ CODE_OF_CONDUCT.md
β”œβ”€β”€ LICENSE                     # MIT
└── README.md

⌨️ Keyboard Shortcuts

Shortcut Action
Ctrl + Z Undo last change
Ctrl + Shift + Z Redo
Ctrl + Y Redo
Ctrl + S Export resume as JSON
Ctrl + P Open Print / Save as PDF dialog

πŸ› οΈ Usage Guide

1. Editor Panel (Left)

Fill in your information across these sections:

  • Personal Information β€” Name, Role, Email, Phone, Location, LinkedIn, Website
  • Professional Summary β€” 2–3 sentence pitch rendered live in the preview
  • Work Experience β€” Add multiple entries; drag to reorder
  • Projects β€” Portfolio pieces with title, tech stack, and description
  • Education β€” Degrees and certifications
  • Skills β€” Technical and soft skills rendered as visual pill badges
  • Additional β€” Languages and hobbies/interests

Markdown tip: Use **bold text** in description fields to render bold text in the PDF output.

2. Preview Panel (Right)

Live A4-scaled preview of your resume. Scales automatically to fit any screen size.

3. Header Controls

Button Shortcut Action
⬆️ Upload β€” Import a .json resume file (max 5MB)
⬇️ Download Ctrl+S Export current resume as .json
🎨 Palette β€” Change accent color (syncs to whole UI)
πŸŒ™ Moon β€” Toggle dark / light mode
πŸ–¨οΈ Print Ctrl+P Save as PDF via browser print dialog

πŸ“‹ JSON Data Format

Resume data is stored as a structured JSON file. You can hand-edit it or import/export via the UI.

{
  "settings": {
    "theme": "light",
    "accentColor": "#6366f1"
  },
  "visibility": {
    "exp": true,
    "proj": true,
    "edu": true
  },
  "personal": {
    "name": "Alex Morgan",
    "role": "Senior UX/UI Designer",
    "email": "alex.morgan@example.com",
    "phone": "+1 (555) 123-4567",
    "location": "San Francisco, CA",
    "linkedin": "linkedin.com/in/alexmorgan",
    "website": "https://alexmorgan.design"
  },
  "summary": "Innovative designer with 6+ years of experience...",
  "skills": {
    "tech": "Figma, Adobe XD, HTML5, CSS3, React",
    "soft": "User Research, Wireframing, Agile, Mentorship"
  },
  "additional": {
    "languages": "English (Native), Spanish (Conversational)",
    "hobbies": "Urban sketching, hiking, guitar"
  },
  "exp": [
    {
      "id": "unique-id",
      "title": "Lead Product Designer",
      "subtitle": "Creative Pulse Agency",
      "date": "Jan 2021 – Present",
      "description": "β€’ Led redesign of fintech app.\nβ€’ **Increased DAU by 40%**."
    }
  ],
  "proj": [],
  "edu": []
}

See Example.json for a complete working example.


βš™οΈ Configuration Reference

All app-wide constants live in js/01-config.js as a frozen object:

Constant Default Description
STORAGE_KEY resumeflow_data_v1 localStorage key for auto-save
SAVE_DELAY 400ms Debounce delay for persistence writes
MAX_HISTORY 50 Maximum undo/redo stack depth
HISTORY_DEBOUNCE 800ms Typing debounce before a history snapshot is taken
A4_WIDTH_PX 794px A4 width at 96 DPI
A4_HEIGHT_PX 1123px A4 height at 96 DPI
MIN_SCALE 0.4 Minimum preview scale factor
MAX_SCALE 1.0 Maximum preview scale factor
TOAST_DURATION 2500ms How long toast notifications stay visible

🧠 Architecture Overview

User Input
    β”‚
    β–Ό
Event Listeners (10-bootstrap.js)
    β”‚
    β–Ό
Handlers / I/O (07–09)
    β”‚  mutate state via
    β–Ό
Store.update() (04-store.js)
    β”œβ”€β”€ Pushes history snapshot
    β”œβ”€β”€ Debounced localStorage save
    └── Notifies subscribers
             β”‚
             β–Ό
     ResumeApp.render() (06-app-render.js)
         β”œβ”€β”€ _renderDesignTokens()    β€” CSS vars, theme, color picker
         β”œβ”€β”€ _renderGlobalUI()        β€” Section visibility toggles
         β”œβ”€β”€ _renderEditorInputs()    β€” Form fields (focus-preserved)
         β”œβ”€β”€ _renderPreviewStatic()   β€” Name, role, contact, skills pills
         └── _renderDynamicSections() β€” Experience, Projects, Education

🌐 Browser Support

Browser Support
Chrome 90+ βœ… Full
Edge 90+ βœ… Full
Firefox 88+ βœ… Full
Safari 15+ βœ… Full
Mobile Chrome βœ… Full
Mobile Safari βœ… Full

Requires ES2020+ (optional chaining, structuredClone, Pointer Events API).


🀝 Contributing

Contributions, issues, and feature requests are welcome!

  1. Read CONTRIBUTING.md for the full workflow.
  2. Check the Issues page for open bugs or ideas.
  3. Fork the repo, create a feature branch, and submit a PR.

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


πŸ™ Acknowledgements


Made with ❀️ by Lion

⭐ If this project helped you, please consider starring the repo!

About

Resume maker website made by me

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages