You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.9 KiB
Markdown
78 lines
2.9 KiB
Markdown
---
|
|
# edu-tx54
|
|
title: Deploy edu mdbook to Cloudflare Pages at vibebooks.elijah.run
|
|
status: completed
|
|
type: epic
|
|
priority: normal
|
|
created_at: 2026-03-10T23:30:01Z
|
|
updated_at: 2026-03-10T23:30:01Z
|
|
---
|
|
|
|
## Background
|
|
|
|
From `edu/TODO.md`:
|
|
- Host the mdbook on Cloudflare Pages
|
|
- Host on vibebooks.elijah.run
|
|
- Create an `infra/` directory containing opentofu configs for the above
|
|
- Add a big disclaimer about the content being AI-generated
|
|
|
|
## Sub-tasks
|
|
|
|
### 1. Add AI-generated disclaimer
|
|
|
|
Add a prominent disclaimer page or preface to the mdbook. The disclaimer should say (in the user's words):
|
|
> these [chapters] are AI generated and not intended to be definitive, trustworthy, or even good, just an experiment in generating tailored educational content about topics I am interested in but not sure where to start, and with a practical focus on exercises with Rust since that is the language I use most often
|
|
|
|
Placement options:
|
|
- A dedicated `src/disclaimer.md` page added first in `src/SUMMARY.md`
|
|
- Or a callout block at the top of every chapter (requires mdbook preprocessor)
|
|
- Recommended: `src/disclaimer.md` as the first page, with a short note in each chapter's preamble
|
|
|
|
### 2. Create `edu/infra/` with OpenTofu configs
|
|
|
|
Follow the pattern from `quotesdb/infra/` (Cloudflare provider, tofu modules).
|
|
|
|
Minimal resources:
|
|
- `cloudflare_pages_project` — create the Pages project named `vibedbooks`
|
|
- `cloudflare_pages_domain` — bind `vibebooks.elijah.run` to the Pages project
|
|
- `cloudflare_record` — CNAME DNS record pointing `vibebooks` at the Pages subdomain
|
|
|
|
File layout:
|
|
```
|
|
edu/infra/
|
|
├── main.tf # provider config, cloudflare_pages_project
|
|
├── dns.tf # cloudflare_record and cloudflare_pages_domain
|
|
├── variables.tf # cloudflare_account_id, cloudflare_zone_id, etc.
|
|
├── outputs.tf # pages subdomain URL
|
|
└── .gitignore # *.tfstate, .terraform/
|
|
```
|
|
|
|
All `resource` and `data` blocks must have a comment explaining their purpose (per CLAUDE.md conventions).
|
|
|
|
### 3. Configure mdbook build for CF Pages
|
|
|
|
Cloudflare Pages can auto-build mdbook sites if given the right build command and output directory. Set in the Pages project config:
|
|
- Build command: `mdbook build`
|
|
- Build output directory: `book`
|
|
- Root directory: `edu/`
|
|
|
|
Alternatively, use a CI/CD pipeline (GitHub Actions / Gitea Actions) to build and push to the Pages project via `wrangler pages deploy`.
|
|
|
|
### 4. Add edu/justfile
|
|
|
|
Add a `release` recipe to `edu/justfile` (see justfiles ticket) that triggers the Pages deployment once infra is configured.
|
|
|
|
## Relevant files
|
|
|
|
- `edu/book.toml` — mdbook configuration
|
|
- `edu/src/SUMMARY.md` — add disclaimer page
|
|
- `edu/src/disclaimer.md` (new)
|
|
- `edu/infra/` (new directory)
|
|
- Cloudflare dashboard: Pages project, DNS zone `elijah.run`
|
|
|
|
## Validation
|
|
|
|
- `tofu validate && tofu plan` from `edu/infra/`
|
|
- `mdbook build` from `edu/` — builds without errors
|
|
- After deploy: `curl -I https://vibebooks.elijah.run` returns 200
|