commit 6768489072cec0c84837185bd3d6f35fb9587ee3 Author: Will Estes Date: Thu Jul 16 13:21:31 2026 -0400 Initial scaffold: reader-magnet course stub for thistleandmoth.org Mirrors michaelferrara-eec-courses. course.yml is active: false and all copy is TODO until the real reader-magnet file/cover art are ready and the thistleandmoth-list Listmonk list exists. Co-Authored-By: Claude Sonnet 5 diff --git a/.gitea/workflows/sync.yml b/.gitea/workflows/sync.yml new file mode 100644 index 0000000..ec8d43f --- /dev/null +++ b/.gitea/workflows/sync.yml @@ -0,0 +1,26 @@ +name: Sync courses +on: + push: + branches: [master] + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Package and sync + run: | + tar czf /tmp/courses.tar.gz courses + status=$(curl -s -o /tmp/sync-response.json -w '%{http_code}' \ + -X POST "http://eec-thistleandmoth:8080/admin/sync" \ + -H "Authorization: Bearer ${THISTLEANDMOTH_EEC_SYNC_TOKEN}" \ + --data-binary @/tmp/courses.tar.gz) + cat /tmp/sync-response.json + echo + if [ "$status" -ge 300 ]; then + echo "sync failed with status $status" + exit 1 + fi + env: + THISTLEANDMOTH_EEC_SYNC_TOKEN: ${{ secrets.THISTLEANDMOTH_EEC_SYNC_TOKEN }} diff --git a/README.md b/README.md new file mode 100644 index 0000000..c111477 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# thistleandmoth-eec-courses + +Course content for [eec](https://gitea.reground.org/will/eec), the self-paced +email course engine — this instance served at eec.thistleandmoth.org. Push to +`master` and CI syncs `courses/` straight to production — there's no staging +step, so treat a push here the same as a push to `eec` itself. + +Full reference for course/step file format, `course.yml` fields, the +readiness step, drip-triggered courses, and sync guardrails lives in the +[`eec-courses`](https://gitea.reground.org/will/eec-courses) README — the +format is identical, only the target instance differs. + +## Layout + +``` +courses/ + reader-magnet/ + course.yml + day-0.md + day-1.md +``` + +`reader-magnet` is the funnel for thistleandmoth.org's `/gift` page (see the +`thistleandmoth-site` repo). Same shape as michaelferrara.org's: landing page +signup → subscriber added to the thistleandmoth.org Listmonk list immediately +(`signup_list_name` in `course.yml`, no click required) → the reader-magnet +file email goes out (`{{.CTALink}}` in `day-0.md` is a direct download link, +not a webpage) → a day-1 follow-up email 24h later with no list/conversion +mechanics of its own. + +## Stub — two things need to happen before this goes live + +1. **`course.yml` is `active: false`.** All the content below is a + placeholder (TODO subject lines, TODO body copy, and a `redirect_url` + pointing at a file that doesn't exist yet in the `thistleandmoth-downloads` + bucket — see `thistleandmoth-site`'s `/gift` page, which is the same kind + of stub). Replace the TODOs with real copy once the reader-magnet file and + cover art are ready, then flip `active: true`. +2. **`signup_list_name: "thistleandmoth-list"` doesn't exist yet in + Listmonk.** Sync rejects the course outright if the name doesn't resolve + to exactly one list — create that list in the Listmonk admin UI first + (matching the naming convention of `michaelferrara-list` / + `Two Squirrels Press`), then push. + +Until both of those are done, CI runs against this repo will fail sync with +a clear error — that's expected, not a sign anything's broken. + +## Deploying + +Push to `master` → `.gitea/workflows/sync.yml` tars up `courses/` and +`POST`s it to this domain's `eec-thistleandmoth` container over the internal +Docker network, authenticated with `THISTLEANDMOTH_EEC_SYNC_TOKEN` (a Gitea +Actions secret shared with the `eec-thistleandmoth` Ansible role's copy). No +separate deploy step, no staging — a push here goes live immediately (once +`active: true` and the Listmonk list exist). diff --git a/courses/reader-magnet/course.yml b/courses/reader-magnet/course.yml new file mode 100644 index 0000000..87e585e --- /dev/null +++ b/courses/reader-magnet/course.yml @@ -0,0 +1,11 @@ +active: false + +slug: reader-magnet +name: "Reader Magnet (TODO: story title)" +from_email: hello@thistleandmoth.org +ceiling_hours: 24 +signup_list_name: "thistleandmoth-list" + +steps: + - file: day-0.md + - file: day-1.md diff --git a/courses/reader-magnet/day-0.md b/courses/reader-magnet/day-0.md new file mode 100644 index 0000000..2b50e5c --- /dev/null +++ b/courses/reader-magnet/day-0.md @@ -0,0 +1,12 @@ +--- +subject: "TODO: subject line — here's your story" +redirect_url: "https://downloads.thistleandmoth.org/reader-magnet/story.epub" +--- + +TODO: day-0 email copy goes here. + +[Get my story]({{.CTALink}}) + +Talk soon, + +Thistle & Moth diff --git a/courses/reader-magnet/day-1.md b/courses/reader-magnet/day-1.md new file mode 100644 index 0000000..fed08e7 --- /dev/null +++ b/courses/reader-magnet/day-1.md @@ -0,0 +1,5 @@ +--- +subject: "TODO: day-1 follow-up subject" +--- + +TODO: day-1 follow-up copy goes here.