What changed since you last played
Steam already shows a combined news feed for the games you own, but you cannot search or filter it and the ordering barely makes sense. Here is the feed I built for Playtopia.com.au instead, with the same official posts sorted properly, made searchable and filterable, and everything published since you last played each game marked.
The feed Steam almost gives you
Playtopia is one of the larger hulls in my fleet: a games community site, where members can connect their Steam account and pulls in their whole library. After that the site knows what you own, how many hours you have put into each game, and when you last launched it.
Steam itself does show you a combined news feed for the games you own or have installed. The trouble is what it does not do well. Searching is just narrowing it to one game, or to just the big updates. And the order it arrives in only loosely follows recency, so a minor community post from a busy game sits above a major patch for one you actually care about. It is a feed in the sense that it is a list. It is not one you would choose to sit down and read.
It also does not answer the question you usually have, which is not “what is the latest” but “what has changed since I last played this.” Put a game down for three months, come back, and you want those three months in one place before you start.
So I built my own: My Game Feed. The same source, the official Steam posts, but sorted newest first for real, searchable, filterable, and with every item published after your last session marked.
Deciding what you see first
Why it is here. A member with forty connected games has more news than fits on a screen, and “newest across everything” is not the right answer either: it buries the game you have been playing all week under noise from one you have not touched in a year.
How it works. The feed sorts games before it fetches anything: pinned first, then whichever you played most recently, then whichever you have the most hours in. It loads news for the top eighteen on the first visit, and a button pulls the next batch when you want more. On top of that ordering are four views: For You (everything, in that priority order), Since You Played, Pinned, and Latest. Each game carries a star to pin it to the top and a bell to mute it out entirely, and the two are mutually exclusive. Items you have opened dim down, and a search box filters whatever is currently loaded.
One route, fanned out, failure-tolerant
Why it is here. Steam’s public API gives you news one game at a time
(ISteamNews/GetNewsForApp), not the combined feed. To build a good combined
feed you have to fetch each game and merge them yourself, and the browser
cannot do two dozen cross-origin requests cleanly, cache them, or tidy up
Steam’s markup on its own.
How it works. There is a single server-side Next.js route,
POST /gaming/steam-news. It takes a list of Steam app ids, caps it at 24 per
call, and fans out to GetNewsForApp once per game, all in parallel with
Promise.allSettled so one game that is slow or returns a 500 does not sink
the batch. What comes back is:
- the news items, with Steam’s BBCode and
{STEAM_CLAN_IMAGE}tags stripped out and the text trimmed to a preview length, - deduplicated, because Steam returns the same post under more than one feed label,
- sorted newest first,
- plus a
failedAppIdslist, so the page can say “these did not load” instead of silently dropping them.
Caching is layered: the upstream fetch to Steam is revalidated every 30 minutes
(next: { revalidate: 1800 }), and the response to the browser is private, max-age=300.
The one view that took no code
Why it is here. “Since you played” is the reason the feed beats scrolling Steam, and it is the thing a plain chronological list cannot give you.
How it works. It is a filter, not a feature. Playtopia already stores
lastPlayedAt for every imported game. A news item is “since you played” when
its publish time is later than that timestamp. The feed marks those items and
offers a view that shows only them. No new data, no ranking model, one
comparison.
The rest of the page is presentation: a card layout and a compact monospace log view, the choice remembered per browser; exact Steam publish times in local time rather than “3 days ago”; titles that link straight to the source post; and an artwork fallback chain that tries the stored image, then Steam’s icon hash, then the game’s header image, then gives up and shows an emoji.
Verified vs assumed
Verified. The page is live at playtopia.com.au/news/my-games. It was
built and checked on staging first, through several rounds of revision, with
the live site left alone until the final promotion. The Steam route returns
real, deduplicated items for a test library, and the feed link is in place in
both the desktop and mobile navigation.
Assumed, and deferred on purpose. That members want their owned games in the feed automatically rather than opting each one in. That recency and playtime are a good enough stand-in for importance without any semantic ranking. That keeping pins, mutes and read state in the browser is fine for a first version even though it does not follow you between devices. The durable version, if the feed earns it, is a different shape: one canonical record per Steam app id, news stored once and deduplicated by Steam’s own id, follow and read state in the database, background ingestion that runs per game rather than per user, and catalogue-wide follow so you can track a game you do not own. None of that is built. This version exists to find out whether it should be.
The transferable part: ship the smallest slice that can prove the idea. Reuse the endpoints you already have, keep the new state in the browser, and design the real storage only once people have told you the feature is worth keeping.
-x