Railway

Deploy Reactive Resume

Open-source resume builder with templates, PDF export and public sharing

Deploy Reactive Resume

Just deployed

/data

/var/lib/postgresql/data

Just deployed

reactive-resume-uploads

Bucket

Just deployed

reactive-resume

Bucket

Just deployed

Reactive Resume logo

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.

Diagram of the Reactive Resume, gateway, Postgres and Redis services on Railway

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.

Reactive Resume builder editing a platform engineer resume

Published resume page with photo, summary and skills

Resume dashboard listing one saved resume card

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

  • Applicationghcr.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
  • Gatewaycaddy:2-alpine from gridalpha/reactive-resume-railway, holding the public domain

Environment Variables Reference

VariablePurpose
APP_URLPublic URL used for auth callbacks, share links and upload URLs
DATABASE_URLPostgreSQL connection string
REDIS_URLRedis connection string for the agent workspace
AUTH_SECRETSession and token signing key
ENCRYPTION_SECRETEncrypts saved AI provider keys; 32 characters minimum
S3_*Bucket name, endpoint, region and credentials; keep S3_FORCE_PATH_STYLE at true
FLAG_DISABLE_SIGNUPSSet to true to close registration once your accounts exist
SMTP_*Optional mail relay for verification and password reset

Deployment Dependencies

Hardware Requirements for Self-Hosting Reactive Resume

ResourceMinimumRecommended
CPU1 vCPU2 vCPU
RAM1 GB2 GB
Storage1 GB + uploads10 GB + uploads
RuntimeNode 24Node 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

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
44
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51