
Why this exists
Threadweaver is a tiny love‑letter to the characters games overlook. “NPC” began as a design term, but slang sometimes reduces people to background noise. Threadweaver flips that: the city is woven from background lives. Gossip matters. Rent is late. A speakeasy is brewing. You listen, tease, solve a riddle — and a life moves one step.
Features
- Cinematic Three.js city with a default pink/orange sunset mood
 - First‑person movement (WASD + Space) with a visible hand
 - Raycast chat: look toward a pedestrian and press 
E - Live world controls (toggle with the gear button or 
H):- Sky color, fog, ambient/sun, neon accents
 - City ⇄ Nature mix, building density, tree density
 - People/car density, streetlight density, road spacing, world size
 
 - NPCs with personality and arcs
- Mood, family status, partner name (sometimes), hobby, stress, pet, favorites, and a gossip thread
 - First line is short and sometimes abrupt (“Busy. What?”)
 - Replies are concise (1–2 lines), unpredictable in tone, and may end with a tiny hook/riddle
 - Small arc progression on each turn (in‑memory)
 
 - Real‑time chat powered by the OpenAI Responses API (not Chat Completions)
 

Stack
- Frontend: HTML/CSS + Three.js (PointerLock, raycasting, world controls)
 - Backend: Node.js + Express
 - Realtime: OpenAI Responses API 
POST /v1/responses - State: in‑memory NPC arcs (swap to file/SQLite for persistence)
 
Link
Source code: https://github.com/J0YY/threadweaver