Skip to content

Getting Started

github-actions[bot] edited this page Jun 26, 2026 · 2 revisions

Getting Started

Requirements

  • Node.js ≥ 20
  • pnpm ≥ 10

Clone and verify

git clone https://github.com/madebyaris/rankmyseo.git
cd rankmyseo
pnpm install
pnpm build
pnpm test

Run the demo apps

Terminal 1 — API server (SQLite, seeded data):

pnpm dev:playground
# → http://localhost:3456
# → Manual test UI: http://localhost:3456/playground

Terminal 2 — React dashboard (proxies to :3456):

pnpm dev:dashboard
# → http://localhost:5173

Install in your app

Interactive (recommended):

npm i rankmyseo
npx rankmyseo install

Choose Recommended (core + storage + server-hono + react), Full (all packages), or Custom (pick from a list).

Non-interactive:

npx rankmyseo install --yes --preset recommended

Then scaffold:

npx rankmyseo init
npx rankmyseo migrate

See Packages for manual @rankmyseo/* installs.

CLI scaffold (monorepo contributors)

pnpm exec rankmyseo-cli init              # creates rankmyseo.config.ts
pnpm exec rankmyseo-cli migrate           # SQLite migrations
pnpm exec rankmyseo-cli schedule          # one rank ingestion pass

Minimal Hono integration

import { defineConfig } from "@rankmyseo/core";
import { createStore } from "@rankmyseo/storage";
import { createRankMySeoApp } from "@rankmyseo/server-hono";

const store = createStore("sqlite:///path/to/db.sqlite");

await store.projects.create({
  id: "project-1",
  tenantId: "tenant-a",
  name: "My Site",
  domain: "example.com",
});

const config = defineConfig({
  databaseUrl: "sqlite:///path/to/db.sqlite",
  tenantId: "tenant-a",
  projectId: "project-1",
  dataSources: [{ provider: "fixture", default: true }],
  schedule: { cron: "0 6 * * *", enabled: false },
  siteFeatures: {
    sitemap: true,
    llmsTxt: true,
    collector: true,
    markdownNegotiation: true,
    blog: false,
  },
});

export default createRankMySeoApp(store, { config });

API scoping

Every mutating and scoped read requires headers:

Header Purpose
x-tenant-id Tenant scope
x-project-id Project scope

Example:

curl http://localhost:3456/keywords \
  -H "x-tenant-id: tenant-a" \
  -H "x-project-id: project-1"

Next steps

Clone this wiki locally