Open-source project
sadanandpai/resume-builder avatar
sadanandpai/resume-builder

Resume Builder: a client-side single page resume editor

Build a standard and professional single page resume

1,229 stars484 forksTypeScriptMIT

At a glance

What is it?
Resume Builder is a Next.js application that builds a single-page professional resume in the browser, with templates and themes, no sign-up and a promise that your data never leaves your device. It suits someone who wants a PDF out of a browser rather than a SaaS account, and the editor state lives in the browser with Zustand.
Who is it for?
Adopt Resume Builder if you want to compose a single-page resume in the browser and export it without creating an account, since the data stays on your device. Skip it if you need collaborative editing, a saved history or a PDF pipeline you can run in CI, since this is a client-side editor rather than a service.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the application is, and the four promises

Resume Builder is an open-source application where one can effectively build a single-page professional resume, hosted at e-resume.vercel.app, and the README describes it as a free and open source, fully customizable professional single page resume builder. The four feature lines are short and each is a design commitment. You can customise with templates and themes. The interface is simple and helps you build quickly. No sign-up is needed, so you go straight to the building. And your data never leaves your device. The primary language is recorded as TypeScript, the licence is MIT, the last push was on 2026-10-15, and the releases are V2, the Resume Builder 2.0, on 2026-04-05 and V1 from 2021-10-13. The stack badges name Next.js, Material React, Tailwind CSS and Zustand, which matches what the package manifest shows.

The stack, and why the state library is in the manifest

The package manifest is worth reading because it shows the shape of the application. Next is at `^16.4.0` with React 19.3, and the UI layer is Material UI at version 9 with `@mui/material-nextjs` for the framework integration and `@mui/lab` and `@mui/x-date-pickers` for the more specialised pieces. Tailwind CSS 4 sits alongside Emotion, which is the `@emotion/react` and `@emotion/styled` pair, and the two styling systems coexist, with Tailwind for layout and utility work and Emotion for the Material components themselves. Zustand at `^5.0.15` is the client-side store, and it is the piece that makes the no-sign-up promise work, since the whole document is state in the browser and there is no server to hold it. The other dependencies describe the features: `@dnd-kit` for drag and drop reordering of sections, `framer-motion` for the transitions, `jodit` as the rich text editor, `export-from-json` for the export path, `html-react-parser` for rendering, `immer` for immutable state updates and `nanoid` for identifiers. `dayjs` handles dates and `color` handles the theme colours, and Vercel Analytics is there for the usage tracking.

The data promise, and the disclaimer that complicates it

The feature list says your data never leaves your device, and there is a disclaimer directly beneath it. The project says that to enhance the vision and usage, they are shadowing user interactions, and that this is solely performed to serve you better. Those two statements sit in tension and a careful reader should notice it. Shadowing interactions means recording what a user does in the editor, and the phrase your data never leaves your device is either scoped to the resume content or is in tension with the recording. The client-side architecture makes the first reading plausible, since there is no backend to receive a saved resume, but the interaction logging is a separate channel with its own destination, and the fact that `@vercel/analytics` is a dependency makes that concrete. If the privacy claim matters to you, that is the line to interrogate before you paste a resume into it.

Testing, and the browser verification scripts

The scripts in the manifest show a testing setup that goes beyond unit tests. `test` runs Vitest, with the dev dependencies including Testing Library for React, jsdom for the environment and the jest-dom matchers. The two custom scripts are the interesting ones. `test:browser` runs `node scripts/browser/verify.mjs`, and `test:parity:capture` runs `node scripts/browser/parity.mjs`, and Playwright is pinned at 1.62.1 in the dev dependencies. A parity capture is the standard way to check that a refactor of a visual application did not change what it renders, which for a resume builder is the whole product, since the output is a document someone will judge. Linting has moved to oxlint at `^1.86.0` with the script running `oxlint src`, alongside Prettier with pretty-quick, and husky is wired up through the `prepare` script.

Running it locally, and the container

The Docker setup is the simplest way to get a local copy. The compose file defines a single service built from the repository's Dockerfile, with the source bind-mounted at `/app` so code changes are reflected live, and a separate `/app/node_modules` mount so the container's installed modules are not shadowed by the host's directory. Port 3000 is published, and the file's comment says to run `docker-compose up -d` and visit localhost:3000 once the container is up. The Dockerfile itself is a development image, `FROM node:latest` with the package files copied and installed first so the layer caches, then the rest of the source, port 3000 exposed and `npm run dev` as the command. The comment in the Dockerfile notes that if any package changes, the image has to be rebuilt with `docker-compose up -d --build`. For the normal development loop the scripts are the usual ones, `next dev`, `next build` and `next start`.

Where the project sits

Two observations frame what this is. The first is that the version history has a long gap, with V1 in October 2021 and V2 in April 2026, so the second release came after more than four years and the project is being worked on in a burst rather than continuously. The second is the design reference. The README points at an E-Resume design case study on Medium, published on UX Planet, and the repository carries a `USER_GUIDE.md` that the README calls the starting point for building, plus a `RUN_ENVIRONMENT.MD` and an `AGENTS.md` alongside a `CLAUDE.md` and a `declarations.d.ts` and an `emotion.d.ts`, which is the TypeScript declaration for the Emotion styles. So this is a project that treats the editor as a designed artefact with a written design rationale, and a contributor is expected to read the guide before changing the interface. The templates and themes are the other contribution route, and the contributing guide says so explicitly.

Editorial conclusion

Adopt Resume Builder if you want to compose a single-page resume in the browser and export it without creating an account, since the data stays on your device. Skip it if you need collaborative editing, a saved history or a PDF pipeline you can run in CI, since this is a client-side editor rather than a service. Before you deploy it yourself, read the privacy note in the README, because the project states that it shadows user interactions to improve the product, which sits awkwardly beside the claim that your data never leaves your device.

Frequently asked questions

What is the Resume Builder application?

An open source Next.js application for building a single-page professional resume in the browser, with templates and themes, a simple interface, no sign-up, and a claim that your data never leaves your device. The project is MIT licensed and hosted at e-resume.vercel.app.

Does the Resume Builder store my resume on a server?

The feature list says your data never leaves your device, and the client-side store is Zustand. The README does add a disclaimer that user interactions are shadowed to improve the product, and the manifest includes Vercel Analytics, so that is the part to check if the privacy claim matters to you.

How do I run the Resume Builder locally?

With Docker, using `docker-compose up -d` and visiting localhost:3000, with the source bind-mounted for live changes. The container image is a development image on node:latest that runs `npm run dev`. For a normal development loop the scripts are `next dev`, `next build` and `next start`.

How is the Resume Builder tested?

Vitest with Testing Library and jsdom for unit tests, plus two custom browser scripts: test:browser runs scripts/browser/verify.mjs and test:parity:capture runs scripts/browser/parity.mjs, with Playwright pinned in the dev dependencies. Linting uses oxlint and Prettier, with husky for the git hooks.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. sadanandpai/resume-builder on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sadanandpai-resume-builder.svg)](https://hysenlabs.com/projects/sadanandpai-resume-builder)

Was this useful?