← All playbooks · Raw API
resources-hub-pages
# Resources hub & listing pages — Headwater Science
Playbook for **resource indexes and tag listing pages** — not article detail pages.
## URL patterns
| Public path | Driven by |
|-------------|-----------|
| `/resources/news/` | `articleType` `resources/news` |
| `/resources/publications/` | `articleType` `resources/publications` |
| `/resources/events/` | `articleType` `resources/events` |
| `/resources/news/{tag}/` | Tag + article type |
| `/resources/publications/{tag}/` | Tag + article type |
| `/resources/events/{tag}/` | Tag + article type |
| `/categories/` | `customType` `categories` |
| `/categories/{tag}/` | Tag entry |
Article details: `/{articleTypeSlug}/{primaryTopic}/{slug}/` (e.g. `/resources/news/press-release/{slug}/`) — use `news-pages`, `publications-pages`, or `events-pages`. Markdown: append `.md` to the public path. Do not `open --page-slug` a listing URL.
## How listing pages work
Listing URLs are **taxonomy-generated** — do not create standalone **page** entries for `/resources/news/press-release/` etc.
| Target | What to edit |
|--------|--------------|
| **Article type** | `indexPageTopContent` — news hero collection or tag listing hero |
| **Tag** | `title`, `description`, optional hero overrides |
| **customType** `categories` | Category directory + listing collections on `/categories/` |
| **Articles** | Tags control listing membership |
```bash
cms-edit list --type articleType
cms-edit list --type tag
cms-edit index sync
```
## Index components
### News hub
- **News hero articles** on `resources/news` `indexPageTopContent`
- Listing grids auto-hydrate from tagged articles
### Publications hub
- **Tag listing hero** on `resources/publications` `indexPageTopContent`
- **Publications list** collection for filterable grid
### Events hub
- **Image Hero** on `resources/events` `indexPageTopContent` (photo + overlay card)
- **Events listing** collection — upcoming conference landers only. Horizontal rows: lockup, title, Where/When/Booth from `subtitle`, `summary`, outline CTA
- **Pardot form handler** on the same `indexPageTopContent` — same shared form as the event template; hub inquiry copy on the left (`anchor: inquiry`)
### Categories hub
- **Category directory** + publications/news listing blocks on `customType` `categories`
## Workflow
1. Read `cms-edit://customer/articles`
2. Identify hub (articleType/customType) vs tag entry
3. Edit `indexPageTopContent` / hero components — retag articles to change listings
4. `preview urls` on listing path
5. `diff` → `save` → `task-publish-handoff`
## Out of scope
- Creating page entries for listing URLs
- Article body edits — use article playbooks
## Publish handoff
`save` creates drafts only — publish in Contentful UI when ready.