-
-
GIF
Describe It, We'll Find It
-
GIF
Extension saves Games Right From YouTube
-
Paste a Link, Get the Game
-
GIF
From Trailer to Library in Seconds
-
Everything, One Tap Away
-
Your Squad's Highlight Reel
-
Quick-view any game and save it for later
-
Your Whole Catalog, One Search
-
Your Gamer Card
-
GIF
Never Miss a Launch Day
-
Prysm Taps You on the Shoulder
-
Prysm Snapshot
-
GIF
-
GIF
-
GIF
Friends feed
Inspiration
Everyone we know who plays games has the same problem. They don't lack games, they have too many. A Steam library of 400 titles, half never launched. A Switch full of impulse buys. A camera roll of screenshots from TikToks with "what game is this??" in the comments. And every evening the same twenty minutes of scrolling before giving up and replaying something they've already finished.
The tools that exist for this are either websites built for desktop, or spreadsheets. Letterboxd showed how much people enjoy logging, rating and sharing films on their phone. We wanted that for games, built around where people actually find games now, which is short-form video, and where they already own them, which is their Steam account.
So Prysm had two jobs from day one:
- Get the game in with no effort, whether you found it in a TikTok, remember it only vaguely, or already own it on Steam.
- Make getting through the backlog feel like fun, not a chore: decide what to play, log finishing it, and do it alongside friends.
What it does
Save a game the moment you find it.
- Share a TikTok or YouTube link to Prysm from the system share sheet. Prysm reads the caption, hashtags or title, suggests the game, and adds it when you confirm, keeping the link so you remember where you found it. We tested this on 21 real gaming TikToks, and it confidently named a game for 19 of them.
- Save from Chrome too. Long videos get watched on a laptop, so Prysm for Chrome puts a Save to Prysm button on YouTube, TikTok and Instagram videos. Click it, confirm the game, and it's in your library on your phone. The extension runs in your own browser, so it can read captions our server can't fetch, which is how Instagram works on desktop. Available on the Chrome Web store
- Search about 92,000 games, with typos and shorthand handled: "botw", "gta sa" and "#eldenring" all find the right game. All twelve of our abbreviation and hashtag test cases land in the top five.
- Vague search, for when you only half remember. Type "feudal japan, guy with a metal arm" and Prysm works out the game. We tested it on 77 real posts from r/tipofmyjoystick, a subreddit where people ask exactly this. Plain keyword search got 0% of them right. Vague search gets the first answer right 42.3% of the time, and has the right game in its top five 49.3% of the time.
Bring in the library you already have.
- Steam import: sign in on Steam's own page (Prysm never sees your password), and your owned games arrive with hours played. Your PlayStation library can be imported too. On Android, Prysm can also find the games installed on your phone.
- Onboarding sets you up quickly: pick your platforms, add three games, and get suggested players who share your taste. Suggestions are ranked by games in common.
Organise it, finish it, rate it.
- Every game is Playing, Backlog, Completed or Paused, with a 1–10 rating, notes and hours.
- Each game page shows time to beat and a critic score.
- Release-day tracking: watch an upcoming game and Prysm notifies you on the day it releases. If the only date announced is "Q4 2026", Prysm shows "Q4 2026" and never sends a false alert.
- Seasonal challenges (for example "beat three RPGs in October") count your progress straight from your library.
- Passport: achievement stamps for milestones like games logged and games beaten. Each stamp is a 3D medal you can tilt with your finger.
- Home-screen widgets on iPhone and Android: Up Next shows the game you're playing, Release countdown shows days until your next wishlisted release, and Roll the backlog picks tonight's game with one tap on the widget, without opening the app.
Do it with friends.
- Follow people and see a friends feed of posts about games, with images, polls, reviews, reposts and @mentions. Posts can be public or friends-only, and "friends" means you follow each other.
- Profiles show games in common, library size and hours played.
- Push notifications (through OneSignal) for new followers, likes, comments, reposts, mentions, and release days.
Prysm Pro. Prysm is free for a library of up to 50 games, supported by a few clearly labelled ads. Pro ($9.99/month or $79.99/year with a 7-day free trial, or $99.99 once for lifetime) removes the limit and the ads, and gives unlimited backlog rolls. The paywall appears after an import, not before it: Prysm shows you the result first (for example, "We found 412 of your 468 games"), then offers to keep all of them.
How we built it
- App: React Native with Expo (SDK 57) and TypeScript, Zustand for state, React Navigation. The iOS widgets are native SwiftUI/WidgetKit, and the widget's roll button is an App Intent. Android widgets use react-native-android-widget. Sharing from TikTok works through a share extension.
- Monetisation: the RevenueCat SDK (
react-native-purchases) handles offerings, purchases and restore, with oneproentitlement. A RevenueCat webhook updates asubscriptionstable in our database, and Postgres enforces the 50-game limit itself, so a modified app can't get around it. - Backend: Supabase (Postgres with Row Level Security, Auth, Storage) and 23 Deno edge functions.
pg_cronruns four background jobs: push delivery every minute, release-day checks every hour, Steam play-activity sync every five minutes, and vague-search processing. - Game data: our own catalog of 91,806 games built from IGDB, with 65,908 alternative titles and 168,723 platform links, so search is a local database query, not an API call.
- Vague search: a language model (DeepSeek) suggests candidate games, and each one is checked against our catalog, so every answer is a real game rather than a made-up one.
- Push: OneSignal. Each user's OneSignal ID is their Supabase user ID, so the backend can address any user without keeping a table of device tokens.
- Chrome extension: Manifest V3, built with WXT and plain TypeScript. It is a second client for the same two edge functions the phone's share sheet uses, so it has no matching logic of its own. The only backend change was letting
share-resolveaccept text read from the page. Sign-in uses an emailed 6-digit code and never creates an account. The session lives only in the extension's background worker, so no web page can see the token, and the button and panel sit in a closed shadow root, so the video site can't restyle or read them. - Web: a Next.js site on Vercel with the landing page, privacy policy, account-deletion page, support page and public docs.
Challenges we ran into
- A bug that returned only part of the data, with no error. Our first Steam import quietly stopped at 1,000 rows. The database API caps function results at 1,000 rows without saying so, and a test account's library came back 56% complete. We changed those functions to return JSON, and now check every endpoint that returns a list for the same cap.
- A second partial-data bug a day later. A setup script paged through the catalog without a fixed sort order. Each run processed a different two thirds of the games and reported that it had finished. Since then, every paged read in the codebase has to sort on a unique column.
- Matching a TikTok caption to one game is harder than it sounds. Ten "Standard Edition" alternative titles were matching almost any search that included those words, and one confidently wrong match made it into our test results before we caught it. We now measure matching against real links, not links we wrote ourselves.
- Getting game data at all. IGDB requires a Twitch developer account. Twitch's two-factor sign-up rejected our phone numbers, and the fix was an account created from another country.
- Subscriptions that are always right, even when RevenueCat's webhooks arrive late or twice. A retried cancellation can arrive after the renewal that replaced it. We store
pro_until(the date access ends), not a yes/no flag, and handle the webhook in a way that makes a late or duplicate event harmless. - Being honest about release dates. Many games only have "2026" or "Q4" as a release date. We keep track of how precise each date is, so no one gets a "released today" alert for a game that was never given a day.
Accomplishments that we're proud of
- The paywall appears after the moment the app proves its value. Nobody is asked to pay before they've seen their own library in Prysm.
- Everything is tested against the live system, not just deployed. Database changes are checked on the live database inside a transaction that is rolled back afterwards, and we run Supabase's security checks after every schema change. Those checks caught a real privacy hole before launch.
- We measure the numbers we publish. The 19 of 21 TikTok figure and the 42.3% vague-search figure come from real inputs, and we re-measure them after every change that could affect them.
What we learned
- "Done" needs a number next to it. The two worst bugs we found both looked finished. Now "done" means "counted, and the count matches."
- Put the price after the moment of value, not before it. RevenueCat's own data showed us that the best-converting paywalls follow a moment where the app has just proved itself. For us, that moment is the import.
- Everything you promise on a paywall is something users will look for. We removed features from the pitch that weren't finished rather than let the paywall promise them.
What's next for Prysm
Xbox and Grouvee imports (the Grouvee importer is scoped, and matched 75.9% of games in testing), sharing from Facebook, the finish card for sharing a completed game, and more seasonal challenges.
Built With
- expo.io
- igdb
- onesignal
- react-native
- revenuecat
- supabase
- typescript
- zustand

Log in or sign up for Devpost to join the conversation.