BuildMyResume is a privacy-first, end-to-end encrypted, account-free resume builder created by Muhammed Rashid V. Create, publish, and export beautiful resumes from any device — with zero friction and full control over your data.
BuildMyResume is for anyone who wants to build a professional, ATS-friendly resume with AI-powered content enhancement — without creating an account, paying hidden fees, or giving up privacy. Created by Muhammed Rashid V.
- No login required: Build and download resumes instantly, no sign-up or email needed.
- AI Resume Builder: Chat with our AI to effortlessly generate a full customized resume from scratch, powered by Puter.js.
- AI-powered enhancement: Intelligent content improvement with Google Gemini AI for better ATS optimization.
- Publish for later: Use the “Publish” feature to get a secure, encrypted link you can revisit from any device.
- End-to-end encrypted: All resume data is encrypted before storage or export. Only you hold the key.
- Open source & free forever: MIT licensed, transparent, and built for the community.
- 🧩 Form-based resume builder — Fill out a structured form and see your resume update in real time.
- 🤖 AI-powered content enhancement — Enhance your resume content with AI using Google's Gemini for better ATS optimization and professional language. Get intelligent suggestions for Professional Summary, Job Descriptions, and more.
- 🔮 AI Resume Builder & Puter.js Integration — We partner with Puter.js to offer a robust, free-to-use AI resume generation experience that helps you build a resume from scratch securely and boundlessly.
- 🔐 Privacy-first — All data is encrypted before storage or export. No accounts, no tracking.
- 🔄 Editable preview — Adjust formatting directly on your resume before exporting.
- 📄 Export options — Download as high-fidelity PDF (rendered locally in your browser) or export to JSON.
- 🔗 Published resume link — Get a secure, encrypted link to revisit and edit your resume anytime.
- 📱 Mobile-friendly UI — Fully responsive, works beautifully on all devices.
- 🧑💻 Open source — MIT licensed and built for the community.
We've integrated an advanced interactive AI Resume Builder directly into the platform to help you generate a professional resume from a simple prompt or chat conversation.
- Built with Puter.js: We leverage Puter.js to provide boundless, reliable, and secure AI generation for creating your initial resume draft.
- Interactive Chat: You can chat with the AI to refine your experiences, add missing details, and tweak your resume generation.
- Privacy-focused: Your prompts and generated data are handled securely and fed directly into your local private editor.
Once the AI generates your base resume, you can switch to the Editor to manually tweak formatting, add new sections, enhance your fields, and export to PDF.
- Frontend: React, Tailwind CSS, shadcn/ui, crypto-js, file-saver
- Backend API: NestJS, Express.js
- AI Integration: Google Gemini API via
@google/generative-ai(for Enhancement) and Puter.js (for AI Builder Chat/Generate) - PDF Rendering: Local high-fidelity print generation via
@react-pdf/rendererand HTML Printing - Security: AES encryption + HMAC signature (for data integrity), Rate limiting, Input validation
flowchart TD
A[User fills form or Chat with AI] --> B[Live resume preview]
B --> C{Export or Publish?}
C -->|Export| D[Client-Side PDF Generation]
D --> E[Download PDF to user device]
C -->|Publish| H[Encrypt and save to DB]
H --> I[Return unique, sharable URL]
I --> J[Resume can be edited/decrypted via URL+key]
- Build: Fill out the form, see instant preview, and edit formatting directly.
- Export: Generates high-resolution PDFs directly on the client machine using browser native print capabilities alongside React rendering boundaries.
- Publish: Resume is encrypted and stored in the cloud. You get a unique, encrypted link to revisit and edit your resume from any device.
- Access: When you open a published link, the resume is decrypted in your browser using the embedded key — your data stays private.
- All resume data is encrypted in the browser using AES (via
crypto-js). - When you publish or export, the data is encrypted with a randomly generated key.
- For published resumes, the key is embedded in the URL fragment (
#key=...), never sent to the server.
- Publishing stores the encrypted resume in a database (via Supabase).
- The returned link contains the resume ID and the encryption key.
- Only someone with the link (and key) can decrypt and edit the resume.
- PDF export is securely handled entirely in the browser using the
useReactToPrintarchitecture. Your data never needs to round-trip to a third-party server to be styled into a PDF file, keeping you private and your operations extremely fast.
Create a .env file in the project root:
VITE_API_URL=http://localhost:4000
VITE_SHARED_SECRET=your-shared-secret
VITE_SUPABASE_URL=https://your-supabase-url
VITE_SUPABASE_ANON_KEY=your-supabase-anon-key
VITE_BASE_URL=http://localhost:5173
VITE_UMAMI_SRC=https://cloud.umami.is/script.js
VITE_UMAMI_WEBSITE_ID=your-umami-website-id
For AI content enhancement features, you'll need to set up Google Gemini API inside the api/ directory:
- Get a Gemini API key from Google AI Studio
- For local backend development, add to
api/.env:PORT=4000 GEMINI_API_KEY=your_gemini_api_key_here GEMINI_MODEL=gemini-2.5-flash - For production deployment on Vercel, attach
GEMINI_API_KEYto your Vercel Project Environment Variables directly.
See API_SETUP.md for detailed setup instructions.
Note: The AI Resume Builder chat feature is powered by Puter.js and authenticates directly on the client side, requiring no extra environment variables!
VITE_API_URL: URL of your deployed NestJS Backend API Proxy.VITE_SHARED_SECRET: Secret used for encryption.VITE_SUPABASE_URL: Your Supabase project URL (for published resume storage).VITE_SUPABASE_ANON_KEY: Your Supabase anon/public API key.VITE_BASE_URL: The base URL of your frontend app (e.g., http://localhost:5173).VITE_UMAMI_SRC: Umami script URL (cloud or self-hosted). Example:https://cloud.umami.is/script.js.VITE_UMAMI_WEBSITE_ID: Your Umami website ID.
A .env.example file is provided in the project root. It lists all required environment variables.
- Copy
.env.exampleto.envand fill in your values. - Make sure
VITE_SHARED_SECRETmatches between frontend and any remote services you connect.
Example:
# Application API
VITE_API_URL=http://localhost:4000
VITE_SHARED_SECRET=your-shared-secret
# Set to 'true' to enable AES encryption for AI Builder payloads (Must also set ENABLE_ENCRYPTION=true on the backend)
VITE_ENABLE_ENCRYPTION=false
# Supabase
VITE_SUPABASE_URL=https://your-supabase-url
VITE_SUPABASE_ANON_KEY=your-supabase-anon-key
# Etc
VITE_BASE_URL=http://localhost:5173
VITE_UMAMI_SRC=https://cloud.umami.is/script.js
VITE_UMAMI_WEBSITE_ID=your-umami-website-idThis project uses Umami for privacy-friendly analytics.
- Analytics script is loaded dynamically from
src/components/Analytics.tsx. - Auto-tracking is disabled, and pageviews are tracked manually on route changes.
- Published resume pages (
/view/:id) are intentionally excluded from analytics to protect user privacy. - If
VITE_UMAMI_SRCorVITE_UMAMI_WEBSITE_IDare missing, analytics is skipped entirely.
How to set up:
- Create a site in Umami and copy the website ID.
- Set
VITE_UMAMI_SRCto your Umami script URL (Cloud:https://cloud.umami.is/script.jsor your self-hosted URL). - Set
VITE_UMAMI_WEBSITE_IDto your website ID.
Event tracking:
- The app currently tracks only pageviews (excluding
/view/:id). You can extend it to track custom events usingwindow.umami.track(eventName, data)in your components.
You can run the full dual-app stack in two ways:
For local testing, boot up both development servers simultaneously:
# Terminal 1 - Frontend
pnpm run dev
# Terminal 2 - Backend
cd api
pnpm run start:dev- The local backend will run on
http://localhost:4000 - The local frontend will run on
http://localhost:5173
This project's root web and nested api folders are primed to be deployed seamlessly onto Vercel using workspaces or standard build configurations. Simply point the Build/Output directories respectively in your dashboard, and include the GEMINI_API_KEY into your Vercel Project parameters before hitting deploy!
- Add your template component to
src/templates/. - Register it in
src/templates/index.tsandsrc/templates/config.ts. - Add a preview image and description.
- Submit a PR!
For comprehensive documentation, guides, and development information, visit our Documentation folder:
- Contributing Guidelines - How to contribute to the project
- Template Guide - How to create and submit new resume templates
- API Setup Guide - Backend API documentation and setup
- AI Enhancement Guide - AI-powered content enhancement feature documentation
- SEO Guide - Search engine optimization guidelines
- Security Checklist - Security review and deployment checklist
If you want to contribute a new resume template, please read our Template Authoring Guide for best practices and requirements.
BuildMyResume is a modern, open-source resume builder. Visit BuildMyResume.live to try it out or learn more.
We welcome contributions of all kinds!
- Report bugs — Open an issue if you find a bug or security concern.
- Submit PRs — Add new templates, improve UI/UX, or fix issues.
- Suggest features — Propose new features or improvements.
See CONTRIBUTING.md for guidelines.
- Fully keyboard accessible and screen reader friendly.
- Tested on latest Chrome, Firefox, Safari, and Edge.
- Mobile-first, responsive design.
Live Demo: BuildMyResume.live Video Demo: Watch on YouTube
MIT — free for personal and commercial use. See LICENSE.
BuildMyResume — Build, export, and publish your resume with privacy and freedom. No accounts. No friction. Open source forever.
Created by Muhammed Rashid V — Connect with me on LinkedIn for collaboration opportunities and professional networking.


