Defines triggers, input requirements, sub-agent usage patterns, and
output formats for synthesizing insights across multiple documents.
Covers standard research synthesis, vendor comparisons, multi-perspective
analyses, and web + local source combinations. Includes example prompts.
Analyzes second location expansion, technology stack investment, and
espresso machine upgrade from Financial, Customer Experience, and
Operational Risk perspectives. Each decision synthesized into a concrete
recommendation with conditions and phased implementation plans.
Side-by-side comparison across pricing, lead time, service network,
reliability, resale value, and brand prestige. Includes individual
verdicts and key insight that capability differences between machines
are often overstated — decision hinges on service access, lead time,
and resale value.
Comprehensive analysis of the 2025-2026 specialty coffee market covering
6+ themes: independent shop advantages, technology as hygiene factor,
labor cost reset, sustainability imperatives, remote work geography shift,
and competitive strategy. Includes contradictions matrix, actionable
recommendations, and open strategic questions.
Runs file-processor skill on 5 inbox files: moves and renames to
processed/receipts, processed/invoices, processed/documents, and
processed/images using ISO date naming convention. Generates
outputs/processing-log-2026-03-09.md. Inbox is now empty.
Adds 5 realistic test files: Amazon receipt, freelance contract draft,
web design invoice, product sync meeting notes, and an app bug screenshot.
These serve as demo input for the file-processor skill.
Introduces a repeatable file management workflow: inbox for new files,
processed for organized output, outputs for Claude-generated reports,
and reference for read-only context. Includes a file-processor skill
with naming conventions and categorization rules. Updates README with
usage instructions.
Organizes 19 files into 7 topic folders using DONE/In Progress status labels
(Analytics, Budget, Marketing, Meetings, Menu & Recipes, Operations, Training).
Files renamed with ISO dates and descriptive names. Includes organization-summary.md.
Organizes 10 files from root into 4 subfolders (finance, operations,
marketing, planning) with descriptive names. Includes CHANGES.md
documenting the reorganization.
- Add .claude/commands/ideas.md: scans vault and CLI graph data to
produce tools to build, essays to write, connections to make,
and experiments to run
- Update my-commands.md with /ideas description and usage
- Add .claude/commands/challenge.md: pressure-tests beliefs by finding
contradictions and counter-evidence within vault notes
- Add .claude/commands/emerge.md: surfaces hidden patterns and unstated
ideas implied by the vault's collective content
- Update my-commands.md with descriptions and usage for both commands
- Add .claude/commands/connect.md: bridges two disparate vault topics
by tracing backlinks and surfacing unexpected connections
- Update my-commands.md with /connect description and usage
Adds the full initial course content including:
- START-HERE.md with navigation and teaching instructions
- 12 lesson scripts covering delegation, frameworks, research, automation, and more
- Scenario files for customer-feedback, done-framework, file-chaos, first-task,
large-corpus, receipts, and strategy-notes exercises
Add initial lesson structure for Vin Obsidian Workflows mini-lesson:
- CLAUDE.md: full lesson script and teaching instructions
- my-vault/: 10 interconnected Obsidian notes about Claude Code best practices
- .claude/commands/start-lesson.md: slash command to launch the lesson
- my-commands.md: documentation for custom commands
Define 9 features with requirements and test conditions covering auth,
reading experience, history tracking, search/discovery, ratings, comments,
notifications, and guest access. Includes UI and technical decisions
using Next.js + PostgreSQL.
Convert all 41 TypeScript source/config files in cc4e-course/quiz-project
(Next.js), gstack (Astro), and superpowers (Vite/React/Phaser) to plain
JavaScript with JSDoc type annotations, replacing tsconfig.json with
jsconfig.json (strict + checkJs) in each subproject. No behavior changes:
lint, typecheck, test, and build gates match their TypeScript baselines
exactly in all three subprojects. Update stack references in the affected
READMEs accordingly.
Replace bun.lock with package-lock.json and add package.json#allowScripts for
esbuild and sharp, the two native packages whose install scripts npm 11 gates.
Update README, RUNBOOK, TODOS and CLAUDE.md to npm commands. CLAUDE.md also
claimed ./setup requires bun; it does not any more.
Verified: astro check 0 errors, 39 tests pass, 4 pages build, clean npm ci.
The quiz app is a pure client-side Next.js page, so it static-exports with
output: 'export' and a basePath under the site; the lesson thumbnail is a
self-contained HTML file served as that directory's index.
Each web demo builds with its base path under /ai-coding-workflow-labs/,
a single deploy workflow assembles them with a root index, and the
per-directory workflows from the standalone repos are removed.
* feat(component): similarity-scale slider controller
Single-slider similarity demo for Module 2. Fixed △ABC, scaled △A'B'C' computed
each frame as `centroid_target + k · (vertex − centroid_ABC)` for k ∈ [0.5, 2].
The slider's input event is the only event listener — no Pointer Events here
(we're not dragging vertices in this MVP). AbortController teardown on
astro:before-swap as before.
The renderTicks helper is duplicated from congruence-sss.ts for now — when
Module 4 lands we'll factor it out into a shared module. Premature
abstraction would force a circular import structure for one helper.
* feat(module-2): tam giác đồng dạng (lớp 8) with scale slider
Page at /lop-8/tam-giac-dong-dang/. △ABC fixed on the left at scalene scale-72.8 / 83.2 / 93.4 sides. △A'B'C' is the runtime scaled image, controlled by a
single range input k ∈ [0.5, 2] step 0.05.
Live readout table shows all six side lengths and all three ratios. The killer
moment: drag the slider, watch all 3 ratios stay numerically equal to each
other (= 1/k). That equality IS the definition of similarity, made visible.
Tick marks per Decision D3: 1/2/3 ticks color-paired (#D7263D / #1B998B /
#F46036). Triangle 1 ticks rendered once on mount; triangle 2 ticks redrawn
on every slider input.
Hub: lớp 8 card flips to live status. All 3 grade cards now active —
the autoplan 3-module hero set is complete.
* chore: VERSION 0.0.4.0 + CHANGELOG + TODOS update
v0.0.4.0 = scaffold + Module 3 (góc nội tiếp) + Module 1 (tam giác bằng nhau)
+ Module 2 (tam giác đồng dạng). All three MVP modules from autoplan now live.
Move 2 P1 items to Completed (scale slider, ratio readout) and reduce Module 2
remaining items to P2 (free-drag mode) + P3 (numeric angle readouts).
---------
* feat(geom-engine): triangle module + position-strict congruentSSS
Third pure module under src/geom-engine/. Adds Triangle type, sides() (returns
named AB / BC / CA lengths), and congruentSSS() with position-strict semantics:
labels define the correspondence (AB↔A'B', BC↔B'C', CA↔C'A'), permuted matches
are NOT counted as congruent. This preserves SGK pedagogy where the labels and
the matched-pair encoding (color + tick marks) carry meaning.
10 new unit tests: identical, translated-congruent, similar-not-congruent (2x scale),
shape-different, EPSILON_LEN tolerance (within and just outside), label-permutation
rejection, and symmetry of the relation.
Total tests: 29 → 39.
* feat(module-1): drag-to-explore tam giác bằng nhau (lớp 7, SSS)
Second interactive theorem demo. Page at /lop-7/tam-giac-bang-nhau/.
Component: src/components/congruence-sss.ts owns 6 draggable vertices (3 per
triangle), each independently captured via setPointerCapture per vertex.
Drag-clamping (16px viewBox padding) keeps every vertex on-screen.
Encoding per autoplan Decision D3 (a11y + SGK-correct in one move):
AB / A'B' → pair1 #D7263D + 1 tick
BC / B'C' → pair2 #1B998B + 2 ticks
CA / C'A' → pair3 #F46036 + 3 ticks
Tick marks are SVG line segments perpendicular to each side at the midpoint,
spaced 5 viewBox-units apart for multi-tick. Redrawn live during drag.
Page: viewBox 400x300 (4:3, side-by-side triangles), single 6KB page including
inline JS bundle (entire geom-engine + canvas controller, minified).
Live side-length readout table + green badge "Hai tam giác bằng nhau (c.c.c)"
that appears when SSS condition holds within EPSILON_LEN. Badge has
role="status" + aria-live="polite" so screen readers announce the moment the
triangles become congruent.
Rigid-motion overlay animation EXPLICITLY DROPPED per autoplan — color+tick
match is the success state.
* feat(hub): activate lớp 7 card linking to tam giác bằng nhau module
Status flips from sap-ra-mat to live; href points at the new module.
i18n/vi.ts gains module1.* strings (intro, instruction, theorem, example,
SGK-aligned theorem statement) so every user-facing string still routes
through t() — adding English in the future is one en.ts file away.
* chore: VERSION 0.0.3.0 + CHANGELOG + TODOS update
v0.0.3.0 = scaffold + Module 3 (góc nội tiếp) + Module 1 (tam giác bằng nhau).
2 of 3 MVP modules now live. Module 2 (tam giác đồng dạng) is next.
* chore: TODOS Module 1 reflects v0.0.3.0 (SSS shipped)
Original P1 items "SSS detector" + "SGK tick-mark encoding" already moved to
Completed in the previous commit. Replace the still-pending M1 section with
the actual remaining work: P2 toggles for SAS/ASA/AAS/cạnh huyền cases, P3 for
extra examples.
---------
* chore: ignore .gstack/ deploy reports
/land-and-deploy writes per-deploy artifacts to .gstack/deploy-reports/. Those
shouldn't enter the repo. Captured here so future runs don't surface stale diffs.
* feat(geom-engine): circle module + inscribed-angle invariance test
Add the second pure module per autoplan eng decision E1: src/geom-engine/circle.ts
with circle(), pointOnCircle(), projectToCircle() (snap-to-circle for Module 3 drag),
and angleAtVertex() (clamped against IEEE-754 drift to prevent acos NaN at exactly
collinear angles).
The killer-demo property test pins the inscribed-angle theorem as a CI gate: pick
two fixed points A and B on a unit circle, sample 7 different M positions on the
major arc, and assert all sampled inscribed angles AMB stay within 0.5° of the
reference. If this test ever fails, Module 3's central premise is broken.
13 new unit tests, total 29 passing.
* feat(module-3): drag-to-explore góc nội tiếp page (lớp 9)
Ship the first interactive theorem demo. Page lives at /lop-9/goc-noi-tiep/.
Component: src/components/inscribed-angle.ts wires Pointer Events +
setPointerCapture per autoplan eng decision E1. Drag M; on every pointermove,
project the pointer to the circle (M = center + r·normalize(pointer − center))
so M never escapes the circle. Live readouts: ∠AMB at M (inscribed, pair1 red),
∠AOB at center O (central, pair2 teal). All listeners use AbortController
keyed on astro:before-swap so view-transition navigation doesn't leak.
Page: src/pages/lop-9/goc-noi-tiep.astro holds the SVG canvas (viewBox 400x400,
touch-action: none scoped to canvas), theorem panel, and one worked example
walking the 120°/60° canonical case. Astro bundles the script inline so the
single page ships ~7KB total (including the entire geom-engine + component).
* feat(hub): link lớp 9 card to góc nội tiếp module
Hub landing page now branches each grade card on grade.href:
- live cards render as <a> with hover affordance (lớp 9 only, for now)
- coming-soon cards stay as <li> with opacity 0.7 and "Sắp ra mắt" badge
Status taxonomy extended: 'sap-ra-mat' | 'live' so future modules just flip the
status when their page ships.
i18n/vi.ts gains module3.* (intro, theorem, example, instruction copy) plus a new
'live' status string ("Khám phá") so every user-facing string stays inside vi.ts.
* chore: VERSION 0.0.2.0 + CHANGELOG entry
First feature release. v0.0.2.0 = scaffold + Module 3 góc nội tiếp.
* chore: mark TODOS items completed by v0.0.2.0
- Drag M with circle constraint → DONE in src/components/inscribed-angle.ts
- TheoremCanvas primitive first cut → DONE (built directly in Astro)
- Theorem panel + worked examples → PARTIAL (1 of 3 examples shipped)
---------