Database schema

All data lives in one DynamoDB table per stage (abstract-play-dev, abstract-play-prod). The partition key (pk) names a logical record family; the sort key (sk) scopes items within that family.

Most access patterns use Query on pk with optional begins_with on sk. See subsystem pages for how each family is read and written.

Games

Users

Retired (no longer written; purge with bin/purge-legacy-palettes.mjs):

Retired (no longer written; purged from prod Aug 2025):

Game lists

Retired (no longer written; purged from prod — zero rows remain):

Exploration

Ratings and meta games

Challenges

Bots

Automated tournaments

Organized events

WebSockets

Feedback (separate table)

In-app bugs, feature ideas, and game wishlist use table abstract-play-feedback-{stage} (not the main game table).

Post META and LIST#* rows may include tags (string slugs). META may include suggestedTags (submitter suggestions; admin-only on get).

Attachments: S3 bucket ap-feedback-attachments-{stage}, keys under staging/{userId}/ (presign upload in Phase 2).

Related docs