Model or dataset
simonlin1212/investment-news avatar
simonlin1212/investment-news

investment-news: a local dashboard that turns global industry feeds into Chinese A-share briefs

为 A股投资者打造的全球产业链资讯看板 · 12 大赛道一一对应 A股板块(半导体/AI/机器人/新能源车…),覆盖 100+ 权威源,用你自己的大模型每日提炼中文「今日要点」+ 翻译 · 全程本地、零 API key · Local AI news dashboard tracking the global industry signals behind China A-share sectors

455 stars93 forksJavaScriptMIT

At a glance

What is it?
investment-news is a self-hosted Python dashboard that pulls 108 RSS sources across 12 industry sectors, then uses your own Claude subscription or an OpenAI-compatible API to write Chinese daily key points. It is for A-share investors following overseas lead signals, and it is not a market data tool.
Who is it for?
Adopt it if you already hold a Claude Code subscription or an OpenAI-compatible API key and you want a single local page that condenses English industry feeds into Chinese per-sector briefs. Skip it if you need quotes, price data, or a hosted service that runs without your machine, and skip it if your network cannot reach overseas feeds and you have no proxy.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 12 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap investment-news targets: English lead signals, Chinese sector briefs

The premise is specific. The signals that move an A-share sector often surface first in English-language sources, and those sources are scattered across a hundred feeds. The README frames the target user as an A-share investor tracking semiconductors, AI, new energy vehicles, robotics and similar themes, who cannot read every English item and does not want to read a hundred of them. The project maps 12 sectors one-to-one onto A-share board themes: AI/large models, semiconductors and chips, robotics and automation, automotive and new energy vehicles, energy, biopharma and health, aerospace, cybersecurity, tech and internet, consumer electronics, macro finance, and frontier science. Each sector gets a pinned block of three to five Chinese key points drawn from across sources, with links back to the originals. That is the whole value proposition, and it is narrower than the name suggests. The README says plainly that the tool presents industry trends and lead signals, not market data, and does not constitute investment advice. Anyone looking for quotes, order flow or price history is in the wrong repository.

How the pipeline works: sources.json to fetch.py to digest.py to index.html

The README's architecture diagram is worth reading literally, because the data flow is the design. sources.json holds 108 sources across the 12 sectors. A fetch stage, scripts/fetch.py, pulls them, applies compliance filtering, restricts to a recent time window and normalizes timestamps to Beijing time, writing raw entries into data.js. Then scripts/digest.py calls your model to produce the per-sector key points, the Chinese translations, and the source links, writing back into the same data.js. index.html is a single-file browser dashboard with no build step and no dependencies, and server.py serves it locally while exposing a refresh endpoint at /api/refresh. The digest step routes through scripts/llm.py, which is the unified entry point for both providers. In claude-cli mode it shells out to the local claude -p command with subscription authentication, all tools disabled, text only. That constraint matters: the model is being used strictly as a text transformer, not as an agent with filesystem or network reach. There is no database, no RSSHub, and no hosted component anywhere in the chain.

Installing investment-news and running a first refresh

The README states the requirements as Python 3.7+ with only the standard library, plus a model. No third-party packages are installed. Clone the repository and start the server on its default port.

bash
git clone https://github.com/simonlin1212/investment-news.git
cd investment-news
python3 server.py

The server keeps running on port 8793. Open the dashboard in a browser; the README gives platform-specific open commands.

bash
open http://localhost:8793

On Windows the README says to use start, and on Linux xdg-open. Once the page loads you should see the sidebar with 12 sectors. The refresh control is the arrow icon in the top left. Clicking it triggers fetching and summarization, and the page reloads when the run finishes, so no command line interaction is needed after startup. Before that first refresh does anything useful, the model provider has to be configured. The default provider is claude-cli, which uses a locally logged-in Claude Code subscription and costs nothing beyond the subscription; the README says a single claude login is all it takes. The alternative is any OpenAI-compatible API, configured in llm.config.json.

json
{ "provider": "api",
  "api": { "base_url": "https://api.deepseek.com", "api_key": "sk-...", "model": "deepseek-chat" } }

Switching between the two is a single config key. If overseas sources fail, the README points at proxy environment variables, which urllib reads natively, and a timeout knob.

bash
export HTTPS_PROXY=http://127.0.0.1:7897
export HTTP_PROXY=http://127.0.0.1:7897
export FETCH_TIMEOUT=45
python3 server.py

The proxy variables must be exported before starting server.py, because the refresh subprocess inherits the environment of the shell that launched the server. Adding a source is a one-line edit in sources.json, with a hint field naming the sector.

json
{ "name": "某媒体", "hint": "ai", "type": "rss", "url": "https://example.com/feed" }

Where investment-news breaks: network, certificates, and the wrong use case

