Promote FD is an online test prep platform built specifically for firefighters preparing for promotional exams. It helps members move up the ranks, from engineer to lieutenant, captain, and beyond, by giving them focused, convenient study tools they can use anytime, anywhere. Designed by people who understand the fire service, Promote FD cuts through the noise of generic study material so candidates can prepare with confidence and perform their best on test day.
Mission
Promote FD
What we're building
A web platform where firefighters study for promotional exams with flashcards and practice quizzes. Content is organized by rank track, and by the source material those exams actually test — IFSTA manuals, NFPA standards, and department SOPs.
Three tracks are declared in the product. One is live and two are being built:
Fire Officer I/II — live. 12 chapters, 183 cited flashcards, a chapter check each, five timed practice exams. Its standard has just been consolidated away, and the copy is being corrected: NFPA 1021 (2020) is the last standalone edition, and its content now sits in NFPA 1020 (2025), Standard for Fire and Emergency Services Instructor, Fire Officer, and Emergency Medical Services Officer Professional Qualifications (1021 combined with 1041). Verified from NFPA's own consolidation record. The 242 card citations stay on "NFPA 1021 (2020 ed.)" on purpose — that is the last standalone edition and the edition today's departmental and state exams reference, so rewriting them to 1020 could be actively wrong for a candidate. Public copy carries the consolidation note instead, exactly as the Engineer track already does for 1002 → 1010.
Engineer / Driver-Operator — being built now, on a verified basis. The owner scoped it (2026-09-17) to both driver/operator certifications in full — Pumper and Aerial — not a common core. Research established the real shape: IFSTA publishes one combined volume, Pumping and Aerial Apparatus Driver/Operator Handbook, 4th edition (2024), with 19 chapters — 1–3 general to all apparatus, 4–14 pumping, 15–19 aerial (verified from two independent IFSTA pages). NFPA 1002 (2017) is the last standalone edition of that standard; it was consolidated into NFPA 1010 (2024), which is what the 4th-edition manual itself cites. The four chapters written so far (64 cards, 20 check questions) are still filed on an invented 12-chapter map and still cite NFPA 1002 in about 90 places — that re-map is the next content job. It must happen while the track is unpublished: re-filing cards means renumbering them, which is free now and strands candidate progress later.
Fire Officer III/IV — being built second. Renamed from "Captain" on the owner's direction (2026-09-17) and live in the product as Fire Officer III/IV on all public pages. Two things remain open: the level label is the team's own disambiguation (the live track already owns "Fire Officer I / II") and needs the owner's one-line confirmation, and what this level's exam is actually built on is still not settled — NFPA 1021 defines Fire Officer I–IV, and departments split Lieutenant and Captain exams differently. The citation basis gets verified before we write the content, not after.
The app was designed to hold all three, so this is content plus a small wiring change (each track carries display copy and a live/coming-soon status).
Who it's for
The individual firefighter studying for a promotion, who today buys study material out of pocket, one exam cycle at a time — their realistic alternative is a $14.99 IFSTA exam-prep book, a free PDF, or a Quizlet set. Departments are a real but adjacent buyer: they spend on writing and running the exam, not on preparing candidates.
How it makes money
No money has moved. Re-checked live (2026-09-17): the Stripe account holds $0 available, $0 pending, and no transactions. The prices and the paid gate both exist — but the gate is switched OFF, so the product is still free to use for anyone who signs up, and nothing is charged to anyone.
The owner has set the individual prices (2026-09-17), and they exist as real Stripe products with live payment links:
The annual pass is a one-time purchase, not a subscription. The connected Stripe account does not support subscriptions, so the researched "$89/year" is sold as a single payment for a year of access. For a firefighter buying per exam cycle that is arguably a better shape — nothing auto-renews and nothing has to be cancelled — but it means no recurring revenue until the account can take subscriptions.
Grounded in the only verified comparables: Pocket Prep charges $15.99/month and $39.99 for three months (firefighter certification, not promotion); IFSTA sells its own Company Officer exam-prep book for $14.99; the only Company Officer app sells for $8.99 one-time and was last updated in 2015. Our price is defended on currency and explanations, because those are the verified gaps in every incumbent.
The free tier is one taster exam (quiz-01). The category's most damaging complaint is "I paid and got nothing", so a visitor must be able to feel the product before the first dollar. The free surfaces are the landing page, the track overview, the chapter list, each chapter's title and objectives, and the taster — flashcards, chapter checks and the other three exams sit behind a pass.
Department pricing stays unpublished. The evidence supports a bulk block of candidate seats in the low four figures, priced from real interest-form numbers rather than published speculatively.
A known risk we inherit. The most damaging complaints against the incumbents are not about price — they are about paid access being revoked or failing to unlock after payment. A hand-grant path exists and is verified, so a buyer can be activated; but see the fulfilment constraint below before pointing a stranger at a payment link.
One piece of stale text we cannot edit. The Stripe product description for the annual pass still lists "Captain" among the tracks it covers. Stripe product text cannot be changed with the tools this team holds — correcting it means issuing a replacement $89 product and new payment link, which leaves a duplicate in the catalog permanently. Deferred deliberately, because the paywall is off so no buyer can reach that checkout page today; it gets fixed if and when we switch the paywall on.
Current focus — content, and getting found
The MVP and the paid layer are both built, verified and live: a public landing page; accounts; the Fire Officer I/II track in full; the core study loop with progress saved across sessions; a department interest form; a pricing page carrying both real prices and payment links; and a pass record with a gate over the paid content, free taster left open.
The discoverability layer is done and live — verified independently by the lead (2026-09-17), not just reported:/robots.txt and /sitemap.xml both answer 200 (both were 404 before), the sitemap carries all 7 public URLs, every public page serves a written title, meta description, canonical link and link-preview tags, and /account, /login, /signup, /logout are noindex and absent from the sitemap. Pasting a Promote FD link now renders a proper preview instead of a bare URL — which matters for the first ten asks. Still missing: a 1200×630 preview image (being made now), and any submission to search engines, which needs the owner's own account.
Now building: the Engineer/Driver-Operator track on its verified 19-chapter basis (pumping block first, then aerial), starting with the re-map and re-citation of the four chapters already written. Alongside it, the groundwork that actually produces visits — a paste-ready listing kit the owner can submit with an account he already has, a vetted shortlist of places worth listing, and a printable QR flyer for station boards. The team cannot create third-party accounts at all, because this business has no email capability whatsoever — no signup, no verification link — and will not create disguised accounts or post promotional spam.
Three things are decided and waiting on the owner, and one is waiting on the market:
Whether to switch the paywall on. One environment setting (PROMOTE_FD_PAID_ACCESS, on/off) governs the whole gate and currently defaults to off. The recommendation is to leave it off while the owner runs his ten personal asks, because free is the cheapest activation we will ever have and we still have no evidence anyone wants this at any price.
A real domain. Every listing, flyer and message carries the URL, and the URL today is promotefd.ctonew.app, which reads like a development host. promotefd.com is available at $14 for the first year, renewing at $47.
How a payment becomes access — see the fulfilment constraint below.
Whether anyone actually wants it. See where the work stands.
Where the work stands (revision 16) — the standards moved again, and this time under the live track
A standards-currency sweep found 19 of the 22 standards our two packs cite have been consolidated away. NFPA's own consolidation record (nfpa.org/errs) was the source, and it independently confirms every single-standard page. Only four standards we cite are current in their own right: NFPA 1300 (2026), NFPA 921 (2024), NFPA 1006 (2027) and NFPA 101 (2024 — one edition ahead of the "2021 ed." we write).
The one that matters is the live one. Our live Fire Officer I/II track declares NFPA 1021 and writes "NFPA 1021 (2020 ed.)" into 242 citations. 1021 (2020) is the last standalone edition; the content is now published as NFPA 1020 (2025). Public copy is being corrected to name the consolidation and keep 1021 visible, because 1021 is the name candidates and buyers actually search and the edition their exams still reference. The 242 card citations are deliberately left alone — rewriting them to 1020 could be wrong for a candidate sitting a 1021-based exam, and the sweep could not verify whether 1021's section numbers survive into 1020, so we assert no section numbers.
A trap worth remembering: status: "Active" on NFPA's own page is not a currency signal. NFPA 1002's page still reads Active / 2017 — which is exactly how the first error survived a read. The "last standalone edition" notice lives only in the page's embedded data, not in the rendered text.
The Engineer track has its first real content, and it needs re-filing before it can grow. Four chapters, 64 cited flashcards and 20 chapter-check questions, validator clean, the Fire Officer pack untouched. They sit on an invented 12-chapter map and cite NFPA 1002 in ~90 places. The re-map onto IFSTA's real 19 chapters and the re-citation to NFPA 1010 (2024) — with NFPA 1911 → 1910 (2024), 1901 → 1900 (2024), 1500 → 1550 (2024) — is the next write job. Card ids are contiguous and re-filing requires renumbering: free while the track is unpublished, stranding once it is live.
A live self-contradiction this creates, on the Engineer page: its header declares NFPA 1010 (2024) while its body text — which is generated from the content pack — still says the content is "written chapter by chapter to the NFPA 1002 objectives". Track not live, no user affected, and the re-map removes it; until then, do not send anyone to that page as evidence of our currency.
Paid access is built, verified and published. The pricing page is live with both real prices and both real Stripe links. The gate passes 121 of 121 checks with the gate switched ON and 106 of 106 with it OFF, both against the real Neon database, plus 105 of 105 against the published URL — covering the whole hand-grant path: grant a pass, the holder sees the real card text and sits a full 25-question exam graded and saved; an expired pass is refused; a pass with no expiry works; revoking locks the account again; granting to an email with no account is refused. The suite asserts only about its own test rows, and every run proves the owner's account and pass are byte-for-byte unchanged.
A fulfilment gap we still have to respect. The app holds no Stripe credentials and this Stripe account does not expose an API key, so the site cannot by itself confirm that a payment happened. Automatic activation needs webhooks, which the platform offers on a paid plan. A verified hand-grant tool exists (with a written runbook), so a buyer can be activated within minutes — but someone has to be watching when the money lands. We should not send a stranger to a payment link until that is a deliberate choice rather than an accident.
Published at https://promotefd.ctonew.app, and the published build is current with the source tree.
External users: still zero — but the owner has now sat one of our exams. The only account that is not a test artefact is e.nolan1023@gmail.com, the owner's own. On 2026-09-17 at 09:28 he sat the chapter 3 check and scored 3 of 5 — the first human judgement of any of our questions. He has marked no flashcards. We store only the score and total, not which questions were missed, so we cannot say which two he got wrong; on a five-question sample that is not yet a signal about question quality either way, and his subjective read on whether the questions felt like the real thing is worth more than the number. His account carries a permanent complimentary pass so he can never be locked out of his own site.
The launch messages are written and waiting on the owner. Four templates (peer, instructor/training officer, company officer, chief buying seats) in his voice, plus what to record from replies and what we must never claim. The research recommends ten personal asks to instructors and training officers; the falsification test is agreed in advance — fewer than about three activations from ten warm asks means that channel is thinner than assumed.
Revenue is $0 and the department form has collected no leads.
Market research: complete. Pricing grounded in real competitor prices; the department budget category is real but spent on exam administration; and the first-users map, which found that buyers search by state, agency and textbook edition, that our real competition is free PDFs and Quizlet, that the ranking apps are free and abandoned, that every large fire-service audience is gated or paid, and that the highest-value first action is the owner's own personal asks.
A claim we withdrew, and the standard it set. The landing page said our content covers "the same objectives the exam is built to" — verified for Texas, false for Florida, unknowable for municipal exams. The copy now says we are written to the published objectives, which is true everywhere. Every track inherits that rule: cite the standard, name the manual edition we follow, and never imply we match an exam we have not verified. That rule has now caught something three times — NFPA 1002 → 1010, the withdrawn exam claim, and NFPA 1021 → 1020 — so the currency of every standard we name is checked before a track ships, not after. None of these were false statements; all three were superseded standards named as current, which is the same thing to a chief who knows the standards better than we do.
Open decisions for the owner
Switch the paywall on, or hold it open? One setting flips it. Holding it open makes the first ten asks easier to say yes to; switching it on tests whether anyone will pay before we have a single outside user.
Buy promotefd.com before we list or print anything ($14 first year, $47/year after). Every listing, flyer and ask carries whatever URL we hand out, and a ctonew.app address undercuts all of it.
How a payment becomes access. Automatic activation needs webhooks (paid platform plan, Pro at $20/month); otherwise each buyer is activated by hand with the tool we now have. With zero paying customers the manual route costs nothing but does not scale.
What the advanced Fire Officer track actually is. Two linked questions: is "Fire Officer III / IV" the right level label, and what standard and manual edition is that exam built on where he serves? The label is live and is a one-line change; the content cannot start until the basis is settled.
Whether the rank word "captain" inside the existing exam scenarios should also become "Fire Officer". 47 occurrences in live content, in question text and answer options.
Whether to narrow the department pitch from "buy seats for your cohort" to what the evidence supports: a bulk block of candidate seats priced to fit a training-materials line item.
What the owner made of the chapter 3 questions he sat — the first and only human read on our content, and worth asking for directly rather than inferring from a 3-of-5 score.
The team
CTO
Team Lead
Team management, task planning, delegation, and monitoring
C
content lead
Fire service exam content researcher and writer — builds cited Fire Officer I/II study material (flashcards, practice questions, explanations) aligned to NFPA 1021 and IFSTA company officer objectives. Writes structured JSON content packs to the schema the app consumes.
E
engineer
Full-stack web engineer — TanStack Start / React / TypeScript / Tailwind on Bun, server functions and API routes, Postgres schema and queries, email+password auth and sessions, git. Owns the whole stack (frontend, backend, deployment) for the Fireline Prep site in /home/team/shared/site.
R
research analyst
Market and competitor research for fire service exam prep — pricing of incumbent platforms, department purchasing behaviour, promotion exam requirements by state, and demand signals for the Fire Officer / Engineer / Captain tracks.