NeilClack
25b5eeb144
docs: document System Name PUT endpoint and validation fields in OpenAPI
2026-09-29 09:59:17 -05:00
NeilClack
3c49f425d8
Portal: display System Name read-only on dashboard and admin lists
...
Show the System Name where license keys are listed, falling back to an
'Unnamed system' indication when unset. No rename UI or mutation path.
2026-09-29 09:51:58 -05:00
NeilClack
8412dfb69c
Portal: System Name PUT endpoint and license-validation status
...
Add PUT /api/v2/licenses/[licenseKey]/system-name (200/400 invalid_name/
404 unknown_license/409 name_taken, idempotent) and extend POST
/api/v2/license with an optional systemName and additive systemNameStatus
(ok/unchanged/conflict/invalid). Validation always succeeds; an omitted
field never changes or clears a name and empty/whitespace is invalid.
Adds server and helper tests covering trimming, bounds, case-insensitive
uniqueness, cross-account reuse, 404, and idempotency.
2026-09-29 09:51:54 -05:00
NeilClack
1d76e8dff9
Portal: add nullable System Name to LicenseKey with per-account unique index
...
Adds systemName (as typed, trimmed) and systemNameLower (case-folded) to
LicenseKey plus a unique index on (userId, systemNameLower) so names are
case-insensitively unique per account when non-null. Additive and
reversible; migration tested up/down. Regenerates the Prisma client.
2026-09-29 09:51:48 -05:00
NeilClack
179df1e252
Portal: 12-hour schedule times and dynamicAudio default on
...
Use TimeInput for Block start/end and show the day timeline axis with
AM/PM, so no 24-hour time is displayed in the schedule UI. New Blocks now
default dynamicAudio to true in the modal and server-side when the field
is absent; existing stored Blocks are untouched.
2026-09-29 08:53:22 -05:00
NeilClack
35558b0652
Portal: add reusable 12-hour TimeInput component
...
TimeInput displays and accepts AM/PM times, offers the 5-minute options as
suggestions, and allows typing any minute 00-59; its value model is a 24h
HH:MM string. Adds isomorphic parseTimeInput/hmToMinutes/fiveMinuteOptions
helpers and unit + component tests for them.
2026-09-29 08:53:17 -05:00
NeilClack
6c89a89050
docs: add Phase 0 schedule API/data contract and fixtures
...
Add docs/schedule-api-contract.md (current state, time semantics, schedule
data model, validation rules, endpoints, sync behavior, System Name rules,
dynamic audio, backward compatibility, per-phase touchpoints, open items,
changelog) and docs/fixtures/*.json (daily, weekly, none, midnight-crossing,
adjacent, dynamic-audio, and legacy v2 payloads). Kept byte-identical with
the radiantwave repo.
2026-09-29 08:36:31 -05:00
NeilClack
dca9c54d83
Merge branch 'dev'
Build and Push to Digital Ocean Container Registry / build-and-push (push) Successful in 3m23s
Build and Push to Digital Ocean Container Registry / migrate (push) Successful in 41s
2026-09-11 19:07:21 -05:00
NeilClack
c19c13b192
Document dynamic audio and add a schedule response example
2026-09-11 18:45:59 -05:00
NeilClack
ec826093eb
Expose dynamic audio on the v2 schedule API
2026-09-11 18:41:57 -05:00
NeilClack
96a1342c10
Add Enable Dynamic Audio option to schedule blocks
2026-09-11 18:41:53 -05:00
NeilClack
468a65a688
Add dynamic audio flag to schedule blocks
2026-09-11 18:41:46 -05:00
NeilClack
e934a98f00
Use a 12-hour clock with AM/PM selects in the block modal
2026-09-11 18:30:26 -05:00
NeilClack
15bb51582b
Move Cancel left and rename Back to Accept in the block modal
2026-09-11 18:30:08 -05:00
NeilClack
46d7cf66b8
Render overnight blocks across midnight in the day view
2026-09-11 18:24:54 -05:00
NeilClack
177b7bb13a
Flag overnight blocks in the v2 schedule API
2026-09-11 18:24:51 -05:00
NeilClack
750a9286c9
Support overnight blocks in schedule validation
2026-09-11 18:24:48 -05:00
NeilClack
c177e7953d
Document the v2 schedule endpoint
2026-09-11 18:16:08 -05:00
NeilClack
5f4116b8e8
Add schedule page with block editor and proclamation browser
2026-09-11 18:16:06 -05:00
NeilClack
545fb22910
Add v2 schedule API endpoint
2026-09-11 18:16:04 -05:00
NeilClack
4922e941ae
Add schedule validation and service layer
2026-09-11 18:16:00 -05:00
NeilClack
e6b492a335
Add schedule data model and migration
2026-09-11 18:15:57 -05:00
NeilClack
051520b941
Fix page refresh issue
Build and Push to Digital Ocean Container Registry / build-and-push (push) Successful in 2m36s
Build and Push to Digital Ocean Container Registry / migrate (push) Successful in 34s
2026-09-11 16:05:43 -05:00
NeilClack
64715c91d3
Update workflow
Build and Push to Digital Ocean Container Registry / build-and-push (push) Successful in 4m6s
Build and Push to Digital Ocean Container Registry / migrate (push) Successful in 1m50s
2026-09-11 15:36:03 -05:00
NeilClack
960673bbc6
Add a site-wide dark mode
Build and Push to Digital Ocean Container Registry / build-and-push (push) Failing after 4s
Build and Push to Digital Ocean Container Registry / migrate (push) Skipped
2026-09-11 12:49:46 -05:00
NeilClack
a909db39b1
Delete "API Key" page
2026-09-11 12:44:44 -05:00
NeilClack
020289966d
Remove "User Roles" admin page
2026-09-11 12:44:25 -05:00
NeilClack
fa614b8c37
Fix staff(+) unable to edit or delete addresses
2026-09-11 12:43:41 -05:00
NeilClack
cf8fc7b719
Fix users unable to edit or delete their own addresses
2026-09-11 12:42:35 -05:00
NeilClack
848e646880
Remove the extra page separator in the Login page
2026-09-11 12:41:49 -05:00
NeilClack
98d9b095d9
Document v2 API with OpenAPI schema
2026-09-10 16:19:53 -05:00
NeilClack
2bbee98594
Add dedicated v2 proclamation category/group endpoints and catalog specs
2026-09-10 16:19:53 -05:00
NeilClack
4d929df604
Remove stale admin overhaul and API update docs
2026-09-10 16:19:52 -05:00
NeilClack
10aad07e6d
Add admin Audit Log page
2026-09-10 15:10:16 -05:00
NeilClack
d16965dab6
Add AuditLog table and Prisma audit extension
2026-09-10 15:10:11 -05:00
NeilClack
7596937f30
Enforce roleId checks on all admin page actions
2026-09-10 14:59:32 -05:00
NeilClack
0cb4b2148a
Expose roleId on the Better Auth session user
2026-09-10 14:59:28 -05:00
NeilClack
9de0e2e25a
Fix Super admins being blocked from editing proclamations
2026-09-10 14:50:08 -05:00
NeilClack
9cd5397395
Add Resend email template HTML files
2026-09-10 14:35:54 -05:00
NeilClack
f6b8cad15e
Add subject to password reset email
2026-09-10 14:14:45 -05:00
NeilClack
29d53af8dd
Remove unauthenticated /send email endpoint
2026-09-10 14:14:44 -05:00
NeilClack
809ced6d8a
Automated signups use the registration-email set-password link
2026-09-10 14:08:56 -05:00
NeilClack
84c905c9ff
Add shared registration invite helper and use it for admin-created users
2026-09-10 14:08:51 -05:00
NeilClack
ae8d661364
Fix reset-password page to look up the reset token correctly
2026-09-10 13:42:36 -05:00
NeilClack
5ec3018f8b
Email a set-password link when an admin creates a user
2026-09-10 13:42:33 -05:00
NeilClack
8a3c1587b4
Fix admin modals getting stuck after a successful submit
2026-09-10 13:33:33 -05:00
NeilClack
e60d61e90a
Fix admin modals replaying old action results after create or edit
2026-09-10 13:26:54 -05:00
NeilClack
f1d80279e9
Record last validation time in v2 license endpoint
2026-09-10 13:18:22 -05:00
NeilClack
4979d955c2
Show active check and last verified date on dashboard license table
2026-09-10 13:18:18 -05:00
NeilClack
0175cab0b4
Add lastValidatedAt to license keys
2026-09-10 13:18:15 -05:00