···1111atrium-common = "0.1"
1212atrium-api = { version = "0.25", features = ["agent"] }
1313atrium-xrpc = "0.12"
1414-axum = "0.8"
1414+axum = { version = "0.8", features = ["multipart"] }
1515axum-extra = { version = "0.10", features = ["cookie", "cookie-signed", "cookie-key-expansion", "query"] }
1616base64 = "0.22"
1717dashmap = "6"
+8
docs/getting-started/configuration.md
···1818| `PLC_URL` | no | `https://plc.directory` | [PLC directory](https://github.com/did-method-plc/did-method-plc) URL for DID resolution |
1919| `EVENT_LOG_RETENTION_DAYS` | no | `30` | Number of days to keep event logs before automatic cleanup. Set to `0` to disable cleanup |
2020| `RUST_LOG` | no | `happyview=debug,tower_http=debug` | Log filter (uses `tracing_subscriber::EnvFilter`) |
2121+| `APP_NAME` | no | --- | Application name shown on OAuth authorization screens. Overridden by database setting if set via admin API |
2222+| `LOGO_URI` | no | --- | URL to application logo for OAuth screens. Overridden by database setting or logo upload |
2323+| `TOS_URI` | no | --- | URL to terms of service. Overridden by database setting if set via admin API |
2424+| `POLICY_URI` | no | --- | URL to privacy policy. Overridden by database setting if set via admin API |
21252226## Example `.env`
2327···3943# PLC_URL=https://plc.directory
4044# EVENT_LOG_RETENTION_DAYS=30
4145# RUST_LOG=happyview=debug,tower_http=debug
4646+# APP_NAME=My App
4747+# LOGO_URI=https://example.com/logo.png
4848+# TOS_URI=https://example.com/tos
4949+# POLICY_URI=https://example.com/privacy
4250```
+9
docs/reference/architecture.md
···5656 permissions.rs Permission enum (20 permissions), templates (Viewer, Operator, Manager, FullAccess)
5757 api_keys.rs API key CRUD handlers (create, list, revoke) with scoped permissions
5858 events.rs Event log query handler
5959+ settings.rs Instance settings CRUD handlers (list, upsert, delete, logo upload/serve)
5960 script_variables.rs Script variable CRUD handlers (list, upsert, delete)
6061 lexicons.rs Lexicon CRUD handlers
6162 network_lexicons.rs Network lexicon tracking (add, list, remove)
···224225| `state_key` | text (PK) | OAuth state parameter |
225226| `state_data` | text | Serialized state (managed by atrium) |
226227| `created_at` | timestamptz | |
228228+229229+### `instance_settings`
230230+231231+| Column | Type | Description |
232232+| ------------ | ----------- | -------------------------------------------- |
233233+| `key` | text (PK) | Setting name (e.g. `app_name`) |
234234+| `value` | text | Setting value |
235235+| `updated_at` | timestamptz | Last modified |
227236228237### `event_logs`
229238
+10
docs/reference/changelog.md
···11# Changelog
2233+## v2.1.0 — Native OAuth & Instance Settings
44+55+- **Built-in OAuth** — replaced external AIP OAuth dependency with native `atrium-oauth` integration; HappyView manages the full OAuth flow internally
66+- **Instance settings** — new `instance_settings` key/value table for configurable instance metadata (app name, logo, ToS, privacy policy) with env var fallback
77+- **OAuth branding** — authorization screens now show configurable app name, logo, terms of service, and privacy policy links via the `/oauth/client-metadata.json` endpoint
88+- **Logo upload** — upload a logo image via `PUT /admin/settings/logo` (stored in DB, served at `GET /settings/logo`)
99+- **`settings:manage` permission** — new permission for managing instance settings, included in Manager and Full Access templates
1010+- **Redirect URI support** — `/auth/login` accepts optional `redirect_uri` parameter for post-login navigation
1111+- **CORS improvements** — origin-mirroring CORS with credentials support for cross-origin auth flows
1212+313## v2.0.0 — User Permissions & Settings Restructure
414515- **User permissions system** — replaced the `admins` table with a `users` table supporting 20 granular permissions, permission templates (Viewer, Operator, Manager, Full Access), and a super user concept with escalation and self-modification guards