Build a stunning, ATS-friendly resume in minutes β no sign-up, no cloud, no backend, fully offline.
| 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 |
π Open in any browser on any device:
Works on mobile, tablet, and desktop β no download, no sign-up, no install required.
# 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.
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
| 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 |
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.
Live A4-scaled preview of your resume. Scales automatically to fit any screen size.
| 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 |
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.
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 |
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 |
|---|---|
| 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).
Contributions, issues, and feature requests are welcome!
- Read
CONTRIBUTING.mdfor the full workflow. - Check the Issues page for open bugs or ideas.
- Fork the repo, create a feature branch, and submit a PR.
This project is licensed under the MIT License β see the LICENSE file for details.
- Icons β Font Awesome 6
- Fonts β Inter & JetBrains Mono via Google Fonts
- Built with zero dependencies using pure HTML, CSS, and JavaScript.
Made with β€οΈ by Lion
β If this project helped you, please consider starring the repo!