Install

Three API calls. One key. Your blog is live.

Point any AI agent at networkr.dev/brief.md, or run the CLI yourself. Both paths produce the same final state: a registered site, a tenant API key, and the first article generating in the background.

Agent install

Tell your AI agent

In Cursor, Claude Code, Continue, Aider, Lovable, Bolt, v0, or ChatGPT:

Read networkr.dev/brief.md and install Networkr on this site.

The brief is a machine-readable spec. Your agent follows the 3-step flow, writes the tenant key to .env.local, and (for hosted mode) scaffolds blog rendering if you ask.

CLI install

Run it yourself

From your project directory:

$ npx networkr init

Interactive: asks for domain, email, flavour, storage mode. Writes .env.local. Same 3-step flow as the brief, wrapped.

Prefer to skip both? The manual API flow is below — what the agent or CLI is doing on your behalf.

Before you start

What you need

  • A domain you own — DNS resolves, serves public HTML, not behind an auth wall.
  • An email address.
  • A storage mode pick: hosted (simplest — we store articles, your frontend fetches via public API) or one of supabase, pocketbase, firebase, appwrite, mongodb (we write to your DB — you supply creds).
  • !Your site needs real content. An admission gate rejects empty, redirecting, or thin-content domains.
Manual install

Three API calls

Base URL: https://api.networkr.dev

1

Audit the site

POST /api/onboard
{
  "domain": "example.com",
  "email":  "user@example.com"
}
Response (trimmed)
{
  "token": "<onboard_token>",
  "seo_score": 72,
  "issues": [{ "type": "critical|warning|info", "message": "..." }],
  "brand_detected":    { "accent_color": "#...", "logo_url": "..." },
  "database_detected": { "primary": { "type": "supabase|..." } },
  "flavours": [
    { "id": "professional|casual|technical|founder", "description": "..." }
  ]
}

Token is valid for 24h. Pick a flavour for step 2.

2

Confirm flavour and preview

POST /api/onboard/confirm
{
  "token":        "<from step 1>",
  "flavour":      "professional",
  "author_name":  "Your Real Name",
  "author_bio":   "optional short bio",
  "accent_color": "#8FBCBB",
  "topics":       ["optional list"],
  "niche":        "optional"
}
Response (trimmed)
{
  "preview_url":    "/preview/<token>",
  "sample_article": { "title": "...", "body_html": "...", "cover_image": "data:..." }
}

Open https://api.networkr.dev<preview_url> to see how your blog will look. Approve before activating.

3

Activate

POST /api/onboard/activate
{
  "token":   "<same>",
  "db_type": "hosted"
}

For non-hosted modes, add the DB credentials (see /docs for the full field list per adapter).

Response (trimmed)
{
  "success":    true,
  "site_id":    "example-com",
  "network_id": "...",
  "api_key": {
    "key":    "nwk_live_<32 hex>",
    "prefix": "nwk_live_abcd1234",
    "notice": "Store this key now — it will never be shown again."
  }
}
Critical

api_key.key is shown once. Save it immediately. Networkr keeps only a hash.

Save the install to your repo

Write these three variables to .env.local at the project root:

.env.local
NETWORKR_API=https://api.networkr.dev
NETWORKR_SITE_ID=<site_id from step 3>
NETWORKR_KEY=<api_key.key from step 3>

Ensure .env.local is in .gitignore. Optionally drop a copy of /brief.md at .networkr/AGENT.md so future agents in the repo find the install context.

Verify the install

GET /api/sites/<site_id>/agent/brief
Authorization: Bearer <api_key.key>

Returns a 10-item checklist with statuses (ok / warning / missing), each item carrying the exact API call to fix it if needed, plus a next_step object.

Hosted mode — render the blog

If you picked hosted, your frontend fetches posts from these public endpoints (no auth):

GET /api/blog/<site_id>/posts?limit=20 — list
GET /api/blog/<site_id>/posts/<slug> — post with body, transparency, lineage, related, prev/next
GET /api/blog/<site_id>/covers/<file> — cover image
GET /api/blog/<site_id>/rss.xml — RSS feed
GET /api/blog/<site_id>/content-policy — transparency policy
GET /api/blog/<site_id>/authors/<slug> — author profile

Reference implementation (Next.js 16): github.com/HEIMLANDR/networkr/tree/main/frontend/src/app/blog. Adapt for your framework — the API is framework-agnostic.

Wire up your build hook

When your site deploys through a static host (Netlify, Vercel, Cloudflare, Render, Fly, GitHub Actions), Networkr needs a build hook URL to trigger rebuilds on every new post. Get the URL from your host's dashboard, then:

PUT /api/sites/<site_id>
Authorization: Bearer <key>
Content-Type: application/json

{ "build_hook_url": "https://api.netlify.com/build_hooks/..." }

Verify with POST /api/sites/<site_id>/build-hook/test.

Hard rules

  • Never invent endpoints. Use only what this page and /docs list. Unknown routes return 404.
  • Never edit published posts. Not supported. To change a post: DELETE /api/sites/<id>/blog/posts/<slug> then regenerate.
  • !The tenant key scopes to the network, not the site. Reuse it across sibling sites on the same email.
  • !Onboard token expires in 24h. On 410, restart from step 1.
  • !Respect rate limits. 429= wait 60s, retry once. Don't loop.

Install in the terminal right now

Point your AI agent at networkr.dev/brief.md or run npx networkr init yourself. Every install converges on the same final state.