ATS Builder. Free, open-source resume builder. Runs locally in the browser. No account, no server-side storage of resume content.
lanjut.rimzzlabs.com
A resume builder split into two layers:
- Structural layer: fixed section types (header, summary, experience, internship, projects, organizations, education, certifications, skills, languages, plus custom sections from an approved list) with a restricted rich-text schema per field. This keeps export output parseable by Applicant Tracking System (ATS) software.
- Presentation layer: typography, spacing, color, and theming. Fully customizable. Changes here never affect the underlying text structure used for parsing or export.
Customization applies to how the resume looks. It does not extend to layouts that break ATS parsing (tables, multi-column body text, floating text boxes, embedded icons in text runs).
- Six résumé templates, all sharing one linear document structure; only styling differs
- Template gallery with search, sort, and live seed-data previews
- Résumé library with live first-page thumbnails, rename, and delete
- Print-accurate A4 preview with automatic pagination
- Rich text editing per field, scoped to ATS-safe formatting (bold, italic, lists, links)
- Custom sections alongside the fixed types, all sharing the same restricted schema
- Drag to reorder sections and toggle any section's visibility (entries within a section sort by date automatically)
- Document-level presentation controls: font, font size, section spacing, line height, letter spacing, contact-icon visibility, and a one-click style reset
- Available in English and Indonesian (
next-intl) - Export to PDF (linear reading order preserved) and plain text / .docx
- Copy, download, and re-import a résumé as JSON or YAML
- Guided tour of the editor and library for first-time users
- Send bug reports and feature requests in-app, no GitHub account required
- Local persistence via IndexedDB, no data leaves the browser
- Fully local: works offline after initial load
| Template | Character |
|---|---|
| Awal | Clean single-column starter with room for every section |
| Ketat | Compact serif classic: ruled headings, italic dates |
| Luasa | Airy minimalist: letterspaced headings, generous whitespace |
| Tebal | Bold modern statement: oversized name, heavy uppercase headings |
| Klasik | Traditional all-serif CV: centered, quiet, formal |
| Ketik | Typewriter-flavored technical look, built for developers |
Every template renders the same linear block sequence, so switching templates never changes parse or export order.
| Purpose | Library |
|---|---|
| Framework | Next.js (App Router) |
| Hosting | open-next on Cloudflare |
| Internationalization | next-intl (English, Indonesian) |
| UI components | shadcn (base-ui) |
| Styling | Tailwind CSS |
| Rich text editor | TipTap |
| Forms | react-hook-form + zod |
| Drag and drop | @dnd-kit |
| Export | @react-pdf/renderer, docx |
| Animation | motion/react |
| State | zustand |
| Search params state | nuqs |
| Persistence | IndexedDB (via idb) |
| Utilities | @mobily/ts-belt |
| Dates | date-fns |
| Lint / format | Biome |
git clone https://github.com/rimzzlabs/lanjut.git
cd lanjut
pnpm install
pnpm devOpen http://localhost:3000.
| Script | What it does |
|---|---|
pnpm dev |
Start the dev server |
pnpm lint / pnpm format |
Check / write with Biome |
pnpm typecheck |
Generate Next types and run tsc --noEmit |
pnpm validate:exports |
Regenerate PDF/DOCX/TXT from the seed résumé and verify extraction order and field mapping |
pnpm preview |
Build with open-next and preview the Cloudflare worker locally |
pnpm ship |
Build and deploy to Cloudflare |
pnpm commit |
Commit via the commitizen prompt |
Resume content is stored in IndexedDB in the browser. No resume content is sent to any server, API route, or third-party service. Clearing browser storage deletes saved resumes; export your work before doing so.
- PDF: structured text export, not a visual snapshot. Reading order is preserved for ATS text extraction.
- DOCX / plain text: direct ATS-submission-safe formats, recommended over PDF for systems with strict parsing requirements.
Changes to the export path are gated by pnpm validate:exports, which regenerates every format from the seed résumé and verifies, via real text extraction, that linear reading order is preserved and every field maps through.
Bug reports and feature requests go through the issue forms; note the scope rules there: presentation is customizable, structure is not, and accounts/server storage are non-goals.
Commit messages follow Conventional Commits via commitlint and commitizen, and every commit must be signed off (git commit -s) under the Developer Certificate of Origin. Run pnpm commit instead of git commit to use the prompt. Pre-commit hooks (husky + lint-staged) run lint and format checks before any commit is accepted. PR titles follow the same convention with a fully lowercase subject; they become the squash-merge commit.
See CONTRIBUTING.md for the full workflow (setup, branches, commits, DCO, releases) and AGENTS.md for architecture rules and code conventions before submitting a PR.
AGPL-3.0-only. Copyright © 2026 Lanjut Contributors.