kiwidialecticcalendar-

The Kiwi Dialectic calendar repo

This repository runs the public course calendar for The Kiwi Dialectic.

It does four jobs:

  1. Hosts a public browser-view calendar page with GitHub Pages.
  2. Stores the editable course and lesson data in courses.json.
  3. Generates a subscribable .ics calendar feed for Google Calendar, Apple Calendar, and Outlook.
  4. Documents the workflow for running public, free-subscriber, and paid courses through Substack.

Live URLs

Browser calendar

https://robertmccallnz.github.io/kiwidialecticcalendar-/github-calendar-connector.html

ICS subscription feed

https://raw.githubusercontent.com/robertmccallnz/kiwidialecticcalendar-/main/the-kiwi-dialectic-courses.ics

File map

Core rule

Substack is the school gate. GitHub calendar is the timetable on the wall.

Substack decides who can read a course. The GitHub calendar shows what exists, when it runs, and where readers should click.

Access types

There are three access states used across the repo.

public

Use when anyone can read the lesson.

free_subscriber

Use when a reader must subscribe for free before reading.

Use when the lesson is for paid subscribers.

How to add a new course

  1. Create the course inside the Courses section on Substack.
  2. Decide whether the course is public, free-subscriber, or paid.
  3. Publish or schedule the lesson posts with the correct Substack visibility.
  4. Add the course and lesson entries to courses.json.
  5. Include real Substack post URLs in the link fields.
  6. Run the ICS generator or let GitHub Actions rebuild the feed.
  7. Check the live calendar page.
  8. Test the browser page, lesson buttons, and ICS feed.

JSON pattern

{
  "title": "Gramsci for Aotearoa",
  "slug": "gramsci-for-aotearoa",
  "status": "Live",
  "access": "free_subscriber",
  "calendar_visibility": "public",
  "description": "Power, hegemony, institutions, and counter-power from below.",
  "lessons": [
    {
      "title": "Lesson 1: Why read Gramsci now?",
      "date": "2026-07-07",
      "time": "19:00",
      "location": "Substack email",
      "access": "free_subscriber",
      "calendar_visibility": "public",
      "teaser": "Free subscribers can read the lesson in the Courses section.",
      "link": "https://your-substack-link"
    }
  ]
}

Visibility rules

Use hidden for unfinished, internal, or sensitive material.

Editing rules

Release checklist

Before every course launch:

If something breaks

The page loads but course data looks wrong

Check courses.json for missing commas, broken quotes, wrong field names, or bad links.

The lesson appears publicly when it should not

Check calendar_visibility in both the course and lesson data.

The button language is wrong

Check the access value in courses.json.

A reader can see the listing but cannot read the lesson

That is usually correct behavior if the lesson is subscriber-only or paid. The gate is on Substack, not on GitHub.