Patreon: resolve creator campaign from a single-post URL #77

Merged
bvandeusen merged 1 commits from dev into main 2026-06-06 21:38:33 -04:00
Owner

All CI-green on dev (run 635).

A source URL like patreon.com/posts/<slug>-<id> is a single-post permalink, not a creator page — the resolver grabbed "posts" as the vanity and failed. Now a /posts/<id> URL follows the post to its owning campaign (Patreon post API, ?include=campaign), so pasting any post URL subscribes to that creator's whole feed. posts/ is excluded from the vanity regex so it can't masquerade as a creator slug.

Resolution order: cached override → id: URL → /posts/<id> → vanity (campaigns API + creator-page scrape). Unit-tested (mocked) — post→campaign resolve + /posts/ not treated as a vanity.

🤖 Generated with Claude Code

All CI-green on dev (run 635). A source URL like `patreon.com/posts/<slug>-<id>` is a single-post permalink, not a creator page — the resolver grabbed "posts" as the vanity and failed. Now a `/posts/<id>` URL follows the post to its owning campaign (Patreon post API, `?include=campaign`), so pasting any post URL subscribes to that creator's whole feed. `posts/` is excluded from the vanity regex so it can't masquerade as a creator slug. Resolution order: cached override → `id:` URL → `/posts/<id>` → vanity (campaigns API + creator-page scrape). Unit-tested (mocked) — post→campaign resolve + `/posts/` not treated as a vanity. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bvandeusen added 1 commit 2026-06-06 21:38:28 -04:00
feat(patreon): resolve the creator's campaign from a single-post URL
CI / lint (push) Successful in 3s
CI / backend-lint-and-test (push) Successful in 27s
CI / frontend-build (push) Successful in 35s
CI / integration (push) Successful in 3m2s
416d8d71cd
A source URL like https://www.patreon.com/posts/mimic-in-dungeon-158372536 is a
single-post permalink, not a creator page — the resolver grabbed "posts" as the
vanity and failed (operator-flagged 2026-06-07). Add a resolution path: extract
the trailing post id and follow it to the owning campaign via the Patreon post
API (/api/posts/<id>?include=campaign), so pasting any post URL subscribes to
that creator's whole feed. `posts/` is excluded from the vanity regex so it
can't masquerade as a creator slug.

Resolution order is now: cached override → id: URL → /posts/<id> → vanity
(campaigns API + creator-page scrape). Tests cover the post→campaign resolve
and that /posts/ URLs aren't treated as vanities.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bvandeusen merged commit 01e5ce1410 into main 2026-06-06 21:38:33 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledCurator#77