Skip to content

Ground-up docs rewrite: Docura theme, full content restructure, search, and FAQ#89

Open
nkbooth wants to merge 19 commits into
masterfrom
docs/rewrite-docura
Open

Ground-up docs rewrite: Docura theme, full content restructure, search, and FAQ#89
nkbooth wants to merge 19 commits into
masterfrom
docs/rewrite-docura

Conversation

@nkbooth

@nkbooth nkbooth commented May 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR delivers a complete ground-up rewrite of the ExamTools end-user documentation, migrating from the legacy Wowchemy theme to a new Docura-based site with restructured content, a new information architecture, and significant content improvements.

Theme and infrastructure

  • Migrated from Wowchemy to Docura (selected after auditing multiple theme candidates)
  • Applied ExamTools brand colors site-wide (navy header, gold/blue accents)
  • ExamTools by SignalStuff logo in header; custom favicon; programmatic copyright year in footer
  • Customized landing page: dark navy hero, classExam2.svg background, three callout cards
  • Dark/night mode link color fixes; blockquote gold accent; sidebar section labels; article title weight
  • Fixed all Hugo deprecation warnings (languageCodelocale, languageNamelabel, .Site.Datahugo.Data, .Language.LanguageName.Language.Label)

Search

  • Implemented Pagefind static search (no external API dependency)
  • Magnifying-glass icon in header opens a modal search overlay

SEO and PWA

  • Open Graph and Twitter Card meta tags in head.html for social/Slack link previews
  • Upgraded OG image and PWA manifest icons to 512px ExamTools icon
  • Customized manifest.json with ExamTools name and theme color

Content — new and rewritten pages

All content written from scratch following the Diátaxis framework (quickstarts, how-tos, concepts, reference, troubleshooting):

  • account-setup: Create Account, Confirm VEC Accreditation, Add Signature
  • getting-started: New VE Quickstart, New Team Lead Quickstart
  • teams: Teams Overview, Create a Team, Become a Team Lead
  • sessions: Sessions Overview, Create a Session, Manage a Session
  • exam-day: Start a Session, Add an Applicant, Conduct an Exam, Complete an Applicant, Close a Session
  • paper-exams: Full workflow (8 pages)
  • applicants: Applicant-facing reference page (what to expect, PIN usage, exam interface)
  • remote-exams: Remote Exam Differences
  • reference: Environments, Glossary, Roles and Permissions
  • about: About ExamTools
  • troubleshooting: Account Issues, Session Issues, Get Help
  • faq.md: Expanded with 8 new entries covering team lead vs. owner/co-owner permissions, VEC credential sync timing, account requirements, the delegate step, session/applicant status differences, finalization prerequisites, "not part of session" warning, and accidental finalization

Content corrections

  • Aligned VEC sync timing language across add-vec-accreditation.md, become-team-lead.md, and faq.md: ExamTools reads VEC records every 4 hours; VECs update on their own schedule; allow up to 24–48 hours total

What's not in this PR

  • Screenshots (in progress — 52 markers identified across account-setup, getting-started, sessions, exam-day, paper-exams, teams)

nkbooth added 11 commits April 30, 2026 21:12
Replace the legacy Wowchemy/Academic Hugo theme (last updated 2020) with
the modern Hextra theme via git submodule. This rewrite consolidates the
fragmented documentation structure into a clear, learner-centric hierarchy:
getting-started, account-setup, teams, sessions, exam-day, paper-exams,
remote-exams, about, applicants, reference, and troubleshooting.

The old VEC-specific sections (arrl/, w5yi/, cve/, ve/) are consolidated
into reusable how-to guides. Multi-file Hugo configuration (config/_default/)
is replaced with a single, readable hugo.toml. Netlify build now uses
Hugo 0.161.1 extended and properly initializes git submodules.

This change positions the docs site for future maintainability, better
mobile rendering, and faster iteration on content without template overhead.

Breaking Change: Documentation URLs will change with the new theme structure.
Refs: docs/rewrite-hextra
Complete rewrite of all end-user documentation using the Diátaxis
framework (quickstarts, how-tos, reference, troubleshooting). New and
restructured pages cover account setup, teams, sessions, exam day,
paper exams, remote exams, and troubleshooting. Obsolete pages removed;
new pages added (give-exam, complete-applicant, managing-applicants,
add-ves-to-session, edit-team, manage-team-admins, callsign-change,
faq). 52 screenshot markers placed throughout for future illustration.

