Commit Graph

135 Commits

Author SHA1 Message Date
svemagie
6a2c38d798 fix: replace startup sleep with readiness check, clean up stale env/config
- start.example.sh: replace fixed sleep 30 with /status poll loop (up to 2min)
  so the webmention poller waits exactly until indiekit is ready, not longer
- indiekit.config.mjs: remove redundant webmentionIoMountPath variable and
  mountPath from webmention-io config (package default /webmentions is correct)
- .env.example: remove all stale proxy and unused WEBMENTION_SENDER_* vars
  (HOST, PORT, ENDPOINT, READY_TIMEOUT, STOP_TIMEOUT, AUTO_POLL) that were
  never read by start.example.sh; keep only WEBMENTION_SENDER_POLL_INTERVAL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 20:30:55 +01:00
svemagie
c251650371 fix: add 30s startup delay before first webmention poll
The poller fired immediately after indiekit was backgrounded, before
the HTTP server finished initializing — causing curl error 52 (empty
reply). A 30s initial sleep gives indiekit time to become ready.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 20:12:11 +01:00
svemagie
881976f821 fix: prevent silent webmention-sent data loss on fetch failure
Two startup scripts:

patch-webmention-sender-retry: patches the package controller so that
when a post has no stored content and the live page fetch fails (page not
yet deployed), the post is skipped instead of being permanently marked as
webmention-sent with zero results. On the next poll the page will be live
and webmentions will be sent correctly.

patch-webmention-sender-reset-stale: one-time migration (guarded by a
migrations collection entry) that resets all posts already incorrectly
marked as webmention-sent with all-zero results, so they are retried on
the next poll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 20:08:39 +01:00
svemagie
cdc437ea8c fix: remove webmentions-proxy, fix sender timing, explicit mountPath
- Remove @rmdes/indiekit-endpoint-webmentions-proxy (redundant with
  webmention-io which already provides a public JSON API from MongoDB)
- Remove proxy-related variables (webmentionsProxyMountPath, cacheTtl)
- Add explicit mountPath to webmention-io config to avoid future surprises
- Increase WEBMENTION_SENDER_POLL_INTERVAL to 600s so deploys complete
  before the poller fires, preventing silent data loss where posts with
  no stored content get marked webmention-sent before the page is live

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 20:00:12 +01:00
svemagie
9c90498cbc refactor: simplify start.sh to standard webmention-sender pattern
Remove complex PID tracking, readiness probe, graceful-shutdown and
daemon-parent machinery. Replace with the minimal polling loop from
the @rmdes/indiekit-endpoint-webmention-sender README: generate JWT,
POST to 127.0.0.1 (local), sleep 300s. Also drop the related tuning
vars from .env (WEBMENTION_SENDER_READY_TIMEOUT, STOP_TIMEOUT,
INDIEKIT_STOP_TIMEOUT, KILL_DAEMON_PARENT_ON_SHUTDOWN).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 19:47:46 +01:00
svemagie
fefd91dcf5 chore: commit all changes for deployment 2026-03-11 12:23:27 +01:00
svemagie
548450a12a chore: update webmentionSenderMountPath config to default /webmention-sender 2026-03-11 12:23:12 +01:00
svemagie
5036f9c7fd chore: empty commit for deployment sync 2026-03-11 12:01:20 +01:00
svemagie
be67f61792 feat: update webmention sender endpoint path to /webmentions-sender 2026-03-11 11:55:47 +01:00
svemagie
9c771df5d0 fix: wait for HTTP 200 and increase poller startup timeout to 180s 2026-03-11 11:50:12 +01:00
svemagie
720e23b771 fix: avoid double https:// in webmention sender endpoint construction 2026-03-11 11:46:06 +01:00
svemagie
b86a759b81 chore: update .env.example for production webmention sender host 2026-03-11 11:43:54 +01:00
svemagie
6520c13b8a fix: config for endpoint-auth 2026-03-10 20:57:19 +01:00
svemagie
c591b6fe37 feat(auth): add IndieAuth endpoint plugin and config for /auth 2026-03-10 20:47:20 +01:00
svemagie
7f830aa31f feat(blogroll): use bookmark post category in blogroll entry
Passes the micropub post's category (first tag) through to the blogroll
blog entry. Falls back to "bookmarks" when no category is set.

Handles all micropub body formats (form-encoded, JF2, MF2 JSON).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 19:54:20 +01:00
svemagie
c1a4eb2404 feat(blogroll): auto-import bookmark sites into blogroll
When a micropub bookmark post is created, the bookmarked site's
origin URL is discovered for RSS/Atom feeds and added to the blogroll
under category "bookmarks".

Integration is self-contained in the blogroll plugin via
contentNegotiationRoutes — no micropub patches needed.

