feat: bring the control plane up to date

Squashes the current state of the internal working tree onto this history.
The two trees had grown apart with no common ancestor, so this is a content
sync rather than a merge, and the published history is preserved rather than
rewritten — a force-push here would break every existing fork and clone to no
benefit.

What lands:

- Waitlist: API route, core module, and migration 0006 alongside game aliases.
- User verification.
- CI, oxfmt config, editor settings.
- Assorted fixes across the API routes and core modules.

The repository's own README, the wordmark and the per-package READMEs are kept
from this side; the internal tree had dropped them and they are what a stranger
arriving here reads first.

The marketing site in the internal tree is deliberately not here. It is a
separate product with its own repo and its own licence, and this repo is the
open one — a closed component does not belong in it regardless of how convenient
the directory looked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Wanjohi
2026-08-26 17:48:46 +03:00
co-authored by Claude Opus 5
parent cb5b6ed1a2
commit 0143849129
26 changed files with 3128 additions and 477 deletions
@@ -0,0 +1,28 @@
CREATE TYPE "public"."verification_kind" AS ENUM('email');--> statement-breakpoint
CREATE TABLE "verification" (
"id" char(30) PRIMARY KEY NOT NULL,
"time_created" timestamp with time zone DEFAULT now() NOT NULL,
"time_updated" timestamp with time zone DEFAULT now() NOT NULL,
"time_deleted" timestamp with time zone,
"user_id" char(30) NOT NULL,
"kind" "verification_kind" NOT NULL,
"code_hash" text NOT NULL,
"expires_at" timestamp with time zone NOT NULL,
"attempts" integer DEFAULT 0 NOT NULL,
"consumed_at" timestamp with time zone
);
--> statement-breakpoint
CREATE TABLE "waitlist_entry" (
"id" char(30) PRIMARY KEY NOT NULL,
"time_created" timestamp with time zone DEFAULT now() NOT NULL,
"time_updated" timestamp with time zone DEFAULT now() NOT NULL,
"time_deleted" timestamp with time zone,
"email" text NOT NULL,
"source" text DEFAULT 'machines' NOT NULL
);
--> statement-breakpoint
ALTER TABLE "game" ADD COLUMN "aliases" text;--> statement-breakpoint
ALTER TABLE "verification" ADD CONSTRAINT "verification_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
CREATE INDEX "verification_user_kind_idx" ON "verification" USING btree ("user_id","kind");--> statement-breakpoint
CREATE UNIQUE INDEX "waitlist_entry_email_unique" ON "waitlist_entry" USING btree ("email");--> statement-breakpoint
CREATE INDEX "waitlist_entry_source_idx" ON "waitlist_entry" USING btree ("source");
File diff suppressed because it is too large Load Diff
@@ -43,6 +43,13 @@
"when": 1785909838801,
"tag": "0005_flaky_may_parker",
"breakpoints": true
},
{
"idx": 6,
"version": "7",
"when": 1786205230097,
"tag": "0006_waitlist_verification_game_aliases",
"breakpoints": true
}
]
}