Day 06: Gammoridin Game Launcher: Defining a ‘Game Record’ That Never Lies
In Day 06 of the Gammoridin game launcher devlog, we lock down durable game identity in SQLite so rescans don’t create duplicates. Follow the build at gammoridin.com.
Updates, progress logs, and myth-tech notes.

In Day 06 of the Gammoridin game launcher devlog, we lock down durable game identity in SQLite so rescans don’t create duplicates. Follow the build at gammoridin.com.

Today was all about data identity: defining what makes a “game” real in the Codex so scans don’t create haunted duplicates, mis-linked statuses, or wandering play sessions. I locked in a practical identity spine (display vs. identity vs. launch vs. state), set a dedupe hierarchy led by Steam AppID, and established the core contract: scanning can get smarter over time, but it must always upsert into the same durable record.

A launcher without memory is just a pretty illusion—so today I sealed Gammoridin’s truth in SQLite. The Codex now has a lean four-table core (games, metadata, play sessions, settings), scan-safe upserts, and persistent backlog ordering via `sort_index`, all guarded behind Rust/Tauri commands for a clean local-first source of truth.

> Today we sealed the Sanctum boundary: React stays a presentation layer, and Rust holds the sharp tools—scanning, launching, play tracking, SQLite writes, and IGDB enrichment. The flow is now clear and intentional: **UI → commands → modules → SQLite**, with no “just let the frontend do it” shortcuts. ✅ **Shipped:** a codified rhythm for the whole launcher — **Scan → normalize → upsert → list → render** for the library, and **Launch → track → persist → refresh UI** for play sessions. ⚠️ **Dragon spotted:** scan quality matters more than coverage. False positives break trust fast, so the next pass is stricter heuristics and cleaner filtering—without cracking open the local-first Codex.

The Codex used to work… but it required a weird little ritual: refresh → rescan → wait → repeat. Today we shipped a quieter, safer approach—**progressive background Codex sync** that fills missing covers + metadata over time without freezing the UI or making you babysit the Sanctum. It runs when it should (boot, after setup, after scan), stops when it’s done, and **seals itself** if IGDB isn’t available. Plus: the Backlog Board is now canon-aligned with five visible columns and SQLite-backed ordering that won’t forget your intent.

A launcher is a door—but your library shouldn’t be a scavenger hunt. Gammoridin is a local-first Windows game launcher + codex built to unify Steam, Epic, and standalone installs into one clean Sanctum that doesn’t spy on you. It tracks what you own, what you intend to play, and what you actually played—powered by a durable SQLite “Codex,” a drag-and-drop Backlog Board, and optional IGDB enrichment cached locally. Day 01 plants the banner: one library, one backlog, one click to play—fast, offline-capable, and built on trust.