Source: github:svemagie/indiekit-endpoint-blogroll#bookmark-import

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 19:31:15 +01:00
svemagie
ae936b2e1a fix(deploy): explicitly re-run all patches after npm ci
Adds an explicit patch loop in the deploy step to ensure all
scripts/patch-*.mjs run even if npm ci postinstall was skipped.
This guarantees changelog categorization and other patches are
always applied on the server regardless of npm install mode.
2026-03-10 17:33:41 +01:00
svemagie
91c3778fdc fix: apply all patch scripts automatically on startup 2026-03-10 16:30:37 +01:00
svemagie
8dbe966a4c fix(posts): ensure post type fields and normalize AI taxonomy
Only display post types with defined fields; backend filters out types lacking fields.
Require fields for backend visibility, not just post path/url.
Add support for custom post form fields by requiring matching templates; missing templates are ignored.
Normalize legacy AI taxonomy values (3 → 2) in frontmatter.
Strip empty AI fields before jf2ToMf2 to avoid empty-string metadata in Micropub payloads.
2026-03-10 16:09:20 +01:00
svemagie
a8f7625897 feat(changelog): categorize perf, a11y, docs commits in endpoint-github changelog patch 2026-03-10 16:09:20 +01:00
svemagie
771e2302b7 fix: updates 2026-03-10 15:44:25 +01:00
svemagie
617a8f92b2 feat: patch changelog endpoint to categorize by commit message
Replaces repo-name-based category logic with commit-message parsing:
- feat: / feat(...): → Features
- fix: / fix(...): / Fix... → Fixes
- everything else → Other

Drops unused categories (Deployment, Theme, Endpoints, Syndicators,
Post Types, Presets). Patch runs on postinstall and serve.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 10:17:05 +01:00
svemagie
e98dba777c feat: add @indiekit/endpoint-micropub to plugins
Wires up the already-installed Micropub endpoint (aliased to
@rmdes/indiekit-endpoint-micropub) at /micropub.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 10:17:04 +01:00
svemagie
1be5baa60f feat: install and configure @rmdes/indiekit-endpoint-microsub
Adds Microsub social reader endpoint at /microsub, enabling feed
subscription and management via the Microsub protocol.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 10:17:04 +01:00
svemagie
038b94a606 feat: install and configure @rmdes/indiekit-endpoint-blogroll
Mounts blogroll API at /blogrollapi — syncs RSS/Atom feeds hourly,
caches 50 items per blog, deletes items after 7 days.
Public endpoints: /blogrollapi/api/blogs, /items, /categories, /status, /opml

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 10:17:03 +01:00
svemagie
ab2c248344 feat: Add @rmdes/indiekit-syndicator-indienews plugin and config block 2026-03-10 10:17:02 +01:00
svemagie
bc83e2bbb7 feat: Add @rmdes/indiekit-syndicator-indienews plugin and config block 2026-03-10 10:17:01 +01:00
svemagie
696f5b3336 feat: added youtube endpoint 2026-03-10 10:17:00 +01:00
svemagie
99b7966722 feat: update package files for indiekit-endpoint-youtube 2026-03-10 00:07:31 +01:00
svemagie
220ccc9113 feat: add indiekit-endpoint-youtube plugin configuration 2026-03-10 00:06:06 +01:00
svemagie
13d662cff6 Add comments endpoint locale patch and translations 2026-03-09 22:13:39 +01:00
svemagie
98051bce41 fix(config): set explicit application URL for proxied auth/assets 2026-03-09 21:38:50 +01:00
svemagie
4eb7c07eb3 Fix homepage SITE_SOCIAL identity defaults parsing 2026-03-09 21:23:50 +01:00
svemagie
31129c48e1 Fix FreeBSD rc.d restart behavior and poller lifecycle 2026-03-09 21:08:56 +01:00
svemagie
529fa81cd0 Add webmention sender auto-poll for bare-metal 2026-03-09 20:10:16 +01:00
svemagie
ae583a8e35 Require token for Funkwhale scope=me sync 2026-03-09 19:51:57 +01:00
svemagie
55682087a0 Scope Funkwhale history sync to authenticated user 2026-03-09 19:48:23 +01:00
svemagie
aeae212553 Harden Funkwhale sync against malformed records 2026-03-09 19:45:06 +01:00
svemagie
1365f696f0 fix(activitypub): handle publication host private DNS lookups 2026-03-09 19:39:04 +01:00
svemagie
d237dac539 Optimize AI metadata pipeline for editor and frontmatter 2026-03-09 18:50:24 +01:00
svemagie
8375e62ad1 Scope AI disclosure to article/note and extend note AI fields 2026-03-09 18:38:02 +01:00
svemagie
7d13d5dbfa Add and configure comments endpoint 2026-03-09 18:23:32 +01:00
svemagie
ad17b697c7 Allow clearing Mastodon migration alias 2026-03-09 18:15:46 +01:00
svemagie
77e015ca13 Fix Funkwhale sync keying and legacy stats backfill 2026-03-09 18:07:57 +01:00
svemagie
5836d05d86 Add Podroll OPML file upload support 2026-03-09 16:13:27 +01:00
svemagie
c2a24b9162 Expose AI fields in /posts article editor 2026-03-09 15:24:00 +01:00
svemagie
f8aa318342 Harden listening endpoint sync, stats, and runtime guards 2026-03-09 15:04:49 +01:00
svemagie
fed5657957 Add webmentions proxy endpoint integration 2026-03-09 14:10:59 +01:00
svemagie
f44211799c Fix CI install by enabling legacy peer deps 2026-03-09 13:52:25 +01:00
svemagie
8d77f0d259 Configure syndicate endpoint with Bluesky and Mastodon syndicators 2026-03-09 13:48:49 +01:00