Configuration#
Board structure is stored in config.json; deployment values and secrets are
supplied through environment variables.
Before you start#
- The service is stopped before changing ports or database paths.
- A current backup exists before changing an established board.
- HTTP and Telnet ports are distinct.
Board settings#
config.json controls the board name, SysOp identity, maximum nodes,
registration switch, idle timeout, message conferences and file areas. Keep
existing conference and file-area numeric IDs stable when data already exists.
The file also carries newUserLevel and sysopLevel. Neither takes effect in
this release. Access levels are set per account in the SysOp panel; editing
either key changes nothing.
Each entry in messageBases carries an accessLevel. That level now decides
more than reading: it also controls which conferences a caller may subscribe to
in a personal scan, which conferences appear in a Daily Call, and which
conferences an offline packet may export or accept replies for. Raising a
conference's accessLevel removes it from those paths for callers below the
new level.
Access levels#
Three tiers are meaningful to operation. Set an account's level in the SysOp
panel, not in config.json.
| Level | Role | What it unlocks |
|---|---|---|
| 10 | Caller | Conferences at or below the level, mail, doors, Front Porch submissions, offline packets |
| 100–199 | Moderator | Sign-in to the Control Desk: Front Porch review, moderation queue, the full caller-card list including hidden cards (which they may hide but not publish), audit trail, removal of any public message |
| 200 and above | SysOp | Everything a moderator can do, plus accounts, password resets and bulletins |
A new account is created at level 10, which is the database default rather than a configurable value. The SysOp account seeded on a brand-new database is always created at level 255.
Deployment settings#
Common environment variables are:
| Variable | Purpose |
|---|---|
NODE_ENV |
Set production for any exposed deployment. |
NODEHOUSE_SYSOP_PASSWORD |
Strong bootstrap password for a fresh production database. |
PORT or NODEHOUSE_WEB_PORT |
HTTP and browser-terminal port. |
TELNET_PORT or NODEHOUSE_TELNET_PORT |
Raw Telnet listener port. |
NODEHOUSE_DB_PATH |
Explicit SQLite database path. |
NODEHOUSE_ALLOWED_ORIGINS |
Additional allowed browser origins. |
NODEHOUSE_PUBLIC_WEB_URL |
Public URL shown in logs and smoke checks. |
NODEHOUSE_PUBLIC_TELNET_HOST |
Public Telnet hostname. |
NODEHOUSE_PUBLIC_TELNET_PORT |
Public Telnet port. |
ANTHROPIC_API_KEY |
Optional; enables the narrated dungeon door. |
Directories the service expects#
| Path | Used for | Notes |
|---|---|---|
art/gallery |
Curated .ans files shown in the ANSI Art Gallery |
Ships with the application and is included in the Docker image. Files must be named with letters, digits, _ or - and end in .ans, and each file is capped at 256 KB. |
data/transfers |
Staged offline packets awaiting download | Created at startup relative to the application directory, not to NODEHOUSE_DB_PATH. It must be writable or the service will not start. |
Both paths sit inside the application directory. In Docker they live under the
persistent /app/data volume and the packaged /app/art directory, so no extra
configuration is required.
Packets are offered to callers as a link on the HTTP listener in the form
/transfers/packet/<format>/<token>. Callers must be able to reach the board's
HTTP address, including callers who connect by Telnet.
Verify#
Run npm run verify, start the service and request /healthz. Connect once by
browser and once by Telnet. Confirm the board identity, ports, conference list
and maximum-node behaviour match the configuration. Open [A] ANSI Art
Gallery and confirm at least one piece lists and displays, then open
[K] Packet Briefcase, request a briefcase and confirm the printed link
downloads once.