The Problem

Ghost solves the operational complexity of running a modern publishing business—memberships, subscriptions, newsletters, and paid content—without stitching together a dozen SaaS tools. It gives publishers a single Node.js CMS with a built-in business model, so they can focus on content instead of infrastructure and payment plumbing.

What This Does

This fork is a focused subset of the Ghost monorepo, containing only the apps/activitypub application plus the shared CI and developer tooling. The activitypub app is a React/TypeScript frontend that implements Ghost's federated social reader—users can follow profiles, read posts from other ActivityPub servers, and reply to notes. The core UI lives in apps/activitypub/src/views/ with feed, inbox, and explore views, while shared logic sits in apps/activitypub/src/hooks/ (e.g. use-activity-pub-queries.ts) and apps/activitypub/src/utils/ (e.g. content-formatters.ts, get-reading-time.ts).

The repo is heavily engineered for AI-assisted development: .agents/skills/ and .claude/skills/ contain structured skill definitions for adding admin API endpoints, creating database migrations, and committing code. The .github/workflows/ directory shows serious CI maturity—release, staging deploy, preview, and cleanup pipelines are all present.

How To Use It

Setup: This is a subdirectory of the larger Ghost monorepo, so it likely needs the monorepo's yarn install from the repo root. The apps/activitypub/package.json is the only dependency manifest present, but there is no lockfile at this level.

Configuration: Copy .env.example to .env and set the required values. The dev environment is containerized via .devcontainer/devcontainer.json and compose.devcontainer.yaml.

Running it: The entry point is apps/activitypub/src/app.tsx (mounted from index.html). The dev stack is orchestrated through .devcontainer/start-dev-stack.sh.

From the repo root (requires the full Ghost monorepo) yarn install yarn dev

The README's canonical install path is npm install ghost-cli -g && ghost install local, but that applies to the full Ghost project, not this isolated fork.

Real-World Use

A publisher running Ghost wants to join the fediverse without migrating their audience. This activitypub app becomes the reader-facing interface: a subscriber opens https://theirghost.com/activitypub, sees a federated feed of followed creators, replies to a post from a Mastodon user, and the reply federates back through Ghost's ActivityPub server implementation. The routes.tsx file defines the SPA routing, and use-activity-pub-queries.ts handles the API calls to the Ghost backend.

Code Health & Issues

Low - No lockfile in apps/activitypub/package.json — builds are not reproducible without the monorepo's root lockfile. This is a real concern if this fork is meant to stand alone. Low - Only 7 test files for 55 TSX components — the UI layer is under-tested relative to its size. Tests that exist cover hooks and API logic, not component rendering. Med - This is a fork with 0 stars and no commit history shown. The apps/activitypub directory is the only real code; the rest is tooling. Be cautious about assuming this is actively maintained. Low - .cursor/worktrees.json and .github/aw/actions-lock.json suggest heavy automation tooling that may not be relevant to external contributors.

The CI setup is genuinely strong (GitHub Actions with release, staging, and preview workflows), and the ADR directory shows architectural discipline. The AI-agent skill files are a thoughtful addition for teams using Claude or Codex.

The Bottom Line

This is a well-engineered slice of Ghost's ActivityPub reader, with mature CI and thoughtful developer tooling. It is not a standalone project—it needs the broader Ghost monorepo to function, and the lack of a lockfile and sparse tests are real caveats. Use it if you are integrating Ghost's federated reader into a larger Ghost deployment; avoid it if you need a self-contained ActivityPub client.