How I Built a News Filtering and Briefing Workflow with Codex
I recently added a small news system to this VuePress/Plume knowledge base. The goal was not to build a full CMS. I wanted something closer to a technical writing pipeline: search the web, filter sources, produce a structured briefing, keep source links, save screenshots when they are actually useful, and publish everything as Markdown.
The first two categories are AI and Finance. They are both rendered with Plume's post-list layout, but the files live in a predictable folder structure so I can maintain the system without hunting through the whole repository.
The File Model
The English site is the default locale, but I still keep English content physically under docs/en:
docs/
en/
blog/
2026-05-20-codex-news-briefing-workflow.md
news/
AI/
2026-05-20-ai-daily-briefing.md
Finance/
2026-05-20-finance-daily-briefing.mdIn docs/.vuepress/collections.ts, I point the English post collections at en/blog and en/news. Public routes stay clean:
/blog/
/news/
/news/article/finance-daily-briefing-2026-05-20/The important Plume detail is that post categories are derived from folders. A file under docs/en/news/Finance/ becomes a Finance news post. That means the folder structure is not just storage; it is part of the publishing model.
What Codex Does Well Here
This workflow is a good fit for Codex because it crosses three types of work:
- Research: search current sources and compare which stories matter.
- Content generation: turn raw news into a consistent briefing format.
- Repository maintenance: create Markdown, save images, update links, and run the build.
I do not want the model to blindly summarize the first five search results. The useful part is asking it to act like an editor and a build assistant at the same time: choose stories, explain why they belong together, and verify that the final site still builds.
The Prompt I Reuse
This is the base prompt I use when I want a new daily briefing:
Create today's English news briefing for my VuePress/Plume knowledge base.
Category: [AI / Finance / another category]
Date: [YYYY-MM-DD]
Target folder: docs/en/news/[Category]/
Asset folder: docs/.vuepress/public/pictures/news/[category-daily-YYYY-MM-DD]/
Requirements:
1. Search the web for today's most important news in this category.
2. Prefer official sources, primary reporting, Reuters/AP/Bloomberg-style market reports, or reputable specialist publications.
3. Select 4-6 stories. Do not just list headlines. Identify the common theme.
4. For each story, write:
- What happened
- Why it matters
- What to watch next
- Original source URL
- Screenshot only if the captured page is a real article page
5. Create a Markdown post with frontmatter:
- title beginning with YYYY-MM-DD
- createTime
- permalink
- tags
- categories
- cover
6. Save useful screenshots locally and embed them with /pictures/... paths.
7. Run npm run docs:build and verify the generated route and image assets.I explicitly added the line about screenshots being real article pages after seeing two finance screenshots turn into Access Denied / security verification pages. A screenshot is only useful if it preserves evidence. If it captures a bot wall, it should be removed.
The Filtering Layer
The filtering prompt is where the quality improves:
Before writing, filter the search results.
Keep stories that affect markets, policy, infrastructure, company fundamentals, or long-term industry direction.
Remove duplicate syndications unless the duplicate is the only accessible source.
Avoid social rumors, thin SEO rewrites, and articles without clear sourcing.
Prefer stories with dates, named institutions, measurable impact, and original reporting.
Group related items into one narrative instead of producing disconnected summaries.For AI news, this usually means picking stories about models, labs, talent, infrastructure, product releases, regulation, and legal structure. For finance, it means looking across assets: yields, central banks, oil, currencies, earnings, credit, and policy.
Screenshot Handling
Screenshots are optional evidence, not decoration. My rule now is:
Save screenshots only when the page is readable and article content is visible.
Delete screenshots that show Access Denied, bot verification, cookie walls, or blank pages.
Keep the original source URL even if the screenshot is removed.The image folder convention is:
docs/.vuepress/public/pictures/news/finance-daily-2026-05-20/The Markdown path is:
/pictures/news/finance-daily-2026-05-20/ap-global-markets.pngThis keeps content portable because VuePress copies everything under .vuepress/public into the built site.
Article Shape
Each briefing uses the same structure:
# [Category] Daily Briefing: [Month Day, Year]
Opening thesis.
## Executive Summary
## 1. [Story]
What happened.
Why it matters.
Watch next.
Original source.
Optional screenshot.
## What This Means
## Source ListThe consistency matters more than it looks. Once the shape is stable, I can compare daily posts, scan archives quickly, and later automate the generation without redesigning the article every time.
Build Checks
The last step is always local verification:
npm run docs:buildThen I check the important routes:
/news/
/news/categories/
/news/article/[slug]/
/blog/For this project, the build is the real contract. If the Markdown looks good but the generated route or image path fails, the workflow is not done.
What I Would Automate Next
The natural next step is a scheduled draft job:
- Run once every morning.
- Search by category.
- Produce a draft Markdown file.
- Save only valid screenshots.
- Leave the article for manual review before publishing.
I still want a human final pass. News selection is editorial judgment, not just extraction. Codex is useful because it can do the repetitive parts and keep the repository consistent, while I keep control over what actually gets published.