Deploy Reactive Resume
Open-source resume builder with templates, PDF export and public sharing
Redis
Just deployed
/data
Just deployed
/var/lib/postgresql/data
Just deployed
reactive-resume
Just deployed
reactive-resume-uploads
Bucket
Just deployed
reactive-resume
Bucket
Just deployed

Deploy and Host Reactive Resume on Railway
Reactive Resume is an open-source resume builder used by job seekers, career coaches and bootcamps who want a polished CV without handing their employment history to a subscription service. You write once, pick from fifteen templates, adjust colours, fonts, margins and section order, then export to PDF or publish the resume at a shareable link with an optional password. It is MIT-licensed, has no paid tier and no tracking, and self-host Reactive Resume is the usual answer for anyone who wants that data on infrastructure they control.
Deploy Reactive Resume on Railway and the whole stack arrives wired together: the Node application that renders the front end, serves the API and generates PDFs; a PostgreSQL database for accounts, resumes and job applications; Redis behind the AI agent workspace; an object storage bucket for photos and attachments; and a Caddy gateway that terminates public traffic and forwards it over the private network. Every connection string and secret is generated at deploy time, so the only thing left is to open the URL and create an account.

Getting Started with Reactive Resume on Railway
Once the deploy finishes, open the gateway service's public URL — that is the address for the whole application. There are no default credentials: Get Started leads to a sign-up form asking for a name, username, email and password, and the first person to register owns the first account. Email verification is optional and skippable when no SMTP relay is configured. Choose Create a new resume, name it, and the builder opens with the editing panel on the left, a live preview in the middle, and template, layout and export controls on the right.
Fill in Basics, add an experience entry and a couple of skills, and the preview redraws as you type — every change autosaves. Upload a profile photo from the Picture panel to confirm object storage is wired up; the image is resized server-side and served back through the app. Then open Sharing, switch on public access, and visit the // link in a private window: a working deployment renders the resume for anonymous visitors and Download PDF returns a real file.



