# Build brief — a focused alternative to AppGrowKit

> **Verdict:** Partly, if you narrow it · **Buildability:** 45/100 · **Category:** SEO Marketing
> **Source:** https://www.canitbevibecoded.com/appgrowkit
> Independent editorial assessment from Can It Be Vibe Coded? Not affiliated with, endorsed by, or derived from AppGrowKit. Verify current pricing and capabilities before acting.

## Context

**AppGrowKit** — Generate App Store screenshots and track your own keyword ranks without buying a catalog. It currently costs $19/mo.

Split the product in half and the answer changes. The screenshot generator is genuinely one-shottable: it is an image model behind a prompt, and a focused implementation of iteration gets you panels good enough to ship. The tracking half is too, if you only care about apps you own, because Apple's public endpoints hand you ratings, reviews, and chart positions for free. What you cannot build is the part you would be paying for: a catalog of 1.7 million apps across 36 storefronts, with 22 million rating observations and 11 million rank observations accumulated over months. 1.25 million of those apps have more than one day of history and 960,000 have ten days or more, which is the difference between a table of apps and a time series. You can start collecting today, and in six months you will have six months of it. Competitor intelligence, keyword difficulty, and revenue estimates are all reads over that history, so they arrive empty on day one and stay thin for a season. Build it if you track a handful of your own apps. Pay if you need to answer questions about apps you have never opened.

This brief describes a focused, single-operator replacement for the part of AppGrowKit that is genuinely reproducible. It is deliberately narrower than the product it replaces, and it says so in writing. Build the useful core; do not pretend to have rebuilt the rest.

## What you are building

Generate App Store screenshot panels from my real app screens with an image model, and poll Apple's public endpoints daily for my own apps' ranks, ratings, and reviews.

- Automate a bounded research or reporting workflow using permitted data sources.
- A responsive interface with real empty, loading, success, and error states.

## Requirements

### Functional

- SQLite or Postgres.
- A scheduler that actually runs daily.

### Data and integrations

- Image model API key (fal.ai or OpenAI).
- Vision model API key for the QA pass.

Each of these needs a real account, credential, or quota. Set them up before writing feature code.

### Non-functional

- Accessibility: semantic markup, labelled controls, visible focus, and reduced-motion support.
- Security: server-side secrets, validated input, and no credentials in the client bundle.
- Reliability: retries with backoff on external calls, and a clear failure state when a provider is down.
- Portability: the operator can export their data and leave without losing it.

## Implementation brief

Build me an App Store screenshot generator and a personal rank tracker to replace AppGrowKit, single user, my own apps only.
Use Node 22, TypeScript, SQLite (better-sqlite3), sharp, and a small React frontend on localhost. Do not offer alternative stacks.

- Screenshots: I upload my real app screens. Compose a 3-panel App Store set by sending each panel to an image model (fal.ai key in .env), passing my screens as reference images so the in-phone UI stays faithful.
- Send every render back to a vision model with a checklist: garbled text, elements sliced by a panel edge, invented star ratings or award badges, phone hardware where the style said none. If it fails, re-render once with the failures pasted in as corrections.
- Composite the headline as real text with sharp, not model-drawn glyphs. Resize output to exactly 1290x2796 (iPhone) and 2064x2752 (iPad).
- Tracking: a config file lists my App Store track IDs and the keywords I care about. A daily job hits Apple's public endpoints (itunes.apple.com/lookup, /search, the RSS chart feeds, and the customerreviews feed) with a real User-Agent and one request every 1.5 seconds.
- Store every poll as a row with a timestamp, never an upsert. Rank history is the whole point and you cannot recover a day you overwrote.
- The page shows my apps' rating and rank over time, new reviews since I last looked, and where I sit for each tracked keyword.
- Out of scope: competitor intelligence, keyword difficulty scores, and revenue estimates. Those need a catalog of hundreds of thousands of apps with months of history. Say so in the README rather than faking them from a single day of data.
- README: the two API keys, cost per screenshot set, and a warning that the tracker is worth little until it has been running for a month.

## Delivery standard

- Inspect the repository first, then write a short implementation plan before writing code.
- Deliver the smallest complete end-to-end workflow first; every primary control must work against persisted data.
- Use real validation and storage; never substitute fake dashboards, decorative controls, hard-coded success states, or mock integrations.
- Include responsive layouts plus genuine empty, loading, success, validation, and failure states.
- Keep secrets server-side in environment variables, provide .env.example, and never commit credentials or user data.
- Add structured logs around every external call and return actionable errors without leaking sensitive details.
- Write unit tests for the core logic and one automated test of the main user journey.
- Finish with a README covering setup, architecture, data location, backups, tests, deployment, and known limitations.

## Acceptance criteria

- [ ] A clean install starts the app using only the README and .env.example.
- [ ] The primary journey works from first visit through saved result, reload, edit, export, and deletion where applicable.
- [ ] Invalid input, missing configuration, provider failure, and an empty database each have a usable state.
- [ ] The interface works at 390px and 1440px, is keyboard navigable, and shows visible focus on every control.
- [ ] Tests, type checking, linting, and a production build all pass with no ignored failures.
- [ ] No part of the interface implies a live integration, security guarantee, or scale capability that was not actually built and verified.

## Non-goals

Do not build these, and do not claim to have replaced them:

- Months of rank, rating, and keyword history you cannot backfill.
- The 1.7M-app, 36-storefront catalog behind competitor lookups and keyword difficulty.
- Revenue and download estimates, which are calibrated against that catalog.
- Keyword volume and competition scores, which need a corpus to be relative to.
- The MCP server that answers ASO questions from Claude, Cursor, or ChatGPT.
- An accuracy pass on generated screenshots: the QA critic, best-of-2 scoring, and exact-size output.

## What you still own after launch

- Secure credentials, rotate secrets, and handle provider rate limits.
- Run migrations, backups, restores, and dependency updates.
- Test the critical journey after every model, API, or hosting change.
- Monitor failures and fix the edge cases a first prompt will miss.

## Risk

**Operational risk.** The code is achievable; dependable data, integrations, and ongoing operations are the real cost.

Editorial confidence in this assessment: high. No reviewed project implementation is linked yet.

## Prior art

Working open-source software you can read, fork, or borrow from before starting:

- [SerpBear](https://github.com/towfiqi/serpbear) — Self-hosted rank tracker for keyword sets you own. Web SEO rather than App Store, but the same daily-poll-and-chart shape
- [app-store-scraper](https://github.com/facundoolano/app-store-scraper) — Node library for Apple's public lookup, search, chart, and review endpoints. This is the data layer a DIY tracker is built on

---

Generated by [Can It Be Vibe Coded?](https://www.canitbevibecoded.com) · Full report: https://www.canitbevibecoded.com/appgrowkit
