Overview
The Lunar stack: the Lunar API, the lunar-js client, the status worker, and the Akiko Discord bot + panel. Start here.
The Lunar stack
These docs cover the whole Lunar Group stack — a JSON HTTP API, its typed client library, an internal status monitor, and the Akiko Discord bot with its web dashboard.
Projects
Lunar API
JSON API for auth, user administration, S3 storage, and random animal images. Lives at api.lunargroup.dev.
lunar-js
Fully typed, zero-dependency TypeScript client for the Lunar API.
Status worker
Internal heartbeat monitor that keeps the hep.gg status page honest — silence becomes an incident automatically.
Akiko bot
Multi-process clustered Discord bot built on Athena, with hybrid slash + prefix commands.
Akiko Panel
Next.js dashboard for configuring Akiko per guild — module editors, raid-heat console, card studio.
How the pieces fit
- Lunar API (
lunar-api-v3) is the backbone service: JWT auth backed by MariaDB, role-aware admin routes, and MinIO-served images. Its full route reference lives in the Lunar API sections of the sidebar. - lunar-js wraps that API (and the status worker) in a typed client — if you're writing TypeScript, start there instead of raw HTTP.
- status worker watches everything: services heartbeat it every few seconds, and it opens/resolves incidents on the hep.gg status page on its own.
- Akiko is the Discord bot; Akiko Panel is how server admins configure it from the browser.
Lunar API at a glance
- Auth scheme —
Authorization: Bearer <accessToken>. Tokens are returned with theBearerprefix already attached. - Content type —
application/jsonfor every route except the S3 upload, which takes raw image bytes. - Roles —
user,support,moderator,admin,owner, ordered by priority 0–4. - Rate limits — in-memory and per-scope; exceeding one returns
429with aRetry-Afterheader.