Skip to content

Releases

v0.2.3: both enquiry limits read the same

Choose a tag to compare

@sh1pt-actions-fleet sh1pt-actions-fleet released this 29 Oct 01:53
c78a5ce

DB rate limit answers as limited; use_case errorLabel; @profullstack/contact-form 0.3.2 (#260).

v0.2.2: @profullstack/contact-form 0.3.0

Choose a tag to compare

@sh1pt-actions-fleet sh1pt-actions-fleet released this 29 Oct 01:45
cea8c2e

/sales enquiry form on 0.3.0; errors rebuilt from codes (#259).

v0.2.1: corpus enquiry form on @profullstack/contact-form

Choose a tag to compare

@sh1pt-actions-fleet sh1pt-actions-fleet released this 29 Oct 01:28
a022771

The /sales enquiry form and /api/sales/contact on @profullstack/contact-form 0.2.0 (#258).

v0.2.0: weekly newsletter + webring embed snippet

Choose a tag to compare

@sh1pt-actions-fleet sh1pt-actions-fleet released this 28 Oct 18:12

Weekly digest (opted in by default, one-click unsubscribe, Mondays 15:00 UTC) and copy-paste webring footer snippet (/api/v1/rings/embed, CLI rssamp ring embed, MCP ring_embed). Web 0.2.0, CLI 0.6.0.

v0.1.6

Choose a tag to compare

@ralyodio ralyodio released this 19 Oct 18:58
76efb50

What's Changed

  • feat(webring): Random link in the Profullstack ring footer by @ralyodio in #229
  • feat(webring): anonymous, throttled votes for ring members by @ralyodio in #230
  • feat(webring): vote page finds the site from the Referer too by @ralyodio in #231
  • feat(footer): use @profullstack/footer by @ralyodio in #232
  • fix: rate limits key on the real client address, not a forgeable header by @ralyodio in #233
  • feat(footer): revalidate prerendered pages hourly (ISR) by @ralyodio in #234
  • Rings: manage a ring you own with an API key by @ralyodio in #235
  • No ads against the footer: drop or lift every foot banner by @ralyodio in #237
  • pit.world global footer, trim the site footer by @ralyodio in #238
  • Poller on @profullstack/scraper-daemon: one daemon, ten timers become jobs by @ralyodio in #236
  • About, submit, discover: keep the closing ad off the footer by @ralyodio in #239
  • Restore the @profullstack/footer webring row by @ralyodio in #240
  • Poller daemon on BullMQ (scraper-daemon 0.2.1) by @ralyodio in #241
  • x402-gateway 0.8.0: charge Lightpanda, headless, SEO resellers, stale UAs by @ralyodio in #242
  • x402-gateway 0.9.0: never meter verified Applebot/Googlebot/bingbot; charge AI indexers by @ralyodio in #243
  • x402-gateway 0.10.0: AI chat bots welcome, search engines verified by address by @ralyodio in #244
  • deps: @profullstack/player 0.15.0 (caret on 0.3.1 never left 0.3.x) by @ralyodio in #245

Full Changelog: v0.1.5...v0.1.6

v0.1.5

Choose a tag to compare

@ralyodio ralyodio released this 07 Oct 13:24
da33cc1
  • Corpus opt-out (feeds.dataset_opt_out) now also covers the reader and the MCP read_post tool: an opted-out publisher's page is framed or linked to, never extracted, cached or translated.
  • New operator script packages/db/src/corpus-opt-out.js; remove-feed.js --restore lifts a removal made in error.
  • Fix: feed, reader, view and author pages 404'd for every non-ASCII slug (Next 16 passes page params percent-encoded).

#228

v0.1.4

Choose a tag to compare

@ralyodio ralyodio released this 01 Oct 19:36
7081d0e

The web server and the poller now run on Bun (#222, #223). RSSHub, embedded in the poller, stays on Node 24.

Measured on dev2 over 30 minutes: web latency is the same or better, with less CPU (27.5% → 23.8%) and fewer error lines (12 → 1); web memory is higher (881 → 1,266 MiB, stable). The poller uses less memory (351 → 263 MiB) and less CPU, and its crawl throughput and error rate are unchanged, with faster ticks (82 s → 72 s).

v0.1.3

Choose a tag to compare

@ralyodio ralyodio released this 01 Oct 11:41
9318203

Moves @profullstack/openprofile to 0.1.2 (from 0.1.0): normaliseUrl now reads a stray % as a literal instead of throwing URIError on a profile or feed link like https://ij.org/podcasts/%podcast-type%/ (profullstack/mynaposter#121). It also brings in 0.1.1's fix: a section written twice in an edited file keeps both copies. (#221)

v0.1.2

Choose a tag to compare

@ralyodio ralyodio released this 01 Oct 09:39
ed98f87

Fix: recycle a web worker that has grown past 768 MB (#220)

  • Every minute, the web server's primary process checks each worker's resident memory. If a worker is over WEB_WORKER_RSS_MB (default 768), the primary starts a replacement, waits until it is accepting connections, and then lets the old worker finish its requests and exit. If it hasn't exited after 30 s, it gets SIGTERM.
  • Only one worker is recycled at a time, and the pool never drops below its size.
  • The startup log line now shows each worker's heap ceiling and the recycle threshold. Each recycle is logged as it happens.

Why: #219 limited the pool to 4 workers with 1 GB of heap each. That doesn't stop a worker's memory from creeping up with age. On dev2 a worker grew from ~400 MB at one day old to ~970 MB at six days. In a local A/B test, lowering the heap ceiling didn't change workers' resident memory. Recycling caps four workers at about 3 GB.

v0.1.1

Choose a tag to compare

@ralyodio ralyodio released this 01 Oct 09:08
b5675b1

Fix: bound the web container on a shared host (#219)

  • The web service now runs 4 cluster workers by default instead of one per CPU (16 on dev2). WEB_WORKERS still overrides it (up to 16), and WEB_WORKERS=1 still gives you a single process.
  • The heap is a fixed total budget, WEB_HEAP_BUDGET_MB (default 4096), split between the workers: about 1 GB each at 4 workers. Before this, each worker's ceiling was a share of the host's 91 GB, which came to 3.5 GB each.
  • The Dockerfile's NODE_OPTIONS heap ceiling drops from 12288 to 4096 MB.
  • The default in-flight ceiling is still 128 for the container, now 32 per worker.

Why: on dev2 the web container had grown to 11.7 GB. That filled the host's swap, and earlyoom started killing the shared Postgres.