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
NeilClack
1aecc51bbd
Replace account and license-keys pages with profile page and dashboard
2026-09-10 13:11:41 -05:00
NeilClack
f50eb34769
Add createdAt to license keys
2026-09-10 13:11:34 -05:00
NeilClack
4a1777de87
Keep legacy subscription tables as unmanaged instead of dropping them
2026-09-10 11:48:49 -05:00