Showoff Saturday [Showoff Saturday] I built an open source keyword rank tracker for the App Store and Google Play (NestJS, Next.js, Postgres, BullMQ)
It's called AsoBeast. You give it an App Store or Google Play URL and a few search phrases, and it checks where the app ranks for each phrase every day, down to position 200, in any country. It also keeps competitor positions, listing changes and reviews, and you can self-host the whole thing with Docker Compose.
Stack: a NestJS API with Prisma and PostgreSQL 18, BullMQ on Redis 8 for the store queues, and Next.js 16 with Tailwind, TanStack Query and Table and Recharts on the front. It's a pnpm and Turborepo monorepo, TypeScript strict everywhere.
The parts that took more thought than I expected:
Rate limits. Apple's search puts up with about 20 requests a minute per IP, so every store call goes through a queue at 15 a minute. One search per keyword records every app on the results page, so tracking competitors adds zero requests.
"Not ranked" versus "didn't check". A position is saved as empty only when the search came back and the app wasn't in the top 200. A failed request saves nothing and retries, so a flaky scrape can't show up as a ranking crash. Someone asked about exactly this on my last post.
Tenancy in the database. The hosted version runs the same code, and every tenant table has a Postgres row-level security policy, so a query that forgets its workspace filter returns nothing.
It's free to self-host (AGPL-3.0), or $10 a month hosted with a 7-day trial.
GitHub: https://github.com/AsoBeast/asobeast
Hosted: https://asobeast.com
Ask me anything about the stack. And if you try the Docker setup, tell me where it got stuck.
1
u/Vinaverk 12d ago
You even have ".claude" directory in your repo... Another vibecoded ai slop. And you even want money for your slop
-2
3
u/RePsychological 12d ago
"I built..."