Skip to main content

v1.2.0

Split Backend + Portal Architecture:
  • REST API and Socket.IO now run as separate processes on dedicated subdomains
  • REST API: hapi.7331.org (port 8000) — FastAPI only
  • WebSocket: hws.7331.org (port 8001) — Socket.IO only (Starlette + python-socketio)
  • Both share the same Postgres and Redis. Cross-process emit via AsyncRedisManager
  • IPC for commands (disconnect user, destroy room) via Redis pub/sub
Portal:
  • Per-room chat — every room is its own chat channel, no global chat
  • Room system with named rooms (admin-created) and guild rooms (premium, auto-start)
  • Two-tier invite system: vanity invites (permanent, DB) and ephemeral invites (Redis, TTL)
  • End-to-end encrypted messages with per-room key distribution
  • Room lifecycle: create, start, stop, destroy with idle auto-shutdown
  • Virtual browser rooms via neko-rooms orchestrator (Brave, Tor)
  • Presence sync via Redis key (WS writes on connect/disconnect, REST reads for /portal/status)
New endpoints:
  • GET /v1/portal/status — Online count and user list (reads from Redis presence key)
  • GET /v1/portal/rooms/{room_name}/messages — Room message history
  • DELETE /v1/portal/rooms/{room_name}/messages/{message_id} — Delete message
  • POST /v1/portal/rooms/{room_name}/mute — Mute user
  • POST /v1/portal/rooms/{room_name}/unmute — Unmute user
  • POST /v1/portal/rooms/{room_name}/clear — Clear room messages
  • GET /v1/portal/rooms/{room_name}/screenshot — Room screenshot
  • GET /v1/portal/vanity/{slug} — Resolve vanity invite
  • GET /v1/guilds/{id}/room-settings — Guild room settings
  • PUT /v1/guilds/{id}/room-settings — Update guild room settings
  • PUT /v1/guilds/{id}/vanity — Set vanity invite
  • DELETE /v1/guilds/{id}/vanity — Remove vanity invite

v1.1.0

API Gap Remediation New endpoints:
  • GET /statistics/bots — Bot count statistics by verification status
  • GET /admin/subscriptions/active — List all active subscriptions
  • GET /admin/punishments/search — Cross-entity punishment search with filters
  • GET /admin/punishments/{id} — Get a single punishment by ID
  • GET /admin/punishments/stats — Punishment analytics (counts by type over N days)
  • POST /admin/bots/{id}/update — Update bot name, owner, rate limit
  • POST /admin/bots/{id}/regenerate-key — Rotate a bot’s API key
  • POST /admin/bots/{id}/reset-stats — Reset bot cached statistics
  • GET /admin/bots/search — Search/filter bots with pagination
  • POST /admin/guilds/{id}/update — Update guild name, owner, state
Permission changes:
  • User search, user detail, guild detail, and audit logs now accessible to moderators
  • Moderators see only users below their permission level
  • Moderators see guild detail with subscription/sponsor fields redacted
  • Moderators see only warn/timeout events in audit logs
Improvements:
  • Audit logging added to bot-initiated user and guild updates
  • Pagination params normalized to offset/limit across all endpoints
  • All service methods now return typed models (no more dict[str, Any])

v1.0.0

Initial Release
  • User authentication via Discord login codes
  • User profile and subscription management
  • Guild management with prefix customization
  • Bot registration and statistics tracking
  • Batch command reporting for bots
  • Admin panel with user/guild/bot management
  • Punishment system (ban, warn, timeout, unban)
  • Subscription granting and revocation
  • Audit logging for all admin actions
  • Rate limiting per bot API key
  • Redis caching layer for bot stats