feat : remove legacy feature
This commit is contained in:
@@ -1,29 +1,18 @@
|
||||
# Buzz Sheet
|
||||
|
||||
Buzz Sheet is a Thai-first guide CMS for turning structured character, build,
|
||||
team, rotation, and comparison data into responsive game-guide pages. Authors
|
||||
work in a visual block editor; visitors get readable guides rather than a
|
||||
spreadsheet interface.
|
||||
team, rotation, and comparison data into responsive game-guide pages.
|
||||
|
||||
Production target: `https://guide.sudloh.com`
|
||||
|
||||
## Included capabilities
|
||||
|
||||
- Searchable character directory with element and role filters.
|
||||
- Unlimited character pages with custom slugs, ordering, notes, and visibility.
|
||||
- Visual admin workspace with inline editing, inspector, preview, keyboard and
|
||||
pointer reordering, 750 ms autosave, conflict recovery, and revisions.
|
||||
- Six reusable templates covering classic guides, rotations, one-page builds,
|
||||
multi-role builds, team databases, and calculation-backed comparisons.
|
||||
- Validated block schemas with migrations and a safe fallback for unknown
|
||||
future block types.
|
||||
- Restricted decimal formula engine with named references, dependency ordering,
|
||||
cycle detection, typed failures, and presentation-only rounding.
|
||||
- Read-only comparison charts with visible values and accessible table fallbacks.
|
||||
- Searchable character guide directory.
|
||||
- Structured editors for overview, weapons, artifacts, constellations, teams,
|
||||
and custom sections with autosave and conflict recovery.
|
||||
- Better Auth email/password login with administrator-managed accounts.
|
||||
- Private S3-compatible media uploads with reference-aware same-origin delivery.
|
||||
- PostgreSQL transactions, immutable data-source versions, revisions, and a
|
||||
retryable outbox.
|
||||
- PostgreSQL transactions and a retryable outbox.
|
||||
- Shared Redis cache invalidation and privacy-safe Server-Sent Events across
|
||||
replicas.
|
||||
- Discord-triggered Lunaris catalog updates with exact-version synchronization.
|
||||
@@ -75,13 +64,9 @@ Prepare the database and start the application:
|
||||
|
||||
```bash
|
||||
bun run db:migrate
|
||||
bun run db:seed
|
||||
bun run dev
|
||||
```
|
||||
|
||||
The seed command installs the six starter built-in templates; it does not publish
|
||||
reference workbook content.
|
||||
|
||||
### Fixture-only demo
|
||||
|
||||
The UI can be inspected without PostgreSQL, Redis, S3, or authentication
|
||||
@@ -106,16 +91,14 @@ and external services. Never enable it in a deployed environment.
|
||||
| `bun run build` | Compile the production application |
|
||||
| `bun run db:generate` | Generate a Drizzle migration from schema changes |
|
||||
| `bun run db:migrate` | Apply committed Drizzle migrations |
|
||||
| `bun run db:seed` | Upsert the built-in templates |
|
||||
| `bun run import:guides` | Preview the one-time Google Sheets guide migration (`-- --apply` to write) |
|
||||
| `bun run worker:discord` | Listen for Lunaris update announcements |
|
||||
| `bun run worker:outbox` | Process cache and event outbox records |
|
||||
|
||||
## Runtime design
|
||||
|
||||
Accepted edits use an `expectedVersion` and commit content, immutable data-source
|
||||
versions, revision snapshots, media references, and outbox records in one
|
||||
PostgreSQL transaction. The outbox worker then invalidates affected Redis tags
|
||||
Accepted edits use an `expectedVersion` and commit guide content, media reference
|
||||
counts, and outbox records in one PostgreSQL transaction. The outbox worker then invalidates affected Redis tags
|
||||
before publishing an opaque `{ type, id, version }` event. Connected clients
|
||||
refetch authoritative state; SSE never contains page content and is not the
|
||||
source of truth.
|
||||
@@ -128,18 +111,13 @@ Worker and sync results are sent to `DISCORD_LOG_CHANNEL_ID`. Enable the Discord
|
||||
Message Content intent and grant the bot View Channel and Send Messages in the
|
||||
configured channels.
|
||||
|
||||
Public snapshots use a shared Redis-backed Next.js cache. Admin routes remain
|
||||
Public guides use a shared Redis-backed Next.js cache. Admin routes remain
|
||||
dynamic. SSE streams send a 90-second heartbeat and close after 30 minutes so
|
||||
clients reconnect. Traefik buffering is disabled by the response headers.
|
||||
|
||||
Media objects remain private in S3. `/media/[id]` serves an object publicly only
|
||||
while a visible current snapshot references it; otherwise administrator
|
||||
authorization is required. Retained revisions keep their referenced objects
|
||||
alive.
|
||||
|
||||
Formula fields accept arithmetic only: `+`, `-`, `*`, `/`, parentheses,
|
||||
percentages, unary signs, and stable field references. They cannot execute HTML,
|
||||
JavaScript, React, CSS, external scripts, packages, or network calls.
|
||||
while a published guide references it; otherwise administrator authorization is
|
||||
required.
|
||||
|
||||
## Verification
|
||||
|
||||
|
||||
Reference in New Issue
Block a user