Skip to content

Social intake and OpenProfile.md per person - #72

Merged
ralyodio merged 1 commit into
mainfrom
worktree-social-intake-openprofile
Sep 13, 2026
Merged

ralyodio merged 1 commit into
mainfrom
worktree-social-intake-openprofile

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

What

  • POST /api/v1/people/from-social: open people from a network handle (what myna follows, or their followers). Each lands in a campaign, the bio becomes a content_topic/social_bio signal, and an openprofile job is queued per person. Idempotent on (network, handle).
  • openprofile job: reads the profile (Bluesky public AppView, Mastodon lookup, else OpenGraph on the page), then the home page it names (OpenGraph card, rel=me links, /.well-known/openprofile.md). A rel=me back to the profile raises the person to 0.9 and records the site's accounts as identities, mailto: included; otherwise 0.5 and links stay links. Builds the Markdown per https://logicsrc.com/openprofile, stores it in openprofiles, then re-decides the person through regenerateFor so a card can appear.
  • GET /api/v1/people/:id/openprofile.md serves it as text/markdown (with Link: rel=canonical when the person publishes their own). GET /people/:id carries an openprofile summary.
  • CLI: og add-social bluesky:ada.example https://hachyderm.io/@ada, og openprofile <personId>. MCP: add_people_from_social, get_openprofile.
  • Migration 0035_openprofiles.sql.

Why

myna is gaining an afterFollow hook and a --outreachgraph flag (mynaposter PR to follow) so every account it follows can be queued here for assessment. Until now a person could only enter from a GitHub handle, a company URL or a CSV.

Tests

bun test: 1,491 pass across 102 files, including 19 new (providers builder and readers, pipeline intake and job with stubbed HTTP, API routes). tsc and prettier --check clean.

Not verified live: the worker running the job against real Bluesky and Mastodon endpoints. Both readers use the same public endpoints the existing providers already call.

🤖 Generated with Claude Code

https://claude.ai/code/session_01S7yeJUHGxA4P5N74xnsRPQ

…or each

POST /api/v1/people/from-social opens a person from a network handle (the
accounts myna follows, or their followers), puts them in a campaign, keeps
the bio as a content_topic signal so a card can trigger, and queues one
`openprofile` job per person. The job reads the network's public profile
(Bluesky AppView, Mastodon lookup, or the page's OpenGraph card), follows
the home page it names for its card and rel=me links, and looks for a
published /.well-known/openprofile.md. A rel=me back to the profile is two
sources agreeing: the person goes to 0.9 and the site's accounts become
identities, a mailto among them included. Otherwise 0.5, and the links are
only links. The Markdown follows logicsrc.com/openprofile and is served at
GET /api/v1/people/:id/openprofile.md as text/markdown, workspace-scoped.

`og add-social` and `og openprofile` on the CLI; `add_people_from_social`
and `get_openprofile` on the MCP server. Migration 0035 adds `openprofiles`.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S7yeJUHGxA4P5N74xnsRPQ
@ralyodio
ralyodio marked this pull request as ready for review September 13, 2026 01:09
@ralyodio
ralyodio merged commit 2ff3e55 into main Sep 13, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant