mirror of
https://github.com/tiennm99/try-gstack.git
synced 2026-05-14 04:58:59 +00:00
c5388349c0
* chore: add gstack skill routing rules to CLAUDE.md Append a "## Skill routing" section so future Claude Code sessions in this repo route each task through the matching gstack skill (e.g., /investigate for bugs, /ship for PRs, /office-hours for product brainstorming). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: scaffold Astro 5 + TypeScript strict with base /try-gstack/ Initialize the project per the autoplan-locked decisions: - Astro 5 SSG, output static, base path /try-gstack/ for GitHub Pages subdirectory hosting - TypeScript strict (Astro's strict tsconfig + path alias ~/* -> src/*) - @astrojs/sitemap for SEO meta - bun as the package manager (lockfile committed) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: Vietnamese landing page with Be Vietnam Pro + i18n stub Implement the locked design decisions D2 (typography) and D3 (palette) plus the i18n discipline from autoplan eng review: - Be Vietnam Pro single family (woff2, weights 400/500/700, vietnamese subset) self-hosted via @fontsource so KaTeX/CDN-blocking ISPs cannot break the page - font-feature-settings: "kern", "locl" for proper VN diacritic positioning - 17px body / 1.6 line-height / max-w-prose 56ch (denser than English) - 3-color SGK-aligned palette in tailwind config: pair1 #D7263D, pair2 #1B998B, pair3 #F46036 - BaseLayout with lang="vi", canonical URL, OpenGraph (vi_VN), X-Frame-Options DENY - src/i18n/vi.ts holds every user-facing string; t() helper resolves the active locale. Adding English later means adding en.ts; no string churn through templates. - Landing page lists three grade cards with "Sắp ra mắt" status (modules ship later) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * test: bootstrap Vitest with pure geom-engine vec module Establish the math-engine boundary and test discipline from autoplan eng decision E2: - src/geom-engine/ is pure (no DOM imports allowed); first module is vec.ts - Vec2 helpers: vec, add, sub, scale, dot, len, dist, normalize, approxEqualLen - EPSILON_LEN=0.5 viewBox units justified vs ~4px human drag precision - scale() normalizes IEEE-754 -0 back to +0 so consumers don't see signed-zero ghosts - Vitest config gates the module at 95% line/function/statement, 90% branch - 16 unit tests covering commutativity, mutation safety, orthogonality, normalization, and EPSILON tolerance behavior Property tests via fast-check come with the first canvas module; this commit establishes the test scaffold so adding them later is one dependency away. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci: GitHub Actions test workflow + Pages deploy via deploy-pages@v4 Wire the autoplan-locked CI/CD pipeline (decision E3) for GitHub Pages hosting: - ci.yml: typecheck + tests + build on every PR and push to main - deploy.yml: build + actions/deploy-pages@v4 on push to main, concurrency-grouped so a force-push retry doesn't abort an in-flight rollback - Build env pins SITE_URL=https://tiennm99.github.io and SITE_BASE=/try-gstack so astro.config.mjs produces correct canonical/OG URLs against the subdirectory host - bun 1.3.13 pinned for both workflows Lighthouse-CI + size-limit gates deferred until the first canvas module ships (no JS bundle to budget yet — current pages are zero-JS). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: VERSION 0.0.1.0 + CHANGELOG + RUNBOOK + README rewrite Initial 4-digit gstack version (matches package.json), changelog entry for the scaffold, operations runbook covering rollback and the deferred .vn domain trigger (500 sessions/30d OR 1 organic teacher share OR 5+ modules shipped). README rewritten as the project README for Hình Học Sống with the locked architectural decisions visible to teammates. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: TODOS.md tracking deferred autoplan items Capture the deferred work surfaced by the /office-hours + /autoplan reviews so the backlog is visible to teammates and bisectable from the source-of-truth design doc. Organized by component (Phase 0 distribution, TheoremCanvas, Module 3/1/2, testing infrastructure, retention, domain) then priority P0–P4. Per the gstack TODOS.md format conventions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
53 lines
2.6 KiB
Markdown
53 lines
2.6 KiB
Markdown
# Runbook — Hình Học Sống
|
||
|
||
## Deployment
|
||
|
||
Production deploys from `main` via GitHub Actions (`.github/workflows/deploy.yml`).
|
||
|
||
- Live URL: `https://tiennm99.github.io/try-gstack/`
|
||
- Build: `bun run build` (Astro static, output to `dist/`)
|
||
- Deploy mechanism: `actions/upload-pages-artifact@v3` + `actions/deploy-pages@v4`
|
||
- Concurrency: `pages-deploy` group, cancel-in-progress disabled (so a force-pushed retry doesn't abort an in-flight rollback)
|
||
|
||
## Rollback
|
||
|
||
GitHub Pages keeps the last successful deployment. To roll back:
|
||
|
||
1. Find the offending commit on `main`: `git log --oneline main`
|
||
2. Revert it: `git revert <sha>` and push to `main`
|
||
3. The next workflow run rebuilds and re-deploys the prior good state
|
||
4. Verify the live site
|
||
|
||
If the workflow itself is broken (e.g., bad `deploy.yml` change), use the GitHub UI to re-run a previous successful deployment from the **Deployments** tab.
|
||
|
||
## CI
|
||
|
||
- `.github/workflows/ci.yml` runs typecheck + Vitest + build on every PR and push to `main`. Build failure on `main` blocks the deploy job.
|
||
- Local equivalent: `bun install && bun run typecheck && bun run test && bun run build`
|
||
|
||
## Domain migration trigger
|
||
|
||
Per autoplan plan, buy a `.vn` / `.com.vn` domain only when ANY of:
|
||
|
||
1. **500 unique sessions** in any rolling 30-day window post-launch, OR
|
||
2. **1 organic teacher share** (Facebook group, Zalo, or school chat — verified, not founder-initiated), OR
|
||
3. **≥5 modules shipped** (signals content sustainability and amortizes the domain cost)
|
||
|
||
If none hit within 90 days of soft launch, stay on `tiennm99.github.io/try-gstack/`.
|
||
|
||
When the trigger fires:
|
||
|
||
1. Register the domain (VN registration: passport scan + address proof + MIC filing, 7–14 days)
|
||
2. Add `CNAME` file at repo root with the new domain (e.g. `hinhhocsong.vn`)
|
||
3. Configure custom domain in GitHub Pages settings (Settings → Pages → Custom domain)
|
||
4. Update `astro.config.mjs`: change `SITE_BASE` env from `/try-gstack` to `/`, point `SITE_URL` at the new domain. Or update the workflow `env:` block.
|
||
5. Update OpenGraph + canonical URLs (handled automatically once `astro.config.mjs` reflects the new domain)
|
||
6. Wait 24h, then update sitemap submission in Google Search Console
|
||
7. Set up 301 redirects (GitHub Pages handles this automatically once the custom domain is the primary)
|
||
|
||
## Things to NOT do
|
||
|
||
- Never `git push --force` to `main`.
|
||
- Never edit `VERSION` or `package.json.version` independently — they must agree (`/ship` enforces this).
|
||
- Never change `astro.config.mjs` `base` without simultaneously updating the deploy workflow `env:` and any hardcoded internal links.
|