About Hosting Reactive Resume
Commercial resume builders keep the document behind a paywall and the data on their servers. Reactive Resume inverts that: editor, templates and renderer are one MIT-licensed app you run yourself. Teams self-host it when they need a shared, branded CV tool — university career services, bootcamps, recruitment and staffing firms — or when applicant data cannot leave their own infrastructure.
Key features:
- Fifteen templates with adjustable colours, fonts, spacing, page format and column layout
- Drag-and-drop section ordering plus custom sections
- PDF, DOCX, Markdown and JSON export, and import from an existing resume
- Public link sharing with optional password and view and download counters
- An in-browser ATS checker reporting what applicant tracking software can read
- Passkeys, two-factor auth, API keys and OAuth with Google, GitHub, LinkedIn or any OIDC provider
Four supporting pieces sit behind the app. PostgreSQL is the system of record for users, resumes and applications, and migrates its own schema on every boot. Redis carries resumable streams for the optional AI agent workspace. Object storage holds pictures and attachments, keeping the app stateless and free of a disk volume. The Caddy gateway owns the public domain and normalises the client address before requests reach the app, so the sign-in throttle counts real callers rather than the platform's edge.
Why Deploy Reactive Resume on Railway
Railway removes the setup work a multi-service app normally involves.
- PostgreSQL, Redis and object storage provisioned and connected for you
- Secrets generated at deploy time — nothing to paste in
- HTTPS and a public domain issued automatically
- Private networking keeps the database, cache and app off the internet
- Redeploys pull new releases without touching configuration
Common Use Cases
- University and bootcamp career services giving students a branded resume tool with no per-seat cost
- Recruiters reformatting candidate CVs into one house template
- Job seekers keeping their employment history off commercial resume sites
Dependencies for Reactive Resume
- Application —
ghcr.io/amruthpillai/reactive-resume:latest, the Node server behind the UI, the API and PDF export - PostgreSQL — accounts, resumes, applications and sessions; migrations run at startup
- Redis — resumable response streams for the AI agent workspace
- Object storage — pictures and attachments, served back through the app rather than from the bucket
- Gateway —
caddy:2-alpinefrom gridalpha/reactive-resume-railway, holding the public domain
Environment Variables Reference
| Variable | Purpose |
|---|---|
APP_URL | Public URL used for auth callbacks, share links and upload URLs |
DATABASE_URL | PostgreSQL connection string |
REDIS_URL | Redis connection string for the agent workspace |
AUTH_SECRET | Session and token signing key |
ENCRYPTION_SECRET | Encrypts saved AI provider keys; 32 characters minimum |
S3_* | Bucket name, endpoint, region and credentials; keep S3_FORCE_PATH_STYLE at true |
FLAG_DISABLE_SIGNUPS | Set to true to close registration once your accounts exist |
SMTP_* | Optional mail relay for verification and password reset |
Deployment Dependencies
- Source: github.com/AmruthPillai/Reactive-Resume; images on GHCR and Docker Hub as
amruthpillai/reactive-resume - Documentation: docs.rxresu.me
- Runtime: Node 24, PostgreSQL 16+, Redis 7+
Hardware Requirements for Self-Hosting Reactive Resume
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB |
| Storage | 1 GB + uploads | 10 GB + uploads |
| Runtime | Node 24 | Node 24 |
The app itself is light; the memory headroom is for PDF rendering and image resizing, which are short bursts rather than sustained load.
Self-Hosting Reactive Resume with Docker
Reactive Resume ships one application image, so a local run needs only PostgreSQL beside it. These Docker commands start both:
docker run -d --name rr-db \
-e POSTGRES_DB=postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres \
postgres:17
docker run -d --name reactive-resume -p 3000:3000 \
-e APP_URL=http://localhost:3000 \
-e DATABASE_URL=postgresql://postgres:postgres@rr-db:5432/postgres \
-e AUTH_SECRET=$(openssl rand -hex 32) \
-v rr-data:/app/data \
ghcr.io/amruthpillai/reactive-resume:latest
Without S3 variables the app writes uploads to /app/data, which is why that volume matters locally. To build from source, use the bundled Compose file:
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
cp .env.example .env
docker compose up -d
Is Reactive Resume Free to Self-Host?
Yes. Reactive Resume is MIT-licensed with no paid edition, seat limits or feature gates — the hosted service at rxresu.me runs the same code. Self-hosting costs only the infrastructure, which on Railway means usage-based charges for the app, database, cache and storage. Only the optional AI assistant can cost extra, because it calls a model provider with an API key you supply.
FAQ
What is Reactive Resume?
A free, open-source resume builder: write a CV in the browser, style it with one of fifteen templates, export it to PDF and publish it at a shareable link. MIT-licensed, no ads, no trackers, and self-hostable.
What does this Railway template deploy?
Five pieces: the Reactive Resume application, PostgreSQL, Redis, an object storage bucket and a Caddy gateway holding the public domain — all connected and configured on deploy.
Why does the template include PostgreSQL, Redis and object storage?
PostgreSQL stores accounts, resumes and applications. Redis carries the streaming responses the AI agent workspace uses. Object storage holds pictures and attachments, keeping the app stateless so it survives a redeploy without losing files.
How do I stop other people signing up on my instance?
Register your own account first, then set FLAG_DISABLE_SIGNUPS to true on the application service. It is enforced at the API level, not only in the interface, so the sign-up endpoints reject registrations too.
Does self-hosted Reactive Resume need a headless Chrome service to make PDFs?
Not since version 5.1. PDF generation moved to a native renderer inside the app, so the Browserless or Chromium container older guides describe is no longer needed and its variables are ignored.
Can I sign in with Google, GitHub or my company's SSO?
Yes. Set the client ID and secret pair for Google, GitHub or LinkedIn, or point the generic OAuth variables at any OIDC provider using its discovery URL. Passkeys and two-factor authentication also work.
Template Content
Redis
redis:8.2reactive-resume
ghcr.io/amruthpillai/reactive-resume:latestreactive-resume-uploads
Bucket
reactive-resume
Bucket
