SaaS product SaaS · Discord bots
UA Express

StatStation: daily TS2 union stats, posted to Discord

A Discord bot that posts a union's TrainStation 2 report every morning on its own: top players, a total SP trend with a 7-day projection, overtake calls and a per-player daily board. Three commands to set up, then nobody has to touch it again.

Year 2026
Key result
06:30

the union report is already in the Discord channel every morning, on the server's own schedule, with no command and no admin to run it

Challenge and solution

Challenge

TrainStation 2 standings are public, but living with them day to day is awkward: the leaderboard only shows the current snapshot, there is no history, and working out whether you're catching the union above you meant somebody copying numbers into a spreadsheet every evening. In communities that always rests on one dedicated admin, and it dies the moment they get tired of it.

The brief was a service that collects the daily figures itself, keeps the history, computes trends and projections, and drops a finished report into the union's Discord channel, where the community already is. Plus monetization without running a payment stack: the team wanted neither a merchant account nor card handling of their own.

Solution

We built StatStation as a standalone SaaS product inside Discord. The whole configuration collapses into one concept, the feed: one union, one channel, one time of day. An admin runs three commands (/setup timezone, /setup add, and /setup demo if they want the free digest) and never returns to the settings: the report posts itself on schedule, and there is deliberately no "post now" button.

The daily report carries a headline with the top players, a total SP trend chart with a 7-day projection, overtake calls against the nearest unions, and a per-player board for the day. Charts ship as attachments, so before posting the bot verifies its four channel permissions (View Channel, Send Messages, Embed Links, Attach Files) and says exactly which one is missing instead of failing quietly.

Billing went to Discord Premium Apps, where Discord is the merchant of record and subscriptions start and cancel inside Discord itself. The tiers differ only in how many unions you can track (Solo / Alliance / Federation); extra channels cost nothing, and neither hitting the cap nor letting a subscription lapse deletes anything. Feeds are preserved and the free top-50 digest keeps arriving.

Data minimization was its own workstream: the bot requests the Guilds intent only and stores nothing but feed settings, meaning server, channel, followed unions, post time, timezone and subscription state. No message content, no member lists. Figures come from public leaderboards; it never touches a game account and changes nothing in the game. Alongside the product we shipped the landing page and the documentation set: Docs, Support, Terms, Privacy, Refund.

Tech stack

TypeScript discord.js Prisma PostgreSQL node-cron Fly.io Cloudflare Docker
View live
statstation.uaex.pp.ua
Open website
Ready to start?

Could your store be the next case study?

Tell us about the project and we'll come back with an estimate.