尚未检测到更新。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())")).