Replaces the Wowchemy-based site with Docura. Docura is customised via
project-level layout overrides and examtools-custom.css — the theme
itself is unmodified. Brand styling includes ExamTools navy header,
gold/blue accent palette, ExamTools by SignalStuff logo, ExamTools
favicon, and a dark hero landing page with classExam2.svg background
and three quickstart callout cards.
- hugo.yaml: languageName→label, languageCode→locale
- Project layout overrides: .Site.Data→hugo.Data (list, single, sidebar, article-footer), .Language.LanguageName→.Language.Label (site-header), .Site.LanguageCode→.Site.Language.Locale (baseof)
- static/manifest.json: ExamTools name, navy theme color, brand icons
og:site_name, og:type (website/article), og:title, og:description, og:url, og:image;
twitter:card summary with matching title/description/image.
Image points to icon-180.png (best available — a dedicated 1200x630 OG image would improve previews).
Replace 180px placeholder with et_icon_512.png (navy rounded-square, gold antenna/A)
in og:image, twitter:image, and manifest.json icons list.
- netlify.toml: chain 'npx pagefind --site public' after hugo in all three build contexts
- head.html: load pagefind-ui.css/js and initialize PagefindUI on #site-header-search
- .gitignore: exclude public/pagefind/ (generated artifact)
- view.sh: prompt to build with Pagefind and serve statically, or fall back to hugo server
- maintainer.md: document local search testing procedure
Three bugs fixed:

1. site-header.html was missing #site-header-search entirely — our earlier
   customization dropped the div, so no search container existed in the DOM.

2. Wrong Pagefind UI variant: the Default UI (pagefind-ui.js) renders an inline
   input field, unsuitable for a narrow header slot. The Component UI
   (pagefind-component-ui.js, introduced in Pagefind 1.5.0) renders a trigger
   button (search icon) that opens a full search modal — the correct pattern.

3. pagefind-modal must live in <body> separately from the trigger; added it to
   baseof.html just before the scripts partial.

Result: search icon appears in the header; clicking it opens the Pagefind modal.
Covers finding a session, registration, PIN entry, exam interface
navigation, and post-exam FCC application tracking. Primary message
is to contact the VE team for anything session-specific.

Wired into sidebar under "For Applicants" section.
New FAQ entries cover: team lead vs. owner/co-owner permissions,
VEC credential sync timing, account requirement for paper-only VEs,
delegate step explanation, session vs. applicant status, finalization
prerequisites, 'You are not part of this session' alert, and
recovering from accidental early finalization.

Also corrects become-team-lead.md sync timing from 'a few hours'
to the accurate 24-48 hour window with 4-hour polling cadence.
Update to match the accurate 24-48 hour / 4-hour polling language
used in become-team-lead and the FAQ.
Pagefind uses optional chaining (?.) which requires Node 14+. Without an
explicit NODE_VERSION, Netlify was defaulting to Node 12, causing the build
to fail with "Unexpected token ?" when running npx pagefind.
@nkbooth
nkbooth marked this pull request as ready for review May 1, 2026 15:11
nkbooth added 2 commits May 1, 2026 15:56
Introduce sandbox environment documentation to guide VEs through practice
workflows without affecting production records or VEC submissions. This
includes a new "Sandbox and Training" section at weight 8, detailing how to
create fake applicants, use dummy VEs (E/G prefix test accounts), interpret
sandbox-specific visual indicators (sandcastle watermark, SandBox email prefix,
beta CSCE URLs), and verify completed training sessions.

Updates create-account.md with expanded sign-up form field details, a
sandbox-specific callout with separate account and URL guidance, and a
troubleshooting section addressing common verification and email issues.
Links environments.md to the training-session guide. Adjusts nav weights
(about +1, applicants +1, reference +1, troubleshooting +1) to accommodate
sandbox at weight 8.

The sandbox is now a first-class documented feature of the onboarding and
training narrative, supporting both new VE ramp-up and ongoing practice for
session managers.
@nkbooth

nkbooth commented May 1, 2026

