RankFloRankFlo

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.production

Open .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 -d

Open http://localhost:3000 and sign in with the credentials you set.

3. Create your first project

  1. Go to Projects → New Project
  2. Enter a name (e.g. "My Blog")
  3. 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

Next steps