Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Questory Logo

Questory

— by QuestoryLabs

Steam-first library and media intelligence.
Games dashboard, wishlist and cost analytics, friends and multiplayer planning.
Plus optional music, movies/TV, and manga/reading modules.

Website & Docs API Docker Web Docker QEngine Docker NPM qHttp

Next.js NestJS Prisma Tailwind CSS 4 License


✨ Features

  • 🎮 Steam Intelligence: Comprehensive library insights, cost analytics, and dynamic wishlists.
  • 👥 Multiplayer Planning: See what friends are playing and organize gaming sessions seamlessly.
  • 🎧 Music & Media (Optional): Ingest and analyze music via ListenBrainz, movies/TV via Trakt/TMDB, and reading via AniList.
  • Modern Stack: Built for speed and scale with Next.js 16 App Router, NestJS, and Prisma.
  • 🛠️ Flexible Deployment: Run locally with SQLite or scale up with Postgres + Redis via Docker Compose.

🏗️ Technology Stack

Domain Technologies
Web Next.js 16, Tailwind CSS 4, Recharts, Framer Motion
API NestJS, Prisma, BullMQ (with Redis); optional in-process cron
Music ListenBrainz ingest + analytics (/v1/music/*); shared DB (via multi-scrobbler)
Watch Movie/TV ingest + analytics (/v1/watch/*, /webhooks/*); shared DB
Read Manga/novel ingest + analytics (/v1/read/*); shared DB
Data SQLite or PostgreSQL (Environment selected)
Cache/Queues In-memory or Redis (Environment selected)

💡 Tip: Music, Watch, and Read features are soft-gated and optional in the UI.


🚀 Quick Start

Prerequisites

Deployment Modes

Choose the setup that best fits your needs:

Mode Command Database Redis Typical Use
Local pnpm setuppnpm dev SQLite Off Development
Self-hosted (lite) pnpm docker:selfhosted SQLite volume Off Minimal home server
Self-hosted (full) pnpm docker:selfhosted-full Postgres On Durable self-host
Production pnpm docker:prod Postgres On Public HTTPS / multi-user

💻 Environment Configurations

Copy the relevant environment template and edit your secrets:

cp .env.local.example .env
# Set SESSION_SECRET and STEAM_API_KEY
# Optional: ALLOWED_STEAM_IDS=76561198...,76561198...

Note: APP_MODE drives boot checks (local | selfhosted | selfhosted-full | production).
See docs/self-hosting.md for detailed configuration options.

1. Local Development

cp .env.local.example .env
# Set STEAM_API_KEY (SESSION_SECRET can stay weak locally)

pnpm setup
pnpm dev
  • Web: http://localhost:3000
  • API: http://localhost:4000Handles Steam, optional media modules, and in-process cron.
  • Optional Features: Set NEXT_PUBLIC_ENABLE_MUSIC=true, NEXT_PUBLIC_ENABLE_WATCH=true, or NEXT_PUBLIC_ENABLE_READ=true in your environment (nav links appear when the API /health endpoint reports them as enabled).

Want Docker-based infra during local dev? Run pnpm docker:infra to spin up Postgres and Redis, then update DATABASE_URL and REDIS_URL to point to localhost.

2. Self-Hosted (Lite & Full)

For self-hosting setups, copy the respective .env template and set your SESSION_SECRET, STEAM_API_KEY, and optionally ALLOWED_STEAM_IDS.

# Lite setup (SQLite)
pnpm docker:selfhosted

# Full setup (Postgres + Redis)
pnpm docker:selfhosted-full  # (Alias: pnpm docker:up)

Pro-Tip: Prefer building from source using -- --build. Compose may pull prebuilt images when configured.

3. Production (Public HTTPS)

cp .env.production.example .env
# Set strong SESSION_SECRET, STEAM_API_KEY
# Set public HTTPS for STEAM_*, WEB_ORIGIN, and NEXT_PUBLIC_API_URL
# Set ADMIN_EMAILS=you@example.com for the first admin
pnpm docker:prod

⚠️ Warning: Production boots will fail if secrets are placeholders or URLs remain as localhost. Signups remain open until at least one admin exists, after which it can be toggled in Admin settings.


⚙️ Environment Variables Overview

Click to view all core environment variables
Variable Purpose
APP_MODE local, selfhosted, selfhosted-full, or production
DATABASE_PROVIDER sqlite or postgresql
DATABASE_URL Connection string for DB (file:... or postgresql://...)
REDIS_URL Cache/BullMQ. Leave empty for in-memory sync.
USE_INLINE_SYNC Set to true to force inline sync even when Redis is set.
SESSION_SECRET Cookie signing secret
STEAM_API_KEY Mandatory API Key from Steam
STEAM_REALM / RETURN_URL OpenID configuration (Must match API origin)
WEB_ORIGIN Browser app origin (for CORS + redirects)
NEXT_PUBLIC_API_URL Web client's connection point to the API
ALLOWED_STEAM_IDS Comma-separated allowlist of Steam IDs for auth (empty = any)
ADMIN_EMAILS Emails granted admin status upon signup/login
CRON_ENABLED Toggle internal cron jobs (true / false / 0)

Prisma cannot take provider from env at runtime, so pnpm db:schema generates schema.prisma from schema.template.prisma before dev/build hooks.


🛠️ Scripts & Tooling

Command Description
pnpm setup Install, build shared packages, generate Prisma provider, push schema
pnpm dev Start Web + API servers
pnpm test Run Vitest across packages that define tests
pnpm db:schema Generate schema.prisma for the active DB provider
pnpm db:push Apply Prisma schema changes to the DB
pnpm docker:* Compose aliases (up, down, build, selfhosted, prod, etc.)

CI runs automatically on pull requests to main (Vitest and Playwright for web).


📂 Monorepo Structure

apps/web                 Next.js 16 App Router UI
apps/api                 NestJS API (Steam + music + watch + in-process cron)
packages/db              Shared Prisma schema template + client
packages/shared          Shared Zod schemas, session/oauth helpers
docs/                    Documentation (self-hosting, testing)
docker-compose.yml       Compose deployment profiles

🔒 Privacy Notes

  • Friends lists, wishlists, and robust library parsing require public Steam privacy settings.
  • Sync jobs are designed to degrade gracefully if user data is kept private.

📝 License

This project is source-available and distributed under the PolyForm Noncommercial 1.0.0 License. See LICENSE for details.

  • Noncommercial Use: Personal and noncommercial self-hosting is allowed.
  • Commercial Use: Not granted by this license — contact the copyright holder.
  • Required Notice: Copyright Questory Labs (https://github.com/Questory-Labs/Questory)

Never relicense as MIT/Apache, strip notices, or imply commercial rights under this license.

About

An open, self-hostable platform for analyzing your Steam library, tracking friends, and aggregating music, movies, and reading data in one unified dashboard.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages