LatestWeekLocal

← Changelog

Backend changelogVersion 2.16.1

The site has two parts, each with its own version number: the frontend (what you see and use in the browser) and the backend (the server, the feed worker and the database). Versions are major.minor.bugfix: major for changes that break existing setups or links, minor for new or changed features, bugfix for fixes and speed-ups.

Frontend changelog →

  1. 2.16.1

    Changed

    • The build records the frontend and backend versions from the changelogs, for the page footers.
  2. 2.16.0

    Added

    • Separate changelogs and version numbers for the frontend and backend (changelog/frontend.md, changelog/backend.md), with every change since the first commit.
    • /api/health reports the running frontend and backend versions.
    • Markdown versions of the changelog pages, and the changelog in llms.txt and the sitemap.
    • A check (pnpm changelog:check, also in CI) that every frontend, backend or shared change comes with a new version in the right changelog.
  3. 2.15.0

    Changed

    • /settings redirects (301) to /account, keeping any #anchor; the Markdown version of /account covers settings.
  4. 2.14.0

    Added

    • Each section's most widely covered story is stored with the front page; a story belongs to the section most of its outlets put it in and tops one section at most.
    • The top story's section is saved on the account.
  5. 2.13.0

    Added

    • ZIP code and postcode lookup: about 77,000 codes in 11 countries (from GeoNames), not stored or logged.

    Changed

    • Nearby places are ranked from a city's edge, so a point inside a big city finds the city first.
  6. 2.12.0

    Added

    • Local news: Google News's local feed for each place, topped up with a name search when thin, fetched on demand, cached 10 minutes, with a site-wide fetch cap.
    • About 5,600 places in 12 countries (from GeoNames), served to the place picker from /places.json.
    • Readers' places in the nh_places cookie and on the account; local pages in the Markdown versions, llms.txt and the sitemap.

    Security

    • Browsers may use location for this site only.
  7. 2.11.0

    Added

    • Markdown versions of every public page (Accept: text/markdown, or .md addresses).
    • /llms.txt describing the site for AI agents; robots.txt points to it.

    Changed

    • Page data moved into loaders shared by the pages and the Markdown versions.

    Fixed

    • Requests for Markdown got a 406 error.
  8. 2.10.0

    Added

    • Alert switch and rules in the site settings, and daily alert totals.
    • AI drafts of outlet facts; odd values are dropped.
    • Coverage mix by outlet type and country for story pages.
  9. 2.9.0

    Added

    • Web Push alerts: every 5 minutes the worker matches followed topics against widely covered stories (at most one alert per topic every 6 hours, 5 a day). Push keys are stored encrypted; only browser push services are accepted.
  10. 2.8.0

    Added

    • Outlet facts (type, country, owner, year founded, description), with type and country filled in for the current outlets.
  11. 2.7.0

    Added

    • Muted outlets are left out of Latest, search, Following and the week in review; kept in a cookie and on the account.
  12. 2.6.0

    Added

    • Most read this week, from anonymous click totals.
  13. 2.5.0

    Changed

    • The site moved to helixnews.one: a migration updates the Site URL, and page requests on other public domains redirect there (301).
  14. 2.4.3

    Fixed

    • Opening a server-function address as a page showed raw data; it now goes to the front page, and those addresses are kept out of search engines.
  15. 2.4.2

    Changed

    • The front page rebuilds about 13 times faster (9 s → 0.7 s), and dashboard saves no longer stall.
  16. 2.4.1

    Fixed

    • Accounts only worked when credits, AI and Ask were all turned on.
  17. 2.4.0

    Added

    • Followed topics saved on the account.
    • Outlet page data, search filters, and the week in review (rebuilt every 3 hours; past weeks kept).
    • Change log for feeds and ad campaigns.

    Fixed

    • Development: database connections piled up across code reloads.
  18. 2.3.0

    Added

    • Live reader count: open tabs send an anonymous heartbeat every 30 seconds, counted in memory only.
  19. 2.2.0

    Added

    • Feed import and export (JSON, OPML); imports never delete feeds.

    Fixed

    • Feed addresses other than http(s) were accepted.
  20. 2.1.0

    Added

    • Ad campaigns: dates, pausing, view caps, weights and UTM tags; existing ads became campaigns.
    • Ad images uploaded or imported once, checked, re-encoded to WebP and served from /ad-image/<id>.
    • Per-campaign reports with CSV, private advertiser report links, and link checks every 6 hours.

    Changed

    • HTML ad frames moved to /ad-frame/<campaign>.
  21. 2.0.0

    Added

    • The app sends its own security headers: Content Security Policy, HSTS over HTTPS and the rest.

    Changed

    • The site is published on WEB_BIND:WEB_PORT (default 127.0.0.1:3000).

    Removed

    • Caddy is no longer part of Docker Compose; put the site behind your own reverse proxy.
  22. 1.13.0

    Changed

    • Docker Compose runs without an .env file; bind mounts work on SELinux hosts.

    Fixed

    • Fresh installs seeded only the crypto feeds.
  23. 1.12.0

    Added

    • Paywall flag per feed (16 outlets pre-marked).
    • Latest headlines with cursor paging.
    • Saved stories on the account.
    • Text size and new-since-last-visit choices saved on the account.

    Fixed

    • The process crashed when Postgres or the network dropped an idle database connection.
  24. 1.11.0

    Changed

    • Theme and feedback-question choices are saved on the account too.
  25. 1.10.0

    Added

    • Streaming chat answers from /api/ask (server-sent events), with the checked answer and sources at the end; cached answers stay plain JSON.
  26. 1.9.0

    Added

    • Chat searches headlines by meaning: the fast model suggests related terms, cached for an hour, with a 6-second limit and a plain-keyword fallback.
  27. 1.8.0

    Added

    • Hidden sections are saved on the reader's account; the account's choice wins.
  28. 1.7.0

    Added

    • Full-text search over the last 30 days of headlines (rate-limited).
    • Story page data, and story pages in the sitemap.
    • RSS feed of the top stories (/feed.xml).
  29. 1.6.0

    Added

    • Nightly database backups: a compose service dumps the database to ./backups, checks each dump, keeps 14 days and catches up after downtime; scripts/run.sh backup does the same locally.
  30. 1.5.0

    Security

    • Content Security Policy and Cross-Origin-Opener-Policy headers.
    • HTML ads are served from their own address with a looser policy, for a sandboxed frame.
  31. 1.4.0

    Security

    • One-time email links are used only when the reader presses the button on the page, and the page doesn't send its address (with the token) as a referrer.
  32. 1.3.0

    Added

    • A configurable allowance for reasoning models' thinking (default 3,000 tokens), added to every AI request.

    Fixed

    • Summaries and sorting batches failed with "max tokens reached" on reasoning models.
  33. 1.2.0

    Added

    • Story chat: reads the outlets' own articles once (respecting robots.txt, paywalls and "noai"), keeps them 48 hours, and cites each outlet.
    • Accounts without email: scrypt-hashed passwords, one-time recovery codes, passkeys (WebAuthn) and optional email.
    • Crypto section with 9 crypto feeds.
    • Hidden sections, remembered in a cookie so the page arrives without them.
    • scripts/run.sh: starts the database, applies migrations and runs the site and worker.

    Fixed

    • The account page crashed in production (the passkey library is now loaded by Node instead of bundled).
  34. 1.1.0

    Changed

    • Chat with the news reads the recent conversation (up to 4 exchanges) to understand follow-up questions; follow-ups search with the previous question too and aren't cached.
  35. 1.0.0

    Added

    • AI features through OpenAI-compatible endpoints or OpenRouter: sorting, the top-story summary, Ask the news and comment insights.
    • Reader accounts, credits, Stripe and PayPal payments with webhooks, and email sign-in.
    • Dashboard settings stored in the database, with a history of changes.
    • Status API (/api/status) with feed health history.
    • Image proxy for publisher photos: signed, resized and guarded against requests to private addresses.
    • Sitemap and robots.txt.
    • Cookieless visit counting that honors Global Privacy Control and Do Not Track.
  36. 0.1.0

    Added

    • Feed worker: polls RSS and Atom feeds when due (ETag and If-Modified-Since, backing off on failures) and stores stories in Postgres, de-duplicated by link.
    • Groups headlines about the same story, sorts them into sections, and writes a new front page only when it would change.
    • Live updates pushed to browsers over server-sent events (/api/stream).
    • Feeds, editorial overrides and ads from config files, reloaded while running.
    • Health check (/api/health) and anonymous click counting.