Add auth bootstrap and database safeguards
This commit is contained in:
@@ -9,6 +9,9 @@ This document defines the visual language for SHD.build. New pages should feel l
|
||||
3. **Orange means action.** SHD orange identifies primary actions, active navigation, focus, and important values. It should not cover large areas.
|
||||
4. **State is always visible.** Loading, disabled, active, archived, configured, error, and success states need both visual and textual indicators.
|
||||
5. **Square and engineered.** Panels and controls use square corners, fine borders, tight spacing, and deliberate grid alignment.
|
||||
6. **Links use interface feedback, not underlines.** Links do not use native text
|
||||
underlines. Communicate hover and focus through SHD accent color, borders,
|
||||
brightness, and the required focus-visible outline.
|
||||
|
||||
## Tokens
|
||||
|
||||
@@ -62,6 +65,21 @@ Use the spacing tokens for new components. Prefer `8px`, `12px`, and `20px` gaps
|
||||
- On small screens, the split frame becomes a single column and account controls
|
||||
move before archival content.
|
||||
|
||||
### Third-party identity buttons
|
||||
|
||||
- Follow the identity provider's current official brand and sign-in guidelines.
|
||||
- Use official, unmodified assets downloaded from the provider's brand resources.
|
||||
- Discord sign-in uses the official white Discord symbol on Blurple `#5865F2`
|
||||
with the explicit label “Continue with Discord.”
|
||||
- Discord account connection controls use the same official symbol and Blurple
|
||||
treatment with the explicit label “Link Discord.”
|
||||
- Preserve the provider's required clearspace, logo proportions, approved color,
|
||||
readable contrast, and text/logo alignment even when the surrounding surface
|
||||
follows the SHD theme.
|
||||
- Provider buttons still require SHD.build's focus-visible, pressed, pending, and
|
||||
duplicate-interaction protection where those states do not conflict with the
|
||||
provider's branding requirements.
|
||||
|
||||
### Admin dashboard
|
||||
|
||||
- Use `admin-page`, `admin-command`, `admin-dashboard`, `admin-sidebar`, and `admin-content`.
|
||||
|
||||
@@ -45,3 +45,41 @@ persistent volume is attached.
|
||||
5. Publishing, discovery, ratings, comments, favorites, and copy flow.
|
||||
6. Rich build guides and moderation.
|
||||
7. Admin editors, validation, audit log, and data import/export.
|
||||
# Administrator bootstrap
|
||||
|
||||
The first successfully authenticated user is promoted to `admin` if the
|
||||
database does not contain an administrator. Promotion uses one conditional
|
||||
database update so concurrent first sign-ins cannot both become administrators.
|
||||
Once an administrator exists, later sign-ins never alter roles.
|
||||
|
||||
# Database backup and restore
|
||||
|
||||
Embedded Turso databases contain contributor-entered source data and must be
|
||||
preserved across development changes.
|
||||
|
||||
Create a timestamped development backup:
|
||||
|
||||
```sh
|
||||
npm run db:backup
|
||||
```
|
||||
|
||||
Create a production backup:
|
||||
|
||||
```sh
|
||||
npm run db:backup:production
|
||||
```
|
||||
|
||||
The scripts write versioned JSON documents beneath `data/backups/` by default.
|
||||
That directory is ignored by Git because backups contain private user data,
|
||||
including password hashes.
|
||||
|
||||
To restore, first create an empty database and apply the schema. Then run:
|
||||
|
||||
```sh
|
||||
npm run db:restore -- data/backups/<backup-file>.json
|
||||
```
|
||||
|
||||
The restore operation refuses to import into any database containing records.
|
||||
This guard prevents accidental merging or overwriting of contributor data.
|
||||
Stop the application before backup or restore so the embedded database file is
|
||||
not locked by another process.
|
||||
|
||||
Reference in New Issue
Block a user