feat: make more generic and optimize version - #8
Merged
Conversation
…erts The 4 High Dependabot alerts were all @xmldom/xmldom@0.7.13, a transitive dep of epubjs (the only dev deps). These deps existed solely to refresh the vendored lib/ reader bundles via 'pnpm run vendor' — never deployed, never executed (the vendor script only copies files). EPUBs are now local-only and the in-browser reader is orphaned, so removing both dev deps + the lockfile deletes the vulnerable subtree at the root and restores a true zero-dependency repo. Vendored lib/ bundles stay committed, so reader.html still works locally. Removes: devDependencies (epubjs, jszip), the 'vendor' script, pnpm-lock.yaml. Closes 4 High Dependabot alerts (no manifest left for them to resolve from).
The reader (reader.html), its local static server (server.js), vendored libs (lib/epub.min.js, lib/jszip.min.js), and package.json existed solely to support the personal/local EPUB reader — nothing else in the site links to them. With EPUBs now local-only, the whole stack is dead weight in the public repo. Untracks (keeps on local disk via .gitignore) the reader, server, lib/, and package.json, drops reader.html from sitemap.xml, leaving the public repo as pure static HTML with zero dependencies and zero EPUB footprint. Combined with removing the epubjs/jszip dev deps, there is no manifest left for Dependabot to flag.
Move the entire published static site (index.html, assets/, all 9 track folders, sitemap.xml, robots.txt, .nojekyll) into docs/ so the repo root holds only meta (README, LICENSE, config). GitHub Pages serves docs/ as the site root, so all relative links, canonical/OG URLs, and sitemap entries are unchanged — no build step, no CI (just set Pages source to main /docs). Also drops the now-orphaned pnpm-workspace.yaml (epubjs/pnpm build config, dead after removing the dev deps). Updates README quick-start, Pages instructions, and repo-layout for the docs/ root. ACTION REQUIRED after merge: Settings -> Pages -> Branch: main, Folder: /docs.
Unify all 9 track folder slugs on the dominant bare kebab-case pattern and fix a long-standing typo: ai-agents-mastery -> ai-agents rest-api-matery -> rest-api (was misspelled 'matery') Swept every web-facing reference across 24 files: hub links, cross-links, canonical/OG URLs, sitemap entries, and FAQ JSON-LD. Sitemap re-validated. EPUB internal identifiers (dc:identifier UUID) and local build notes are intentionally left unchanged — they are stable book IDs, not web paths. Public URLs change (/rest-api-matery/* -> /rest-api/*, /ai-agents-mastery/* -> /ai-agents/*); done now while the docs/ Pages cutover is still pending and the indexed footprint is ~zero.
Adds two zero-dependency Node checks (built-ins only) and wires them as CI
gates that run on PRs and pushes to main touching docs/:
scripts/check-broken-links.js — verifies every internal href/src in docs/
resolves to a real file, GitHub-Pages style (exact, then .html, then
/index.html); skips external links, anchors, and <script>/<style> content.
scripts/validate-content.js — per indexable page: exactly one <title>,
canonical, og:url, meta description; interview data-level values valid
(core|senior|staff|design); JSON-LD parses; sitemap.xml is in sync with
files on disk (no stale entries, no missing lesson/reference/hub pages).
.github/workflows/link-check.yml
.github/workflows/content-validation.yml
The link checker immediately caught 14 pre-existing broken links: REST
interview/ and reference/ pages linked to ../index.html (a non-existent
rest-api/index.html) instead of the hub at ../../index.html — fixed here.
Turns the manual pre-merge checks into enforced, non-bypassable gates.
Adds a pull request template and three issue templates tailored to StackDepth:
PULL_REQUEST_TEMPLATE.md — what/why, change type, scope, and a checklist
that mirrors the CI gates (run check-broken-links + validate-content, sitemap
updated, SEO tags) plus content-quality gates (visual-first ship test, cited
sources, valid interview panel, length-balanced quiz).
ISSUE_TEMPLATE/content-fix.md — accuracy/clarity/typo, requires a source for
factual corrections (matches the 'never from memory' content rule).
ISSUE_TEMPLATE/new-content.md — propose a lesson/track with rung + outline + sources.
ISSUE_TEMPLATE/bug-report.md — broken link/rendering/search, with repro + env.
ISSUE_TEMPLATE/config.yml — disables blank issues; links to the site and Discussions.
Templates activate once on the default branch (main).
The og-cover (used as og:image/twitter:image on every page) was stale: it still read 'ENGINEERING LEARNING HUB', advertised 'Kindle EPUBs' (removed), and was missing the Context Engineering track (8 chips, not 9). That wrong card showed on every social/link share. Updated og-cover.svg to StackDepth branding, headline 'System design & AI engineering, from first principles', tagline with 'interview panels' instead of EPUBs, and a 9th 'Context' chip; re-rasterized og-cover.png (1200x630).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.