# Project pack: Reactive Resume @ 565b1fd

Facts about **Reactive Resume** for an AI following the [BespokeAI handover guide](https://handoff.bespokeai.software/guide/v2.md). This pack is pinned to one version and never changes after publication.

> Reactive Resume is an open-source resume builder. You fill in your experience once, pick a template, tweak colours and fonts, and export a clean PDF or share a link. You can use the free hosted version or run your own copy, and your data is never sold.

## Version and source
- Repository: https://github.com/reactive-resume/reactive-resume
- Pinned commit: `565b1fd172bd9d28ef9a7a20ed4d6f5657dac384`. Use exactly this version.
- Fresh checkout: use the setup below in an empty folder. If you already have this exact source checked out, keep your branch and use the development command instead; do not clone again or reset local changes.
- Or download a zip: https://github.com/reactive-resume/reactive-resume/archive/565b1fd172bd9d28ef9a7a20ed4d6f5657dac384.zip
- Official docs: https://docs.rxresu.me
- Live demo: https://rxresu.me/. The free hosted app. You can try it without self-hosting.
- Licence: **MIT**. Free to use, change and share, even commercially. Keep the original copyright notice.

## Running the pinned source
- Fresh pinned-source setup (skip clone and checkout in an existing worktree):

  ```sh
  git clone https://github.com/reactive-resume/reactive-resume bespoke-reactive-resume
  cd bespoke-reactive-resume
  git checkout --detach 565b1fd172bd9d28ef9a7a20ed4d6f5657dac384
  # Prepare development requirements and local configuration first.
  corepack enable
  pnpm install
  docker compose -f compose.dev.yml up -d
  pnpm dev
  ```

The commands below are a starting point from the reviewed source. Prepare the listed tools, local configuration and companion services before starting the app. These instructions have not yet been validated in participant sessions.

### Separate trial of the current release
This tries an upstream release, which may differ from the pinned source above. It does not run your source changes. Use only sample data and a separate data directory or volume. Check the upstream documentation before running it.

  ```sh
  git clone https://github.com/reactive-resume/reactive-resume
  cd reactive-resume
  docker compose up -d --build
  # then open http://localhost:3000
  ```

- Needs: Docker, or Node 22 with pnpm and Postgres for development
- Develop: `pnpm dev`
- Test: `pnpm test`
- Check/lint: `pnpm lint`
- Build: `pnpm build`
- Stack: typescript (React, TanStack, Nitro, Drizzle ORM, pnpm, Turborepo). Difficulty for a non-developer with an AI: **moderate**. A modern TypeScript monorepo. New templates and themes are a good place to start. The data model is a JSON resume schema, so changes stay well contained.

## The project's own AI instructions
Read these in the repository before changing code: `AGENTS.md`, `CLAUDE.md`.

## Customisation points (settings → extend → code)
- **templates-and-theme** [settings]: Layout, colours, fonts and spacing of each CV. → `In the editor, under Template, Typography and Theme`
- **sharing** [settings]: Public links, passwords and downloads. → `Resume → Sharing and privacy`
- **import-export** [settings]: JSON, LinkedIn and JSON Resume files. → `Settings → Import / Export`
- **new-template** [code]: Add your own CV designs. → `apps/web templates and the resume schema package`
- **ai-and-languages** [code]: Languages, right-to-left and AI prompts. → `apps/web/src/locales and AI settings`

## Must keep working
- The resume JSON schema. Old resumes must keep loading.
- Database migrations in migrations/. Add new ones; never edit old ones.
- Privacy controls on public links.

## Staying updatable
New templates and locales are self-contained additions. Keep them in new files for easy upgrades.

## Data, costs and safety
- Personal data: **yes**. Stored in: A Postgres database plus a file store for uploaded photos and PDFs. A resume holds your address, phone and work history. Back it up and share links carefully.
- Service: Email (SMTP) (optional, usually free to a few dollars): Password resets and verification.
- Service: AI provider (OpenAI-compatible) (optional, pay-per-use): Optional writing help.
- Service: Sign-in providers (Google, GitHub) (optional, free): Optional one-click login.
- Setting `AUTH_SECRET` (**secret**: the person enters it themselves, never in chat): Secret used to sign logins. Never paste it into an AI chat.
- Setting `DATABASE_URL` (**secret**: the person enters it themselves, never in chat): Postgres connection string. Contains a password.
- Setting `APP_URL`: The address people use to reach Reactive Resume.
- A CV contains personal details. Review what you make public.
- Keep AUTH_SECRET and database passwords out of Git and chats.
- Don't paste your API keys for AI providers into an AI chat.

---

# Customising Reactive Resume

Reactive Resume is a pnpm monorepo. Templates, locales and settings are the safest way in.

## How the code is laid out

| You want to change… | Look in |
|---|---|
| Web app, editor and templates | apps/web/src/ |
| Server and API | apps/server/ |
| Database migrations | migrations/ |
| Shared schema and utilities | packages/ |
| Docker setup | compose.yml, compose.dev.yml, Dockerfile |
| Docs | docs/ |

## Use the gentlest change first

1. **Settings (no code):** templates, fonts, colours and sharing in the editor.
2. **Extend:** import and export, and the public API.
3. **Code:** new templates, locales and sections.

## Recipes

- **New template:** copy an existing template component, change the layout and styles, register it in the template list and add a preview image.
- **New language:** add the locale file and register it in the language list. Use a right-to-left setting if needed.

## Running and checking your changes

- Run with `pnpm dev`, edit a resume and export a PDF.
- `pnpm lint` and `pnpm test`.
- Open an old resume to confirm it still loads.

## Pitfalls

- Don't change the schema without a migration path.
- PDF export depends on a headless browser. Test it with your fonts.

---
Machine-readable: [bespoke.yaml](https://handoff.bespokeai.software/p/reactive-resume/565b1fd/r2/bespoke.yaml) · Hosting options: [hosting.md](https://handoff.bespokeai.software/p/reactive-resume/565b1fd/r2/hosting.md) · Agent skill: [SKILL.md](https://handoff.bespokeai.software/p/reactive-resume/565b1fd/r2/SKILL.md)
