Search and vague search
90,000 games, one query
Overview
Prysm searches its own catalog of about 90,000 games (September 2026), so a search is one database query, not a round trip to a vendor. It handles typos, abbreviations, regional names and edition suffixes, and ranks by how well a title matches and how well known the game is. You can filter by release date, genre or device family (PlayStation, Xbox, Nintendo, PC, mobile) and sort by best match, popular, rating, recent or A to Z. A “popular with friends” list shows the games most common across the libraries of people you follow. When you can only describe a game, vague search takes over.
How it works
- 1
The catalog holds main games only. Expansions, bundles and DLC are filtered out, so Elden Ring returns one row, not five. It also holds around 66,000 alternate titles and about 169,000 game-to-platform links, seeded from IGDB.
- 2
Normalisation runs on every catalog insert through a trigger and on every incoming query, so both sides compare like with like. “The Witcher III: Wild Hunt – Game of the Year Edition” becomes “the witcher 3 wild hunt”.
- 3
Trigram similarity finds close titles. Alternate titles cover abbreviations and regional names, so “botw”, “gta 5” and “#eldenring” all resolve.
- 4
Ranking blends match quality with popularity, measured by IGDB's rating count. The blend changes order only: it never changes the match score, so a popular game cannot appear for a query it doesn't match.
- 5
Genre filters come from the backend, so the list only offers genres that actually have games. Opening a game adds it to your recently viewed list.
- 6
Vague search runs as a job. The app posts a description and polls; a scheduled sweep sends queued descriptions to a language model (DeepSeek), checks its answers against the catalog and caches them.
Architecture flow
- 1
Your text
elden ring, botw, #eldenring
- 2
Normalise
The same rules as the catalog titles.
- 3
Fuzzy match
Trigrams plus alternate titles.
- 4
Popularity blend
Changes order only.
- 5
Results
No third party was involved at any point.
What a game looks like to the app
| Field | Meaning |
|---|---|
id, title, slug | Identity. The slug is IGDB's and stable, so share links can use it |
cover, abbreviation, colorKey | Cover art, and a short label and colour used when there is no art |
releaseDate, releasePrecision | The date, and whether it is a real day, a month, a quarter or a year |
genres, platforms | Genre names and the platforms the game is on |
criticScore | IGDB's aggregate of critic scores. It is not Metacritic |
timeToBeatHours, timeToBeatCount | Typical playthrough length, and how many player submissions it rests on, so “12 hrs (2)” never looks as solid as a figure built on two hundred |
sessionFit | High, medium or low: how well a game suits a short sitting, from its genres and keywords. Roguelikes, racing, fighting and puzzle games are high; RPGs, strategy and long narrative games are low |
summary | IGDB's description, untruncated |
Key decisions
A local catalog, not a live API
A call to IGDB on every keystroke would be slow, burn rate limits, and fail whenever IGDB did. IGDB also refuses calls from browsers and apps, so its token can't leak. Seeding the catalog ahead of time makes search fast, keeps it independent of the vendor, and lets the same normalisation run on both sides of every comparison.
Honest data fields
releasePrecision and timeToBeatCount exist so the app can be honest: a date is only a day when the precision says so, and a time to beat is shown with the number of submissions behind it.
Weights, not filters
The backend's roulette draw uses session fit to re-weight, never to filter. Filtering a backlog to “games under two hours” gives everyone the same three short indies forever, and never the long RPG they are 40 hours into. The app's roll card currently uses a plain random pick from your Backlog.
Model calls are queued and cached
Model calls are the one part of Prysm that costs money per use, and answers take a median of about 26 seconds. A queue, a sweep and a cache keep both the cost and the wait under control.