尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Automated pipeline that pulls new articles from a curated list of marketing, advertising and consumer-research journals, uses Claude to write a pitchable digest for two audiences, fact-checks its own output against the abstracts, and publishes every run to a browsable dashboard — https://marketing-research-digest.vercel.app
Built on senior-research-digest: same shape, same scoring idea, same dashboard (the freelance-opps design system by way of AgingWire). What differs is below in Where this differs.
.github/workflows/daily-digest.yml runs scripts/main.py once a day. The cron
asks for 10:07 UTC (5:07am CDT, 4:07am CST); GitHub queues scheduled runs, so expect it hours late
(2.5 to 4.5 hours is typical across these repos, 11.5 the worst seen). Each run:
config/digest_config.json
(a broad day plus 13 topics, by day of year), or the focus input of a
manual run.openalex.py) for everything the 177 indexed journals
published in the last 60 days, narrowed on topic days by a boolean
title-and-abstract query from topics.py.screening.py) down to 40 articles: drops front matter, articles
with no abstract, off-topic articles in the adjacent journals, and anything an
earlier digest already wrote up; ranks the rest by journal rating, recency and
topic relevance, at most three per journal. Every drop is counted.digest_generator.py): Claude picks the newsworthy
studies and returns one record each — headline, the study, why it matters, an
angle for marketers, an angle for general readers, caveats. Journal, date and
DOI are stamped on from OpenAlex, not written by the model.fact_checker.py): a second pass compares every entry
with its abstract and returns a verdict and issues per study.web_coverage.py, Google News via
SerpAPI). Skipped, and labelled as skipped, without SERPAPI_API_KEY.trends.py): continuity with the last run on the same topic,
a cross-study feature pitch with outlets, and a story idea per study, plus a
per-topic memory file in topic_memory/.outputs/ — the digest and fact check as markdown for
people, and a .json run record — then rebuilds docs/data/.marketing-research-digest is connected to this repo and builds every commit
on main; vercel.json serves docs/ with no build step and no token in
the workflow. The bot commits under Meggers1982's GitHub no-reply address
on purpose: on Vercel's Hobby plan a private repo only deploys commits whose
author is on the team, and any other identity gets the deploy BLOCKED.Every Claude call (steps 4, 5 and 7) goes through the Message Batches API
(scripts/llm.py): half price, answered asynchronously, usually within minutes.
The digest and fact-check batches each go in as a single submission. A
submission waits up to 45 minutes, then is canceled and whatever did not finish
runs live at full price, so a slow day costs money, not the digest. The job cap
is 240 minutes to allow for that. Set DIGEST_USE_BATCH_API=0 to send
everything live instead.
python -m pytest tests/ -q runs first in the same workflow. It touches no API.
scripts/resolve_sources.py and stored in config/journals.csv. Fourteen rows
on the list have "unverified" in place of an ISSN and two had theirs mangled by
a spreadsheet; a source ID survives both.outputs/*.json holds exactly
what the model returned; the markdown is rendered from it and nothing parses it.Secrets (Settings → Secrets and variables → Actions):
| Secret | Needed | What happens without it |
|---|---|---|
ANTHROPIC_API_KEY | yes | the run stops before OpenAlex |
SERPAPI_API_KEY | no | coverage is not checked; no study can band as "Lead" |
OPENALEX_API_KEY | no | anonymous limit of 1,000 calls a day; a run uses about 15 |
Run it by hand: Actions → Daily Marketing Research Digest → Run workflow, with an optional topic.
config/digest_config.json for the rotation; scripts/topics.py
for each topic's OpenAlex query and tag terms. A rotation topic must exist in
both — a test checks it.config/journals.csv (it is a copy of
~/Documents/Marketing Research Journals/Marketing Research Journals.csv plus
two OpenAlex columns), then run python scripts/resolve_sources.py. A near-miss
name is recorded as "no match; closest: …" rather than accepted, because two
titles on the list carry hijacked-title warnings.docs/data/hidden.json ({"ids": [...]}) and
rebuild with python scripts/build_dashboard_data.py. Nothing is deleted.python scripts/build_dashboard_data.py. No API calls.var(--accent) from a base a rule, so
OpenAlex IDs in the prose and DOIs in the citation table stay readable in dark
mode. They used to fall back to browser blue (#0000EE). A test pins it.On this Mac, use python3.11 (the repo needs 3.10+; the python.org 3.11 has no CA
bundle, so live OpenAlex calls need
SSL_CERT_FILE=$(python3.11 -c "import certifi; print(certifi.where())")).