Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
ASO Trend Radar: cuvinte-cheie noi si in crestere din App Store
Translation pending
MarketingJavaScript · CSSGitHub @Meliora-AppsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Arată ce cuvinte-cheie caută lumea în App Store (US, GB, DE, FR, IT, ES): ce e nou, ce e în creștere, ce are cel mai mult trafic, pe categorii.
Scorurile sunt estimări din sugestiile App Store, nu volumul oficial Apple.
Specificația: ../02-specificatie-trend-radar.md.
Totul rulează în Convex (producție), singur, în fiecare zi. Site-ul: https://trend-radar.meliorapps.uk (logare Google, doar emailurile aprobate). Nu mai e nevoie de Mac sau de GitHub Actions.
convex/collect.js, cron zilnic 03:17 UTC): cele 6 țări în paralel, fiecare pe două benzi
care merg în paralel: cuvintele (sugestii, extindere, clasificare) și app-urile (topuri, lansări noi, lookup,
precomenzi). Lucrul e pe bucăți de ~4 minute (o acțiune Convex are maxim 10 minute); starea fiecărei benzi e
în tabela jobs (src/collect/worker.js), iar un paznic (cron la 10 minute) reia orice bucată căzută.
Cererile către Apple au un ritm comun pe servicii (hints, RSS, lookup, search: PACE în convex/collect.js),
pentru că toate ies prin aceeași adresă IP: la un 429 toți fac o pauză de 20 s și ritmul se rărește, apoi
revine încet; ritmul atins trece de la o bucată la alta (runs.pace), iar nicio cerere nu pornește după
sfârșitul bucății (rămâne pentru următoarea). Căutarea iTunes (clasificarea, precomenzile) are limita Apple de
~20 de cereri pe minut de pe o adresă (peste ea: 403): merge cu o cerere la 3 s (după un 403: pauză și cel mult
una la 6 s), iar pașii cu căutare se încheie la 30 de minute de la pornirea zilei (fiecare are măcar 3 minute;
întâi cuvintele noi și cele mai căutate). Dacă Apple refuză tot (5 refuzuri la rând într-o țară sau 12 în toate
țările), pașii cu căutare se sar; ziua rămâne completă (cuvintele și app-urile se culeg oricum).
Durata depinde de cât lasă Apple: cel mult ~30 de minute (plus calculul), dacă sugestiile merg cu ~5 cereri/s.convex/process.js, pașii în convex/calc.js), pe pași mici, fiecare în limitele unei
acțiuni Convex (10 minute, 512 MB de memorie, disc temporar mic); între pași totul stă în fișiere (Convex storage):
raw, aceleași fișiere
ca în data/); baza țării (SQLite, src/local/db.js, ~80 MB; copia ei e starea db/<CC>, iar prima dată
se face din arhivă) primește fișierele noi; apoi planul de mâine (plan/<CC>) și partea țării din export:
listele ei și bucățile pentru fișierele comune (tabela pieces, src/export/split.js);meta + terms, listele ALL (5 grupe), term/* și app/* (câte 8 grupe);src/export/build.js; testul
test/split.test.js).src/compute/plan.js): ce începuturi de cuvinte se extind și ce se clasifică.src/metrics/ (funcții pure, testate).web/ (Vite) + interfața din src/local/public/; web/remote-api.js citește fișierele din Convex.| Comandă | Ce face |
|---|---|
npm test | testele |
npx convex run --prod collect:start '{"manual":true}' | pornește colectarea de azi acum (dacă nu a pornit) |
npx convex run --prod collect:start '{"manual":true,"smoke":true,"date":"2000-01-01"}' | probă scurtă (nu intră în arhivă) |
npx convex logs --prod | jurnalul în timp real |
npx convex run --prod calc:last | starea ultimului calcul, pe pași (durata, reluările, erorile) |
npx convex run --prod process:run '{"date":"YYYY-MM-DD"}' | refă calculul zilei (din arhivă) și publică exportul |
npx convex run --prod store:note '{"date":"YYYY-MM-DD","log":["..."]}' | o notă în jurnalul zilei (ex. după un calcul cu remote-calc.js) |
CONVEX_SITE_URL=... INGEST_SECRET=... node src/export/remote-calc.js | rezervă: face calculul zilei pe acest calculator (bazele țărilor din Convex sau din arhivă, fișierele noi din arhivă, planul de mâine, copiile bazelor înapoi în Convex) și publică exportul |
CONVEX_SITE_URL=... INGEST_SECRET=... npm run upload | urcă în arhivă fișiere din data/ (ex. o zi colectată de pe alt calculator cu node src/collect/cli.js) și recalculează |
Starea zilei: tabela runs din dashboard-ul Convex (status, jurnal, ritmul cererilor); a calculului: tabela calcs.
Variabile în Convex (producție): AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRET, JWT_PRIVATE_KEY, JWKS, SITE_URL, INGEST_SECRET,
COLLECT_ENABLED=1 (doar în producție: pornește cron-ul colectării). Vercel: CONVEX_DEPLOY_KEY.
Lista de acces (din terminal):
npx convex run --prod admin:allow '{"email":"[email protected]"}'
npx convex run --prod admin:revoke '{"email":"[email protected]"}'
npx convex run --prod admin:list
În Google Cloud, clientul OAuth (Web) are redirect URI https://<deployment>.convex.site/api/auth/callback/google. DEV_LOGIN_SECRET se setează doar pe un Convex local, pentru teste fără Google (npm run web).