MyStatus

MyStatus is a minimal status streaming engine implemented as a worker.js. Designed to run on Cloudflare Workers with built-in Markdown support. Source available under GNU AGPL v3.

Home Page

- Full-card click without invalid HTML. Wrapping the whole <article> in <a> breaks when post bodies contain links (nested anchors). The index now uses a stretched link: an empty <a class="entry-link"> after the content, absolutely positioned over the card, with pointer-events so real links inside .entry-content still receive clicks.

- Permalinks stay at `/<id>`. Single-status URLs remain root-relative numeric paths (not /status/<id>). The Atom feed and sitemap use the same shape.

SITE_INTRO

- Markdown instead of raw HTML. The old HTML sanitizer for site intro could corrupt markup (for example duplicate or stray <a> tags after the intro block, which then affected the stream). Intro is now treated like statuses: built-in `renderStatus` when MD_SCRIPT is off, and escaped source + `marked` on the client when MD_SCRIPT is on (same pattern as entries).

- Save validation uses length and NUL stripping only (validateSiteIntro); the previous sanitizeSiteIntroHtml path was removed.

Atom feed (`/feed.xml`)

- Each `<entry>` links to its status page (<link href="…/<id>" />) instead of always pointing at the site root.

- Entry titles use getAtomEntryTitle(): if the first line of the post starts with a markdown image (`![…](`) or `<img`, the title is `Status #<id>` so the feed does not show long ![](url… fragments in <title>.

- Feed size remains a capped recent window (10 entries), by design.

Pagination and page size

- `ENTRIES_PAGE_LIMIT = 10` is the single constant for:

- the index first load,

- `GET /api/entries` (with optional ?cursor=),

- and thus the embed widget, which uses the same API.

- Index still uses the existing Load More script against /api/entries.

- `/client.js` embed now includes Load more: it uses nextCursor from the API and appends batches until there is no next page. New hooks: .gb-load-more-wrap, .gb-load-more-btn.

Using console.log() way more than I’d like to admit.

Build log

- cleaned up some messy code

- removed unused stuff

- feels lighter already

> note to self:

stop overthinking simple things

Pushed a small update:

`js

if (status === "live") {

notifyUsers();

}

This is important but also _kind of experimental_.