Follow-up to the launch below: the DR/BDR election and subnetting practice pages now show up where people actually look — cards on the Articles page and the homepage blog grid (newest-first, older OSPF pieces rotated to the full archive), plus topic links in the CCNA Study Hub — subnetting practice under Domain 1, DR/BDR under Domain 3 beside the adjacency-states article. SITE_VERSION 1.51.0 → 1.51.1.
Two additions to the Q&A graph, both aimed at things people actually search. How Is the OSPF DR/BDR Elected? covers the election mechanics the adjacency-states article deliberately left out — highest interface priority, the Router-ID tiebreak, why it's non-preemptive, and forcing the DR with ip ospf priority — cross-linked with OSPF adjacency states and area 0. And CCNA Subnetting Practice Questions is a crawlable set of 12 worked problems — network/broadcast, host counts, masks, VLSM sizing, wildcards, the magic-number method — each with a click-to-reveal answer so you can try before you check, funnelling into the subnet practice drill. Also on the homepage: with the CCNA passed, the character card now reads CCNA 100 and gains a CCNP row for the Enterprise track in progress. SITE_VERSION 1.50.1 → 1.51.0.
Added a link to SwitchLab, a free, install-free platform for drilling switching concepts interactively in the browser. It sits as a callout under the CCNA Study Hub banner on the homepage and as the first card on the Labs page, flagged as an external resource — a good companion to the downloadable Packet Tracer labs when you just want to drill without firing up a simulator. Small housekeeping note: the homepage is cached aggressively so the app loads instantly and works offline, so I bumped the version to make sure returning visitors actually pick up the new link instead of a stale cached page. SITE_VERSION 1.50.0 → 1.50.1.
The practice content got wider. The Daily Drill authored pool went from 16 to 40 questions and its lab prompts from 7 to 21, so the non-generated half stays fresh for a couple of weeks instead of cycling in a few days. In the arcade, CommandGuesser grew from 32 to 48 task questions plus 27 verification commands, and PortGuesser from 26 to 40 services (with more IP protocols and secure-alternative pairs) — every entry real CCNA-scope syntax, no invented commands. The genuinely generated games (Subnet Survivor, RouteGuesser, STP Root Battle) were already effectively endless and untouched. I also widened the engine's no-repeat window to 20, so the ON FIRE (12-answer streak) and COMBO KING (20-answer streak) badges are now earned on entirely distinct questions rather than a short loop. Separately logging here: the TCP vs UDP article and its Packet Flow lab went live on 2026-06-17. SITE_VERSION 1.49.0 → 1.50.0.
With the CCNA 200-301 in hand, I've started studying toward the Cisco CCNP Enterprise (ENCOR + ENARSI). The author bio across the site now says so — credentials page, study hub, start-here, the homepage, and llms.txt. To be clear it's in progress, not yet certified: the CCNA stays the only Cisco cert in the structured credential record until the CCNP exams are passed. SITE_VERSION 1.48.0 → 1.49.0.
The MY PROGRESS dashboard — your completion tracker, six-domain coverage grid, badge wall, and what-to-study-next list — used to be tucked away. Now it sits in the main nav on every page, so wherever you are on the site you're one tap from seeing how far you've come. The study hub also points to it from its progress summary. As always it's all kept in your own browser — nothing is sent anywhere. SITE_VERSION 1.47.0 → 1.48.0.
It's official: I passed the Cisco CCNA 200-301 on the first attempt. Domain scores — Network Fundamentals 95%, Network Access 80%, IP Connectivity 80%, IP Services 90%, Security Fundamentals 100%, Automation & Programmability 90%. Every "candidate / in progress / studying for" line across the site has been retired in favour of certified: the credentials page now carries the full domain-score breakdown, and the Person/credential schema, homepage, study hub, start-here, llms.txt, and the two CCNA articles all reflect the pass. Same labs, same drills, same site — now written by someone who's been through the exam, not toward it. SITE_VERSION 1.46.0 → 1.47.0.
The badge wall grew from 20 to 43. Every one of the five games — PortGuesser, Subnet Survivor, CommandGuesser, RouteGuesser, and STP Root Battle — now has its own win ladder: clear a Daily run at 50% (PASS), 75% (SOLID), and 100% (FLAWLESS), plus an ON FIRE badge for a 12-answer streak (only reachable in Endless mode). On top of those, three cross-game goals: ARCADE REGULAR for playing all five, COMBO KING for a 20-answer streak in any game, and PERFECT ARCADE for a clean 100% sweep of every game. Each run now durably records your best Daily percentage and longest streak per game, so the badges unlock the moment you earn them and the toast fires once. All local to your browser, nothing sent anywhere. SITE_VERSION 1.45.0 → 1.46.0.
Every drill, game, and study day now feeds a single XP total. Climb a ladder of eight retro ranks — from CABLE MONKEY all the way to THE LINEMAN — with your streak and rank pinned in the nav on every page. Hitting a 7-day streak earns a streak shield that automatically covers one missed day, so a single busy Tuesday doesn't torch a month of work. Your progress page grew a rank panel and a wall of 20 earnable badges (locked ones stay visible — that's the point), and a rotating weekly challenge now sits on Tools, Games, and the progress page — same challenge for everyone, resets Monday, +50 XP to clear it. Games also celebrate a NEW RECORD properly when you beat your best. All of it lives in your browser's local storage — no accounts, nothing sent anywhere — and the JSON export/import now backs up the whole arcade layer too. This release also ships the Packet Flow and Subnetting visualizers, three new games with retro sound effects, and the sitewide XP layer in one launch. SITE_VERSION 1.42.4 → 1.45.0.
A new interactive tool: the Packet Flow Visualizer animates a single packet gliding from a PC, across a switch, two routers and another switch, to a server and back — a fly-over label pops over each device as the packet arrives, and you watch the TTL tick down and the MAC headers swap at every router. Hit PLAY, set the speed, loop it. Three tracks, 21 scenarios in all. Normal traffic: ICMP ping with full ARP, the TCP services (HTTP with its 3-way handshake, FTP in active and passive mode, SSH, Telnet) and the UDP services (DNS, NTP, DHCP DORA, TFTP), each with a live encapsulation stack and per-device ARP/MAC tables. Attacks — built straight onto the CCNA Security Fundamentals domain, each ending on its fix: ARP spoofing / MITM (Dynamic ARP Inspection), MAC flooding / CAM overflow (port security), DHCP spoofing (DHCP snooping), MAC spoofing, VLAN hopping by double-tagging (native-VLAN hygiene), a self-multiplying broadcast storm (Spanning Tree / BPDU Guard), a SYN flood (SYN cookies) and a smurf amplification (no ip directed-broadcast) — with a rogue attacker node and a redundant-loop topology drawn in. Diagnostics: traceroute revealing the path one TTL at a time, destination-unreachable, and NAT/PAT translation. And it's built to be followed by someone who's never seen a packet before: a clickable journey timeline shows every step of the story at a glance, the packet never disappears (a pulsing marker sits on whichever device is processing it, and crossed wires stay lit as a trail), the frame line names the devices instead of raw MACs, and every piece of jargon in the play-by-play is a dotted term that pops a plain-English definition. The mental model Packet Tracer's simulation mode teaches, in the browser. Launched from the Tools page.
Second tool of the day: the Subnetting Visualizer shows what a prefix length actually does. Type any IPv4 address, drag the prefix slider (or click a bit) and watch the 32 bits split into network and host in real time — subnet mask, network address, broadcast, usable host range, host count and wildcard mask all recalculate live, with the /31 (RFC 3021) and /32 (host route) edge cases called out. The "see it" companion to the Subnetting Practice drill, cross-linked from the Packet Flow Visualizer.
A top-of-funnel piece for anyone still deciding: Is the CCNA Worth It in 2026? — an honest take from a working network analyst, with the real case for it, the case against, who shouldn't bother, what it costs in time and money, and a way to decide. It funnels into how to study and the guided path. Alongside it, three new answer pages extend the Q&A graph: what is VLSM, what is a floating static route, and how STP elects the root bridge — each cross-linked both ways with the existing pages on the same topic. SITE_VERSION 1.40.0 → 1.41.0.
Two things that were built and waiting are now live. The CCNA Flashcards deck — 259 cards across all six domains, with topic filtering, self-grading, a flag-and-re-drill system, and an end-of-session recap that points you at your weakest topics — is out of the drawer and interlinked from the Tools page, the Study Hub, and the end of the Daily Drill. And I'm now offering 1-on-1 CCNA tutoring — $30/hr, online, prepped around your weak spots — with a booking page that takes the study-hub banner slot. Under the hood, this release also documents the sitewide analytics event tracking that shipped quietly earlier: a single shared script that records tool starts, lab downloads, config copies, article read-depth, and affiliate clicks via privacy-friendly Umami — flashcards now fires its own "started" event like the other drills. SITE_VERSION 1.39.17 → 1.40.0.
Big usability pass for anyone arriving cold. New site-wide Search (instant, type-as-you-go, filter by Guide / Q&A / Tool / Lab / Article) plus breadcrumbs on every content page and an active-page highlight in the nav so you always know where you are. New How to Study for the CCNA roadmap (what the exam is, cost, timeline, the six domains, a read-drill-lab method) and a guided CCNA Study Path that walks the topics in order, tracks completion in your browser, and shows a progress bar. The homepage and Study Hub now greet returning visitors with a “pick up where you left off” resume card, and Start Here opens with a quick “where are you at?” router. SITE_VERSION 1.38.5 → 1.39.0.
The site is now an installable app. Add it to your phone's home screen and it opens full-screen, with proper icons, a themed splash, and home-screen shortcuts straight to the Daily Drill, subnet practice, and command lookup — no app store, no signup. New “Install as an app” prompts on the Tools page and homepage detect when your browser supports it (a tap-to-install button on Android/Chrome, a Share → Add to Home Screen hint on iPhone/iPad) and quietly hide once installed. Tools cards got bigger, full-width tap targets on phones, and the Tools tool-list schema now reflects all nine tools. A tiny no-cache service worker handles installability with zero risk of stale pages. SITE_VERSION 1.36.1 → 1.37.0.
New Cisco IOS Command Lookup — type a topic or command ("ospf", "trunk", "show ip route") and filter live by configure / verify / troubleshoot, copy-paste ready. Plus ten new question-based answer pages targeting the exact things CCNA beginners search, each with a short answer, a worked example with commands, related-question FAQs, and structured data: what is a VLAN, access vs trunk port, why VLANs can't ping, router-on-a-stick, wildcard masks, finding the broadcast address, OSPF area 0, static vs default route, administrative distance, and STP vs RSTP — all linked from the Study Hub. SITE_VERSION 1.35.0 → 1.36.0.
Biggest engagement push yet. New Daily CCNA Drill: six fresh questions a day — three generated IPv4 subnetting problems plus a rotating mix of IOS-command, troubleshooting, and concept questions — day-seeded so everyone gets the same set, with instant grading, per-question explanations, and a closing lab challenge. It tracks a daily study streak stored in your browser. A new sitewide stats layer wires every drill (subnet, IPv6 subnet, IPv6 types, EUI-64, ACL) into a personal "student terminal" on the CCNA Study Hub — showing your streak, drills graded, accuracy, and best subnet score. Plus a contextual cheat-sheet nudge the moment you grade a subnetting drill. No accounts, no signup — all progress is local to your browser. Shipped through a Cloudflare preview branch first. SITE_VERSION 1.34.0 → 1.35.0.
Closed a couple of navigation gaps. Every interactive tool — subnet, IPv6 subnet, IPv6 types, EUI-64, the ACL drill, and the cheat sheet — now carries a ◀ BACK TO TOOLS button under its intro, matching the one already on the flashcards page, so no tool is a dead end. The ACL drill, which used to link out to nothing, gained a ★ KEEP GOING section at the bottom: the companion Packet Tracer ACL lab, the CLI cheat sheet for the exact access-list / ip access-group syntax, and the CCNA Study Hub's Domain 5 card. Shipped through a Cloudflare preview branch first, then merged to production. SITE_VERSION 1.33.0 → 1.34.0.
The site spent its whole life served by Apache2 on a Pop!_OS box in my room, exposed through a Cloudflare Tunnel. That box had two problems: it dropped during power outages, and it cooked the room. So the whole thing moved to Cloudflare Pages, deployed straight from the main branch of the GitHub repo — push, and it's live on Cloudflare's edge in about 30 seconds. Zero downtime on the cutover, same thelineman.ca domain, fresh Let's Encrypt cert, HTTP→HTTPS still enforced. The old "save a file and it's instantly live" workflow is gone — everything goes through git now, which is a strictly better way to run a site. One wrinkle: Pages strips .html from URLs by default, which forced the change below. 27 of 28 production smoke tests passed on the first cut.
Cloudflare Pages 307-redirects /foo.html → /foo and there's no toggle to stop it, so rather than fight the platform the site adopted clean URLs as canonical. One pass updated 48 files: every canonical tag, og:url, Twitter URL, JSON-LD url/@id/item, the sitemap, llms.txt, the manifest, and every internal link now points at the extensionless form. The 22 legacy .html URLs from the old .htaccess were ported into a Pages-native _redirects file as single-hop 301s, so old links and anything Google already indexed still resolve in one redirect — no ranking equity lost. A _headers file carries over the cache-control and X-Robots-Tag rules. Files on disk keep their .html names; only the published URLs changed.
Biggest single search push to date, aimed at being quoted by AI Overviews rather than just appearing in blue links. Added FAQPage schema to all 12 articles (38 new Q&As), HowTo schema on the tutorial articles, speakable markup pointed at each article's TL;DR box, plus Course, Dataset, Service, and WebApplication schema where they fit. Every public page got proper <main> and <header> semantics (42 pages) and a visible "LAST REVIEWED" date for freshness. The flashcard deck (still beta, noindex) grew from 140 to 259 cards with a flag / skip / review system, and a new noindex my-progress dashboard pulls your LocalStorage completion and flagged cards into one CCNA study view.
Split the content index in two: /guides is the curated, filtered view (CollectionPage + ItemList schema) and /articles is the full chronological archive — renamed from /blog with a 301 in place. Every post-card now shows a colored "flavor" pill (GUIDE / TUTORIAL / BLOG / REFERENCE) and the nav reordered to lead START HERE → CCNA HUB → GUIDES. Alongside it, a foundation-hygiene and AI-readiness sweep: corrected lab POSTED dates, backfilled missing TechArticle / BreadcrumbList schema, rewrote the homepage hero CCNA-first, and gave llms.txt a full overhaul with a citation policy and a "Quick Facts" block. SITE_VERSION 1.24.0 → 1.28.0.
After the QA pass earlier today, the ACL drill at /acl-practice.html is no longer noindex. Added to sitemap, llms.txt, tools.html (new "SECURITY / ACL" section), and manifest.js. The CCNA Hub's Domain 5 card went from "COMING SOON · 0%" to "PARTIAL · 10% COVERED" with topic 5.6 (Configure and verify ACLs) flipped to COVERED — linked to both the drill and the cheat sheet's ACL section. First Domain 5 win, and the most exam-tested concept in that domain shipped first. Hub status counters: 5 → 7 browser tools, 10 → 11 of 53 topics covered. SITE_VERSION 1.23.0 → 1.24.0.
Built on top of yesterday's manifest. progress-display.js bumped to v5: any page that includes <div class="next-steps" data-slug="X"></div> gets auto-populated with 2 manifest-driven suggestions plus a reference fallback. Logic: if the page is in the CCNA path order, suggest the next uncompleted item; otherwise find pages in shared paths or shared tags; always include the cheat sheet as a reference fallback. Skips items already in the visitor's completed list. Deployed to all 12 articles via bulk patch (one Python pass — verified mf=1 ns=1 on every file). Inserts above the newsletter CTA so the retention prompt comes before the email ask. Labs already had hand-curated next-steps blocks — those stay; the new pattern is opt-in via data-slug. SITE_VERSION 1.22.0 → 1.23.0.
New file at /manifest.js exposes window.TLM_MANIFEST with every article (12), lab (9), tool (6), and path on the site. Each page entry carries: slug (matches LocalStorage completion key), title, url, type, CCNA domain, lab number, paths it belongs to, tags, posted date. The CCNA Hub's DOMAIN_MAP and the homelab path's STAGE_TO_SLUG are now both derived from manifest data — so adding a new article means one edit instead of three. progress-display.js bumped to v4: reads manifest if loaded, falls back to its existing hardcoded values otherwise. Backwards compatible everywhere — pages without manifest.js work exactly as before. Foundation for the no-dead-ends pillar (auto-generated "What's Next") and a future site-wide search. SITE_VERSION 1.21.0 → 1.22.0.
New tool at /cheatsheet.html. VLAN, inter-VLAN, STP, EtherChannel, OSPF (single + multi-area), static routing, ACL, NAT/PAT, DHCP, CDP/LLDP, and IPv6 — each topic gets config templates, show commands, and a classic exam gotcha. Copy button on every code block, hash-deep-linkable (#ospf, #acl etc.), print-friendly CSS that expands all panels and strips chrome for a single-topic paper sheet. Sized for SEO — the meta title and topic headings cover the high-volume "cisco ___ cheat sheet" search variants. Linked from /tools.html under a new REFERENCE section. Sitemap and llms.txt updated. SITE_VERSION 1.20.1 → 1.21.0.
Before opening the drill up for public play I walked the engine code looking for edge cases. Three real bugs found and fixed: (1) the "middle line" targeting branch in pickWeightedTarget was off-by-one — for an N-line ACL it could only target idx 0 to N-2, so the last line could literally never be the correct answer. Now spans 1 to N-1. (2) buildImplicitDenyPacket picked the packet's protocol from [tcp, udp] but always picked its port from TCP_PORTS — a UDP packet could end up shown as "Protocol: UDP, Dest port: 3389" which is incoherent. Port now keyed off the chosen protocol. (3) When the answer was implicit deny, the implicit-deny row didn't get the green match-correct highlight that real lines do. Added data-idx="implicit" to the row and the highlight logic now branches on result type. Engine source-of-truth architecture made these surface easily — generator stayed honest, only the question-distribution layer needed fixes.
First non-CCNA learning path: /paths/homelab/ — five-stage build order (foundation → network edge → compute → self-hosting → operate). Each stage card flips to green when the linked article is marked complete in LocalStorage. Homepage gets a new "★ CHOOSE YOUR PATH" section between the subnet banner and the blog grid: 5 cards (CCNA · Homelab · Fortinet · Self-Hosting · Career), first two clickable, last three marked DRAFTING. The homelab path-card on /start-here.html now leads with a link to the full path. Sitemap + llms.txt updated.
Live but noindex at /acl-practice.html. Randomized ACL + packet generator, top-down evaluation engine, three difficulty modes (standard / extended / mixed default), score persistence in LocalStorage, field-by-field walkthrough on every answer, classic-trap callout when a wrong-but-later-matching line is picked. ~45 KB self-contained HTML+CSS+JS. v1 scope: tcp/udp/ip protocols, eq port operator only, prefix-aligned wildcards, RFC1918 sources. Out of scope for v1: named ACLs, source ports, gt/lt/range, ICMP types, established. Holding on launch until QA pass.
Took a hard look at why the site has traffic but low retention. Diagnosed the real problem: every page renders as an endpoint, not a vertex in a graph. Drafted a phase-based plan to fix it — build-log, completion tracking, "no dead ends" module, learning paths. Phase 1 starts today.
Shipped the foundation of the retention architecture: this build log itself (now visible in the nav and on the homepage), a LocalStorage-backed "Mark Complete" checkbox on every lab and article, and a "What's Next" module replacing the old "previous / next" file-order navigation on Lab 5, Lab 7, and Lab 8. No accounts, no database — pure client-side state, no friction.
Four-device topology demonstrating Cisco Discovery Protocol vs IEEE 802.1AB LLDP, with a security angle (what each protocol leaks, why CDP off on edge interfaces). Domain 2 of the CCNA Hub flipped from 44% → 56% covered. SITE_VERSION 1.17.1 → 1.18.0.
Big monetization day. Added 10 new Amazon products to inventory (OCG Library, Cisco 2960X, console cable, MikroTik, Klein tester, UPS, Pi 5, Beelink Ryzen), wired contextual affiliate-boxes across 20+ pages, deployed a sticky yellow OCG banner on the resources page and CCNA Hub, and bulk-applied rel="sponsored noopener" to every amazon.ca link for Google compliance. Impact tracking pixel verified. Pearson IT Cert (CJ), Pluralsight (Impact), Udemy (Impact) applications submitted.
Got told some of the OSPF content was wrong. Audited articles 9/10/12 and lab-doc-8 against standard OSPF behaviour. Found three real issues: (1) article-9 incorrectly called multi-area a "CCNP topic" — rewrote to clarify it's in scope for CCNA understanding; (2) lab-doc-8 sample show ip ospf neighbor output showed all neighbours as FULL/DR, which is mathematically impossible given the router-IDs — corrected R10 and R20 to FULL/BDR; (3) show ip route ospf sample included a "C" connected route that command never returns. All fixed.
Six routers, five OSPF areas, three ABRs, one router in interface-mode OSPF. Built and shipped alongside Article 12, the LSA types deep-dive (Type 1/2/3/4/5/7, flooding scope, packet types, stub area variants). Domain 3 of the CCNA Hub deepened — multi-area is technically beyond the CCNA blueprint's hands-on config requirement, but the concepts and LSA terminology are squarely in scope. SITE_VERSION 1.17.0.
All three EtherChannel modes in one Packet Tracer topology: a routed PAgP /30 between L3 distribution switches, an LACP active/passive trunk between access switches, and a static "on/on" bundle on the third. End-to-end ping across all three modes proves the whole stack. CCNA Hub Domain 2.4 flipped to COVERED. SITE_VERSION 1.16.0.
Cleared the IPv6 + static-routing backlog in one push: Lab 6 (static + floating static routes), Article 11 (IPv6 for the CCNA — compression, address types, EUI-64), tools.html landing page, and three new interactive tools — IPv6 subnetting drill, IPv6 address types quiz, EUI-64 converter. CCNA Hub Domains 1.8, 1.9, 3.3 all flipped to COVERED.
The CCNA Hub went live — a full exam-blueprint map of the 200-301 with every topic linked to the article, lab, or tool that covers it. Same day, migrated the newsletter from Buttondown to beehiiv (custom domain mail.thelineman.ca, all DNS swapped to Cloudflare). Two structural changes in one push.
Spent a day reviewing every article and lab-doc against Google Search Console data. Rewrote page titles to lead with keywords. Tightened meta descriptions. Rewrote lab-doc H1s to read like search queries ("Configure VLANs in Packet Tracer" rather than "VLAN Lab 1"). The compounding effect of this kind of cleanup is invisible until weeks later.
Newsletter signup wired across the site with a working welcome automation. Resources page populated with Amazon Associates (Fortinet 60F, FortiSwitch 124E, FortiAP 421E) and the first OCG book recommendations. The starting line for treating this as more than a hobby project.
First articles were the Fortinet-on-a-budget piece and the subnetting one — written for past-me, who'd been studying for the CCNA and was stuck on subnetting. The whole "build in public" angle wasn't planned; it just happened to be how I write. Static HTML, Apache2, Cloudflare Tunnel — no CMS, no framework, no analytics beyond self-hosted Umami. Same stack now as on day one.
This log updates every time something ships. Want it in your inbox instead? Subscribe to the newsletter for the weekly recap.