Thanks for considering a contribution. This document covers the basics. For architecture and day-to-day development, see CLAUDE.md.
- Report a bug — open an issue with a reproduction (crawl logs, screenshots,
package.json/ OS versions). - Suggest a feature — open a GitHub Discussion first so we can scope it before code is written.
- Add an engine — subclass
BaseCrawler(see "Adding a platform" in README.md). - Improve the dashboard — the grayscale theme is intentional; design PRs should preserve it.
- Fix typos / docs — always welcome.
git clone https://github.com/hellowalt/aeo-radar.git
cd aeo-radar
nvm use # uses .nvmrc (Node 20)
npm install
cd web && npm install && cd ..
npx playwright install chromium
npm run db:pushEdit src/config/brand.ts with a throwaway brand before running npm run seed / npm run crawl.
npx tsc --noEmitpasses (root).cd web && npx tsc --noEmitpasses.cd web && npm run buildsucceeds.- Your change doesn't add hardcoded brand names, keywords, or domain-specific copy. Everything brand-specific lives in
src/config/brand.ts. - No commits to
data/,auth/,.env, or any profile directory.
Use Conventional Commits:
feat: add gemini crawler
fix: handle stop-button absent on ChatGPT o1 models
doc: clarify macOS TCC gotcha in 0002
Types we accept: feat, fix, doc, refactor, perf, test, build, ci.
This is the most common contribution. A good PR:
- Implements a subclass of
BaseCrawlerinsrc/crawlers/<name>.ts. - Adds the name to
LLM_PLATFORMSinsrc/types.tsand a case tocreateCrawler()insrc/pipeline/runner.ts. - Adds an entry to
PLATFORM_COLORSinweb/src/lib/theme.ts(grayscale). - Includes a selector-stability note in the PR body: which DOM selectors you used, how you confirmed they're stable, how a reader should re-verify if the engine ships a UI change.
- Documents any workarounds (e.g.
launchChannel: 'chrome') with a comment pointing to the decision doc or the symptom you fixed.
- TypeScript strict mode.
- No mass-reformat PRs — keep diffs minimal and scoped.
- Comments: only when they explain why. The code already tells the reader what.
Be kind. We follow the Contributor Covenant v2.1.
By contributing you agree that your contributions will be licensed under the MIT License.