Frontend
Reactive Resume
A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!
npx skills add amruthpillai/reactive-resumeSkill Details
Pick a template, fill in your details, and export to PDF. Basic use needs no account. If you want more control, you can run the whole application on your own infrastructure.
You own your data. The codebase is open source under the MIT license, with no tracking, no ads, and no hidden costs.
Sponsors
Sponsors pay for hosting, maintenance, and ongoing development, which is what keeps Reactive Resume free and independent. Thank you to everyone who chips in.
<p> <a href="https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=reactive-resume"> <img src="apps/web/public/sponsors/atlas-cloud-logo-white.svg" alt="Atlas Cloud" width="320" /> </a> </p>Atlas Cloud supports Reactive Resume as a project sponsor. Atlas Cloud provides a unified AI platform for developers, with access to hundreds of models for chat, image generation, video generation, media processing, and GPU cloud workloads through one API key, one endpoint, and one billing account.
If your company would like to sponsor Reactive Resume, email hello@amruthpillai.com.
Features
Resume Building
- Live preview as you type
- Multiple export formats (PDF, JSON, DOCX)
- Drag-and-drop section ordering
- Custom sections for any content type
- Rich text editor
Templates
- 15 templates to choose from
- A4 and Letter page sizes
- Customizable colors, fonts, and spacing
- Structured Style Rules for section and text styling
Privacy & Control
- Self-host on your own infrastructure
- No tracking or analytics by default
- Full data export at any time
- Delete your data permanently with one click
Extras
- AI integration (OpenAI, Google Gemini, Anthropic Claude)
- Multi-language support
- Share resumes via unique links
- Import from JSON Resume format
- Dark mode
- Passkey and two-factor authentication
Templates
<table> <tr> <td align="center"> <img src="apps/web/public/templates/jpg/azurill.jpg" alt="Azurill" width="150" /> <br /><sub><b>Azurill</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/bronzor.jpg" alt="Bronzor" width="150" /> <br /><sub><b>Bronzor</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/chikorita.jpg" alt="Chikorita" width="150" /> <br /><sub><b>Chikorita</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/ditto.jpg" alt="Ditto" width="150" /> <br /><sub><b>Ditto</b></sub> </td> </tr> <tr> <td align="center"> <img src="apps/web/public/templates/jpg/gengar.jpg" alt="Gengar" width="150" /> <br /><sub><b>Gengar</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/glalie.jpg" alt="Glalie" width="150" /> <br /><sub><b>Glalie</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/kakuna.jpg" alt="Kakuna" width="150" /> <br /><sub><b>Kakuna</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/lapras.jpg" alt="Lapras" width="150" /> <br /><sub><b>Lapras</b></sub> </td> </tr> <tr> <td align="center"> <img src="apps/web/public/templates/jpg/leafish.jpg" alt="Leafish" width="150" /> <br /><sub><b>Leafish</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/onyx.jpg" alt="Onyx" width="150" /> <br /><sub><b>Onyx</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/pikachu.jpg" alt="Pikachu" width="150" /> <br /><sub><b>Pikachu</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/rhyhorn.jpg" alt="Rhyhorn" width="150" /> <br /><sub><b>Rhyhorn</b></sub> </td> </tr> <tr> <td align="center"> <img src="apps/web/public/templates/jpg/ditgar.jpg" alt="Ditgar" width="150" /> <br /><sub><b>Ditgar</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/meowth.jpg" alt="Meowth" width="150" /> <br /><sub><b>Meowth</b></sub> </td> <td align="center"> <img src="apps/web/public/templates/jpg/scizor.jpg" alt="Scizor" width="150" /> <br /><sub><b>Scizor</b></sub> </td> </tr> </table>Quick Start
The quickest way to run Reactive Resume locally:
# Clone the repository
git clone --depth=1 https://github.com/amruthpillai/reactive-resume.git
cd reactive-resume
# Start all services
docker compose up -d
# Access the app
open http://localhost:3000
For detailed setup instructions, environment configuration, and self-hosting guides, see the documentation.
Tech Stack
| Category | Technology |
|---|---|
| Framework | TanStack Start (React 19, Vite) |
| Runtime | Node.js |
| Language | TypeScript |
| Database | PostgreSQL with Drizzle ORM |
| API | ORPC (Type-safe RPC) |
| Auth | Better Auth |
| Styling | Tailwind CSS |
| UI Components | Base UI + shadcn-style package |
| State Management | Zustand + TanStack Query |
Documentation
The full documentation lives at docs.rxresu.me:
| Guide | Description |
|---|---|
| Getting Started | First-time setup and basic usage |
| Self-Hosting | Deploy on your own server |
| Development setup | Local development environment |
| Project architecture | Codebase structure and patterns |
| Exporting Your Resume | PDF and JSON export options |
Self-Hosting
Reactive Resume can be self-hosted using Docker. The stack includes:
- PostgreSQL — Database for storing user data and resumes
- SeaweedFS (optional) — S3-compatible storage for file uploads
From v5.1.0 onwards — PDF generation runs entirely client-side via
@react-pdf/renderer. New deployments no longer need Browserless, Chromium, or any external print service. ThePRINTER_*andBROWSERLESS_*environment variables are no longer read and can be removed from your.env.
Pull the latest image from Docker Hub or GitHub Container Registry:
# Docker Hub
docker pull amruthpillai/reactive-resume:latest
# GitHub Container Registry
docker pull ghcr.io/amruthpillai/reactive-resume:latest
See the self-hosting guide for complete instructions.
Support
Reactive Resume is and always will be free and open source. If it has helped you land a job or saved you time, please consider supporting continued development:
<p> <a href="https://github.com/sponsors/AmruthPillai"> <img src="https://img.shields.io/badge/GitHub%20Sponsors-Support-ea4aaa?style=flat-square&logo=github-sponsors" alt="GitHub Sponsors" /> </a> <a href="https://opencollective.com/reactive-resume/donate"> <img src="https://img.shields.io/badge/Open%20Collective-Contribute-7FADF2?style=flat-square&logo=open-collective" alt="Open Collective" /> </a> </p>Other ways to support:
- Star this repository
- Report reproducible bugs and suggest actionable features
- Help other users in GitHub Discussions
- Improve documentation
- Help with translations
Star History
<a href="https://www.star-history.com/?repos=amruthpillai%2Freactive-resume&type=date&legend=top-left"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&theme=dark&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=amruthpillai/reactive-resume&type=date&legend=top-left&sealed_token=QmaOn4Ech499R6kpQe8ONn911UjGUaJfQBT0MXlQLU9hTo-Ie7lTxIILWbBvmtzDGHk7ziWKN_N5iM5mgP8widn_FGHd9-PHNokPtSji8XLgbFpqatgyqIDPnOys-IhO40W3J0HeH07FL-Q8Bq6ArRk3LDtJDwjh4m0ya-2L59ULb7BaqxkSDuCytkCr" /> </picture> </a>Contributing
Every contribution helps, whether it is a typo fix or a new feature.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See the development setup guide for how to run the project locally.
Maintainers review the status: needs triage queue
weekly. Triaged bugs become status: confirmed; feature proposals become status: accepted; reports that need details become
status: needs info.
License
MIT — do whatever you want with it.
Related Skills
- Open Design🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards, slides, images & video — real files, HTML/PDF/PPTX/MP4 export. 🤖 Claude Code / Codex / Cursor / DeepSeek Harness / OpenCode & 20+ CLIs via BYOK.FrontendView Details
- CliGoogle Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.FrontendView Details
- Open Code ReviewFast, efficient, battle-tested at Alibaba's scale. Hybrid architecture code review tool: deterministic pipelines + LLM Agent, precise line-level comments, built-in multi-language ruleset (NPE, thread-safety, XSS, SQL injection), OpenAI & Anthropic compatible.FrontendView Details
- Claude Code GuideClaude Code Guide - Setup, Commands, workflows, agents, skills & tips-n-tricks from beginner to power user!FrontendView Details