Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/rules/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ after explicit approval.

| Source | Licence | Relevance to this archive |
| --- | --- | --- |
| [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills) | MIT | **Useful in the optional site phase**: `frontend-ui-engineering`, `code-review-and-quality`, `documentation-and-adrs`, `git-workflow-and-versioning`, accessibility guidance. |
| [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills) | MIT | **Useful for the site code** (the static site is built and live): `frontend-ui-engineering`, `code-review-and-quality`, `documentation-and-adrs`, `git-workflow-and-versioning`, accessibility guidance. |
| [TikiTribe/claude-secure-coding-rules](https://github.com/TikiTribe/claude-secure-coding-rules) | MIT | Low now (no app code). Revisit only if a dynamic site is added. |
| [kariedo/claude-code-security-rules](https://github.com/kariedo/claude-code-security-rules) | MIT | Low now. Revisit with dynamic code. |
| [wiz-sec-public/secure-rules-files](https://github.com/wiz-sec-public/secure-rules-files) | CC-BY-NC-ND-4.0 | Low now. **NonCommercial/NoDerivatives**: note the licence constraint before adopting. |
Expand All @@ -45,6 +45,6 @@ after explicit approval.

## Built-in Claude Code skills worth using here

- `artifact-design`: for the optional static site (Phase 3).
- `artifact-design`: for the static site (built and live at new.blimacake.com).
- `code-review` / `security-review`: before merging tooling or site code.
- `verify`: to confirm the importer and site actually behave as intended.
6 changes: 3 additions & 3 deletions .claude/rules/project-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

## What this archive is

A canonical, portable archive of the **recipes** from blimacake.com. The end
state is a public, CC BY 4.0 collection that stands alone after the WordPress
site retires.
A canonical, portable archive of the **recipes** from blimacake.com. It is a public,
CC BY 4.0 collection that stands alone (it does not depend on the WordPress site) and
is also served as a website at <https://new.blimacake.com>.

## Scope (hard boundary)

Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/copyright-concern.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ assignees: ["jposluns"]
- [ ] Remove the material

**Anything else we should know?**
<!-- Optional. You can also email jeff@posluns.com instead of filing here. -->
<!-- Optional. You can also email jeff@posluns.ca instead of filing here. -->
8 changes: 3 additions & 5 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ name: pages
# Builds the Eleventy site (with the Pagefind search index) and deploys it to
# GitHub Pages at new.blimacake.com.
#
# One-time setup by the owner before the first successful run (see
# docs/site-deploy.md): make the repo public, set Settings > Pages > Source to
# "GitHub Actions", and point the DNS CNAME for new.blimacake.com at
# jposluns.github.io. Until Pages is enabled, the deploy step will fail; that is
# expected.
# The one-time setup is complete and the site is live at new.blimacake.com
# (repo public, Pages source = GitHub Actions, DNS CNAME for new.blimacake.com
# pointing at jposluns.github.io). See docs/site-deploy.md for the setup record.

on:
push:
Expand Down
4 changes: 3 additions & 1 deletion .working/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ AI-assistant reliability, separately from the archive content itself.

| File / dir | Purpose |
| --- | --- |
| `resume.md` | Session handoff: the state of the project across phases (import, curation, e-book, public-readiness, site). Read first. |
| `hallucination-metrics.md` | Log of AI hallucination **catches** (caught before merge) and **escapes** (caught after), by failure-mode class. The core guard-rail metric. |
| `import-log.md` | Per-recipe import record: source, decisions, and any flagged discrepancies. |
| `validate-sweeps/` | Dated records of full-archive validation sweeps (schema + images + links). |
| `review-todo.md` | Flagged-not-fixed items awaiting an owner decision (all currently resolved/closed). |
| `validate-sweeps/` | Reserved for dated records of full-archive validation sweeps (schema + images + links); currently empty. |

These files are part of governance, not the published archive. They stay in the
repo as an audit trail.
25 changes: 20 additions & 5 deletions .working/resume.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
<!-- meta: title="Session resume: Blima Cake recipe archive" | type="working-log" | archive="blimacake" -->
# Session resume: Blima Cake recipe archive

**Last session ended:** 2026-06-27.
**Read this first, then `CLAUDE.md` + `.claude/rules/`.** This is the authoritative
handoff. Work on `claude/<topic>` branches; **never commit to `main`**.
**Last session ended:** 2026-06-27 (import + curation + readability). Work has
continued since then; for the current, authoritative status see the **Project status**
section of [`CLAUDE.md`](../CLAUDE.md). This file remains the detailed handoff for the
import and curation phases, plus the 2026-07-07 update below.
**Read this first, then `CLAUDE.md` + `.claude/rules/`.** Work on `claude/<topic>`
branches; **never commit to `main`**.

---

Expand All @@ -13,6 +16,15 @@ Everything the owner asked for is merged to `main`. **487 recipes**, all four CI
gates green (Frontmatter & images, Markdown lint, Link check, Secret scan).
`validate_frontmatter` + `check_images` report 0 errors / 0 missing / 0 orphans.

**Update (2026-07-07): more shipped since this handoff was written.** The
distributable EPUB e-book (`BlimaCake.epub`) plus its release workflow; a
public-readiness pass (welcome-first `README.md`, `docs/read-the-cookbook.md`,
`docs/about-this-archive.md`, and navigation breadcrumbs on every recipe); and the
**static website**, now **live at <https://new.blimacake.com>**
([ADR 0003](../docs/adr/0003-static-site-phase.md)) with Pagefind search, Recipe
JSON-LD/SEO, a sitemap, and a GitHub Pages deploy workflow. The **repository is now
public.**

### Phase 1: import (DONE, PRs #3 to #21)

All 16 categories imported verbatim from the WXR export and quote-verified, with
Expand Down Expand Up @@ -129,8 +141,11 @@ After curation, two more owner-directed efforts shipped:
`"… ; pending owner review"`. An owner spot-check can flip these.

3. **Optional later phases** (per CLAUDE.md / `.claude/rules/README.md`): the static
site (Phase 3) and re-verification once defects are resolved. The `grc_library`
rule pack and vetted overlays can be layered in then.
site is built and live (see the 2026-07-07 update above). What remains optional is
the verification flip (item 2), re-verification once defects are resolved, and,
later, pointing the apex `blimacake.com` domain at the site once the WordPress site
retires. The `grc_library` rule pack and vetted overlays can be layered in for the
site code if desired.

---

Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,21 @@ Recipe imports are logged both here (summary) and in

### Changed

- **Documentation status refresh (post go-public and site launch).** Brought the
project docs in line with reality now that import, curation, the e-book, the
public-readiness pass, and the live website have all shipped and the repo is public.
Updated `CLAUDE.md` (replaced the stale "Active work / Phase 1 in progress" section
with a current "Project status"), `GOVERNANCE.md` (publication gate marked
satisfied; repo public), `docs/about-this-archive.md` ("Looking ahead" replaced with
"The website"), `docs/phase-1-runbook.md` (marked completed/historical),
`_meta/taxonomy.yml` and `.working/resume.md` and `.working/README.md` comments,
`.claude/rules/` notes, `docs/site-deploy.md` and the `pages.yml` header (setup
complete), and expanded `tools/README.md` to document the curation, build, and guard
tools. Added a superseding note to [ADR 0001](docs/adr/0001-archive-architecture.md)
for the go-public decision (the decision record itself is left intact). Standardized
the public contact on `jeff@posluns.ca` in `GOVERNANCE.md` and the copyright issue
template. Added the live site link to `README.md`. No recipe content changed.

- **Site landing page: the "A few to start with" row now shows only recipes that have
a photo** (via a new `withImage` filter), so the featured strip has no placeholder
tiles.
Expand Down
42 changes: 30 additions & 12 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ authoritative; this file is the index and the project-specific context.
## What this project is

A **canonical archive** of the recipes from blimacake.com, stored as portable
Markdown + co-located images, governed for accuracy and destined to be made
public under CC BY 4.0 once the site retires. Accuracy and provenance outrank
speed, cleverness, and breadth.
Markdown + co-located images, governed for accuracy and published under CC BY 4.0.
The repository is public and the collection is also live as a website at
<https://new.blimacake.com>. Accuracy and provenance outrank speed, cleverness,
and breadth.

## Why it is built this way

Expand Down Expand Up @@ -57,17 +58,34 @@ python tools/validate_frontmatter.py recipes/
# Check every referenced image exists and flag orphans
python tools/check_images.py recipes/

# Importer (Phase 1+): inspect a WordPress export before importing
# Importer: inspect a WordPress export before importing (used for the initial import)
python tools/wxr_to_markdown.py --input wp-export/blimacake.wxr --list-categories
```

## Active work

Phase 1 (recipe + image import) is in progress on branch
`claude/phase-1-import`. If asked to "continue" or "run the Phase 1 import",
read [`docs/phase-1-runbook.md`](docs/phase-1-runbook.md) first; it is the
session handoff with the locked decisions, prerequisites (re-upload the WXR
export; egress allowlist), and exact commands.
## Project status

The archive is complete and public; the major phases are all finished and merged to
`main`:

- **Import (done):** all 16 categories, 487 recipes and their images, from the WXR
export.
- **Curation (done, [ADR 0002](docs/adr/0002-curation-phase.md)):** inline
metric+imperial measurements, defect corrections, controlled tags, a few
re-categorizations, and an instruction-readability rephrase pass.
- **E-book (done):** `BlimaCake.epub` at the repo root, published by
[`.github/workflows/release.yml`](.github/workflows/release.yml).
- **Public front door (done):** a welcome-first `README.md`, an install guide, and
navigation breadcrumbs on every recipe.
- **Website (done, live):** an Eleventy site with search and SEO, deployed to GitHub
Pages at <https://new.blimacake.com> by
[`.github/workflows/pages.yml`](.github/workflows/pages.yml)
([ADR 0003](docs/adr/0003-static-site-phase.md)).

Optional follow-ups that remain: flipping recipe `verification` from
pending-owner-review to verified, and (later) pointing the apex `blimacake.com`
domain at the site once the WordPress site retires. The Phase 1 import handoff,
[`docs/phase-1-runbook.md`](docs/phase-1-runbook.md), is kept for reference only;
that phase is finished and its branch is merged.

## Rule modules (`.claude/rules/`)

Expand All @@ -88,4 +106,4 @@ corpus they draw on, plus its vetted third-party overlays (TikiTribe, Wiz,
Kariedo, addyosmani), lives in the `grc_library` Claude rules pack and can be
layered in later via its `setup-generator-prompt.md`. See
[`.claude/rules/README.md`](.claude/rules/README.md) for the adoption notes and
which packs are relevant when the optional static-site phase begins.
which packs are relevant to the site code now that the static-site phase has shipped.
19 changes: 11 additions & 8 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,25 @@ project's stance and process are stated in [`NOTICE.md`](NOTICE.md):
- Known third-party items are flagged per recipe via the `rights` frontmatter
field (`status`, `source`, `note`).
- Rights holders can report a concern via the **"Copyright / attribution
concern"** GitHub issue template or by emailing **<jeff@posluns.com>**. We act
concern"** GitHub issue template or by emailing **<jeff@posluns.ca>**. We act
in good faith, correcting attribution or removing material, and record the
outcome in `CHANGELOG.md`.

When importing, if you have any reason to think an item came from elsewhere,
set its `rights.status` to `third_party` or `unknown` and note what you know,
rather than leaving it implicitly marked as original.

## Publication gate (Phase 4)
## Publication gate (Phase 4): satisfied

The repository is **private** until **all** of the following hold:
The repository was **private** until the Owner chose to publish it. The gate that
governed that decision was:

1. blimacake.com has ceased operation (or the owner explicitly authorises early
publication).
2. `LICENSE` contains the full, verbatim CC BY 4.0 legal code: **satisfied**
1. blimacake.com has ceased operation, or the owner explicitly authorises early
publication: the owner authorised publication.
2. `LICENSE` contains the full, verbatim CC BY 4.0 legal code: satisfied
(installed at Phase 0; attribution to Blima Posluns set).
3. A full validation sweep passes with no outstanding fidelity discrepancies.
3. A full validation sweep passes with no outstanding fidelity discrepancies:
satisfied (the CI gates pass on `main`).

Only the Owner may flip visibility to public.
The repository is now **public**, and the collection is also served as a website at
<https://new.blimacake.com>. Only the Owner may change repository visibility.
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ one place so they are easy to read, cook from, and keep.
**487 recipes** in all: cakes, cookies and bars, main courses, salads, soups, breads,
Passover dishes, and much more. Every measurement is given in both cups and metric.

> 🍰 **Browse the whole collection online at [new.blimacake.com](https://new.blimacake.com)**:
> searchable, with a photo and a clean page for every recipe. It is the easiest way to
> read and cook from these.

## Read the cookbook

The whole collection is also a free e-book you can read on your phone, tablet, Kindle,
Expand All @@ -21,11 +25,14 @@ Kobo, or Apple Books, with no internet needed once it is on your device.
has simple, step-by-step instructions for Apple Books, Kindle, Kobo, Google Play
Books, and more.

## Browse the recipes here
## Browse the recipes

Prefer to read online without downloading anything?

- **[All recipes, by category](recipes/README.md)**: a picture index of every category.
- **[The website: new.blimacake.com](https://new.blimacake.com)**: the friendliest
way to browse, with search and a photo page for every recipe.
- **[All recipes, by category](recipes/README.md)**: a picture index of every category,
here on GitHub.
- **[Recipes by tag](recipes/tags.md)**: find things like chocolate, lemon, Passover,
or no-cook.

Expand Down
16 changes: 6 additions & 10 deletions _meta/taxonomy.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
# Recipe taxonomy for the archive.
#
# This file is the controlled vocabulary for `categories` (and optionally
# `tags`) used in recipe frontmatter. It is populated in Phase 1 after we run
# `tools/wxr_to_markdown.py --list-categories` against the WordPress export and
# decide which WordPress categories are recipes (vs. the dogs and books, which
# are out of scope).
# `tags`) used in recipe frontmatter. It was populated during the Phase 1 import
# from `tools/wxr_to_markdown.py --list-categories` against the WordPress export,
# keeping only the WordPress categories that are recipes (the dogs and books are
# out of scope).
#
# Format:
# categories:
# <slug>:
# label: "Human readable name"
# wp_categories: ["original WP category name(s)"] # provenance
#
# Categories in use. Populated incrementally during Phase 1 import; the three
# below are those used by the initial 5-recipe review batch. The remaining
# recipe categories surfaced by `--list-categories` (Cakes, Main Courses,
# Cookies & Bars, Salads, Passover, Side Dishes, Appetizers, Sauces & Rubs,
# Desserts, Soups, Breakfast & Brunch, Breads, Pies, Muffins, Seafood, Drinks)
# are added as recipes in each are imported in the full run.
# Fully populated: all 16 recipe categories are listed below (the import is
# complete). Add a category here only if a new recipe category is ever introduced.
categories:
appetizers:
label: "Appetizers"
Expand Down
15 changes: 8 additions & 7 deletions docs/about-this-archive.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,11 @@ Corrections and additions are welcome. [`CONTRIBUTING.md`](../CONTRIBUTING.md) e
how to propose a change, and [`GOVERNANCE.md`](../GOVERNANCE.md) explains how changes
are reviewed and how the collection is kept accurate.

## Looking ahead

A possible next phase would present the collection as a friendly website (the feel of
a recipe blog) generated from this same Markdown and hosted on GitHub Pages. It is
scoped, with options and a rough cost, in
[ADR 0003](adr/0003-static-site-phase.md); it is a proposal awaiting the owner's
decision, not built yet.
## The website

The collection is also a website at <https://new.blimacake.com>, with a feel closer
to a recipe blog: browse by category, search across every recipe, and a clean page
per recipe. It is generated from this same Markdown by an Eleventy build and deployed
to GitHub Pages, so it always matches the archive. The design and decisions are in
[ADR 0003](adr/0003-static-site-phase.md), and the setup and deploy notes are in
[`site-deploy.md`](site-deploy.md).
6 changes: 6 additions & 0 deletions docs/adr/0001-archive-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ Claude Code rules pack and vetted third-party overlays can be reused.
publication gate (see `GOVERNANCE.md`) controls the flip to public and the
application of the full licence text.

> **Superseded (2026-07-07):** the owner authorised publication and the
> repository was made public (ahead of the WordPress site retiring), satisfying
> the publication gate in `GOVERNANCE.md`. The collection is also served as a
> website at <https://new.blimacake.com> ([ADR 0003](0003-static-site-phase.md)).
> The rest of this decision (the licence and the gate itself) still stands.

6. **Governance & guard rails up front.** Branch protection + CODEOWNERS,
PR template with a verification checklist, mandatory CHANGELOG entries, CI
gates (schema, images, markdown lint, link check, secret scan), AI
Expand Down
19 changes: 13 additions & 6 deletions docs/phase-1-runbook.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
<!-- meta: title="Phase 1 import: runbook / session handoff" | type="doc" | archive="blimacake" -->
# Phase 1 import: runbook / session handoff

This file is the memory for the recipe + image import. A fresh Claude Code
session has no prior chat context, so everything needed to resume is here.
> **COMPLETED (historical).** Phase 1 (the recipe + image import) is finished: all
> 16 categories and 487 recipes were imported, and the tooling was merged to `main`
> (the `claude/phase-1-import` branch no longer exists). This runbook is kept only as
> a record of how the import was run. The commands below refer to that now-merged
> branch and cannot be run as written. For the current project status see
> [`CLAUDE.md`](../CLAUDE.md).

**Branch:** `claude/phase-1-import` (all Phase 1 tooling lives here, not on
`main` yet). Check it out before doing anything:
This file was the memory for the recipe + image import. A fresh Claude Code
session had no prior chat context, so everything needed to resume was here.

**Branch (at the time):** `claude/phase-1-import` (all Phase 1 tooling lived here
before it was merged to `main`). The import session checked it out first:

```sh
git fetch origin claude/phase-1-import && git checkout claude/phase-1-import
Expand Down Expand Up @@ -33,8 +40,8 @@ git fetch origin claude/phase-1-import && git checkout claude/phase-1-import

- **Scope:** recipes only. Import `post_type == post`; exclude Pages
(About/Chelsea/Jackson/Brie/Books) and the `Blog of the Day` category.
- **Licence:** CC BY 4.0, attributed to **Blima Posluns**. Repo stays private
until the site retires.
- **Licence:** CC BY 4.0, attributed to **Blima Posluns**. (The repository has
since been made public; it was private during the import.)
- **Images (store):** WordPress-hosted (50) and Flickr (110, Blima's own).
Download highest quality, **strip ALL metadata/EXIF**, name `<slug>-NN.ext`,
**commit directly** to the repo (no Git LFS).
Expand Down
4 changes: 4 additions & 0 deletions docs/site-deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ The website is built from the Markdown by [`.github/workflows/pages.yml`](../.gi
and published to GitHub Pages at `new.blimacake.com`. This note lists the one-time
setup the owner does, and how deploys happen after that.

> **Status: complete and live.** The setup below has been done and the site is live at
> <https://new.blimacake.com>. These steps are kept for reference (for example, to
> reconfigure the domain or to redo setup on a new host).

## One-time setup

1. **Make the repository public.** GitHub Pages needs a public repository on the free
Expand Down
Loading
Loading