Back to Spacetimedb

Chat App Prompt System

tools/llm-oneshot/apps/chat-app/prompts/README.md

2.1.06.6 KB
Original Source

Chat App Prompt System

Modular prompts for testing SpacetimeDB vs PostgreSQL with varying feature sets.

Structure

prompts/
├── README.md
├── features/               # 15 feature building blocks
│   ├── 01_basic.md
│   ├── 02_typing_indicators.md
│   └── ...
├── composed/               # Pre-built cumulative prompts (language-agnostic)
│   ├── 01_basic.md
│   ├── 02_scheduled.md
│   ├── ...
│   └── 12_full.md
├── language/               # Language/backend-specific setup (small files)
│   ├── typescript-spacetime.md
│   ├── typescript-postgres.md
│   ├── rust-spacetime.md
│   └── csharp-spacetime.md
├── grading_rubric.md
└── grading_checklist.md

How to Use

Combine a language file + a composed prompt:

  1. Pick a language: language/rust-spacetime.md
  2. Pick a feature level: composed/12_full.md
  3. Concatenate them (language file first)

Example:

@language/typescript-spacetime.md @composed/12_full.md execute

Feature Levels

Each level is cumulative — includes all previous features.

LevelNameNew Features Added
01basicBasic Chat, Typing, Read Receipts, Unread
02scheduled+ Scheduled Messages
03realtime+ Ephemeral Messages
04reactions+ Message Reactions
05edit_history+ Message Editing
06permissions+ Real-Time Permissions
07presence+ Rich User Presence
08threading+ Message Threading
09private_rooms+ Private Rooms & DMs
10activity+ Activity Indicators ⭐
11drafts+ Draft Sync ⭐
12full+ Anonymous Migration ⭐

⭐ = Features that particularly favor SpacetimeDB

Language Files

FileStack
typescript-spacetime.mdTypeScript + SpacetimeDB (React client)
typescript-postgres.mdTypeScript + PostgreSQL (Express + Socket.io)
rust-spacetime.mdRust + SpacetimeDB (CLI client)
csharp-spacetime.mdC# + SpacetimeDB (MAUI client)

Feature Difficulty Comparison

FeatureSpacetimeDBPostgreSQLWhy Different
Basic chatEasyMediumPG needs WebSocket server + API layer
Typing indicatorsTrivialHardSTDB: just a table. PG: WebSocket + Redis pub/sub + cleanup
Read receiptsEasyHardReal-time sync to all clients
Unread countsEasyHardPer-user computed state that syncs
Scheduled messagesTrivialHardSTDB: scheduleAt(). PG: external job queue
Ephemeral messagesTrivialHardSTDB: scheduled reducer. PG: job queue + WebSocket
ReactionsEasyMediumHigh-frequency updates to many clients
Edit historyEasyMediumVersion syncing
Real-time permissionsTrivialVery HardSTDB: row delete = instant. PG: session invalidation
Rich presenceEasyHardHeartbeats, cleanup, broadcast
ThreadingEasyMediumRecursive queries + real-time updates
Private rooms & DMsEasyMediumSTDB: row-level security. PG: authorization middleware
Activity indicatorsTrivialHardSTDB: subscriptions auto-update. PG: polling or complex pub/sub
Draft syncTrivialHardSTDB: built-in real-time sync. PG: custom sync infrastructure
Anonymous migrationEasyHardSTDB: native identity system. PG: session/token management

Why This Structure?

Before (redundant):

composed/
├── typescript/spacetime/12_spacetime_anonymous.md  # Same features
├── typescript/postgres/12_postgres_anonymous.md    # Same features
├── rust/spacetime/12_spacetime_anonymous.md        # Same features
├── csharp/spacetime/12_spacetime_anonymous.md      # Same features

After (DRY):

composed/12_full.md           # Features (one source of truth)
language/rust-spacetime.md    # Just setup/architecture (~30 lines)

Benefits:

  • Update features once → applies to all languages
  • Language files are tiny - just setup and constraints
  • Easy to add new languages (one small file)

Benchmarking

After generating an app, use the test harness to evaluate it:

bash
cd ../test-harness
npm install
npx playwright install chromium

# Run benchmark with level matching your prompt
CLIENT_URL=http://localhost:5173 npm run benchmark -- ../staging/typescript/<LLM_MODEL>/spacetime/chat-app-YYYYMMDD-HHMMSS/ --level=12

Prompt Level to --level Mapping

Prompt--levelFeatures ScoredMax Score
01_basic11-412
02_scheduled21-515
03_realtime31-618
04_reactions41-721
05_edit_history51-824
06_permissions61-927
07_presence71-1030
08_threading81-1133
09_private_rooms91-1236
10_activity101-1339
11_drafts111-1442
12_full121-1545