Twisted Taleweaver is a turn-based dark-fantasy roleplaying platform built around narrative-first combat, persistent expeditions, and a modern service-oriented architecture.
It blends tabletop-inspired game design with real-time web technology: a C# backend that owns all game logic and data integrity, and a React frontend focused on immersive presentation and player interaction.
- Turn-based "expeditions" (party sessions) and game engine logic
- Character creation and AI-assisted content generation via an OpenAI adapter
- GraphQL gateway with real-time updates (subscriptions) and auth integration
- Data access layer with migrations and Dapper-style SQL access
TwistedTaleweaver.Gateway: GraphQL endpoint, authentication and subscriptionsTwistedTaleweaver.Database: migrations and database runnerTwistedTaleweaver.DataAccess: repositories and data mappersTwistedTaleweaver.Integration.OpenAi: OpenAI integration/adaptersTwistedTaleweaver.Integration.Clerk: authentication integration (Clerk)twisted-taleweaver-app: React + Vite frontend
- Create a
.envfile in the repository root, based on.env.example(if present). - Build and run services with Docker Compose:
docker compose up --build-
Create a
.env.localfile in thetwisted-taleweaver-appdirectory, based ontwisted-taleweaver-app/.env.example. -
Start the frontend development server:
cd twisted-taleweaver-app
npm install
npm run dev- The project uses Clerk as the user and authentication provider. Server-side and frontend integrations are present in the repository (
TwistedTaleweaver.Integration.Clerkand frontend environment variables). - Backend: Clerk-related secrets are expected in configuration (example key names used in code include
Clerk:SecretKey). - Frontend: a publishable key is required in the app environment (commonly
VITE_CLERK_PUBLISHABLE_KEY). - See
src/TwistedTaleweaver.Integration.Clerkfor the server-side setup andtwisted-taleweaver-appfor frontend usage.
- Database connection strings: configured in
ConnectionStrings(seesrc/TwistedTaleweaver.Database/Program.cs). - OpenAI:
OpenAi:ApiKeyandOpenAi:Model(used by the OpenAI integration). - Clerk: backend secret(s) (e.g.,
Clerk:SecretKey) and frontend publishable key (VITE_CLERK_PUBLISHABLE_KEY).