Content sites

Remote-friendly cafe directory with Hugo

Static Hugo site listing cafes rated for wifi speed, plugs and noise, with moderated visitor submissions and no required JavaScript.

hugohtmlcsspython

Built 1 time, downloaded 0 times.

Install from your terminal

Run this in your project folder. It signs you in, shows what changes and asks before it overwrites a file.

npx claude-lab add remote-friendly-cafe-directory-with-hugo-0cf30b
CLAUDE.md
# Cafe directory

## Purpose

Static directory of remote-friendly cafes, rated for wifi speed, plugs and noise.
Data is visitor-submitted and moderated before publishing. Nothing goes live
without a maintainer review.

## Stack

- Hugo extended. Pin the version here: `HUGO_VERSION=<set-me>` (keep in sync with hosting).
- Plain HTML and CSS templates in `layouts/`. No JS framework, no theme, no database.
- Zero required JavaScript to read the directory. Filters work through GET query params.
- Product spec: `SPEC.md`. Build plan: `PLAN.md`. Review rules: `REVIEW.md`.

## Commands

- Local preview: `hugo server -D` (port 1313).
- Build: `hugo --gc --minify --printPathWarnings`.
- Validate content: `python3 scripts/check_cafes.py`.
- Full proof of work: `/verify` skill. Run it before saying work is done.
- Long build output: delegate to the `build-runner` subagent.

## Content layout

- One Markdown file per cafe: `content/cafes/<city>/<slug>.md`.
- City index pages are generated from front matter. Never write city lists by hand.
- Slugs: lowercase, hyphenated, unique within the city.
- Dates: ISO format, `YYYY-MM-DD`.

## Front matter schema

Required fields:

- `name`, `city`, `address`
- `wifi_mbps`: number, 0 to 1000
- `wifi_source`: `self-reported` or `measured`
- `plugs`: `none`, `few` (1-5 seats), `many` (more than 5)
- `noise`: `quiet`, `moderate`, `loud` (scale defined in SPEC.md; do not add values)
- `laptop_friendly`: `true` or `false`
- `hours`, `website`, `lat`, `lng`
- `last_verified`: date
- `submitted_via`: `form` or `manual`

## Rules

- Never publish visitor names, emails, phone numbers or IP data, in any field.
  `submitted_via` is the only submission metadata allowed in content.
- Never edit `public/` or `resources/` by hand. They are generated.
- Never invent addresses, hours or wifi numbers. Ask the user for missing facts.
- A wifi number without `wifi_source: measured` is shown with a self-reported label.
- Use `wifi_source: measured` only with a speed test date and method on record.

## Forms

- The submission endpoint is the placeholder `FORM_ENDPOINT_ID` in
  `layouts/partials/submit-form.html`.
- Never commit a real endpoint key, account token or secret.
- Real values live in the hosting dashboard or environment variables.

## Gotchas

- Hugo path warnings fail the build. Fix them, do not suppress them.
- `hugo --gc` removes unused generated resources. Expect them to disappear after
  template changes.
- Keep `scripts/` on the Python standard library. No new packages without asking.

## Workflow

- Explore, then plan, then code, then run `/verify`.
- Changes to content go through `/add-cafe` when they come from a submission.
- Second-pass review of larger diffs: `/code-review`.

@REVIEW.md
Use for my project