orfc

Self-host orfc

Your data, your cloud. Run orfc on your own infrastructure with Docker or deploy to Vercel.

Docker Compose

Runs anywhere — AWS, GCP, Azure, DigitalOcean, Hetzner, or your own machine. Includes Postgres out of the box.

Requires Docker and Docker Compose. Nothing else.

1. Clone the repo

$ git clone https://github.com/titunian/rfc.git && cd rfc

2. Create a .env file

# Generate secrets
NEXTAUTH_SECRET=$(openssl rand -base64 32)
POSTGRES_PASSWORD=$(openssl rand -hex 16)
# Your domain (use http://localhost:3141 for local)
APP_URL=https://your-domain.com
NEXTAUTH_URL=https://your-domain.com
# Optional: email notifications via Resend
RESEND_API_KEY=
RESEND_FROM_EMAIL=noreply@your-domain.com

3. Start everything

$ docker compose up -d
✓ Postgres + orfc running on http://localhost:3141

Common commands

$ docker compose up -d # start
$ docker compose down # stop
$ docker compose logs -f web # view logs
$ docker compose pull && docker compose up -d # update
OR

Vercel + Neon

Serverless deployment with managed Postgres. Free tier available on both.

No Docker needed. Deploy in under 5 minutes.

1

Fork the repo

Fork titunian/rfc on GitHub

2

Create a Postgres database

Sign up at neon.tech (free) and create a database. Copy the connection string.

3

Import in Vercel

Go to vercel.com/new, import your fork, and set Root Directory to apps/web.

4

Add environment variables

DATABASE_URL=your-neon-connection-string
NEXTAUTH_SECRET=$(openssl rand -base64 32)
NEXTAUTH_URL=https://your-domain.com
APP_URL=https://your-domain.com
# Optional
RESEND_API_KEY=your-resend-key
RESEND_FROM_EMAIL=noreply@your-domain.com
5

Deploy and push schema

Click Deploy. Then push the database schema:

$ npm run db:push

Point the CLI to your instance

After deploying, configure the CLI to use your self-hosted instance instead of orfc.dev.

$ orfc config set apiUrl https://your-domain.com
$ orfc login
✓ Authenticated against your-domain.com

Environment variables

VariableRequiredDescription
DATABASE_URLYes*Postgres connection string. *Docker Compose sets this automatically.
NEXTAUTH_SECRETYesRandom string for session encryption. Generate with openssl rand -base64 32
NEXTAUTH_URLYesYour public URL (e.g. https://orfc.example.com)
APP_URLYesSame as NEXTAUTH_URL. Used for generating links.
RESEND_API_KEYNoResend API key for email notifications
RESEND_FROM_EMAILNoSender email for notifications