Free Desktop Game · Python + SQL

Learn SQL by
Solving a Crime.

You're a data analyst. $1.87 million is missing. Write real SQL queries, follow the evidence, and catch the CFO before he disappears to Cabo.

Two full seasons.  28 SQL objectives.  No tutorials. No multiple choice.  Real queries only.

nexus — sql terminal
Diana Reeves drops a sticky note on your keyboard.
"Two vendors. No address. Follow the money."  — D

nexus> SELECT vendor_id, SUM(amount) AS total
          FROM transactions
          GROUP BY vendor_id
          ORDER BY total DESC;

┌────────────┬────────────────┐
vendor_idtotal
├────────────┼────────────────┤
41,243,500.00
7626,000.00
284,200.00
└────────────┴────────────────┘

✔  Clue found: Two vendors dominate the spend.
Sam: "Vendor 4 pulled $1.2M and has no address.
      That's not a vendor. That's a problem."

nexus>

Pick your angle.

NEXUS was built for two kinds of people. Both get the full game.

📊

Data Professionals & Learners

You know SQL exists. Maybe you've done a tutorial or two. But nothing sticks like actually needing it to solve something. NEXUS puts you in a real investigation with real data — the queries you write matter to the story.

  • 16 SQL objectives across 6 investigation scenes (Season 1)
  • Concepts taught exactly once — then immediately applied
  • Every query runs against a real SQLite database
  • Field Guide pages recap what you learned per scene
  • Season 2 adds subqueries, CASE, HAVING, string functions
🎮

Gamers Who Want a Brain Workout

Corporate noir mystery. A CFO stealing millions through shell companies. A spirit guide named Sam who may or may not be a ghost. A Matrix-rain animation when you unlock a new power. This is a game first.

  • Cinematic dialogue — Diana, Sam, and a cast of suspects
  • Cliffhanger scene transitions with episode-style cards
  • Concept unlock animation: Matrix rain → Morpheus message
  • Two full seasons with a "Ghost in the Machine" S2 twist
  • Investigation log, clue tracking, completion milestones

Built different.

Every design decision pushes toward one goal: the query has to matter to the story.

🖥️

Cartoon CRT Terminal

A cel-shaded monitor sits at the center of every scene. Your SQL goes in. Results come out. Errors stay on-screen — they never bleed into the story thread.

🌧️

Matrix Unlock Animation

Master a new SQL concept and the terminal erupts in green rain. The characters lock into focus. A Morpheus-style message appears. Then you move on.

💬

Living Dialogue Thread

Diana narrates. Sam tips you off. The conversation flows in real time alongside your queries — like a messaging thread woven into the investigation.

🎬

Cliffhanger Scene Cards

Each scene ends with a dark-mode episode card — headline, teaser, next location. The case escalates. The stakes mount. Then you're back in the terminal.

📄

The Analyst's Field Guide

One parchment-styled journal page unlocks per completed scene. Each page recaps the SQL technique you used and the rule behind it. A record of your growth.

🔁

Recall Gates

Between scenes, a low-stakes quiz fires: "prove you've still got this." Two misses and the answer is revealed. No hard blocking. Spaced retrieval, done right.

💡

2-Click Hint System

Stuck? Click once for a Sam tip. Click again for the exact answer with a copy button. No judgment. The goal is to keep you moving, not to gatekeep progress.

Concepts Browser

Every unlocked SQL concept lives in a browsable reference. Open it any time. Green pulse on the button tells you something new just dropped.

👻

Spirit Guide (Sam)

If you go quiet for 90 seconds, Sam whispers. Tips on shortcuts, hints, command history. Helpful without being annoying. Probably not a ghost. Probably.

Real SQL.
Two seasons.

No syntax drills. No fill-in-the-blank. Every concept is taught once, applied immediately, and reinforced through the investigation.

SELECT / FROMPulling data from tables
WHEREFiltering rows by condition
COUNT / SUMAggregating records
GROUP BYBundling data into groups
JOINLinking tables by key
ORDER BYSorting results
IN clauseMatching a list of values
LIKEPattern matching — Season 2
SubqueriesQuery inside a query — Season 2
CASE WHENConditional logic — Season 2
HAVINGFiltering aggregates — Season 2
strftimeDate/time extraction — Season 2
1
Your Desk — Day One Pull the employee table. Get your bearings. Something feels off about the vendor list.
2
Server Room — Basement B1 Group the transactions. Sort by total. Two vendors are pulling in millions with no address, no phone.
3
HR Files — 2nd Floor Every suspicious payment has the same approved_by ID. Put a name to the number.
4
CFO's Department Total the damage. Watch the payments escalate month over month. He was getting bolder.
5
Audit Trail Two shell companies. One approver. $1,869,500. Build the case that holds up in a room with lawyers.
6
Rachel Kim's Office Close the door. Present the evidence. Watch the CFO's story fall apart query by query.

Two seasons. Both included.

Season 1 teaches SQL fundamentals through a corporate fraud case. Season 2 goes deeper — and gets strange.

SEASON 1 · AVAILABLE NOW

The Audit

6 scenes · 16 objectives · $1.87M in fraud

A new data analyst at Nexus Analytics Corp. Day one. A sticky note on your keyboard. Two vendors with no address pulling in millions. One CFO with a business trip to Cabo booked. You have SQL and you have time.

SELECT WHERE COUNT SUM GROUP BY JOIN ORDER BY IN
SEASON 2 · AVAILABLE NOW

The Ghost in the Machine

6 scenes · 12 objectives · something is wrong

The fraud case closed. But something in the server room didn't. Deleted records keep coming back. Queries run at 3:03am. The logs show access from an account that hasn't existed since 2023. Someone left a message in the data.

LIKE strftime Subqueries HAVING SUBSTR GROUP_CONCAT CASE WHEN
"You started with db.tables(). You end with a complete fraud report. Not bad for day one, Alex."

— NEXUS, Season 1 ending

Up in 60 seconds.

Python 3.10+ and PySide6. That's the whole dependency list.

1
Clone the repo Or download the ZIP from the latest GitHub Release
2
Install the one dependency pip install PySide6 — that's it
3
Run the game python main.py — database auto-creates on first launch
terminal
# clone
$ git clone https://github.com/michaelnocito/nexus-sql-mystery
$ cd nexus-sql-mystery

# install
$ pip install PySide6

# play
$ python main.py

✔ NEXUS is running. Good luck, analyst.

SQL Foundations Guide

A standalone beginner SQL guide — SELECT to JOIN to GROUP BY, with plain-English explanations, real-world analogies, and 16 practice exercises across four difficulty tiers. No game required. Just SQL.

📖  Read the Guide →