- Scope @typescript-eslint/no-explicit-any off for *.spec.ts test doubles - Type enhance() submit callbacks with SubmitFunction in api-keys page - Drop as-any casts in proclamations upsert by using typed form data - Fix useless regex escapes in profiles phone validation - Remove unused locals param from api-keys load - Use resolve() for admin nav/error links; store literal hrefs in adminModels - Update README admin section and ADMIN_OVERHAUL lint caveat
55 lines
2.3 KiB
Markdown
55 lines
2.3 KiB
Markdown
# 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`:
|
|
|
|
```sh
|
|
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:
|
|
|
|
```sh
|
|
docker build -t registry.digitalocean.com/radiantwave-portal-container-registry/portal:latest .
|
|
```
|
|
|
|
Then push to the container registry:
|
|
|
|
```sh
|
|
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/user-roles` | |
|
|
| `/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 |
|
|
| `/admin/api-keys` | Super-only key rotation |
|