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
2026-09-11 15:36:03 -05:00
2026-02-24 12:08:01 -06:00
2026-07-06 21:01:41 -05:00
2026-01-13 16:21:12 -06:00
2026-07-17 13:28:40 -05:00
2026-09-11 12:44:44 -05:00
2026-01-20 08:40:05 -06:00
2026-01-13 16:21:12 -06:00

Radiant Wave Technologies - User Portal

A combination application that combines the main Radiant Wave API with a user-facing account management application, and an admin-facing platform management application. An all-in-one management platform for Radiant Wave and Radiant Wave Technologies.

SvelteKit 2 + Svelte 5 + Tailwind CSS v4 + Prisma 7 + PostgreSQL + Better-Auth.

Deployment

This application runs inside of a Docker container, defined by the Dockerfile found within this repo. Codeberg/Gitea actions are triggered on push actions to the main branch, and build the docker container. The docker container is then uploaded to the Digital Ocean Container Registry, where it is pulled into an App Platform application and run.

To build the Docker container locally (with podman), ensuring builds pass prior to pushing to main:

podman build --platform linux/amd64 -t registry.digitalocean.com/radiantwave-portal-container-registry/portal:latest .

To build the Docker container on a Linux machine, such as a Forgejo Action Runner:

docker build -t registry.digitalocean.com/radiantwave-portal-container-registry/portal:latest .

Then push to the container registry:

podman push registry.digitalocean.com/radiantwave-portal-container-registry/portal:latest

Development

Admin

Admin pages live under /admin (requires roleId <= 3); /admin redirects to /admin/profiles. Each route owns its own form and modal logic, built on the shared DataTable.svelte and AdminModal.svelte components. The generic $lib/svelte-admin CRUD layer has been removed; see docs/ADMIN_OVERHAUL.md for the migration notes.

Route Notes
/admin/users Name, Email, Role
/admin/profiles Reference implementation
/admin/proclamations Super-only content edits
/admin/solfeggio-frequencies
/admin/proclamation-categories Draggable reorder
/admin/proclamation-groups Draggable reorder
/admin/license-keys List-only + rotate
S
Description
No description provided
Readme
2 MiB
Languages
TypeScript 89.3%
Svelte 9.5%
HTML 1%
Dockerfile 0.1%