From 78f4aa61958bd144da84a4951fae7da8358c6f60 Mon Sep 17 00:00:00 2001 From: Boris Mann Date: Sat, 4 Jul 2026 19:31:07 -0700 Subject: [PATCH] docs: add v0.1.0 release announcement and npmx link --- README.md | 2 ++ docs/releases/v0.1.0.md | 66 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 docs/releases/v0.1.0.md diff --git a/README.md b/README.md index 9f88055..55edd89 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Export public posts from a [Ghost](https://ghost.org/) CMS and upload them to [O The live test publication is at ****. +View the package on npm: **[npmx.dev/package/ghostoff](https://npmx.dev/package/ghostoff)**. + ## Installation Install globally from npm: diff --git a/docs/releases/v0.1.0.md b/docs/releases/v0.1.0.md new file mode 100644 index 0000000..cc2d242 --- /dev/null +++ b/docs/releases/v0.1.0.md @@ -0,0 +1,66 @@ +# GhostOff v0.1.0 — my first npm release + +I just published my first ever npm package: **GhostOff**. + +GhostOff is a small command-line tool that exports public posts from a [Ghost](https://ghost.org/) CMS and publishes them to [Offprint](https://offprint.app/) over the AT Protocol, using the [Standard.site](https://standard.site/) document/article lexicons. + +You can find it on npm at **[npmx.dev/package/ghostoff](https://npmx.dev/package/ghostoff)**. + +## What it does + +- Paginates through the Ghost Content API and downloads each post. +- Converts Ghost HTML into Offprint’s block-based format (`app.offprint.content`). +- Downloads and re-uploads images as atproto blobs, resizing them when needed. +- Writes a `site.standard.document` record for each post plus an `app.offprint.document.article` that points back to it. +- Tracks state locally, so reruns update existing records instead of duplicating them. +- Supports both OAuth (via a browser loopback flow) and app-password authentication. + +## Try it + +Install it globally with npm: + +```bash +npm install -g ghostoff +``` + +Or run it once with `npx`: + +```bash +npx ghostoff -- --help +``` + +You’ll need a Ghost publication URL and Content API key, plus an existing Offprint/Standard.site publication AT-URI. See the README for the full `.env` setup. + +Run a dry pass first to inspect what would be uploaded: + +```bash +ghostoff --dry-run +``` + +Then run it for real: + +```bash +ghostoff +``` + +## Live example + +The test migration I ran while building GhostOff is live at **[ghostoff.offprint.app](https://ghostoff.offprint.app)**. + +## Published capabilities + +I also shipped the pieces as independent capabilities on the vit network so other agents can discover, remix, or adopt them: + +- `ghost-content-export` — fetch posts from Ghost +- `convert-offprint-articles` — turn Ghost HTML into Offprint blocks +- `post-offprint-records` — publish records to an AT Protocol PDS +- `atproto-oauth-cli` — OAuth login for Node.js CLI apps + +## Links + +- npm package: **[npmx.dev/package/ghostoff](https://npmx.dev/package/ghostoff)** +- Live publication: **[ghostoff.offprint.app](https://ghostoff.offprint.app)** +- Source: **[tangled.org/bmann.ca/ghostoff](https://tangled.org/bmann.ca/ghostoff)** +- Offprint: **[offprint.app](https://offprint.app/)** + +If you try it out, let me know what breaks. -- 2.51.2