Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1bddb1a
poc(astro): non-destructive Astro migration proof — one bloom-filters…
dineshbyte Jun 21, 2026
b22da29
chore(astro-poc): pnpm + Prettier (4-space), tidy .gitignore
dineshbyte Jun 21, 2026
2cb490f
fix(astro-poc): allow esbuild + sharp build scripts (pnpm onlyBuiltDe…
dineshbyte Jun 21, 2026
9bc8274
fix(astro-poc): allow esbuild/sharp via pnpm-workspace.yaml; restore …
dineshbyte Jun 21, 2026
05da913
fix(astro-poc): normalize BASE_URL trailing slash (asset + canonical …
dineshbyte Jun 21, 2026
e6e33e4
refactor(astro-poc): quiz as data + <Quiz> component (42 lines of mar…
dineshbyte Jun 21, 2026
319478d
feat(astro-poc): lesson component library — Interview (+auto FAQ JSON…
dineshbyte Jun 21, 2026
40cc0d1
feat(astro-poc): MemoryCheck component + standardized bottom .nav (pr…
dineshbyte Jun 21, 2026
e09f660
feat(astro): migrate hub + all 48 lessons to Astro — full build green
dineshbyte Jun 21, 2026
17b7682
feat(astro/hub): full-text search index generated from lesson MDX bodies
dineshbyte Jun 22, 2026
14a8f75
feat(astro): migrate 11 interview banks (Tufte InterviewLayout reusin…
dineshbyte Jun 22, 2026
6474819
feat(astro): migrate 10 reference/cheat-sheet pages (Tufte ReferenceL…
dineshbyte Jun 22, 2026
8d9195c
feat(astro): migrate 20 glossary+resources pages as Markdown collecti…
dineshbyte Jun 22, 2026
fb1f8a6
feat(astro): migrate 5 README roadmaps (Tufte RoadmapLayout) + privac…
dineshbyte Jun 22, 2026
c8ab1ac
feat(astro)!: cut over — docs/ is now Astro-generated; remove hand-au…
dineshbyte Jun 22, 2026
4d43943
refactor(astro): promote project to repo root; retire obsolete tooling
dineshbyte Jun 22, 2026
f55ffa7
feat(design): Obsidian + Amber + Cyan palette; branded 404; avatar fix
dineshbyte Jun 22, 2026
a893c6a
feat(astro): strip 0NNN- numeric prefix from all lesson/interview URLs
dineshbyte Jun 22, 2026
e313e93
fix(hub): prepend base URL to all lesson/ref hrefs in TrackCard
dineshbyte Jun 22, 2026
0651ade
fix(mdx): collapse multi-line sup/a footnote tags to prevent MDX wrap…
dineshbyte Jun 22, 2026
0a9ede6
chore: add GitHub Actions deploy workflow; gitignore build output
dineshbyte Jun 22, 2026
12d9548
refactor(design): demote amber from structural to accent-only
dineshbyte Jun 22, 2026
72b8113
chore: remove obsolete migration-era validators
dineshbyte Jun 22, 2026
85da9d5
style: normalize formatting with Prettier (clean baseline for the hook)
dineshbyte Jun 22, 2026
baa1a04
chore: add pre-commit Prettier hook (husky + lint-staged)
dineshbyte Jun 22, 2026
74ddf2b
chore: skip husky install in CI (local-only git hooks)
dineshbyte Jun 22, 2026
a8ee263
chore: enforce Conventional Commits with commitlint
dineshbyte Jun 22, 2026
8b46b1f
ci: gate PR titles with commitlint (conventional squash subjects)
dineshbyte Jun 22, 2026
5b39b8c
style: final palette polish — calmer active chip, ghost Start, muted …
dineshbyte Jun 22, 2026
8f2f8a2
fix(hub): restore per-lesson blurbs in the card-detail sheet
dineshbyte Jun 22, 2026
c41805c
feat(hub): add card-detail blurbs for the 6 single-lesson tracks
dineshbyte Jun 22, 2026
04b1fe2
chore: remove orphan card-detail.js and fix stale blurb comments
dineshbyte Jun 22, 2026
69654b4
docs: fix stale card-detail.js comments in track schema + data
dineshbyte Jun 22, 2026
da2a6a4
refactor(content): rename series volumes "Book N" → "Part N"
dineshbyte Jun 22, 2026
b628d14
feat(hub): explicit learning-path-first sort for tracks and lessons
dineshbyte Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/bug-report.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
name: "🐞 Bug report"
name: '🐞 Bug report'
about: A broken link, rendering/layout glitch, broken search, or other site bug
title: "[bug] short description"
labels: ["bug"]
title: '[bug] short description'
labels: ['bug']
---

## What's broken
Expand Down
12 changes: 6 additions & 6 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: 🌐 Browse Engineering Vault
url: https://dineshbyte.github.io/engineering-learning-hub/
about: Read the lessons, cheat sheets, and interview panels.
- name: 💬 General question or idea
url: https://github.com/dineshbyte/engineering-learning-hub/discussions
about: For open-ended questions or ideas, start a discussion instead of an issue.
- name: 🌐 Browse Engineering Vault
url: https://dineshbyte.github.io/engineering-learning-hub/
about: Read the lessons, cheat sheets, and interview panels.
- name: 💬 General question or idea
url: https://github.com/dineshbyte/engineering-learning-hub/discussions
about: For open-ended questions or ideas, start a discussion instead of an issue.
8 changes: 5 additions & 3 deletions .github/ISSUE_TEMPLATE/content-fix.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
name: "📝 Content fix (accuracy / clarity / typo)"
name: '📝 Content fix (accuracy / clarity / typo)'
about: Report a factual error, an unclear explanation, a broken diagram, or a typo in a lesson
title: "[fix] <track>/<page>: short description"
labels: ["content", "fix"]
title: '[fix] <track>/<page>: short description'
labels: ['content', 'fix']
---

## Where

<!-- Track and page, and the section/heading if you can. -->

- **Track / page:** <!-- e.g. context-engineering/lessons/0003-codebase-context-chunking-and-rag -->
- **Section:** <!-- e.g. "Chunk overlap" callout -->

Expand All @@ -26,4 +27,5 @@ labels: ["content", "fix"]
correction, link the authoritative source: an RFC, a spec, vendor/standards
docs (MDN, OWASP, Anthropic/MCP, cloud provider AIP), or a primary paper.
-->

- <!-- https://… -->
9 changes: 6 additions & 3 deletions .github/ISSUE_TEMPLATE/new-content.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
---
name: "✨ New lesson or track"
name: '✨ New lesson or track'
about: Propose a new lesson within a track, or a brand-new track
title: "[new] <topic>"
labels: ["content", "enhancement"]
title: '[new] <topic>'
labels: ['content', 'enhancement']
---

## Proposal

<!-- New lesson in an existing track, or a new track? Name the topic. -->

- **Type:** <!-- new lesson | new track -->
- **Track:** <!-- existing track name, or "NEW: <proposed track>" -->
- **Topic:** <!-- e.g. "Reranking strategies" -->
Expand All @@ -19,6 +20,7 @@ labels: ["content", "enhancement"]
## Difficulty rung

<!-- Where does it sit on the ladder? -->

- [ ] Foundation — the mental model and vocabulary
- [ ] Core — everyday working knowledge
- [ ] Senior — trade-offs and failure modes
Expand All @@ -31,4 +33,5 @@ labels: ["content", "enhancement"]
## Sources

<!-- High-trust references the lesson should be grounded in. -->

- <!-- https://… -->
22 changes: 0 additions & 22 deletions .github/workflows/content-validation.yml

This file was deleted.

68 changes: 68 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Build & Deploy

# Builds the Astro site, validates content + links, then deploys to GitHub
# Pages on every push to main. PRs get the build + validate step only
# (no deployment) so errors are caught before merge.

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

# One deployment at a time; don't cancel an in-progress deploy on main.
concurrency:
group: pages-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
build:
name: Build & validate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
version: 10 # any pnpm 10 satisfies the lockfile; bump to match local if needed

- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build site
run: pnpm build

- name: Validate content (SEO, structured-data, sitemap)
run: node scripts/validate-content.cjs

- name: Check internal links
run: node scripts/check-broken-links.cjs

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/

deploy:
name: Deploy to GitHub Pages
needs: build
# Only deploy on pushes to main, never on PRs or other branches.
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request'
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
21 changes: 0 additions & 21 deletions .github/workflows/link-check.yml

This file was deleted.

49 changes: 49 additions & 0 deletions .github/workflows/pr-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: PR title

# A squash merge uses the PR *title* as the commit subject, so the title must
# pass the same Conventional Commits rules that commitlint enforces on local
# commit messages. This reuses the repo's commitlint.config.js (one source of
# truth) instead of a separate action with its own type list.
#
# Kept out of deploy.yml on purpose: this must also run when a title is EDITED,
# and pulling the `edited` type into the build workflow would re-run the full
# Astro build on every title/description tweak. `synchronize` is included so the
# check re-stamps each new head SHA — required if you make it a required status
# check in branch protection.
on:
pull_request:
types: [opened, edited, synchronize, reopened]

permissions:
contents: read

# Newer runs for the same PR supersede older ones.
concurrency:
group: pr-title-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
lint-title:
name: Conventional PR title
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
version: 10

- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Lint PR title with commitlint
# The title is attacker-controlled, so pass it via env — never inline it
# into the shell command (avoids command injection from a crafted title).
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: echo "$PR_TITLE" | pnpm exec commitlint
46 changes: 9 additions & 37 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Build and output directories
docs/
dist/
coverage/
.turbo/
Expand Down Expand Up @@ -29,63 +30,34 @@ pnpm-debug.log*
.DS_Store
.scannerwork/
plans
.superpowers
specs
.superpowers

# Test coverage
.nyc_output/
.jest-cache
!/.vscode/

# Personal tooling / internal — excluded from the public repo
.claude/
.claude
_send_to_kindle/
# EPUBs are personal/local only — readers use the website, not downloads
*.epub
*.epub.orig
*.epub.prev

# In-browser EPUB reader + its local static server are personal/local only —
# kept on disk but not published (the public site is pure static HTML).
reader.html
server.js
lib/
package.json
pnpm-lock.yaml
pnpm-workspace.yaml
package-lock.json

# ai configuration ignore file
.auto-claude/
.agents
.cursor
settings.local.json
.claude/settings.local.json
CLAUDE.local.md

# Claude personal task board
.claude/tasks/todo.md
.claude/tasks/archive/

# Claude async audit hook artifacts (background auditor output + lockfile)
.claude/.audit.log
.claude/.audit-*.lock

# graphify output
graphify-out/manifest.json
graphify-out/cost.json
graphify-out/cache/
graphify-out/.graphify_*
graphify-out/graph.json
graphify-out/graph.html

# stray local debug log artifacts (snuck into a commit once via lint-staged)
current_logs.log*
**/current_logs.log*

# Logs ignore files
logs/

# Python bytecode cache (from scripts/*.py)
__pycache__/
*.pyc

# Astro build cache
.astro/

# per-track working notes — local only (kept on disk, not published)
notes/
4 changes: 4 additions & 0 deletions .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Validate the commit message against Conventional Commits (commitlint).
# $1 is the path to the file holding the proposed message. Local-only — CI
# never commits, and husky itself isn't installed in CI (see install.mjs).
pnpm exec commitlint --edit "$1"
16 changes: 16 additions & 0 deletions .husky/install.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Husky installer guard — git hooks are a LOCAL dev aid only.
//
// `prepare` runs on every `pnpm install`, including in CI. The pre-commit
// Prettier hook is meaningless there (CI never commits, and formatting is a
// local concern — CI validates the built site, it doesn't format source), so
// we skip the install entirely when CI is set.
//
// GitHub Actions (and virtually every CI provider) export CI=true, so this
// needs no workflow change: `pnpm install --frozen-lockfile` simply no-ops the
// hook setup. Locally, CI is unset, so hooks install as normal.
if (process.env.CI) {
process.exit(0);
}

const husky = (await import('husky')).default;
husky();
4 changes: 4 additions & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Fast, format-only gate: Prettier-fix just the staged files (lint-staged
# re-stages them). Heavy checks (astro build, validate-content, broken-links)
# run in CI — too slow to block every commit, and they need a built docs/.
pnpm exec lint-staged
14 changes: 14 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# build output + caches (docs/ is the Astro outDir; gitignored + generated)
dist
docs
.astro

# lockfile — machine-managed, never hand-formatted
pnpm-lock.yaml

# hand-maintained CSS source (dense, intentionally not Prettier-managed)
public/assets

# generated MDX lessons — bespoke JSX/frontmatter, not Prettier-managed (no MDX plugin)
src/content
src/components/figures
14 changes: 14 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"tabWidth": 4,
"useTabs": false,
"printWidth": 100,
"singleQuote": true,
"semi": true,
"plugins": ["prettier-plugin-astro"],
"overrides": [
{
"files": "*.astro",
"options": { "parser": "astro" }
}
]
}
Loading
Loading