The most likely failure is not in the code. The README notes that most of the 106 sources it counts for fetching are overseas outlets, and on a poorly connected network a run ends with a printed line reporting N of 106 sources failed. The tool does not hide this, which is good, but it also does not fix it. You supply the proxy. The second failure mode the README anticipates is certificate verification errors. If many sources report CERTIFICATE_VERIFY_FAILED, the project's position is that the problem is usually the local certificate chain rather than the project itself, and it recommends running Install Certificates.command on a python.org macOS install, or installing a MITM proxy's root certificate into the system trust store. It explicitly advises against disabling verification globally. That is the correct call, and it means the fix is on your machine, not in the repository. The third boundary is categorical. This is a news aggregator with an AI summarization layer. It has no price data, no fundamentals, no backtesting, and no alerts. If your actual need is a screener or a quote feed, the 12-sector brief is not a partial version of that; it is a different artifact. There is also a cost asymmetry worth naming: claude-cli is free only because it rides on a subscription you already pay for, and the api provider bills per token against however many entries the window contains.

How it differs from a hosted aggregator or a general RSS reader

The obvious alternative is a hosted news aggregator or a self-hosted RSS reader like FreshRSS or Miniflux. The difference is where the summarization happens. A feed reader gives you the items; you still read them, in English, across a hundred subscriptions, and you decide what matters. investment-news inserts a model between the feed and you, and its output unit is the sector-day brief rather than the article. That is a real trade: you lose the linear inbox and gain a condensed layer that may omit something you would have noticed. The second alternative is a commercial financial terminal or a Chinese financial portal. Those give you market data, filings and licensed content, and they run without your machine being on. investment-news gives you none of that; its README is explicit that it reads only public RSS and interfaces at low frequency, and that everything stays on the local machine with no account and no hosting. The third comparison is to a general-purpose LLM chat session where you paste links. That works, but it is manual and stateless. The dashboard's contribution is the fixed 12-sector taxonomy and the daily repeatability, not the summarization itself, which any capable model can do.

Maintenance, upgrade cost, and the MIT licence

The repository is not archived, and the last push was on 2026-09-04. The release history is short and recent: v1.0.1 on 2026-07-26 bundled security hardening, Chinese Windows compatibility, and network and data fixes; v1.0.2 on 2026-08-09 added entry-level deduplication; v1.0.3 on 2026-08-20 fixed the deduplication baseline time. That sequence suggests the deduplication path was the active area of work through August. Upgrade cost is low by construction. There are no third-party Python packages to reconcile, so pulling a new revision does not create a dependency resolution problem. The files you are likely to have edited are sources.json and llm.config.json, and neither is generated, so a merge is usually trivial. The one thing to watch is data.js, which is generated output from fetch and digest; treat it as disposable. Source rot is the ongoing maintenance item, and the repository ships scripts/build_sources.py, described as rebuilding and validating sources.json with per-source liveness checks. That is the tool to run when feeds die. The licence is MIT, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are preserved. This is a factual description of the licence text, not legal advice; if you plan to redistribute it inside a product, read LICENSE yourself.

Editorial conclusion

Adopt it if you already hold a Claude Code subscription or an OpenAI-compatible API key and you want a single local page that condenses English industry feeds into Chinese per-sector briefs. Skip it if you need quotes, price data, or a hosted service that runs without your machine, and skip it if your network cannot reach overseas feeds and you have no proxy. Before committing, verify three things: that the sources you care about are present in sources.json, that claude -p works on your machine if you choose the claude-cli provider, and that a refresh run reports fewer failed sources than the total of 106 the README mentions. The project's own framing is the sharpest boundary: it aggregates news, it does not issue investment advice.

Frequently asked questions

What is investment-news?

It is a local dashboard for A-share investors that tracks global industry signals behind Chinese stock sectors. It covers 108 sources across 12 sectors and uses your own model to produce Chinese daily key points with links to the originals.

Do I need an API key to run investment-news?

No. The default provider is claude-cli, which uses a locally logged-in Claude Code subscription after a single claude login, and the README lists its cost as $0. The api provider is optional and accepts any OpenAI-compatible endpoint.

Is investment-news a newsletter or a subscription service?

Neither. It runs entirely on your machine with no account and no hosting, and the README states there is no database, no RSSHub and no hosted dependency. The output is a browser dashboard on localhost, not an emailed or subscribed publication.

What is the best stock investment newsletter?

investment-news is not a newsletter and does not compare newsletters. It is a local dashboard that aggregates public RSS feeds and summarizes them with your own model, so it does not answer that question.

Are investment newsletters tax deductible?

The repository does not address tax treatment. The only cost information it gives is that the claude-cli provider is listed as $0 against an existing Claude Code subscription, while the api provider is billed per usage by whichever OpenAI-compatible endpoint you configure.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. simonlin1212/investment-news on GitHub
Community notes

Community notes