Getting Started
RankFlo is an open-source headless CMS and blog platform built for SEO. This guide gets you up and running in minutes.
Two ways to use RankFlo
Cloud (managed) — Create a free account at app.rankflo.io. No setup required.
Self-hosted — Run RankFlo on your own server with Docker. See Self-Hosting.
Quick start (self-hosted)
Prerequisites
- Docker + Docker Compose
- A server with 1 GB RAM minimum
1. Clone and configure
bash
git clone https://github.com/sitbonruben/RankFlo.git
cd RankFlo/docker
cp ../.env.example .env.productionOpen .env.production and fill in the required values:
bash
# Required
DATABASE_URL="postgresql://rankflo:yourpassword@postgres:5432/rankflo"
REDIS_URL="redis://redis:6379"
NEXT_PUBLIC_APP_URL="https://your-domain.com"
ADMIN_EMAIL="admin@your-domain.com"
ADMIN_PASSWORD="choose-a-strong-password"
# Generate these with: openssl rand -hex 32
AUTH_SECRET="..."
ENCRYPTION_KEY="..."2. Start
bash
docker compose up -dOpen http://localhost:3000 and sign in with the credentials you set.
3. Create your first project
- Go to Projects → New Project
- Enter a name (e.g. "My Blog")
- Copy the Project API Key — you'll use this to fetch posts from your site
Your project key (blg_xxx) is read-only. It only returns published posts — drafts and scheduled posts are never exposed.
Connecting your site
Use the Content API to fetch posts from any framework.
typescript
// lib/rankflo.ts
const KEY = process.env.RANKFLO_PROJECT_KEY;
export async function getPosts() {
const res = await fetch(
`https://app.rankflo.io/api/v1/content?project_key=${KEY}&limit=20`,
{ next: { revalidate: 300 } }
);
return (await res.json()).data ?? [];
}Development setup
If you want to contribute or run from source:
bash
# Node 22+ and pnpm 9+ required
pnpm install
cp .env.example .env
# Fill in DATABASE_URL, REDIS_URL, AUTH_SECRET, ENCRYPTION_KEY
pnpm db:generate
pnpm db:migrate dev
pnpm db:seed # creates the admin account
pnpm dev # starts at http://localhost:3000