Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
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
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,16 @@
# Hugo
resources/
public/
public-docura/
public/pagefind/
hugo_stats.json
.hugo_build.lock
assets/jsconfig.json
.DS_Store
# Claude memory
memory/
MEMORY.md

# editor temp files
*~
*#
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "themes/docura"]
path = themes/docura
url = https://github.com/docura/docura
115 changes: 115 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# PROJECT KNOWLEDGE BASE

**Generated:** 2026-07-23
**Commit:** d8679db
**Branch:** docs/rewrite-docura

## OVERVIEW

Hugo (extended, 0.161.1) static docs site for ExamTools (ham radio exam platform), published at docs.exam.tools via Netlify. Docura theme as pinned git submodule; Pagefind search via npx. Content-only repo — no application code, no tests, no lint CI.

## STRUCTURE

```
examtools-docs/
├── content/docs/ # 12 sections, ~53 pages — THE PRODUCT (see content/docs/AGENTS.md)
├── content-test/ # experimental overlay, mounted BEFORE content/ in hugo.yaml
├── data/en/docs/ # sidebar.yaml — authoritative sidebar nav (manual, not generated)
├── layouts/ # theme overrides — active presentation layer (see layouts/AGENTS.md)
├── themes/docura/ # theme, git submodule — do not edit in place
├── assets/css/ # Hugo-processed custom CSS (examtools-custom.css)
├── static/img/docs/ # doc screenshots, grouped by section
├── images/ # misc/legacy images, NOT site-served doc screenshots
├── hugo.yaml # site config: theme, language, mounts, goldmark
├── netlify.toml # build/deploy config (Hugo version pin lives here)
├── view.sh # local preview script (port 1316)
├── maintainer.md # contributor + publishing workflow
└── all.md, all-2.md # stale compiled legacy docs — not built, ignore unless mining old content
```

## Project source

Some users of this repo may have access to the HamStudy / ExamTools codebase; when that is the case we should use that codebase to fact check and clarify things. The most likely location if it's present would be `../hamstudy2/`.

## Domain equivalency

Note that the following domains are aliases to each other:

- hamstudy.org / ham.study
- examtools.org / exam.tools

## WHERE TO LOOK

| Task | Location | Notes |
|------|----------|-------|
| Add/edit a doc page | `content/docs/<section>/<slug>.md` | then update `data/en/docs/sidebar.yaml` |
| Reorder sidebar | `data/en/docs/sidebar.yaml` | manual; not derived from front matter |
| Change homepage | `layouts/_default/home.html` | hardcoded HTML, NOT `content/_index.md` |
| Change header/footer/sidebar rendering | `layouts/partials/` | overrides Docura partials |
| Custom CSS | `assets/css/examtools-custom.css` | processed via Hugo pipes in `stylesheets.html` |
| Add screenshots | `static/img/docs/<section>/` | root-relative URL `/img/docs/...` in markdown |
| Update theme | `git submodule update --remote themes/docura` | commit the submodule bump |
| Publishing workflow | `maintainer.md` | PR → master → push master:release |
| Hugo version | `netlify.toml` (`HUGO_VERSION`) | minimum required version lives here |

## CONVENTIONS

- Sidebar nav is manually curated in `data/en/docs/sidebar.yaml` — adding a page without a sidebar entry leaves it orphaned from nav and prev/next links.
- Root `layouts/` overrides most Docura templates; theme edits happen via override files, not in `themes/docura/`.
- `content-test/` mounts ahead of `content/` — its files shadow real content; check it when build output looks wrong.
- `enableGitInfo: true` — `date`/`lastmod` come from git; never set them in front matter.
- Goldmark `unsafe: true` — raw HTML allowed in markdown.
- External links get `target="_blank"` automatically via `layouts/_default/single.html`.
- Kebab-case dirs/filenames; section landing pages are `_index.md`.

## ANTI-PATTERNS (THIS PROJECT)

- Do NOT edit `themes/docura/` in place — submodule; override in root `layouts/` instead.
- Do NOT add `date`/`lastmod` to front matter — git-derived.
- Do NOT rely on `content/_index.md` for the homepage — it is STALE (references `layout: hextra-home` + `hextra/*` shortcodes from a prior Hextra migration; those shortcodes do not exist). The real homepage is `layouts/_default/home.html`.
- Do NOT treat `all.md`/`all-2.md` as live docs — legacy compiled dumps; `public/` is generated, never source.
- Do NOT expect search under `hugo server` — Pagefind only exists after full build.
- No archetypes — new pages are hand-written markdown with front matter.

## UNIQUE STYLES

- Procedural end-user docs: numbered steps, relative internal links, descriptive alt text, root-relative image paths.
- Branch model: feature branches → PR (Netlify deploy preview) → `master`; publish = `git push origin master:release`.
- `.editorconfig`: UTF-8, LF, 2-space indent, final newline; markdown keeps trailing whitespace.