Copy link
Copy Markdown
Collaborator Author

Commits added since PR was opened

Three commits have landed on the branch after the PR was created:


c2a1b7da — fix: pin Node.js 20 in Netlify build environment

Adds NODE_VERSION = "20" to netlify.toml. Without this, Netlify was defaulting to Node 12, which does not support optional chaining (?.) — causing the Pagefind indexing step (npx pagefind) to fail with Unexpected token ? during the build.

Files changed: netlify.toml (+1 line)


3555559a — Screenshots and content tweaks across all major sections

⚠️ The commit message on this one is garbled (appears to be terminal output accidentally used as the message). The actual content is the screenshots work referenced in the PR description under "screenshots at all 52 markers."

Adds 43 new screenshot images across four sections (account-setup, paper-exams, sessions, teams) and makes corresponding prose tweaks to reference them — small wording adjustments, alt text hookups, and a few minor content corrections across 21 docs pages.

Files changed: 69 files — 21 .md files (content tweaks) + 48 .png images (new screenshots)


b62569d0 — docs: add sandbox and training session documentation

Introduces the Sandbox and Training section as a first-class part of the docs:

  • New content/docs/sandbox/_index.md section landing page
  • New content/docs/sandbox/training-session.md how-to guide covering:
    • Prerequisites (separate examtools.dev account; team lead permissions — auto-carried from production, or request manually from ExamTools support)
    • Creating fake applicants (walk-in with FRN 0000000000 + "Create Fake", or register at hamstudy.dev)
    • Using dummy VEs ([E|G][01-99]USR callsigns, passwordNN passwords, no stored signature — must draw manually)
    • Taking a practice exam (= key shortcut to ace questions)
    • Sandbox-specific visual differences: sandcastle watermark on PDFs, [SandBox/Dev]: email prefix, beta CSCE verification URL
  • Expanded create-account.md: sign-up form field details, sandbox callout (same process, substitute examtools.dev URLs), troubleshooting section (no confirmation email, 48h+ verification delay, rejected Official Copy, wrong callsign)
  • data/en/docs/sidebar.yaml: Sandbox and Training nav group added (Docura sidebar is manually defined here, not driven by content weights)
  • content/docs/reference/environments.md: link to training-session guide added
  • Weight bumps on about, applicants, reference, troubleshooting _index.md files (+1 each) to accommodate sandbox at weight 8

Files changed: 9 files — 2 new markdown pages, 5 updated _index.md weight fields, 1 sidebar YAML update, 1 environments reference update

nkbooth added 2 commits May 4, 2026 21:25
… docs

