bigtech.sucks: living database + first assessment
The database is the source of truth; the site is a view over it.
- packages/core/db/schema.sql: vendors, products, categories, the 8-dimension
instrument, assessments, scores, evidence, findings, off-ramp, plus the
derived v_product_score view the game reads.
- packages/core/db/build.mjs: rebuilds bigtech.db, absorbs the legacy 43-product
roster as unassessed, applies seeds, then verifies the instrument's own rules
(weights sum to 100, totals recompute, grades match bands, every score has a
rationale, no tier-4 evidence on a scored dimension, reproducible-build caps
actually enforced).
- packages/core/db/seed/0001-signal.sql: Signal Desktop 8.36.0-alpha.1 on linux,
75.9/100 grade B, weakest dimension local_data_exposure. Evidence points at
the re-runnable audit artifacts in the Servetus vault.
- packages/core/src/data/generated/catalog.{ts,json}: generated export.
Verified: 44 products, 1 assessed, all checks pass.
2026-10-29 13:16:29 -05:00
|
|
|
# bigtech.sucks — Draw the Line
|
|
|
|
|
|
|
|
|
|
V0.1 scaffold per master spec. A retro frontier game that scopes Big Tech exposure and sequences the off-ramp.
|
|
|
|
|
|
|
|
|
|
## Structure
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
packages/
|
|
|
|
|
core/ Render-agnostic game logic, seed data, scoring
|
2026-10-29 13:17:21 -05:00
|
|
|
core/db/ The living database: schema, seeds, build + verify
|
bigtech.sucks: living database + first assessment
The database is the source of truth; the site is a view over it.
- packages/core/db/schema.sql: vendors, products, categories, the 8-dimension
instrument, assessments, scores, evidence, findings, off-ramp, plus the
derived v_product_score view the game reads.
- packages/core/db/build.mjs: rebuilds bigtech.db, absorbs the legacy 43-product
roster as unassessed, applies seeds, then verifies the instrument's own rules
(weights sum to 100, totals recompute, grades match bands, every score has a
rationale, no tier-4 evidence on a scored dimension, reproducible-build caps
actually enforced).
- packages/core/db/seed/0001-signal.sql: Signal Desktop 8.36.0-alpha.1 on linux,
75.9/100 grade B, weakest dimension local_data_exposure. Evidence points at
the re-runnable audit artifacts in the Servetus vault.
- packages/core/src/data/generated/catalog.{ts,json}: generated export.
Verified: 44 products, 1 assessed, all checks pass.
2026-10-29 13:16:29 -05:00
|
|
|
web/ React + Vite SPA (V1 funnel)
|
|
|
|
|
server/ Minimal waitlist API (email + channel only)
|
|
|
|
|
```
|
|
|
|
|
|
2026-10-29 13:17:21 -05:00
|
|
|
## The living database
|
|
|
|
|
|
|
|
|
|
The database is the source of truth. The site is a view over it. Nothing in the UI may
|
|
|
|
|
hardcode a number that lives in `bigtech.db`.
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm run db:build # rebuild the db, apply seeds, verify, regenerate the catalog
|
|
|
|
|
npm run db:verify # run the instrument's own checks against the existing db
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`packages/core/db/bigtech.db` is **built, not committed**. What is committed is the part that
|
|
|
|
|
matters: `db/schema.sql`, `db/seed/*.sql`, and `db/build.mjs`.
|
|
|
|
|
|
|
|
|
|
The build refuses to pass if a score breaks the instrument's own rules:
|
|
|
|
|
|
|
|
|
|
- dimension weights must sum to 100
|
|
|
|
|
- every stored `weighted_total` must recompute from its scores
|
|
|
|
|
- every grade must match its band
|
|
|
|
|
- every score must carry a written rationale
|
|
|
|
|
- no tier-4 claim may attach to a scored dimension
|
|
|
|
|
- the reproducible-build caps are enforced, not documented: no reproducible build caps
|
|
|
|
|
verifiability at 3, an experimental one at 6
|
|
|
|
|
|
|
|
|
|
A product with no assessment surfaces as `unassessed`. It is never given a guessed number.
|
|
|
|
|
That is why the 43 legacy roster entries sit in the database as placeholders and exactly one
|
|
|
|
|
product carries a real score.
|
|
|
|
|
|
|
|
|
|
### Adding an assessment
|
|
|
|
|
|
|
|
|
|
1. Write `packages/core/db/seed/000N-<slug>.sql` using the shape in `0001-signal.sql`.
|
|
|
|
|
2. Every score needs a `rationale` and at least three tier-1 or tier-2 `evidence` rows.
|
|
|
|
|
3. `npm run db:build`. If it fails, the report is not ready to publish.
|
|
|
|
|
|
|
|
|
|
### What the numbers mean
|
|
|
|
|
|
|
|
|
|
See the instrument spec. Scores are 0 to 100, and a weighted average is not the headline: the
|
|
|
|
|
weakest dimension is, because a 90 with a 5 on local data exposure is a 90 that will leak.
|
|
|
|
|
|
bigtech.sucks: living database + first assessment
The database is the source of truth; the site is a view over it.
- packages/core/db/schema.sql: vendors, products, categories, the 8-dimension
instrument, assessments, scores, evidence, findings, off-ramp, plus the
derived v_product_score view the game reads.
- packages/core/db/build.mjs: rebuilds bigtech.db, absorbs the legacy 43-product
roster as unassessed, applies seeds, then verifies the instrument's own rules
(weights sum to 100, totals recompute, grades match bands, every score has a
rationale, no tier-4 evidence on a scored dimension, reproducible-build caps
actually enforced).
- packages/core/db/seed/0001-signal.sql: Signal Desktop 8.36.0-alpha.1 on linux,
75.9/100 grade B, weakest dimension local_data_exposure. Evidence points at
the re-runnable audit artifacts in the Servetus vault.
- packages/core/src/data/generated/catalog.{ts,json}: generated export.
Verified: 44 products, 1 assessed, all checks pass.
2026-10-29 13:16:29 -05:00
|
|
|
## Quick start
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm install
|
|
|
|
|
npm run build -w @bigtech-sucks/core
|
|
|
|
|
npm run dev # web on :5173
|
|
|
|
|
npm run dev:server # waitlist API on :3001
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## V1 flow
|
|
|
|
|
|
|
|
|
|
Welcome → Meet Red → Draw the Line → Overworld → Showdown → Homestead → Reveal (Binary Ranch) → Waitlist
|
|
|
|
|
|
|
|
|
|
## Governance
|
|
|
|
|
|
|
|
|
|
- Creative assets are **candidates** — director approval required before ship
|
|
|
|
|
- Company name revealed **only** at homestead/reveal phase
|
|
|
|
|
- §13 open decisions are **not** silently resolved (see `packages/core/src/data/config.ts`)
|
|
|
|
|
- Client-side sovereignty report; server stores waitlist fields only
|
|
|
|
|
|
|
|
|
|
## Roadmap
|
|
|
|
|
|
|
|
|
|
- **V1.5:** Terminal/SSH render (Go + Charm)
|
|
|
|
|
- **V2:** Concierge migration, journey chronicle, physical fulfillment (stubs in `v2-stubs.ts`)
|