## COMMANDS

```bash
git submodule update --init --recursive # first-time setup
hugo server # basic dev preview
./view.sh # strict preview (:1316, no fast render, i18n warnings)
hugo --gc --minify && npx pagefind --site public # full build + search index
npx serve -l 1316 public # serve indexed build
git push origin master:release # publish to production
```

## SKILLS (load for agent work)

Three project skills in `.agents/skills/` — coding agents SHOULD load them for docs/site work:

| Skill | Source | Use for |
|-------|--------|---------|
| `documentation` | [HamStudy/documentation-skills](https://github.com/HamStudy/documentation-skills) | Organizational framework for the docs — loosely Diátaxis-based (tutorials/how-to/reference/explanation) |
| `accessible-technical-writing` | [HamStudy/documentation-skills](https://github.com/HamStudy/documentation-skills) | Writing style and patterns for clarity + accessibility |
| `hugo` | [HamStudy/gohugo-skill](https://github.com/HamStudy/gohugo-skill) | Hugo usage — templates, mounts, pipes, theme work |

Managed via the `skills` CLI (`skills-lock.json` pins versions):

```bash
npx skills add hamstudy/documentation-skills # add/update the docs skills
npx skills add hamstudy/gohugo-skill # add/update the hugo skill
npx skills experimental_install # restore all skills from skills-lock.json
npx skills update -p # update project skills to latest
```

## NOTES

- No lint, link-checker, or test suite — Netlify build success + deploy-preview eyeball is the only validation.
- `go.mod` exists only for Hugo module deps (theme transitive); no Go code.
- Node 20 needed only for Pagefind/serve via npx; no `package.json`.
- Search unavailable in `hugo server`; test search only via full build + `npx pagefind --site public`.
37 changes: 8 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,13 @@
**For Examtools documentation contributors and maintainers see [maintainer.md](maintainer.md).**
# ExamTools Documentation

Following is the default wowchemy README:
Source for the [ExamTools documentation site](https://docs.exam.tools/) — the end-user reference for [ExamTools by SignalStuff](https://exam.tools/), the modern platform for administering amateur radio license exams.

<!--<p align="center"><a href="https://wowchemy.com" target="_blank" rel="noopener"><img src="https://sourcethemes.com/academic/img/logo_200px.png" alt="Wowchemy Website Builder"></a></p>-->
## Tech stack

# Book Template for [Wowchemy Website Builder](https://wowchemy.com)
- **[Hugo](https://gohugo.io/)** (extended) — static site generator
- **[Docura](https://github.com/docura/docura)** — theme (git submodule at `themes/docura`)
- **[Netlify](https://netlify.com/)** — hosting and deploy previews

The **Book Template** empowers you to create **product documentation**, **digital books**, **personal notes**, and **knowledge bases**.
## Contributing

[Check out the latest demo](https://book-starter.netlify.app/) of what you'll get in less than 10 minutes, or [view the showcase](https://wowchemy.com/user-stories/).

[**Wowchemy**](https://github.com/wowchemy/wowchemy-hugo-modules) makes it easy to create a beautiful website for free using Markdown, Jupyter, or RStudio. Customize anything on your site with widgets, themes, and language packs.

- 👉 [**Get Started**](https://wowchemy.com/docs/install/)
- 📚 [View the **documentation**](https://wowchemy.com/docs/)
- 💬 [Chat with the **Wowchemy community**](https://discord.gg/z8wNYzb) or [**Hugo community**](https://discourse.gohugo.io)
- 🐦 Twitter: [@wowchemy](https://twitter.com/wowchemy) [@GeorgeCushen](https://twitter.com/GeorgeCushen) [#MadeWithWowchemy](https://twitter.com/search?q=(%23MadeWithWowchemy%20OR%20%23MadeWithAcademic)&src=typed_query)
- 💡 [Request a **feature** or report a **bug** for _Wowchemy_](https://github.com/wowchemy/wowchemy-hugo-modules/issues)
- ⬆️ **Updating Wowchemy?** View the [Update Guide](https://wowchemy.com/docs/update/) and [Release Notes](https://wowchemy.com/updates/)

## Crowd-funded open-source software

To help us develop this template and software sustainably under the MIT license, we ask all individuals and businesses that use it to help support its ongoing maintenance and development via sponsorship.

### [❤️ Click here to unlock rewards with sponsorship](https://wowchemy.com/plans/)

<!--
[![Screenshot]()](https://github.com/wowchemy/starter-book)
-->

<!--
[![](https://ga-beacon.appspot.com/UA-78646709-2/starter-book/readme?pixel)](https://github.com/igrigorik/ga-beacon)
-->
See [maintainer.md](maintainer.md) for setup instructions, the editing workflow, front matter reference, and publishing steps.
Loading