- Hero: halve classExam2.svg opacity (0.10 → 0.05) to reduce busyness
- Hero cards: opaque dark-navy background + backdrop blur replaces near-transparent wash; text is now clearly readable against the SVG background
- Doc watermark: reduce sandcastle-drawing.svg opacity to 0.018 and add saturate/contrast filter so it reads as texture rather than image
- Light mode: off-white --background (#f6f8fa) reduces screen glare; article container gets a semi-transparent white lift (rgba 0.82) with subtle shadow, suppressed in dark/night modes
@HanleyStrappman

HanleyStrappman commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

I give training to VEs on how to use exam.tools, I always start in the sandbox and never in production so combining the create account for both sandbox and production I'm not a fan of. I want to be able to point the trainee to the create sandbox account like I do now with the current documentation. I don't want to have to have a conversation with the candidate to give them enough context to follow what is in this update
Scott AG7T

@taxilian

Copy link
Copy Markdown
Contributor

I don't want to have to have a conversation with the candidate to give them enough context to follow what is in this update

I'm not sure I fully understand the problem; can you elaborate?

As far as creating an account I would generally think it would be much easier to create both accounts at the same time and submit verification for each.

@nkbooth

nkbooth commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator Author

@HanleyStrappman -

Just to confirm I'm understanding, you're advocating for 2 different pages, one for the sandbox and one for the production site, that are exactly the same but with the URLs swapped?

I think there's probably ways to solve your concern of "new VEs don't understand the difference between the 2 sites and i need to get them into training before explaining it" without duplication of pages and maintenance burden. Would calling out sandbox vs. live in line with first class links to both help better? Or maybe a more clear callout sentence or two at the head of the document?

@HanleyStrappman

Copy link
Copy Markdown
Contributor

I don't want to have to have a conversation with the candidate to give them enough context to follow what is in this update

I'm not sure I fully understand the problem; can you elaborate?

As far as creating an account I would generally think it would be much easier to create both accounts at the same time and submit verification for each.

I usually have someone that is very experienced with the old ARRL way of giving exams, or someone that has never given an exam. I find giving explicit guidance on the process to follow to get setup for the training really helps both cases. I have had folks get a production account and expect that to work for training so I try and steer them away from getting a production account until the training is complete. The training I do is online and all the things a VE does in the session is actually done. I don't want to point a person at the documentation that will confuse them more about what they need to do. People have a hard time following directions ;-)

@HanleyStrappman

Copy link
Copy Markdown
Contributor

@HanleyStrappman -

Just to confirm I'm understanding, you're advocating for 2 different pages, one for the sandbox and one for the production site, that are exactly the same but with the URLs swapped?

I think there's probably ways to solve your concern of "new VEs don't understand the difference between the 2 sites and i need to get them into training before explaining it" without duplication of pages and maintenance burden. Would calling out sandbox vs. live in line with first class links to both help better? Or maybe a more clear callout sentence or two at the head of the document?

Perhaps a parameter on the URL could be used to customize the page contents between production and sandbox? It that parameter doesn't exist then showing it the combined way would be ok. One think I think about is "can the person really answer the question I'm asking" in my training cases they can't answer whats on the create account page very well so I have to do more work with them before the session.

@nkbooth

nkbooth commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator Author

Just to confirm I'm understanding, you're advocating for 2 different pages, one for the sandbox and one for the production site, that are exactly the same but with the URLs swapped?

I may not have been entirely clear here; I mean 2 distinct pages (new prod account, new sandbox account), with the walkthrough URLs matching the title destination.

Perhaps a parameter on the URL could be used to customize the page contents between production and sandbox?

The docs for both environments are combined; they have no concept of "sandbox docs" vs. "Production docs" - both programatically and in prose. The code and docs aren't intended to diverge; they're intended to be mirrors with a small handful of exceptions so that they're effectively mirrors. Then the sandbox is a testing ground that is isolated from production, but still behaviorally authoritative. Docs should theoretically not need additional mirrors in a perfect world.

One think I think about is "can the person really answer the question I'm asking" in my training cases they can't answer whats on the create account page very well so I have to do more work with them before the session.

This is what i think would be most value add knowing - what are the parts of the docs around setting up an account that experienced VEs aren't understanding or getting friction from? That's what I'd like to solve.

@HanleyStrappman

Copy link
Copy Markdown
Contributor

Just to confirm I'm understanding, you're advocating for 2 different pages, one for the sandbox and one for the production site, that are exactly the same but with the URLs swapped?

I may not have been entirely clear here; I mean 2 distinct pages (new prod account, new sandbox account), with the walkthrough URLs matching the title destination.

Perhaps a parameter on the URL could be used to customize the page contents between production and sandbox?

The docs for both environments are combined; they have no concept of "sandbox docs" vs. "Production docs" - both programatically and in prose. The code and docs aren't intended to diverge; they're intended to be mirrors with a small handful of exceptions so that they're effectively mirrors. Then the sandbox is a testing ground that is isolated from production, but still behaviorally authoritative. Docs should theoretically not need additional mirrors in a perfect world.

One think I think about is "can the person really answer the question I'm asking" in my training cases they can't answer whats on the create account page very well so I have to do more work with them before the session.

This is what i think would be most value add knowing - what are the parts of the docs around setting up an account that experienced VEs aren't understanding or getting friction from? That's what I'd like to solve.

The web says that query parameters can be used in the doc to customize output so I don't understand the "both programitically" statement.

The confusion arises with examtools having 2 identity systems one for sandbox and one for production. Newbies can't figure that out easily. I do personally like the seperate identities because it allows me to be a laurel team lead in the sandbox when I am not one in production, this is because I help out with CVE training for various VECs.

I'm just trying to make my life as a trainer easier. I will figure out how to make things work out in any case. I hope that comes across.

Thanks,
Scott AG7T

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants