Open-Source Cold Email & Warmup Platform
Warmbly는 메일함을 예열하고 캠페인 전송·답변 triage를 지원하는 오픈소스 콜드 이메일 플랫폼입니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Auto-refreshing SEO dashboard for trocglobal.com, built on the Ahrefs API v3 and Google PageSpeed Insights.
GitHub Actions (every 6h) → scripts/fetch-data.mjs → data/latest.json → index.html
▲ ▲
encrypted Secrets server-side only
The page reads a committed JSON file. It never talks to Ahrefs directly.
Because the Ahrefs API is metered and paid, and a browser fetch requires the token to be present in client-side JavaScript — where any visitor can read it and spend your quota. There is no way to hide a key in a static page.
So data refreshes every 6 hours rather than on page load. The dashboard shows its own last-updated timestamp so the freshness is never ambiguous. If you need true on-demand refresh, the fix is a small serverless proxy (Cloudflare Worker or Vercel function) that holds the token — not client-side fetching.
Settings → Secrets and variables → Actions → New repository secret
| Secret | Required | Purpose |
|---|---|---|
AHREFS_API_TOKEN | yes | All Ahrefs metrics. Get one at https://ahrefs.com/api |
GOOGLE_API_KEY | no | Core Web Vitals via PageSpeed Insights |
GOOGLE_SERVICE_ACCOUNT_JSON | no | Search Console clicks, impressions, CTR |
Never put these in a file. They belong only in Secrets.
Search Console gives measured clicks instead of Ahrefs' modeled estimates, and the API is free and unmetered — no quota risk. A plain API key will not work:
401 — API keys are not supported by this API.
Expected OAuth2 access token or other authentication credentials.
You need a service account:
client_email from that file (…@….iam.gserviceaccount.com)GOOGLE_SERVICE_ACCOUNT_JSON secretThe connector auto-detects whether the property is registered as
sc-domain:trocglobal.com or https://trocglobal.com/. If the service account
has no access, the run logs exactly which properties it can see.
Search Console data lags 2–3 days. That is Google's pipeline, not this dashboard — no tool can show real-time GSC data. The connector requests up to three days before today for that reason.
GitHub Pages: Settings → Pages → Source: GitHub Actions.
Vercel: import the repo at https://vercel.com/new. vercel.json is already
configured — Framework Preset: Other, no build command, output directory ..
Auto-refresh still works on Vercel, because the chain is:
GitHub Actions (daily) → fetches APIs → commits data/latest.json
↓
that commit is a push to main
↓
Vercel redeploys automatically
Two things to know:
configure-pages / upload-pages-artifact / deploy-pages steps from the
workflow — the fetch-and-commit steps are what matter.Actions → Refresh SEO data → Run workflow. After it completes, the site
publishes and data/latest.json is committed.
These are properties of the data, not bugs. They are surfaced in the dashboard footer.
offset parameter — every page of results returns the same rows, so
pagination is impossible. That top 100 still covers roughly 90% of traffic, but
the long tail is genuinely unmeasured.is_branded flag is unreliable for this domain — it marks
"walmart wallpaper" as branded and "troc" as non-branded. The split is therefore
computed from an explicit regex in scripts/fetch-data.mjs; update BRAND_RE
if the brand terms change.401 — API keys are not supported by this API) and requires OAuth or a service
account. Adding real click and impression data means creating a service account
and granting it access in Search Console.An earlier dashboard reported "100% non-branded — strong organic discovery" while holding zero click data. This one refuses to render a percentage when the sample is empty, and says so instead. An empty dataset is not evidence of 100% of anything.
AHREFS_API_TOKEN=xxx node scripts/fetch-data.mjs # requires Node 18+
python3 -m http.server 8000 # then open localhost:8000
Serve over HTTP rather than opening index.html directly — fetch() is blocked
on file:// origins.