commit 230eb9010c97be693cfd6da86b9dff04522ab42b Author: renolation Date: Wed May 20 14:00:51 2026 +0700 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e0d404 --- /dev/null +++ b/.gitignore @@ -0,0 +1,98 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ +dist/ +bin/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# package manager +package-lock.json +yarn.lock +pnpm-lock.yaml + +# semantic-release +.nyc_output + +# env files (can opt-in for committing if needed) +.env* +!.env.example + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# flutter +.dart_tool +build +GoogleService-Info.plist + +repomix-output.xml +.serena/cache +plans/**/* +!plans/templates/* +screenshots/* +docs/screenshots/* +logs.txt +test-ck +__pycache__ + +# CK meta commands +prompt.md +ck.md + +# Generated runtime layout for release/install smoke tests +/.claude/ +# But track repo-level rules that Claude Code reads +!/.claude/rules/ + +# Local-only state inside tracked claude source +claude/agent-memory/ +claude/hooks/.logs/ +claude/session-state/latest.md +claude/session-state/archive/ +claude/settings.bak.json +claude/skills/ai-multimodal/assets/demo-*.claude/session-state/*.tmp + +# Gemini CLI settings (symlink to staged .claude/.mcp.json) +.gemini/settings.json +# Showoff/marketing assets (images, showcases) +assets/ +# Exception: use-mcp ships a persistent tool catalog at assets/tools.json +!claude/skills/use-mcp/assets/ +!claude/skills/use-mcp/assets/** + +# External repos for study/reference +external/ + +# Git worktrees (local development only) +worktrees/ diff --git a/.repomixignore b/.repomixignore new file mode 100644 index 0000000..9056cff --- /dev/null +++ b/.repomixignore @@ -0,0 +1,22 @@ +docs/* +plans/* +assets/* +dist/* +coverage/* +build/* +ios/* +android/* +tests/* +__tests__/* +__pycache__/* +node_modules/* + +.opencode/* +.claude/* +.serena/* +.pnpm-store/* +.github/* +.dart_tool/* +.idea/* +.husky/* +.venv/* \ No newline at end of file diff --git a/Claude.md b/Claude.md new file mode 100644 index 0000000..2ea882d --- /dev/null +++ b/Claude.md @@ -0,0 +1,343 @@ +# Places App — Project Context + +## What this is +Collaborative place-saving web app (mobile-first) cho nhóm nhỏ (bạn bè, gia đình). +Lưu quán ăn, cà phê, địa điểm — cùng nhau quản lý, tag, rate, và xem trên bản đồ. + +--- + +## Tech Stack + +| Layer | Choice | +|---|---| +| Framework | Next.js (App Router) | +| Styling | Tailwind CSS v4 | +| UI Components | shadcn/ui (Radix UI + Tailwind) | +| Backend / DB | Supabase (Postgres + Auth + Realtime + Storage) | +| Auth | Supabase Auth (magic link email) | +| Geocoding | Nominatim (OpenStreetMap) — free, hoạt động ở VN | +| Map view | Leaflet + OpenStreetMap (Phase 3) | +| External navigation | Google Maps link `https://maps.google.com/?q={lat},{lng}` — chỉ open external, KHÔNG dùng Google Maps API | +| Deploy | Vercel | + +> ⚠️ Google Maps API KHÔNG hoạt động ở Việt Nam. Chỉ dùng external link để mở Google Maps app/web. Mọi geocoding dùng Nominatim. + +--- + +## Database Schema + +### `users` +```sql +id uuid PK +email text unique +name text +avatar_url text nullable +created_at timestamp +``` + +### `places` +```sql +id uuid PK +created_by uuid FK → users +name text +address text +lat float +lng float +category enum ('food', 'cafe', 'shopping', 'entertainment', 'other') +tags text[] -- max 10 tags +cover_url text nullable -- 1 ảnh cover, resize client-side trước upload, max 1MB +phone text nullable +website text nullable -- website hoặc Facebook page URL +price_range enum ('$', '$$', '$$$') nullable +opening_hours text nullable -- free text, vd: "7:00–22:00 hàng ngày" +permanently_closed boolean -- default false +created_at timestamp +``` + +### `user_place_data` — per-user metadata +```sql +user_id uuid FK → users +place_id uuid FK → places +notes text nullable -- riêng tư, chỉ mình thấy (không bao giờ share) +rating int nullable -- 1–5, per-user +visited boolean -- default false +visited_at timestamp nullable +PRIMARY KEY (user_id, place_id) +``` + +### `collections` +```sql +id uuid PK +owner_id uuid FK → users +name text +type enum ('folder', 'trip') +trip_start date nullable -- chỉ dùng khi type = 'trip' +trip_end date nullable +invite_token text unique nullable +token_expires_at timestamp nullable -- expiry 7 ngày +public_token text unique nullable -- null = private | có token = public read-only (không expire) +created_at timestamp +``` + +### `collection_members` +```sql +collection_id uuid FK → collections +user_id uuid FK → users +role enum ('owner', 'editor', 'viewer') +joined_at timestamp +PRIMARY KEY (collection_id, user_id) +``` + +### `collection_places` — junction table +```sql +collection_id uuid FK → collections +place_id uuid FK → places +added_by uuid FK → users +sort_order int -- sắp xếp thủ công trong collection +added_at timestamp +PRIMARY KEY (collection_id, place_id) +``` + +### `place_reviews` — review shared trong collection +```sql +id uuid PK +place_id uuid FK → places +collection_id uuid FK → collections -- review gắn với context collection +user_id uuid FK → users +body text -- nội dung review +rating int nullable -- 1–5, optional (tách biệt với rating trong user_place_data) +created_at timestamp +updated_at timestamp +-- UNIQUE (place_id, collection_id, user_id): mỗi user 1 review per place per collection +``` + +--- + +## Business Logic — Rules quan trọng + +### Privacy — mặc định private + +**Place:** +- Mọi place mặc định **private** — chỉ `created_by` thấy +- Place chỉ visible với người khác khi nó được add vào 1 collection mà họ là member + +**Collection:** +- Mọi collection mặc định **private** — chỉ members thấy +- Owner có thể bật **public read-only** bằng cách tạo `public_token` + - URL: `/c/[public_token]` — ai có link đều xem được, không cần đăng nhập + - Chỉ xem places + tên + địa chỉ + category + tags + avg_rating + - KHÔNG thấy: notes riêng tư, visited status, thông tin members + - Owner revoke bất cứ lúc nào (set `public_token = null`) +- `invite_token` ≠ `public_token`: invite → join làm member | public → chỉ xem + +### Place ownership +- Place thuộc về `created_by` user, không thuộc collection +- Xóa place khỏi collection = xóa row trong `collection_places` (KHÔNG xóa place) +- Xóa hẳn place = xóa trong place detail screen, chỉ `created_by` mới được xóa + +### Multi-collection +- 1 place có thể thuộc nhiều collection cùng lúc (qua `collection_places`) +- `sort_order` là per-collection, không phải global + +### Per-user data (`user_place_data`) +- `notes`, `rating`, `visited` hoàn toàn riêng tư — không ai khác xem được, kể cả trong shared collection +- Rating trong `user_place_data`: dùng để tính avg_rating hiển thị "Bạn ★4 · Nhóm ★3.5" +- `user_place_data` row tạo lazy (chỉ tạo khi user thực sự set giá trị) + +### Review (`place_reviews`) +- Review là **shared trong context 1 collection** — members cùng collection mới thấy +- Mỗi user chỉ có **1 review per place per collection** (có thể edit) +- Review có rating riêng (optional) — độc lập với rating trong `user_place_data` +- Review hiển thị: avatar + tên + body + rating + ngày viết +- Viewer được xem review, KHÔNG được viết +- Khi place thuộc nhiều collection: review của collection A không hiện trong collection B +- Public link (`/c/[public_token]`): hiện reviews nhưng ẩn tên người viết (chỉ hiện "Thành viên") + +### Notes vs Review — phân biệt rõ +| | Notes | Review | +|---|---|---| +| Visibility | Chỉ mình thấy | Members trong collection | +| Mục đích | Nhắc nhở cá nhân | Chia sẻ trải nghiệm | +| Có rating | Không | Có (optional) | +| Scope | Global (cross-collection) | Per-collection | +| Placeholder UI | "Ghi chú riêng tư..." + icon 🔒 | "Chia sẻ trải nghiệm của bạn..." | + +### Permission model +| Action | Owner | Editor | Viewer | +|---|---|---|---| +| Xem places trong collection | ✓ | ✓ | ✓ | +| Xem reviews | ✓ | ✓ | ✓ | +| Viết / sửa review của mình | ✓ | ✓ | ✗ | +| Xóa review của mình | ✓ | ✓ | ✗ | +| Xóa review của người khác | ✓ | ✗ | ✗ | +| Thêm place vào collection | ✓ | ✓ | ✗ | +| Sửa / xóa place (của mình) | ✓ | ✓ | ✗ | +| Invite member | ✓ | ✗ | ✗ | +| Đổi role member | ✓ | ✗ | ✗ | +| Xóa collection | ✓ | ✗ | ✗ | + +### Invite flow +- **Link invite**: tạo `invite_token` (uuid), expiry 7 ngày, owner chọn role khi tạo link + - URL: `/invite/[token]` + - Owner có thể revoke (set `invite_token = null`) +- **Email invite**: nhập email → Supabase gửi magic link kèm redirect về `/invite/accept?collection={id}&role={role}` + +### Offline +- Khi load collection: snapshot data vào `localStorage` key `places_cache_{collection_id}` +- Khi mất mạng: đọc từ cache, hiển thị banner "Đang xem bản offline" +- Viewer-only khi offline (không cho thêm/sửa dù là editor) + +--- + +## Geocoding — Nominatim + +```typescript +// Autocomplete địa chỉ — debounce 500ms bắt buộc +const searchAddress = async (query: string) => { + const res = await fetch( + `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(query)}&format=json&limit=5&countrycodes=vn`, + { headers: { 'Accept-Language': 'vi' } } + ) + return res.json() +} + +// Reverse geocode từ lat/lng +const reverseGeocode = async (lat: number, lng: number) => { + const res = await fetch( + `https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lng}&format=json`, + { headers: { 'Accept-Language': 'vi' } } + ) + return res.json() +} +``` + +> Rate limit: 1 req/s. Luôn debounce, không spam request. + +## External Maps + +```typescript +// Mở Google Maps theo lat/lng +const openGoogleMaps = (lat: number, lng: number, name?: string) => { + const url = name + ? `https://maps.google.com/maps?q=${encodeURIComponent(name)}&ll=${lat},${lng}` + : `https://maps.google.com/?q=${lat},${lng}` + window.open(url, '_blank') +} +``` + +--- + +## Build Phases + +### Phase 1 — Core (build trước) +- [ ] Auth: Supabase magic link, session management +- [ ] CRUD places: thêm/sửa/xóa, GPS auto-fill, Nominatim autocomplete +- [ ] Upload ảnh cover: resize client-side (canvas API), upload lên Supabase Storage +- [ ] Danh mục cố định + tag tự do (max 10) +- [ ] Collection: tạo folder / trip +- [ ] Add/remove place ↔ collection (junction) +- [ ] Visited status + per-user notes + rating +- [ ] Tìm kiếm + lọc theo tên / tag / category +- [ ] Nút "Mở Google Maps" + +### Phase 2 — Collaborate +- [ ] Invite link (token + expiry + revoke) +- [ ] Invite email (Supabase Auth) +- [ ] Permission enforcement theo role (Owner/Editor/Viewer) +- [ ] Quản lý members (đổi role, kick) +- [ ] Realtime sync (Supabase Realtime) +- [ ] Offline read cache (localStorage) + +### Phase 3 — Discovery +- [ ] Map view: Leaflet + OpenStreetMap, pin cluster theo collection +- [ ] Near me: lọc places trong bán kính X km +- [ ] Public link read-only (xem collection không cần đăng nhập) + +--- + +## Project Structure (đề xuất) + +``` +src/ + app/ # Next.js App Router + (auth)/ + login/ + (app)/ + places/ + collections/ + [id]/ + invite/ + [token]/ + components/ + places/ # PlaceCard, PlaceForm, PlaceDetail + collections/ # CollectionCard, CollectionForm, MemberList + map/ # MapView (Phase 3) + ui/ # Button, Input, Modal, ... shared components + lib/ + supabase/ + client.ts # browser client + server.ts # server client + middleware.ts + nominatim.ts # geocoding helpers + maps.ts # openGoogleMaps helper + hooks/ + use-places.ts + use-collections.ts + use-offline-cache.ts + types/ + index.ts # DB types generated từ Supabase +``` + +--- + +## UI / UX — Mobile First + +### Nguyên tắc +- **Mobile-first**: design cho màn hình 390px trước, responsive lên tablet/desktop sau +- Mọi touch target tối thiểu **44×44px** (Apple HIG) — không nhỏ hơn +- Spacing theo bội số 4px (4, 8, 12, 16, 24, 32…) +- Ưu tiên bottom sheet / drawer hơn center modal trên mobile + +### shadcn component mapping +| Use case | Component | +|---|---| +| Form thêm/sửa place | `Sheet` (slide from bottom) | +| Autocomplete địa chỉ Nominatim | `Command` + `Popover` | +| Confirm xóa | `AlertDialog` | +| Filter / sort | `Sheet` (bottom) hoặc `Popover` | +| Invite member | `Dialog` | +| Role picker | `Select` | +| Tag input | `Badge` + custom input | +| Rating | Custom star component (không có sẵn trong shadcn) | +| Category picker | `ToggleGroup` | +| Date range (trip) | `Calendar` + `Popover` | +| Toast / feedback | `Sonner` (shadcn toast) | +| Bottom navigation | Custom — không có trong shadcn | + +### Navigation pattern +- **Bottom tab bar** cố định: Danh sách · Collections · Thêm (FAB) · Hồ sơ +- FAB (Floating Action Button) ở giữa bottom bar để thêm place nhanh +- Back navigation dùng header với nút back trái — không dùng browser back +- Deep link support cho `/collections/[id]` và `/invite/[token]` + +### Component conventions +- Không override shadcn component source trực tiếp — extend qua `className` prop hoặc `variants` +- Dùng `Sheet` với `side="bottom"` thay `Dialog` cho mọi form trên mobile +- Dùng `Drawer` (Vaul) khi cần swipe-to-dismiss gesture +- `cn()` utility cho conditional classNames — không dùng template literal thuần + +--- + +## Conventions + +- **Xóa**: luôn soft-confirm trước khi xóa place khỏi collection. Xóa hẳn place phải có dialog confirm rõ ràng. +- **Rating display**: `Bạn: ★4 · Nhóm: ★3.5` — rating từ `user_place_data`, hiển thị cả hai khi trong shared collection. +- **Review**: hiển thị dạng card — avatar + tên + body text + rating (nếu có) + thời gian. Viewer thấy nhưng không có input box. Empty state: "Chưa có review nào. Chia sẻ trải nghiệm của bạn!" +- **Notes vs Review**: 2 section tách biệt trong Place Detail. Notes có icon khóa 🔒, placeholder "Ghi chú riêng tư...". Review section chỉ hiện khi đang xem trong context 1 collection cụ thể. +- **Visited**: checkbox đơn giản, khi tick tự set `visited_at = now()`. +- **Image upload**: resize về max 1200px và compress về <1MB trước khi upload, dùng canvas API ở client. +- **Offline banner**: khi `navigator.onLine === false`, hiển thị banner cố định ở top, disable các action write. +- **Nominatim**: luôn thêm `countrycodes=vn` và `Accept-Language: vi` header cho kết quả tốt hơn ở VN. +- **Supabase RLS**: bật RLS trên tất cả các bảng, không exception. +- **Privacy default**: place và collection đều private by default. RLS policy phải enforce: user chỉ thấy places của mình HOẶC places trong collections mà họ là member. +- **Public collection route** `/c/[public_token]`: query không cần auth, chỉ trả về fields được phép (name, address, lat, lng, category, tags, avg_rating) — KHÔNG trả về notes, visited, member info. \ No newline at end of file diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..561d804 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,11 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + images: { + remotePatterns: [ + { protocol: "https", hostname: "images.unsplash.com" }, + ], + }, +}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..9f7d6ec --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "places", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "next": "15.0.3", + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.0.0", + "@types/node": "^22", + "@types/react": "^19", + "@types/react-dom": "^19", + "postcss": "^8", + "tailwindcss": "^4.0.0", + "typescript": "^5" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..61e3684 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/release-manifest.json b/release-manifest.json new file mode 100644 index 0000000..09536ea --- /dev/null +++ b/release-manifest.json @@ -0,0 +1,8664 @@ +{ + "version": "2.19.0", + "generatedAt": "2026-05-13T16:04:33.569Z", + "files": [ + { + "path": ".ck.json", + "checksum": "e23902dd3818f63911b8018fc0e39fc5ce2713b7400fd0e74cef0186fdf022f3", + "size": 1163, + "lastModified": "2026-04-03T02:06:04-04:00" + }, + { + "path": ".ckignore", + "checksum": "fc77043a8716d1ebf03af39833df337ac7fff1b8b22ad43cac39d16aaf7f90f7", + "size": 367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": ".env.example", + "checksum": "96c1e12bfb4f68115935f2353bec1faf7952673fb543beb46460dac60db6d835", + "size": 4591, + "lastModified": "2026-04-08T14:50:59-04:00" + }, + { + "path": ".gitignore", + "checksum": "44a5f79389255fa4e8c2ed4b2220a9284d9c342cd548dd4571cfeb0becdccd82", + "size": 764, + "lastModified": "2026-04-19T14:51:33+07:00" + }, + { + "path": ".mcp.json.example", + "checksum": "1add9f64a1c29e26dbb9a3cd078e9d590301e5405de0f1eda8b628bd503f6b4c", + "size": 732, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/brainstormer.md", + "checksum": "13c564430f81fac4964961e9eb9fef7e5975883a80592419741a0608d23147c6", + "size": 8260, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/code-reviewer.md", + "checksum": "7e9784ee4f85d1d610aa843f3e4cda8455f2cbc5248caaaaec2091d444bce263", + "size": 6240, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "agents/code-simplifier.md", + "checksum": "7e1a031112a72fd39bd5f7b9ca8c127f8b7928c13b6fa6061b07d90a73580862", + "size": 3384, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/debugger.md", + "checksum": "5dec21a4387b0e163816e43894cd33058caf54d2e10078e6a6d9537549b29edf", + "size": 10381, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/docs-manager.md", + "checksum": "0d3f7c1451313fe7cc3804fa4c5496486141b6b8dc783846753ed01bb47f2fbd", + "size": 11408, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/fullstack-developer.md", + "checksum": "790568de07769cc045926eaa7f05b22c20de8b25ed799b922e88087767ea5033", + "size": 5386, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/git-manager.md", + "checksum": "62c58833e1cf2df1fe0913a36c3b9546ce013c5739dada03d9a6863de1626be0", + "size": 1106, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/journal-writer.md", + "checksum": "b3e072ec80d5e6f9cb34d496d60c56719a91d6670fb0cd697aa519530eeb1670", + "size": 8602, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/planner.md", + "checksum": "1d8af99372988e12ab0a3433e12b4003ac63f2e6fd6fc63197fa5ca62984553b", + "size": 9522, + "lastModified": "2026-04-29T09:46:43-04:00" + }, + { + "path": "agents/project-manager.md", + "checksum": "5b55a2f8a63c583e511e15720bf9240849898674b51192b8883bd7e1a06cfb7e", + "size": 3564, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/researcher.md", + "checksum": "0278ed100130c06ea14839e62d1d4bc5468b7648b3ac49a653d69af39694c082", + "size": 5976, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/tester.md", + "checksum": "3ac3a3034ee48d05325b869437d3c2c234f6abdf0b572dd7744291914890056f", + "size": 9659, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "agents/ui-ux-designer.md", + "checksum": "83a6eaa07ca15e87971abb321c1059d6e95dd3d22b1f7a5dbb7433eb7428841f", + "size": 15090, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "command-archive/ck-help/SKILL.md", + "checksum": "6b9111ce785f3d775a814e40bd43e980dd983044ecad551fde670ae19600921a", + "size": 3471, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "command-archive/ck-help/scripts/ck-help.py", + "checksum": "0f58315c20cb547977f2d2c96ccf1c93e1fb64e0c860f92fcd4eb9932d358038", + "size": 49882, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "command-archive/ck-help/scripts/commands_data.yaml", + "checksum": "daf7c632ad9261fcd1161e1e97e6c20307cae5ec2f31c93fb643ca84931b89a9", + "size": 92, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "command-archive/ck-help/scripts/skills_data.yaml", + "checksum": "34b88d33464200830c5b7cb725bb8439fd47cfbe145c6f7da0e19fd813fae2c9", + "size": 24642, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/advisory-boundary-policy.test.cjs", + "checksum": "7b8b7df9d1052f749761664d74601b5ce82bc7ca7f87f4311072b3862cbbbc7c", + "size": 8833, + "lastModified": "2026-04-28T20:32:34-04:00" + }, + { + "path": "hooks/__tests__/ck-config-utils.test.cjs", + "checksum": "7e35cae856bdd258188400d5bc17673f4a53bd9bad726447c7b0ea1a84d0584b", + "size": 17595, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/descriptive-name.test.cjs", + "checksum": "b307a81902cab7d4c0b016df32837cc8598c0adc493ae7d05d016069908a86be", + "size": 9123, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/dev-rules-reminder.test.cjs", + "checksum": "a24c0c2d392cc257bd692af613cb3e5f54809e56622a3496ebb1cff8328f69e6", + "size": 17827, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/hook-logger.test.cjs", + "checksum": "eee8c5570c8359cd920c55d755b9fd86f88605a0fe527da9731c939e84827b34", + "size": 3244, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/integration/path-resolution.test.cjs", + "checksum": "676c66ff215569ecfe56dd1eddd2f822d592684e457a802ed0ff15af66bc258e", + "size": 12760, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/__tests__/plan-format-kanban.test.cjs", + "checksum": "b2136700525ae21db825dae4a68ba2f74e9970867a698d137a3254cf622f9614", + "size": 12650, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/privacy-block.test.cjs", + "checksum": "364cd461a51c27b9e657ed5eaf3cc54944fd3d8d655042eaa48b96c841718f3e", + "size": 9940, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/session-init.test.cjs", + "checksum": "5ae7d35147c916def01c29c032cc1dbd2d1fa2f7a54b13ceca89d72b52ca3a72", + "size": 18708, + "lastModified": "2026-04-16T22:52:27-04:00" + }, + { + "path": "hooks/__tests__/session-state-lock.test.cjs", + "checksum": "b4383e17cc03ba3d0defbb6cf14d4394ef5fa32a9df6e95d2f5080d8e378fe9b", + "size": 3054, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/session-state.test.cjs", + "checksum": "211e92d0fc53dcfc6fc77d999250d0b0f513d64cf51252215fb708c2b768cceb", + "size": 16827, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/simplify-gate.test.cjs", + "checksum": "5bc0b0bf4b27fff8364eb3603092257a6fc68805804ec8903ad8adce4ebc9327", + "size": 7400, + "lastModified": "2026-04-18T16:01:34-04:00" + }, + { + "path": "hooks/__tests__/skill-dedup.test.cjs", + "checksum": "790082bdcfbe54abaa792a109b23325a8501b98f4c62fe5dc9ba749ef9cb0093", + "size": 18335, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/subagent-init.test.cjs", + "checksum": "2cf232eb8cdf77eee50341b3148afead65a24bc2f64f8455354860c13a75d943", + "size": 23193, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "hooks/__tests__/task-completed-handler.test.cjs", + "checksum": "941b750b64fd770ba290e4c08fd488f7f3862af947cb44fee3517547775f5803", + "size": 8625, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/team-context-inject.test.cjs", + "checksum": "ab4cb25e57b602e4f608753252f7994b6e90fffd6a19e5eee3d5f59dd904463a", + "size": 26356, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/teammate-idle-handler.test.cjs", + "checksum": "48d551b4808696b3ecde8af224c3566501b64e21a1c865d952e570522371cff9", + "size": 9223, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/__tests__/usage-quota-cache-refresh.test.cjs", + "checksum": "479156f615f63a452f9512cc79adc699fbdd43ed6ead0a80c90626afdd768997", + "size": 1651, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/cook-after-plan-reminder.cjs", + "checksum": "b34478e0469ea9b35152a8bdaffebd5cfab0e27ae7fde1a4af67f5738bd11420", + "size": 2475, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "hooks/descriptive-name.cjs", + "checksum": "4adc22a5596784c46ff929f15c3a04e764beb66cc58ae2af6bffc9e678a9143a", + "size": 1617, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/dev-rules-reminder.cjs", + "checksum": "ecea0e89656191466420437f9711aec81d4958c9bbd9d5563277997a2a3a9b62", + "size": 3222, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/docs/README.md", + "checksum": "965e80a6705c727a98dd2ccfc8b0224ce08d0dd85667e4fc1e3065e42f8bb5ed", + "size": 5439, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/lib/__tests__/README.md", + "checksum": "5c564c3d17aa201b3322a9b94068e072ea162c6a51ad433041b9a70293662998", + "size": 3163, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/ck-config-utils.test.cjs", + "checksum": "62e59b8419a2a2f2baaf4aa3e2d4d9235e4366572620382d01dcd8dde30f8f05", + "size": 26812, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/context-builder.test.cjs", + "checksum": "cfa787542970544edd50b3d4a5b5aa9c5e2633e7adbfc17d5725d4a7986b9eae", + "size": 20753, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/project-detector.test.cjs", + "checksum": "4b442b2a9807a3c38075ca0928bf0a7d677d2d821eba03ca99c34b4f2f6b7230", + "size": 24050, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/statusline-integration.test.cjs", + "checksum": "a9a0cefca3dd14a8f1e74da7c6dc18a6a628b97ce24a76b0a7ac4413e51aede4", + "size": 22927, + "lastModified": "2026-04-14T12:13:43-04:00" + }, + { + "path": "hooks/lib/__tests__/statusline-scenarios.test.cjs", + "checksum": "925cfb5d948ae60e0239a2c12667b4fa4e0bd823328fba31302d2dabd18b29dd", + "size": 45881, + "lastModified": "2026-04-15T01:56:55-04:00" + }, + { + "path": "hooks/lib/__tests__/statusline-suite.cjs", + "checksum": "1469cb129be16c87a4f0450cc2ebe482018dcf5332dc840bad04a607e7a1a7ed", + "size": 1301, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/statusline.test.cjs", + "checksum": "b68025aa7a5f454c98dac14561d1371a6dcd87fcb70d862091d4651fc01fe8fe", + "size": 34053, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/__tests__/usage-limits-cache.test.cjs", + "checksum": "68360bae745e58b812c05f6e9ec22dc718d5fd22d775d2e1d933ab496c3d110e", + "size": 8731, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/ck-config-utils.cjs", + "checksum": "0e3ad96ec1114e7547fdc97cce9c14efbe8b37e29db8c51b27b21276c1798c36", + "size": 29675, + "lastModified": "2026-04-16T22:52:27-04:00" + }, + { + "path": "hooks/lib/colors.cjs", + "checksum": "4841b5b0786727c841295bca123e25ac1a530b77fd1c9a932ddc36152b59e8c1", + "size": 5836, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/config-counter.cjs", + "checksum": "b44d9f4cb6a6a77648b318ecc7fa50f2f8c3f9d6e2dffc875eda226cba2e5f22", + "size": 3493, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/context-builder.cjs", + "checksum": "9e217fc4d081b7dfb5b6be2f628b6434741f860f91e94bf6647eed9756ce840a", + "size": 30610, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "hooks/lib/git-info-cache.cjs", + "checksum": "d54b164ca22ac3881f3ca9a240fdd1301ac67fb2b5715523a4f5db499d46d18f", + "size": 5764, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/hook-logger.cjs", + "checksum": "25eb6d94dc35cd5d17b9c577e58b6f51ed3c814b1f034aac5eb73df8f7ff1e78", + "size": 4098, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/privacy-checker.cjs", + "checksum": "7d2c0003c867f6b81f816533ac74b81402a2905ac2a7d8d1cd9eb233027de965", + "size": 10595, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/project-detector.cjs", + "checksum": "2302abebc8772a2a1bba3f80010d9fef698a66d8df7ef5480677062b7978bcce", + "size": 16586, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/scout-checker.cjs", + "checksum": "933a7c8380a936be8e71854f01658a35031807f9ed57f6982ca1f81b399a99b3", + "size": 12952, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/lib/session-state-manager.cjs", + "checksum": "b596ee5b5eaac999eefa9e46f8226c70e9487d539811f0217919a72427678703", + "size": 13583, + "lastModified": "2026-04-03T01:09:04-04:00" + }, + { + "path": "hooks/lib/statusline-activity-renderers.cjs", + "checksum": "9bdd8351946b7e865391488b3af1a322c072230a546f3fffe4c757207680b22f", + "size": 6094, + "lastModified": "2026-04-15T01:56:55-04:00" + }, + { + "path": "hooks/lib/statusline-render-modes.cjs", + "checksum": "975fc532f5a696bbfbb5a040628b12e39d67bfae5af4538a261ec5cafa499ca0", + "size": 9305, + "lastModified": "2026-04-15T01:56:55-04:00" + }, + { + "path": "hooks/lib/statusline-section-registry.cjs", + "checksum": "3d4548c9c827d05341bf6b64aa861ea97c6d427c26f4fddb3a3998fea170dfe3", + "size": 9525, + "lastModified": "2026-04-15T01:56:55-04:00" + }, + { + "path": "hooks/lib/statusline-session-cache.cjs", + "checksum": "3f619b32338d64cb57891cb9c2b91346de47c69cd341a75bd35538064522b9f1", + "size": 2674, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/statusline-string-utils.cjs", + "checksum": "b785c5d601009222737067ba9f5956b25e2f72f7de2455a5bc726db10730cd7c", + "size": 4377, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/transcript-parser.cjs", + "checksum": "10c731ae15ce090dec0f0275702563c529f8d287731a8ea785b590d921b61f74", + "size": 8480, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/lib/usage-limits-cache.cjs", + "checksum": "454636bb6153ecf3c52529cbe0d8a70855ef771f48a53c54ecafea4e8dc57f0f", + "size": 9157, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/node-hook-runner.sh", + "checksum": "f3f43b1c59012ffbcd6210ece850e61bd898b78db69c279cf0e604ac2ecdc649", + "size": 2142, + "lastModified": "2026-05-10T14:20:54-04:00" + }, + { + "path": "hooks/notifications/.env.example", + "checksum": "cae84dd26379eb81960e95acfc84b4e08097c71c872a07a14ef573e1b5e68998", + "size": 759, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/docs/discord-hook-setup.md", + "checksum": "d752306627ceaca88a06d29e8e72b1d0abd1628629b42e40d42300f2487da7b3", + "size": 4594, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/docs/slack-hook-setup.md", + "checksum": "b517f69e0f28d246665760e7c0fbc40bb40ee9c12d41e9ec567a519f60984cc1", + "size": 2873, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/docs/telegram-hook-setup.md", + "checksum": "26c3b091e7738c7d3f47b9d4d79c81855b792f71e096d7b1a3e0c9a1c8fcfba5", + "size": 15099, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/lib/env-loader.cjs", + "checksum": "9476d91f1e5a528ccf8f8ccab6615929438135b315c385234c73bd2bd6299743", + "size": 2852, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/lib/sender.cjs", + "checksum": "ad5d19204bc75b4ff0ff93f164d787bcd9ed2487201229042a6318e99b0ffb8c", + "size": 3350, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/notify.cjs", + "checksum": "fb60687d737308c85ce1c853b06c64e363f4b630d8d90f1211388bfea69539ff", + "size": 4081, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/providers/discord.cjs", + "checksum": "4ed27df6c9e83097e2339ace42126ae86f3669e5983ecff4de87a55641003e17", + "size": 5800, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/providers/slack.cjs", + "checksum": "43f52b351539e9104f6f56eaf7121c6185acfea5a38862e7502c53d94376f1cc", + "size": 3105, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/notifications/providers/telegram.cjs", + "checksum": "c5e0dda66c64811216293a4358d55c8c71b2eaaa5309ee847aff3a3ba6f5460a", + "size": 2918, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/plan-format-kanban.cjs", + "checksum": "4a6abe3c63db37def272d87099f78de942f1c7bd1fd61c2180ab9be755d67c59", + "size": 4080, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/privacy-block.cjs", + "checksum": "2201764e710297dab6f71ed7dc1b99d4c4eb8cec3a357fe5b87bbb79d8e29500", + "size": 5394, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/broad-pattern-detector.cjs", + "checksum": "c3100b30aa6380d949856ca7cd4567a2ae1ee3fb8a0d728803bb0274788d49b6", + "size": 7285, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/error-formatter.cjs", + "checksum": "d0500460c84fbbb1e86f9046632e89ea8e10b867993b6281d9fe8c3328d42def", + "size": 4259, + "lastModified": "2026-04-03T00:34:50-04:00" + }, + { + "path": "hooks/scout-block/path-extractor.cjs", + "checksum": "98364a15c3eb00d66409647ecbdb380f3a10ee6d5227cb6f93b6af783a9a28bb", + "size": 10093, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/pattern-matcher.cjs", + "checksum": "5fef3fbc9aa4bb1508ab9a4547507c78dabd5d44c80c42a112660caefca63b05", + "size": 5804, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/scout-block/tests/test-broad-pattern-detector.cjs", + "checksum": "9060faaf319a3b90a13b9f784493c44af30d36b3a493d8cd5f82172478c2abc6", + "size": 5324, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/tests/test-build-command-allowlist.cjs", + "checksum": "e202330f51d85ff94e08434d7096e330dfb831532328f7266cda09c5f2f87d6e", + "size": 6959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/tests/test-error-formatter.cjs", + "checksum": "1d21c12f43d7e17441281a0a51b0448ffc42b3f9754ce05ad5cc208996b34f6e", + "size": 4307, + "lastModified": "2026-04-03T00:34:50-04:00" + }, + { + "path": "hooks/scout-block/tests/test-full-flow-edge-cases.cjs", + "checksum": "4bcf0e9b031b3ebee7719092e76dff1d28f9d15d291b54bcc12fe1e67c49a01e", + "size": 3115, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/tests/test-monorepo-scenarios.cjs", + "checksum": "dd8fe1f3ac36168d353fb903ae64da94059a761fee8dc4847374fc3f2e0aa2d0", + "size": 6897, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/tests/test-path-extractor.cjs", + "checksum": "5197e9604cf4b27999f3198583ec1da991f328d636ce3d590926f3854a9fe793", + "size": 4935, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/tests/test-pattern-matcher.cjs", + "checksum": "db76854f1557faa91a8bb7f53ef141875df841517b88d5e10ba80cc3b5c06b4c", + "size": 3103, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block/vendor/ignore.cjs", + "checksum": "4cff82236576c96a22b4f52c43835735511b39d7f095553101128b817e079355", + "size": 16344, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/scout-block.cjs", + "checksum": "922537dde576406f7e751b1e16cd6973604e9071902db9b7379357f42fb42044", + "size": 5272, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/session-init.cjs", + "checksum": "d875a63885a0821993e5c4ec48bcbe7d0ca023b5c0c300f27d58b732abe707e4", + "size": 15889, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/session-state.cjs", + "checksum": "b51d181367d31d46a894011e88380aa30ac6e25c3fb061c2f8c13f17f8d3602d", + "size": 3002, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/simplify-gate.cjs", + "checksum": "f755b8a136ba0b415c8b21100d21154133a3523307cc2c212674388e6acd46d1", + "size": 5975, + "lastModified": "2026-04-18T16:01:34-04:00" + }, + { + "path": "hooks/skill-dedup.cjs", + "checksum": "94c1b631ddb9f691939fa2bfad470d5af81e90562807e8f08e352ce2db00aef0", + "size": 8025, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/subagent-init.cjs", + "checksum": "fd1ad8dc892370d710c23fd8009ec7e97c8841b8c4000d0fdf67d56129736fec", + "size": 8220, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "hooks/task-completed-handler.cjs", + "checksum": "6ceca9b71d64b8c1ce8249532b6851d7620cb344cd281df1a5e1e3de7874f7b4", + "size": 4471, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/team-context-inject.cjs", + "checksum": "101a1b9f95909e7e39d0c0363467266d27fda7990e49d29e2b90dbbc27a2b3bd", + "size": 5416, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/teammate-idle-handler.cjs", + "checksum": "40a6036d4761c27767c2dd8d376f667bae018c7de201199b40ebf06875237da3", + "size": 4201, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/scout-block/broad-pattern-detector.test.cjs", + "checksum": "2a06e042bc22056971a76e70d8e5fb22285d6bd9e86820eb3a2233a32017655e", + "size": 8538, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/scout-block/fixtures/ckignore-custom.txt", + "checksum": "b3d2b5b9e84565d986825cec893bd63a1ed5819c3e96ad394de97b4f65203a55", + "size": 74, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/scout-block/fixtures/ckignore-default.txt", + "checksum": "f61933852ac690d8e4f0b6a4cdfb4f293fe1ebc59d315eeb013029d530654fd1", + "size": 119, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/scout-block/fixtures/ckignore-negation.txt", + "checksum": "eb9bad13defed2dc15360021783c5a7377a663a4f310e3b2dbac6cb8578f84e6", + "size": 116, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/scout-block/fixtures/ckignore-project-override.txt", + "checksum": "d49eb3caf010b3ecd69b2e51f6d6ec2ae7deb10f11277961b0dfeab81f82382b", + "size": 42, + "lastModified": "2026-04-03T00:53:34-04:00" + }, + { + "path": "hooks/tests/scout-block/path-extractor.test.cjs", + "checksum": "5a5738c3cafb0f69e817ffd95b998fdccbe899ef6d65fb116e8d6118e05a0efd", + "size": 19438, + "lastModified": "2026-04-15T15:59:29-04:00" + }, + { + "path": "hooks/tests/scout-block/pattern-matcher.test.cjs", + "checksum": "0528e9eb70ee29a9cc298f7c906fe18e62466f6d28f952b8c6af39efcad7fead", + "size": 13612, + "lastModified": "2026-04-15T15:59:29-04:00" + }, + { + "path": "hooks/tests/scout-block/scout-checker.test.cjs", + "checksum": "4c34857c1a5b1b686610291846527ca82ad0f02f263d99e1e34d18b758579e93", + "size": 38133, + "lastModified": "2026-04-15T15:59:29-04:00" + }, + { + "path": "hooks/tests/test-ckignore.cjs", + "checksum": "8dccf1d6b3739663680baecaafe7926ae070a61a79ba129df800d4ccf3b31a25", + "size": 5393, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/test-modularization-hook.cjs", + "checksum": "bb2243f5a1ae4b1518d3f5a2ad16376297b35623cae56582aa489c1044e6e70c", + "size": 3445, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/test-privacy-block.cjs", + "checksum": "9b35609bd7e70bd58a642e72f7211fe75b72e873dc4746f94dee5601a3b8d55d", + "size": 8681, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/tests/test-scout-block.cjs", + "checksum": "0e75ed4b52578c9fe640a334ba27e38f2078af584ee2638d06415bb01059a8f8", + "size": 10153, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/usage-context-awareness.cjs", + "checksum": "9ce77a456bd1a6da378d7dadd8804a473575b22922e9223297a3fc387e482c37", + "size": 1194, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "hooks/usage-quota-cache-refresh.cjs", + "checksum": "71560a572ffffc20be12466d6f801c174c71fc8cd17a82c7f9d1eadffdbc96ff", + "size": 3012, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "metadata.json", + "checksum": "88df36eee804a6d065234c30f990382b2b3a153f61d506bccb7882fad6f38a61", + "size": 5043, + "lastModified": "2026-05-13T16:00:42Z" + }, + { + "path": "output-styles/coding-level-0-eli5.md", + "checksum": "db1882c4c992134b67c6d7c4a88f27af414638beb054d82a6350239b85978f25", + "size": 3797, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "output-styles/coding-level-1-junior.md", + "checksum": "0c41c9469aac2a1913eca9a40b6965a7ae5e6b006cbb6dff6c06f884b53125d9", + "size": 4433, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "output-styles/coding-level-2-mid.md", + "checksum": "71c92761fb0dff5eac9fcad89b248a2c94b2765139b1bcf1df12fbe2af09a32a", + "size": 5301, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "output-styles/coding-level-3-senior.md", + "checksum": "cfec83d2d493245382320819bb5878aa70a884d7d6b6d21cfc127294470f8e86", + "size": 5239, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "output-styles/coding-level-4-lead.md", + "checksum": "c7da8d488165c70f251de3f6b4d86e7b477d15fa79475bc84e3a30ad5326bfa5", + "size": 6029, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "output-styles/coding-level-5-god.md", + "checksum": "4df16ad59fae94759a9b71e0752233234cae28d6f5b9b412bfe189a3ae8a1a14", + "size": 3294, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "rules/development-rules.md", + "checksum": "f9a0a7c4646d2446b34f4a0f5a5daf93fa1140ed4f8c0e1754afab44703855a4", + "size": 3737, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "rules/documentation-management.md", + "checksum": "cb11d5f6adf46b420ee124e7beb23f2a6f87080ba3e8acb2e6debee8f9e387d6", + "size": 3986, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "rules/orchestration-protocol.md", + "checksum": "a63244d7b7918457f5577aed8ba025850c2f687ebbe88484c5e8cdd40c57edc7", + "size": 4527, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "rules/primary-workflow.md", + "checksum": "cefdeec125600d786c4707fd6dec4e6fced29fdd6e1d39950c097b1ef60698d6", + "size": 3973, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "rules/review-audit-self-decision.md", + "checksum": "dae1501004eb390fb7ff9f591c62520f826777540a643d44906d7d051f368731", + "size": 4824, + "lastModified": "2026-05-13T10:43:31+07:00" + }, + { + "path": "rules/skill-domain-routing.md", + "checksum": "674aed5000387c1acf5e17c0bba6c871dd286fdc00efd5078e3cc39ce36cd880", + "size": 5617, + "lastModified": "2026-05-02T21:58:06-04:00" + }, + { + "path": "rules/skill-workflow-routing.md", + "checksum": "6ecf3f1ffa1169baad7596f237b2abfef1195f3d578f18ebf090b626062f6a1d", + "size": 1642, + "lastModified": "2026-04-10T16:08:26-04:00" + }, + { + "path": "rules/team-coordination-rules.md", + "checksum": "782d4e962f3d7dbcffe1851ad869b9322325f1c20e9618c89cb030c8b05f7934", + "size": 3924, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "schemas/ck-config.schema.json", + "checksum": "654ba0a9f3d295b3a3b73ae3be9760a24c8a92b4e5a9e43be1d2d7269def98ce", + "size": 18957, + "lastModified": "2026-04-29T09:48:36-04:00" + }, + { + "path": "schemas/skill-schema.json", + "checksum": "719a8c497b88810c51b16bb7dc5be10e385e7652566a65d63d809e7a350db69b", + "size": 5546, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "scripts/README.md", + "checksum": "8e25613f1b9ea345c5ebd877cd92ffacb1a627218b2a1ce0f1ad9b65a2763015", + "size": 3319, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/requirements.txt", + "checksum": "8cfc3197b86bf23f2454918d3a0e212585c9cc70f8eee9ee36518311a93c7eb9", + "size": 12, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/resolve_env.py", + "checksum": "5540b61baddc265a3097060df5036cceea454ea55f25fccb907a9230d6feda90", + "size": 10977, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/scan_commands.py", + "checksum": "a66c7a8a2256b926b03f6f018690907d6b91c77f9ee7feb14ed72c6150db9948", + "size": 689, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/scan_skills.py", + "checksum": "421908cd0ce5a004dfaf8b88fbce83d9597f22f47bf5869f8d129ed8a1e8605c", + "size": 14882, + "lastModified": "2026-05-07T11:03:10-04:00" + }, + { + "path": "scripts/scan_skills.test.cjs", + "checksum": "30db627f57407c5a0903e3590e65b94c3fa77e64af515bf73b6da13a34353e0d", + "size": 2266, + "lastModified": "2026-04-07T05:45:27-04:00" + }, + { + "path": "scripts/score-skill-description.py", + "checksum": "8fea450d44335fe346d963a07ff870b994dafadf561ff083e3025b1846fbcdd2", + "size": 11302, + "lastModified": "2026-04-10T11:44:37-04:00" + }, + { + "path": "scripts/set-active-plan.cjs", + "checksum": "1168cd8f5c1be850b2ef48307998e2501ea44e5b8472aec2fe8bc693d1b3e621", + "size": 1621, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/skills_data.yaml", + "checksum": "4e26aed5f5b48d156516599b31182e3a14601b7af8db996e9a35f32b7762628b", + "size": 38248, + "lastModified": "2026-05-07T08:18:59-04:00" + }, + { + "path": "scripts/validate-docs.cjs", + "checksum": "5142928acafee07877c0c1196a1cb3fd668eddbf3e27f8791281afa3ec11d66a", + "size": 10155, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/validate-skill-crossrefs.py", + "checksum": "35a5a6e7fcba02bbd7d1f47d565d32d9bde0b6ef8162da66678d0818a25eb7b3", + "size": 12959, + "lastModified": "2026-04-10T16:04:22-04:00" + }, + { + "path": "scripts/validate-skill-frontmatter.py", + "checksum": "31baaec8558fb86c3728cdda0399aeb3961984dbda68036574fb385b76a6dba2", + "size": 12983, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "scripts/win_compat.py", + "checksum": "94b75bb1ef4aa1322152e2d327b8607f89ea13d4323e6a1cbf504bf5811298a1", + "size": 1727, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/worktree.cjs", + "checksum": "d9a1bff8ba868bfa01e6884a59748b87b695f616c212a5485d08b588710dedfe", + "size": 212, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "scripts/worktree.test.cjs", + "checksum": "ee8396d68c51f79a3f18e058ef691d69056807ebcb26c3aad1256acffdd03902", + "size": 220, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "session-state/.gitkeep", + "checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "settings.json", + "checksum": "516393be137b3b986a01a40acf40c316415617644619636fd2ed5a061a4eda3e", + "size": 1245, + "lastModified": "2026-05-13T11:59:42-04:00" + }, + { + "path": "skills/.env.example", + "checksum": "c74fabfe15101465821cc55dcd07083e86299fe04de482286b74f16d3be4e46f", + "size": 4515, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/.gitignore", + "checksum": "62d56d9d24e5e923c644143e06d9a9054340ee02b09251b13001f650ae5f155e", + "size": 87, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/INSTALLATION.md", + "checksum": "bdfa5e708e8a3720ce1e11963fdfd21ce72778cc1d55d17c3f1eded79bb3f8e8", + "size": 8879, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/README.md", + "checksum": "92309c5de75e7ecdc8c2fd13ca0570eab359598154ca7f23c56c0d14e8279b51", + "size": 8347, + "lastModified": "2026-04-30T13:17:21-04:00" + }, + { + "path": "skills/THIRD_PARTY_NOTICES.md", + "checksum": "a8ff7a84dee9dfb42ab448de281784387ceafdf63881b7c070ee2de7f6ed865c", + "size": 46162, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/_shared/lib/plan-table-parser.cjs", + "checksum": "fbbea9604cd5587d141b8fc6290c1becd8e43d3d15f8e57f5b34c8e69da02795", + "size": 10123, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/_shared/tests/plan-table-parser.test.cjs", + "checksum": "c4fffdc3696899afda24ddf6389cbfb49339a1fe0d34023637b6ac170720a5b6", + "size": 14897, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/agent-browser/SKILL.md", + "checksum": "2feab298937e042381506c35d6b3c18d09e1d34741d10bad454ca317eb947e32", + "size": 4021, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/agent-browser/references/.gitkeep", + "checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/agent-browser/references/agent-browser-vs-chrome-devtools.md", + "checksum": "81a49bc6ca50cec6761e94e789be5ebf2f0bea496762c17d075e07d53de948cf", + "size": 1886, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/agent-browser/references/browserbase-cloud-setup.md", + "checksum": "d81066796056615d39fec50525452c9fc998971a5f55759317f03d86fefb4438", + "size": 4000, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/agent_skills_spec.md", + "checksum": "6922767c34043a725fb4ba243f81ceaeb0b811a4b1887b614e34d4c51921c186", + "size": 1750, + "lastModified": "2026-04-30T13:17:21-04:00" + }, + { + "path": "skills/agentize/SKILL.md", + "checksum": "9a9605b34caf30d1769a0c74723f4c6cd0322095d9a0424c069b974552b6f223", + "size": 13995, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/agentize/references/agent-centric-design.md", + "checksum": "36e99a3f58d9beac987f9c193706b0141bdcf42f316bf8ce48dd97da27486f3b", + "size": 2731, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/agentize/references/auth-resolution-chain.md", + "checksum": "c4a64bf71b191c04d5ca117745886f6025450af2ddc41f3b52e9d7219ef7d532", + "size": 3529, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/agentize/references/challenge-framework.md", + "checksum": "8dced43663e0adc2e2d5c54a97d3feb87458f98f8b43d747fa49f8af56c2d28c", + "size": 3316, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/agentize/references/deployment-guide.md", + "checksum": "f81c35b4280fdae09c8e01670f384bfc3a72608eaf0011fbf41d70a74cff60d8", + "size": 3084, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/agentize/references/mcp-transports.md", + "checksum": "15367543f53f22c99db297e6c04e8da7e05abee1b78628ee9e86e173f47b28da", + "size": 3671, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/agentize/references/monorepo-layout.md", + "checksum": "0584b88e40e6a4bf7c70293436165c990ddd652d56ad7854483a0f5cff70013d", + "size": 4844, + "lastModified": "2026-04-19T14:51:24+07:00" + }, + { + "path": "skills/ai-artist/SKILL.md", + "checksum": "c80395d04e537ee6e84bed8e0ff66d3506ae4522fce0c25d0ecd4393af7a4157", + "size": 4465, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ai-artist/data/awesome-prompts.csv", + "checksum": "0b936c1fb9b65f0fd7ccbe9e474656a6a6635da5b2f6df6fe07bddb5b3d2d1bb", + "size": 252116, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/lighting.csv", + "checksum": "f6d2b3464e619f1ba462ddfc06b5653000d894f3440a3101b61e0a1bd605e997", + "size": 6299, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/nano-banana-templates.csv", + "checksum": "a07153d271430418d3b82d53c8cf84d4df96a4f97f4711e08f97fa9350fcff86", + "size": 8813, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/platforms.csv", + "checksum": "cfcb387ff30c9d2246ba2079006dd231b312b498c88ddb6c6537c518f1e289ce", + "size": 4744, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/styles.csv", + "checksum": "6bd9683d29578d7e2233d9a9c654a5417acc8530f12b7e68c391cf4932eaa072", + "size": 9703, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/techniques.csv", + "checksum": "abfd7db36aecbb8fc6a610a6120395ab7041721e168464bf057ebfeb55153033", + "size": 6778, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/data/use-cases.csv", + "checksum": "83be7bd974548fe335b71e15d8c5e20384318ac8f50fd6ecf28b7a17ab8804f2", + "size": 7352, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/advanced-techniques.md", + "checksum": "6f11ee79809b1aa8acc3630d775eddf40c3f3e6c1ade9526553a863490480a17", + "size": 3857, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/awesome-nano-banana-pro-prompts.md", + "checksum": "423b32cb2f9190cebe3b595797813d6342a0ea560f4c83809e5d23e0359f3d5b", + "size": 360556, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/domain-code.md", + "checksum": "121e4d719cf4a152a979429beb4f28794ddf205304bd625768d6c98972d4110a", + "size": 1229, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/domain-data.md", + "checksum": "755ee62aaeb6ce900a64c10090b5ae3b4a24b29d32cea669743047f42f884cca", + "size": 1171, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/domain-marketing.md", + "checksum": "c150d530b506006ccb3167c2c8af58f674f8b90c68843d6ea5813474386f1c37", + "size": 1274, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/domain-patterns.md", + "checksum": "ba8d26386876efe1311539b23c0ccac26d87aa2adaa1b9da4753e8aa99026c29", + "size": 732, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/domain-writing.md", + "checksum": "e2e415cf3c3755dfc5cd43282dc19a8cc3b718bbab776c3ca14d8b143c90b054", + "size": 1186, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/image-prompting.md", + "checksum": "4fb4a761cddc47d5f6e77c77e2833f1e8143253682a3d16ce7383918c67b8b61", + "size": 4491, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/llm-prompting.md", + "checksum": "ed4f343e2055a659617104a65f25d78abe239af4e8c56a7430c46d188e415d26", + "size": 3630, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/nano-banana.md", + "checksum": "c4ce848d8d93ce95d031955c6a08a10db37e5a75850499cfe8af7e1c9f582ffb", + "size": 5034, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/reasoning-techniques.md", + "checksum": "571838b5c6f3665ec58438fc9f653cbcabb5b17fc69102b9d2819dddffc5bc99", + "size": 4693, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/references/validation-workflow.md", + "checksum": "53be26fb0ac322ed5654b6a0e3ca495f16fd9471a7e23f0a0a6dbd1771778c2b", + "size": 4031, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/scripts/core.py", + "checksum": "676eb1e9d39bc1365bb4bde2c4039ac021a6edeadf70181b3a621df8e6d4fa11", + "size": 7413, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/scripts/extract_prompts.py", + "checksum": "c6582deeca152189d64b9f57d1ff7f0f24b28e9b700f166fddee4b13b7d79173", + "size": 3475, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/scripts/generate.py", + "checksum": "7e5400857532d76c55644646e49641c03782f71dff23acff4ab3afd18f8c1f41", + "size": 12375, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-artist/scripts/search.py", + "checksum": "6d644dadc252bfe74f0cbae9b330c2a97d74eb41cf91d74a354c18ddcd38cb1d", + "size": 5902, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-artist/scripts/tests/test_generate.py", + "checksum": "0f70e33a631c8879f2c2ae568adad9600a8c71ccc6fba127b2f924d0f3b656d9", + "size": 923, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/.env.example", + "checksum": "4fa0a44f646862125ddddf40677b148b4e2c05179550b2cc757dfc7f00e09ee3", + "size": 10792, + "lastModified": "2026-04-08T14:50:59-04:00" + }, + { + "path": "skills/ai-multimodal/SKILL.md", + "checksum": "61e740cba2c05ad78e830992470965753d99b2303536c37acfd23922a62e49f5", + "size": 9268, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ai-multimodal/references/audio-processing.md", + "checksum": "90cf5a145e2a0e76c374d60649db8808d734565dc737c9f26a84f8e1a6d3a106", + "size": 10271, + "lastModified": "2026-04-29T09:46:54-04:00" + }, + { + "path": "skills/ai-multimodal/references/image-generation.md", + "checksum": "0c5a6756dc8bca2d93e24e4e5a7e5a2de308b594411b692ff81a54fdf05fe7e2", + "size": 29764, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/references/minimax-generation.md", + "checksum": "406578ea4f090ac9ca008c5585dcf464771bc1400075a30820e3f614add1641c", + "size": 4289, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/references/music-generation.md", + "checksum": "d13f8fead0f514f8f1054055d792e92bf39b7dfead3ad90f59c16fad6c756e5c", + "size": 9007, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/references/video-analysis.md", + "checksum": "bd5bc0362c74f2f27f10bf26fe906f93b7692bf749681d5a7fb8d70f01f4ca17", + "size": 12027, + "lastModified": "2026-04-29T09:48:36-04:00" + }, + { + "path": "skills/ai-multimodal/references/video-generation.md", + "checksum": "7982f522bb2a748c2a13bd06b451bf26fb31806c8fd733c47cbdc50940aa4a68", + "size": 11094, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/references/vision-understanding.md", + "checksum": "d441cf095b0a9d1da04f5e61b41c8116e44206f2a80b2662ba43906dda956421", + "size": 11040, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/check_setup.py", + "checksum": "b12471f8693bc90663d68d57eae312a7195c26d5a7b27cbe7168c381a10fc7d4", + "size": 11010, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/document_converter.py", + "checksum": "2067076f1476469b86c21972429643080a7a3ee6b479fb6df61285cf6269b5cb", + "size": 12487, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/gemini_batch_process.py", + "checksum": "a96906b54f3c9b14a8cdc67ef1432bf49ffcd5140914101bfaac211583f9d6a2", + "size": 51448, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/media_optimizer.py", + "checksum": "bbc3f9e1791f8cfe1bf743bcd743cf6474d8155398a7c9772fbbf5c2c6d1a6e4", + "size": 16467, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/minimax_api_client.py", + "checksum": "47c9aa401f49c6242de64ab5199950d48a92d084477d6e025ff71385fb316fdc", + "size": 6341, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/minimax_cli.py", + "checksum": "e27280a14dc1a4aa220c47bcf1b1a5bd48d19ef4bde1a4bc1ebd3f178f3cda31", + "size": 7198, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/minimax_generate.py", + "checksum": "cadd6bd889b9e47fc04747af0c94dfba148a1b2da3684208cc70d1f7ca00748f", + "size": 8915, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/openrouter_generate.py", + "checksum": "d3e0fffae96824f2e587c54ccb48602f97596056508f2d557a291f191dde2704", + "size": 6707, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/requirements.txt", + "checksum": "ce3b96991218e43e5b5f9a9b04453884bee7ada64013718a77151f57a9a2c875", + "size": 459, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/requirements.txt", + "checksum": "e81055f326be290db2efab621c24ab2ef4ff85265deae692604651542517b208", + "size": 369, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_document_converter.py", + "checksum": "3e84d80ea301b631df8d7170978128ec272058b9c82a01e0113c64525d68658f", + "size": 2229, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_gemini_batch_process.py", + "checksum": "5ab9bb565b93a9122471dd9fb9646858c052c56edb7e7c1574af7df4a00e81a9", + "size": 15752, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_media_optimizer.py", + "checksum": "8451512f789ad3519dccac1ab8221397c85188abfd528c8f9d66cecccdfd8040", + "size": 11824, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_minimax_api_client.py", + "checksum": "ea1de900949b6b8b88b119dad6e4062b215478ab20c53e9789e7c3ba936299c7", + "size": 8252, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_minimax_cli.py", + "checksum": "4a0614520142329e0656dd62ccf7c8ab8391f5d1f6dc90d5d9a51c549e43e171", + "size": 7726, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_minimax_generate.py", + "checksum": "2c4a8f5b0cc34f7262c0b86b4ba60c48f7300906cd8267acdb26445c278d8283", + "size": 14121, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ai-multimodal/scripts/tests/test_openrouter_generate.py", + "checksum": "a299211e6400be1ac967fb99a303610939ddf1809bb72f20ec16ed6f28c9a615", + "size": 2282, + "lastModified": "2026-04-08T14:50:42-04:00" + }, + { + "path": "skills/ask/SKILL.md", + "checksum": "217986063048f336828fb84a091a9e8d6dd46e02364f6714b014a9143cfef47d", + "size": 3571, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/backend-development/SKILL.md", + "checksum": "6998d4404b1534a760d0a04c25394a6364f2148a8e244e767d86f578a3b5e792", + "size": 4302, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/backend-development/references/backend-api-design.md", + "checksum": "9bdf6bf139dd215e2baf3d5686077a37d38a2a92598c681c626edd81110239b3", + "size": 10647, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-architecture.md", + "checksum": "8ae6a40cd186a95dfca6c185dc8b68d396b4f26ef79ed4fee4c814f19be29119", + "size": 12503, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-authentication.md", + "checksum": "396f0d1af48227ea74e79e03bbfea32e616e876c593f6cc8d20ce66a34b47e8c", + "size": 9381, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-code-quality.md", + "checksum": "3d08a02acf3274e43160698bce322b5e9ca11d983a722aed2de6aa699cad422c", + "size": 13128, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-debugging.md", + "checksum": "9468a89f03b14e90005193d5e4c4bd69e48908bff7e70307457e5e8d1657ce08", + "size": 18911, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-devops.md", + "checksum": "1fbb7010ca94dfb440e104b9d373205c9f7912ffe69cf3be2ee7497928275310", + "size": 10719, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-mindset.md", + "checksum": "078b6f8a0bcf70b38c7ab811df7a685dcac353300207e499f6e5793050015588", + "size": 11255, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-performance.md", + "checksum": "abdbb2d30949cda1051c6d84770641bf00c397dc21003aabf76692096c7367cb", + "size": 9625, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-security.md", + "checksum": "ba5e857e5c3cea426454dcfbd35f9fd18fa2d0091cab82537c720354f8e2eb6d", + "size": 8092, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-technologies.md", + "checksum": "5f2082515d330b1a12e925e0b130ca34d7a83428adf5c89fec157667c4f37ec2", + "size": 7660, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/backend-development/references/backend-testing.md", + "checksum": "18221e8e048b16a3d8857725ed13c4f7d7c2a28fb58aebfa5b17efb25d710034", + "size": 10667, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/SKILL.md", + "checksum": "40e1fbd7a8a6b2d86646ad9e4e5abc9a2fc4bd7cf48fc99f55ccf0970ce232a8", + "size": 7187, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/better-auth/references/advanced-features.md", + "checksum": "cf67bd65f28f1c09281a18c2a30e4adc425403dd688de3a3396dc8d0a5c47708", + "size": 10604, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/references/database-integration.md", + "checksum": "89a873e8462dca550439e75e2dd1721835127239b5bdd71ba2cac58d35571841", + "size": 10517, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/references/email-password-auth.md", + "checksum": "a96376f55c00c2c7f0ff63bffd656fb4426a51c16c49868a7a5045b29d1bc7e3", + "size": 8567, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/references/oauth-providers.md", + "checksum": "5201dc2715fe4e385e9363e67adcdeb3dd0e0879c42158e7846dd02138cf8684", + "size": 9293, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/scripts/better_auth_init.py", + "checksum": "c15c73b8f5bb2a66ca32c1a60ace99efb46e9b8b5675a084ab308e719f0d5820", + "size": 16448, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/scripts/requirements.txt", + "checksum": "4c164fd0ed4d81bba6da0852149aadfc80e169e488b86ba33cc757a3cc64bff2", + "size": 402, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/better-auth/scripts/tests/test_better_auth_init.py", + "checksum": "134df79e3238f4e15e2a7c8df4d9db4c143e404a7454f8f618e56374e0de8a94", + "size": 15496, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/bootstrap/SKILL.md", + "checksum": "0c685cafd7899026695090e5e6a99da1d4e8424e2d3cbd43c1af49315cf304ec", + "size": 4234, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/bootstrap/references/shared-phases.md", + "checksum": "08a4d708b3948bb2a3793c735ad0e6962edb0088a962af61962579ae410a6edd", + "size": 2202, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "skills/bootstrap/references/workflow-auto.md", + "checksum": "b6c6874796b05ce7a80484b758f1b2a00e7fef0a6e447b287fadf19f93b32db7", + "size": 2012, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/bootstrap/references/workflow-fast.md", + "checksum": "a9f63e05c5087e8d6d13288a5b1700fe0fa641c9f1d7ef60101824ae0add0255", + "size": 2104, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/bootstrap/references/workflow-full.md", + "checksum": "0f243c727a23b535dfaa1934acd759053ebc69d8edfeee7b93dbec23e0e5a68d", + "size": 2348, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/bootstrap/references/workflow-parallel.md", + "checksum": "5fbf9f25bc32cea205f2d1e2d94127c02a53379a2b1ca55997364de48a486710", + "size": 2592, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/brainstorm/SKILL.md", + "checksum": "2415e6b6ac828572e8256317910b90b024e3d1fbb6ac717d6f707f60582a56f3", + "size": 12425, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/ck-autoresearch/SKILL.md", + "checksum": "495ff79a8b79758ae034c6cb0ef9fec9c43d691f556711df46f6cf3fb57b5cd2", + "size": 6330, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-debug/SKILL.md", + "checksum": "b0ff993fb8570481051fe963845c5ce198e6ec456ce1302dc73fb69cae237d32", + "size": 6140, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-debug/references/defense-in-depth.md", + "checksum": "89e23fdfcd85ecb2ea867e9770775cd8c7211682af4152719364b1005d0f5497", + "size": 3662, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/frontend-verification.md", + "checksum": "a8517f81fb9db9b84a908e27d3bd0357c75bdd2fc28c79e2de673f9ff54f23f2", + "size": 3526, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/ck-debug/references/investigation-methodology.md", + "checksum": "21f56af62c3fa85124b5123a27a6d9cd681361a563d31febe4d19210f552b910", + "size": 4045, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/log-and-ci-analysis.md", + "checksum": "b33c7c8c3f436a1aec3d9842a8990ebff6b731674866d7dd4ff0c75d6020db73", + "size": 3460, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/performance-diagnostics.md", + "checksum": "be9bd0342d6bef3adba741217bcf03baa0e5781b18c7c70b07af2f7b343e7936", + "size": 3861, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/reporting-standards.md", + "checksum": "1a89483f670ec0a6b7143896fa94ccacd8f3e1d863382f8bc96c24d5341f3162", + "size": 2690, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/root-cause-tracing.md", + "checksum": "4df0e51b2d26a407d3e2ffba19c7c0cf8d01698c1745009e667b69ba2c962100", + "size": 3356, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/systematic-debugging.md", + "checksum": "2c97f742d43baae7206d0859d42bb6837cb89949c7ab0c3fa37d6df129f2b628", + "size": 4158, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/task-management-debugging.md", + "checksum": "04d23e03ad060198a59cd083839ad34643972be39789a54fef1816384fbfa85d", + "size": 5449, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/references/verification.md", + "checksum": "ac56942520327efaf29b415b27e6a4211d88386d0072c5d400fdee39eba8bbf3", + "size": 3399, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/scripts/find-polluter.sh", + "checksum": "f4dc594206175b17de25464b5f60a0e011774a7c7843014b6442338a085eba57", + "size": 1520, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-debug/scripts/find-polluter.test.md", + "checksum": "3147fa73a49f7ae82312277d36a357c71dde430f14a7fa86e81516f5e71365ee", + "size": 2117, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-graphify/SKILL.md", + "checksum": "fdfd81a7b93598c8115cf98338bf9431cef01ad5e0f1c62c8ded3a79bf864684", + "size": 5127, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-help/scripts/skills_data.yaml", + "checksum": "0c034e494021be182fb753bfa029e300556f89d442b9be41bcf32ad332bac9ce", + "size": 34386, + "lastModified": "2026-05-07T06:17:51-04:00" + }, + { + "path": "skills/ck-loop/SKILL.md", + "checksum": "df55428da56e69e0c45a0e0b2b57c01381650bba2ce2db6579953760d42e486e", + "size": 8015, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-loop/references/autonomous-loop-protocol.md", + "checksum": "2164a1f3d44329ffbaa13b8c879e2bf6024e001ba2b42d3046e015bdbe292b20", + "size": 5916, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-loop/references/git-memory-pattern.md", + "checksum": "5d4c5f4e74914eeeef6b930aac0766503ed825a50ebc28d1ccecfa3a2cb6ce37", + "size": 3125, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-loop/references/guard-and-noise.md", + "checksum": "e50bfc8f229e0ec8e066033733d46c66833614a5b54efd49681f498a1a7152e2", + "size": 4058, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-loop/references/metric-library.md", + "checksum": "84dcc5a9cda2f15b76f50561d85834b4629c96ba3878735d86c0c9c5a6e120c4", + "size": 5557, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-loop/references/results-logging.md", + "checksum": "0a1d50cc7e993cc41285e0cc8fdf4d12c598a7477acdcd924fdaba1334bd73b2", + "size": 2493, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/SKILL.md", + "checksum": "a5e1747842cf1834a08a914e510b13e39a7c0796f223787c5a266bafd7e7adce", + "size": 16103, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/ck-plan/references/archive-workflow.md", + "checksum": "81af37b4ccca4ad73160a91aadb39d754d997c1dfce9dc0cda6bb89c8801c1f8", + "size": 2335, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/codebase-understanding.md", + "checksum": "c1e78ef9dba69a667f240cec791fb8ccec0d711c96fd69d3e188d2ace061eb2b", + "size": 1976, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/output-standards.md", + "checksum": "73cc27ee3f24aacd3c74b6904255b52e0631bb3491e00caa7fca92773c044066", + "size": 5313, + "lastModified": "2026-04-13T21:03:31-04:00" + }, + { + "path": "skills/ck-plan/references/plan-organization.md", + "checksum": "0ffcbb802e475b177164332932b82c01dcfd8be55596aeff21d6f3f6451a77ca", + "size": 6183, + "lastModified": "2026-04-13T21:03:31-04:00" + }, + { + "path": "skills/ck-plan/references/red-team-personas.md", + "checksum": "95f54592c1a238ab16569feed5e6036cad3b5dde85230527d1850540e43dda2d", + "size": 4376, + "lastModified": "2026-04-15T14:38:17-04:00" + }, + { + "path": "skills/ck-plan/references/red-team-workflow.md", + "checksum": "721d71dc4ec684e551769c0d8f59c7406f9cd3e9de0ee2ca4a4fb3226bb0c5ed", + "size": 4285, + "lastModified": "2026-04-28T20:32:34-04:00" + }, + { + "path": "skills/ck-plan/references/research-phase.md", + "checksum": "b921f91f8f2b1566824625a7ab35ae9572473c6a96ba8979b0a23f21f9e8727e", + "size": 1578, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/scope-challenge.md", + "checksum": "429c130ca8042838f14c402abba60128031e06498269b6a52437bea91491db74", + "size": 3130, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/solution-design.md", + "checksum": "805525a1f228e080809cd8794735ed148fb37c2702517a8982488f72a31ab7f0", + "size": 2057, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/task-management.md", + "checksum": "1ab2b21f7691f6b266d5e9bb4a6b9af6da429568293691714753aea57d8be5e1", + "size": 6044, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "skills/ck-plan/references/validate-question-framework.md", + "checksum": "d868ac6e03e395857186f801127b2f4b47c8aaabf5326fc2a25982804a0c113c", + "size": 2361, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ck-plan/references/validate-workflow.md", + "checksum": "70790813c733762630c0e1547ce61b737e1685d6a0837bea15c204ab378c4f0d", + "size": 4936, + "lastModified": "2026-04-28T20:32:34-04:00" + }, + { + "path": "skills/ck-plan/references/verification-roles.md", + "checksum": "5cdf4d92e655bb1ea31afff352ab13a4a393411c22b3c5d3717a7c4e1054aa38", + "size": 6593, + "lastModified": "2026-04-28T20:32:34-04:00" + }, + { + "path": "skills/ck-plan/references/workflow-modes.md", + "checksum": "e400c7f18c31e43d11bca33d9244ce19b7d455dfc3f2797f25922c6f771a47e3", + "size": 8382, + "lastModified": "2026-04-28T19:59:34-04:00" + }, + { + "path": "skills/ck-predict/SKILL.md", + "checksum": "b4c20a4e458d86cdd8e17911c54fb7922576fb9ef54a1ad65b319e645c1334b0", + "size": 6582, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-predict/references/chain-modes.md", + "checksum": "514e00d5d03b5f275b0ed9cc30d8e72e63a347e05a7b5320ce35f5c30878a153", + "size": 6751, + "lastModified": "2026-05-03T20:46:39-04:00" + }, + { + "path": "skills/ck-scenario/SKILL.md", + "checksum": "c6903426d984f73796888d35b4cb5b0635b8bc726bdeadf7742b821c22edf4cc", + "size": 9152, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-scenario/references/saturation-loop.md", + "checksum": "bd423c2dba39f715c09a2f40c00cde9f0aa29743e355a8c960e8940e44e489b2", + "size": 5060, + "lastModified": "2026-05-02T22:11:29-04:00" + }, + { + "path": "skills/ck-security/SKILL.md", + "checksum": "4032dbdae97bd09ea6aa714e1b9e817c3ae65298ba962f6b3c09765c21ba754f", + "size": 7982, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ck-security/references/red-team-personas.md", + "checksum": "0d8c2b64a4f1b546cf1a0a7f0d89e435e51f15783f37428f1e118b5496513394", + "size": 8451, + "lastModified": "2026-05-02T22:12:07-04:00" + }, + { + "path": "skills/ck-security/references/stride-owasp-checklist.md", + "checksum": "1ef185a3ea57a56ae0018deffd027486e55c2485adfbcbd3ad3bea7fa6afdbe7", + "size": 5447, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/SKILL.md", + "checksum": "f404c2671319a17909f5a11ca206362a4fa732125a2e690aed3ae577952efb3b", + "size": 9736, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/code-review/references/adversarial-review.md", + "checksum": "a7a3d57c2fbe7d7560e77a94e1fed6c87b05fe8f1cb273d114a2cc957b35f28b", + "size": 8282, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/checklist-workflow.md", + "checksum": "776df3432c71d6300e50e47a70d00e019c17b494e0c821e863dba311d4a42fbb", + "size": 2904, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/checklists/api.md", + "checksum": "9223d090952195e14f1a3ea42d3df661a996070e207c38b90be420cc6d608180", + "size": 1896, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/checklists/base.md", + "checksum": "69824641bbb9f30d81f21f09f190acb9c40af8c32e2c80511ea84a81a00d0083", + "size": 4149, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/checklists/web-app.md", + "checksum": "cf6c14d4772e237b417284aea79a7c1e771e890e278a0786a519e205b8811418", + "size": 1919, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/code-review-reception.md", + "checksum": "f8b818db1b47ecf7a43328783cd298f4efeacdf8d2bb04061281149a2256cada", + "size": 3214, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/codebase-scan-workflow.md", + "checksum": "cd4a506b2fc5a09be51b43d34a202be95c4c599a556b3fee7e8cd84b776a10e5", + "size": 1269, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/edge-case-scouting.md", + "checksum": "1b250390990038426e86fdab061ca073b8db2f87abaf8935e9d514972d504c3e", + "size": 3018, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/input-mode-resolution.md", + "checksum": "dc1179c5185a69d7c1ac071ad954260402c393bfc1435daac002b6fa63e49555", + "size": 3588, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/parallel-review-workflow.md", + "checksum": "1e86599a6c8797aab945f374e9af7a1843f25f4d407ac4884762b4f49cdb3557", + "size": 2247, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/requesting-code-review.md", + "checksum": "c923d68f9e4effbe9d21ed5095cfc9246d24bfb9c2e114ef3cca26f7dbe4f35c", + "size": 3183, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/spec-compliance-review.md", + "checksum": "f66d056e6204c23cec67bca5dfb92806d9e4b5fbc4a32be415059628981a7783", + "size": 1455, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/task-management-reviews.md", + "checksum": "a0071129f4fcd23799fea11b277bab6d766563d986fa5590c960249d3966e8e0", + "size": 5268, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/code-review/references/verification-before-completion.md", + "checksum": "ad75a3a6de283507d7827b103fb82497102dee4f77d004a3d81ea7a997b53b4f", + "size": 4338, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/coding-level/SKILL.md", + "checksum": "029303f63d518b89aba2fe89aa6ba5bad9d7d83abee0310884fc8b80a6238189", + "size": 1767, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/common/README.md", + "checksum": "c5f3373de60c0bfc530c73a6f2392e06263b7fa425894a139910941de53fd777", + "size": 2987, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/common/api_key_helper.py", + "checksum": "c45741f02af6748a6ed605f2d6273c6ca34415582eac60e9aff38dd58220bd21", + "size": 12675, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/common/api_key_rotator.py", + "checksum": "edc248f0059c1242aff0ae38ea981ee6ac20a1ec719232afc1d40007b4f55925", + "size": 8431, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/SKILL.md", + "checksum": "28c95627fbc5be3291d2f871286e36562210e93bac61ad71e8f619adc423ea15", + "size": 4778, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/context-engineering/references/context-compression.md", + "checksum": "17a27c30e69cc6b4ec16fe22de7675beceb1f75aed2c5ff8e1bf1909871149f6", + "size": 2335, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/context-degradation.md", + "checksum": "1a3333fdade2aa8405ba35dd25dd1045fc61ac7d74f8addc62cd55013b6df2af", + "size": 3094, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/context-fundamentals.md", + "checksum": "dcdb069c98db4fa935ae66c8a3502d772ee040b5a7d7b3b2881dd4b0a4a429d7", + "size": 2732, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/context-optimization.md", + "checksum": "61c3a7ebf218ad26c72cbbe4a9e5b99a1863408ebf324b93f08d5e117a6d4590", + "size": 2333, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/evaluation.md", + "checksum": "e6ee2c46def044328e892d0ef7ad301aab63e7b73bd4cae382231447e98a379b", + "size": 2253, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/memory-systems.md", + "checksum": "6c392fc6ceb36a415eb8c20f12bbd1148880eff5aed63132f04270e6aa8dfccd", + "size": 2570, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/multi-agent-patterns.md", + "checksum": "2b4106a5ae7bd4818db6f6837312b1b810e5b7373ba22960a60b768f1db4ad3f", + "size": 2319, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/project-development.md", + "checksum": "efc40a212d5894b093fb45096e891351c676cd9eafba754ed6e41473f703a3ab", + "size": 2142, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/runtime-awareness.md", + "checksum": "c1cc4258ff051e8b711969e2f420a9565310b981c031b7f83669b991eeb42760", + "size": 4923, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/references/tool-design.md", + "checksum": "91d38658121a641aa7ee86579254bc96ba2526ce108de2d981cca3d83313a609", + "size": 2057, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/scripts/compression_evaluator.py", + "checksum": "7127174d4f41455e994f183e873148f8a3632e4f27f1ed847b74ad3ff0801917", + "size": 11753, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/scripts/context_analyzer.py", + "checksum": "25209958471fa2a74ec9d6211f912c32117b6754eb382223e388e7060823b533", + "size": 11131, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/context-engineering/scripts/tests/test_edge_cases.py", + "checksum": "06d705178ded2fa7e571e35c7bc875580337dcb15e4b27b1814c644f15115dfe", + "size": 9651, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/cook/README.md", + "checksum": "90bac5dc65b39df42724745a662897868b2cc4326fdc89b6d7b86b2ee0a1f9aa", + "size": 2576, + "lastModified": "2026-04-08T10:50:40-04:00" + }, + { + "path": "skills/cook/SKILL.md", + "checksum": "bbbc1fe0600b126941de7143bdc3b54edacaaac7dca809ebe304487bc5ee0d9b", + "size": 11477, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/cook/references/intent-detection.md", + "checksum": "c11730f7ae62e9a81c1cfac7fe528d70a57d98c243f8a807fe6bf37f5f52263c", + "size": 3633, + "lastModified": "2026-04-08T10:50:40-04:00" + }, + { + "path": "skills/cook/references/review-cycle.md", + "checksum": "9f8baa633cfa69b879fad0740b6e812085d0ab9d0a577a222f340d373639d976", + "size": 2872, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/cook/references/subagent-patterns.md", + "checksum": "f317a1006f64ffadaf41552e25e03b00c9bd8ec3c0f90842a1e6e00096629a80", + "size": 3605, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/cook/references/workflow-steps.md", + "checksum": "4abba547fa638b2dec0772f82cd1c4b246e99d1f7387a5dad8e670d5b5431a6e", + "size": 11505, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/copywriting/SKILL.md", + "checksum": "c326ed22d35530bd913599153f2ebd4ac66cf085d8250166e34d6e698df09aa2", + "size": 4088, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/copywriting/references/copy-formulas.md", + "checksum": "ccd59982c8d2e06641110fee1a9a43506dfe9fc42f2eca1c92236ea800b84c1a", + "size": 3791, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/cta-patterns.md", + "checksum": "0af09c230d6fb56383c336388cb88f7ede393efdc34604d0d11730d9187c8835", + "size": 2816, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/email-copy.md", + "checksum": "adb2efc6bcc0f70290d8c9f5db5b4276ac42649c8098cdec66b40e0b57f59fef", + "size": 3237, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/headline-templates.md", + "checksum": "375a78fe8c4ca986f6474fc4ec68487e6bee9cad3213fc995fcb1efe1ae01e4e", + "size": 3319, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/landing-page-copy.md", + "checksum": "a139563a54b1aeefc9cddfbcbaff000750e5ae437c6a98e7abf158f1c32bc914", + "size": 4214, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/power-words.md", + "checksum": "813c671adda2bf9adc5038637f32bac0a96a9440d59f963ca319ca743784e54e", + "size": 4013, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/social-media-copy.md", + "checksum": "d962250d0d640d1823063f2dbf5dbe29b6fb4ab50c32d3edfdf17fe9cd715353", + "size": 3609, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/workflow-cro.md", + "checksum": "4612eb474c9128ee98d425e8725d32c0b40f6eafbf328076255d28f168a69ba7", + "size": 4136, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/workflow-enhance.md", + "checksum": "77c654706cbcab2f11aa1d72f5b1b9812180e34dc7340ad7f525da4ba5b97277", + "size": 1139, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/workflow-fast.md", + "checksum": "07b273c33943413248f384cf14257128c295ff78129544feb6ed6a7970973a09", + "size": 768, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/workflow-good.md", + "checksum": "4e4c5c179f8fc46aafc42d59e1ab79d4cd3da3f0439484cb5e69284803f37c00", + "size": 1401, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/references/writing-styles.md", + "checksum": "5c83c6c7c652aa0f4d5302eeff1f0e7365c8b2355b11116b1aec426bc8a09464", + "size": 6014, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/scripts/extract-writing-styles.py", + "checksum": "f06782b773993e09a56c831cadf08eb9c0a95de4e2b97ca6c51d0b5e03dcb1e7", + "size": 10799, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/copywriting/templates/copy-brief.md", + "checksum": "7265df3bdb489b50dbf22df2269db21adc86637e46ad41783bcd691e84c5b0f1", + "size": 630, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/cti-expert/LICENSE", + "checksum": "ceb578dc6f370a04129ecf2183715464f5d47e725643de12a609c75021037769", + "size": 3043, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/README.md", + "checksum": "95e2299e019bbb58f3259dd26d8222a44884404df5e4a994644c1f3cd4f4d229", + "size": 53528, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/SKILL.md", + "checksum": "4c665f57d4802dae1e34b5e15428e8b2813e3ee54ead16fc8684f1b581c3ac4b", + "size": 49419, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/cti-expert/analysis/archive-explorer.md", + "checksum": "f988879dcacdcbffd50fb8a1fc2c3355227fb9865e64f461f0959566c3716a93", + "size": 12847, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/auto-branch-rules.md", + "checksum": "3d830a0915a051194d82a5de9b54fd87aaaada08b25bca16ef15ecf7d4495e98", + "size": 5876, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/cross-reference-engine.md", + "checksum": "cd3ae2577f1c29b14b5c91ea6d4ffda5bc85f889ea03aeaad5417f630de537f3", + "size": 5668, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/deviation-detector.md", + "checksum": "3191975a62c0352fecaa12d7eabf4c693a2fc341ffd3a004d101549cbef031ff", + "size": 4736, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/drift-monitor.md", + "checksum": "3953f214f3ec55e79a73b21011d65d6096493f9c7827f265585a48505036c447", + "size": 5555, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/exposure-model.md", + "checksum": "3f5981eb841a051e333f89e7b4cca7ba45a90a24a0e8fe891083ffd76e04e2e5", + "size": 5723, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/pattern-library.md", + "checksum": "dd6c6590bb58eb9b7000de2253921c5603369e6b063b463af59940bf570d53d7", + "size": 6574, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/risk-trend-tracker.md", + "checksum": "20785e6a38013d3cb148ac1ffdef3cbf64953c24c5e699ea2404b0654d94b738", + "size": 5629, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/signature-catalog.md", + "checksum": "da894312a985dfdf705788e2fa683e44c5e2fc509b9bc0aa9c313b187039e84d", + "size": 5499, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/analysis/weight-engine.md", + "checksum": "d8c3e148f4572b290cc360cf7a334626ffeca3a76dfb0c5c9348c2c8b24c73a9", + "size": 6265, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/connectors/maltego-export.md", + "checksum": "d820f8715f1c869305fe73c8213d12f59e80ae0cf0b858c7c05273b4f0ef28be", + "size": 16407, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/connectors/notion-schema.md", + "checksum": "2a9632f09d96f54c6b87b9f208c57c4ed513feeb0f13741f42d5f81b86b07c5b", + "size": 15436, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/connectors/obsidian-setup.md", + "checksum": "593c53e05e5f2c2c9969559ac5d1aa6407c118b682b94d736a5a3498d635fe04", + "size": 12222, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/case-schema.json", + "checksum": "881468b4fc84a75c9929fc6263af62db5016cdc346f7433762c4400387b20d5e", + "size": 12962, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/conflict-resolver.md", + "checksum": "05217a482537106de579b8b193655f087cd9926bcb38b5fe127afcacd89eca01", + "size": 16198, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/finding-framework.md", + "checksum": "c0ece472bdd835107700c257ffad098528fff2124764975229be699ce1a11222", + "size": 13000, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/subject-registry.md", + "checksum": "e0918353e62ee96c37b22206be58e7168d45b47744ededa5684d8ee3a432855c", + "size": 18715, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/workspace-format.md", + "checksum": "6a16444109a388c5dda299632779f505c3c7439b849c5d9d3aad884fa8a68e90", + "size": 16173, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/engine/workspace-manager.md", + "checksum": "7c6eb0975f79ed15173ff27ebf8ac0680b3d272799a9a70640ed4a57418c5b3d", + "size": 18456, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/accessibility/accessible-mode.md", + "checksum": "0da2f3d3652bd3c88cda9775b5fae2f018c67f85e720f5d9fed2d3ea8dc85d46", + "size": 6115, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/accessibility/glossary.md", + "checksum": "1304226f61ef538a745f8b2dcc4bfcf92e994d14808ccfd9630317660ce80fc9", + "size": 7811, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/case-progress.md", + "checksum": "4bebca6411efe7715663936b74447962a64eab8b0357a2b2e28021056e5cf219", + "size": 4581, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/case-templates/tpl-background-check.md", + "checksum": "bcb64e23f13f009df83522ab90383e66960714d0ad78f18c14c097422edba554", + "size": 13678, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/case-templates/tpl-due-diligence.md", + "checksum": "7abdd0c706d8e999d5d2d9f876b7c084a8de06920a643dc2ad8fe84d726fe319", + "size": 5757, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/case-templates/tpl-index.md", + "checksum": "f8d5b697dd70db5876854b660b90d65d6b850a3359153caefd7d74d204b1ed42", + "size": 5353, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/case-templates/tpl-security-review.md", + "checksum": "0454d0568aeaf2215e009af1e707636036577c3b6c52753334fbb5d9602180fc", + "size": 6752, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/feedback-system.md", + "checksum": "3baa64f83cd0c4de8b99620ca2477a30bceab30095c6056bc2b60ccdc5b1c206", + "size": 5353, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/guidance-system.md", + "checksum": "f505dcc73264c04806339ffd4f92a5528840b4a9ec9e2b947599fba2fb22c8f6", + "size": 5198, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/guided-flows/flow-domain-sweep.md", + "checksum": "3e3c6cf4ca4f01fdc7d300ce0422d483ed7a855a047c1932aa1e23bae6322acc", + "size": 6069, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/guided-flows/flow-image-check.md", + "checksum": "f50441b1b16a052a2216af5ff51c2c1c5a23b61fb2463b3d2c8bb80c731cafc2", + "size": 7169, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/guided-flows/flow-person-lookup.md", + "checksum": "f89fbc14d83cf6f5860d3a4575df64ec956f62974655c9a04a8dd60990777757", + "size": 6789, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/layered-detail.md", + "checksum": "a64b068ef0d17ab8ef5580c7e613fde2542478bbaa477d89edfbcd3bdaacc567", + "size": 5584, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/skill-tiers.md", + "checksum": "6dbd691f0943216b8747748aa3715be92729c61d5e742dcc385a113ed0cf8dfc", + "size": 4209, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/experience/tutorial.md", + "checksum": "95384f8607ef5433a20ace3966df71d39f9e79d00e93949f5e7817dbb6f9cedc", + "size": 5642, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/guides/walkthroughs/walkthrough-domain-sweep.md", + "checksum": "cc22dfda1236aecdb8ab94daff3137719ff93f9705090105252f981ce7b7dde6", + "size": 4269, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/guides/walkthroughs/walkthrough-person-lookup.md", + "checksum": "bff5ba82500c5e0a5a39a900474f0696e2e0f53ec474299f3b3dc656b3faedd6", + "size": 4023, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/guides/walkthroughs/walkthrough-username-trace.md", + "checksum": "9ee3ee93a0e1da53aa3978a7d83c819e018a7faf57935c4ab30fc7aa2862f004", + "size": 4455, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/handbook/discovery-paths.md", + "checksum": "89dc89e3c200b2793478ef7faa344ec2b5687303906623dcacec9e0564c45ec9", + "size": 26760, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/handbook/operator-queries.md", + "checksum": "7c74f2ac68fd1b290e823259d6848e0af0b91bba5ee2aeb39016bd2ea32caec3", + "size": 11841, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/handbook/quick-report.md", + "checksum": "e6209e1f049e28002d5875c003ee1403f41e7c2214447a6d4cb212e5e7219a87", + "size": 3980, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/handbook/report-template.md", + "checksum": "d925313c9cedbe9aee6a8b0d6cdf0d09d6d2f174e75f398ddc57d06643660080", + "size": 4279, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/handbook/tool-cascade-reference.md", + "checksum": "9f4cf22f2b44801fd69362231c6b6eda20ffdb230e765fdab3e3f48b0d61ac4a", + "size": 14057, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/reports/citation-guide.md", + "checksum": "6e2511ca3b51a1a354a640a8e2086de9f3a9dea093bab19471a8d07eb14a6401", + "size": 4511, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/reports/export-specs.md", + "checksum": "5920d31cc6b8c10dfee87b311ed4c9f602368bf853fd1e255cddea5a97620b50", + "size": 7389, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/reports/format-catalog.md", + "checksum": "7fcb72ac0ebccb92708872ff5037def837cd32febe2ba28dc98a9c8930dc5361", + "size": 5283, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/reports/leadership-brief-template.md", + "checksum": "69c4edb4c257a17808ed7763e0d34c0d0c40267338c52d044247c4813067b3c4", + "size": 33701, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/attack-path-diagram.md", + "checksum": "50df36aec8484a17312f3fd473cf7b878cfa6b8d227746457ad8763524ead623", + "size": 6580, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/attack-surface-map.md", + "checksum": "fbb4e76e8655bb4df223e0abb7f8f19426e31cbe24d7cb08c2c5b4fb686a4906", + "size": 6774, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/case-dashboard.md", + "checksum": "3e9d34d5915f5e885f752ee4587adfd1857986c05bc5c84738d0c32a737a3e69", + "size": 6287, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/chart-templates.md", + "checksum": "de5de717ec8c8b3ffef802e33f73239cc0edffdc8810f3f41f8ebccc0c6405af", + "size": 93808, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/render-engine.md", + "checksum": "58f79000daf89f4b333d1cd1b1ff35de9d327b24e377195d77d30ef4fc44ee10", + "size": 7972, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/output/visuals/ui-components.md", + "checksum": "bb2ff3cb1b210fee1304bdfda035b9f975fe6099d88d27eb48dc3448076fcf31", + "size": 48273, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/cti_docx_charts.py", + "checksum": "c8326b0714c21a2337a61b013b2b25688b0837bf7771581e2706be70be5e3cc7", + "size": 9944, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/cti_docx_diagrams.py", + "checksum": "681cc56af3650c9cf41b5db16b43bd8d54cf70cb6363bfc3b6092c2dae660738", + "size": 7342, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/cti_docx_postprocess.py", + "checksum": "61b66f02f20df3c45358c096066dc2482bb7a86ebf276cf406965e61939046aa", + "size": 15819, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/cti_docx_sections.py", + "checksum": "0e712f68f3f87fd81cf29e1deffdbe9e4cfe28fc9a12a9c384b8ad14dac843c5", + "size": 10307, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/cti_docx_styles.py", + "checksum": "86c4a2ba994d64e8a4f32c5b80ae1206bab70675dddb7f21c61a4e9d61cdc147", + "size": 8163, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/generate-cti-docx-hybrid.py", + "checksum": "ccce5ca92d0f01a3a27b88582925eea44701dcca16161fe6657ef021b19ab9f7", + "size": 5788, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/generate-cti-docx.py", + "checksum": "ca0ea46c4ccb0e1d1e9f946689a285c752906b35ad7b2b2042bf4523dea6865e", + "size": 6622, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/install.sh", + "checksum": "4f7912858c540324bffad4535fcb07419cf92fa42f526d28f8fe21b15d6c3303", + "size": 12690, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/requirements.txt", + "checksum": "e4d4dc1948b9ddef5ea81d7d24a960afbafbbe80fba655c71ad111ba41b3d49c", + "size": 106, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/scripts/sample-cti-report-data.json", + "checksum": "e13ceea680dec7abad2037d519326a7c99386852a8b908a80fe04a053c7d4f15", + "size": 9290, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/advanced-geolocation-techniques.md", + "checksum": "f705a4ba72ca0a6ff85ddb3e84ec9aacf1201b4dd8d5fc4bef57bcc7a8552984", + "size": 9935, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/agentflow-enrichment.md", + "checksum": "e4e56fc9e11f8655b0d77711ba8e71ed16ac78b11334356dcbd1954f1b2f5ed1", + "size": 4729, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/blockchain-investigation.md", + "checksum": "24f06400860eb74b18d3231827ad408dec62946ed7f2a00777bcffbe70d5d825", + "size": 11054, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/cloud-audit.md", + "checksum": "6f427b43fc8b2be6f615532e2cb1c833f80b6e91449d44a14be732c028027d0a", + "size": 5629, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/darknet-investigation.md", + "checksum": "11752fc74a6a64cbeb4126b54807cd5e44f0a7ff52c223c29e1ce4f38bb6ab28", + "size": 15650, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/dependency-audit.md", + "checksum": "534867cdc419bd36c737db4f4e822a0eeba48508ded9db011964d68e07496ae2", + "size": 8121, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/disk-forensics.md", + "checksum": "b0dff262982e519d24c482be197e9272e5cb1a414a5522aed4cabad5d82a7035", + "size": 6040, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/domain-advanced.md", + "checksum": "a6e2b91b3daf2c8cbdb0be9edd755dd61279479b0b77b89ba40d4b99b0524365", + "size": 8404, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/email-osint.md", + "checksum": "f07ad4524d9737ff39cbcad7f58bdef13365744beb172b59778ba6b8055557e4", + "size": 15890, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-breach-discovery.md", + "checksum": "f2adfeb138de7742a597e8ac32104a8e4d71ea61ae786b4d88867462add46049", + "size": 6764, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-dns-cert-history.md", + "checksum": "3f81384e525baa12dd37e86c092fd68a68e67b750073bf1ec2423e0f2035da80", + "size": 8886, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-document-forensics.md", + "checksum": "93931c2751d58c126db9af9b1c17f39ab801571db366538ab76f3a687e8068ae", + "size": 3396, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-document-leak-hunt.md", + "checksum": "990419f5140a601888cd74f58c7ed4df6a2a5ff86cac60eb818f64a7c6e6917d", + "size": 6826, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-dork-sweep.md", + "checksum": "6c6794b06561eeacb718249b5bb77e09853b535e623498038bbdbc4dfd86686d", + "size": 7773, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-email-header-analysis.md", + "checksum": "01ec512beef1832e703e19b307855d42be0bf0004a64b6febe9a0949ee08e7ac", + "size": 4124, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-geolocation.md", + "checksum": "bc7cb96dfd71cd794a329a63d5651b6fff13c323bced75b858199dab84f94181", + "size": 3763, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-http-fingerprint.md", + "checksum": "70c34e46c4aa50ed9a7736547c072f24a9831accd15ce8e6ed7dd1012c25ce1a", + "size": 4123, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-image-verification.md", + "checksum": "1db962d49743ceb41d77e1a4fcf7f10838d9c513c6bbebd3a26d34c36d585b58", + "size": 4158, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-leak-monitoring.md", + "checksum": "6c4edd14a87f21029cc37db76740bf122978e88c7355aa8c5bf11ebc16f94f55", + "size": 4265, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-metadata-parsing.md", + "checksum": "90f107c82660563cf0be8f79581e5767a3eac69a71201878e1e7b5a79af3e996", + "size": 4665, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-network-mapping.md", + "checksum": "71f501456a31770895bf612c4d21f55a410f7ccd502fbac1f38d2f94bb637c6d", + "size": 4232, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-social-topology.md", + "checksum": "f1ae171da1a802fdd8d83586d77e16ce10c563fb8cd78b5bde046708eca58c6c", + "size": 5076, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/fx-visitor-intelligence.md", + "checksum": "a3d71a3afbab15850d0969ff556f89d89fcc16ff8bfc6b25a60e113ecfbca398", + "size": 21608, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/image-forensics-and-face-search.md", + "checksum": "eb8a1d0afebc8a5b49e46013598c60b33484019c2f9d8792d1b0c19066665991", + "size": 10544, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/incident-triage.md", + "checksum": "b90f7cc6d7c5f3711475548ddaa82d57c1dedbef83531cff3a8fc061710a7d8a", + "size": 5958, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/ioc-export.md", + "checksum": "619a0358c849e49dffa37598ae0442f0c577a48e5a17a2ab2e01e24e90feb34a", + "size": 5025, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/microsoft-tenant-recon.md", + "checksum": "136efbb2e93d6eea1a243bd417c62ee2ea63c1f686226e98b80d4bed092d3f93", + "size": 5830, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/owasp-audit.md", + "checksum": "af59f0ab9acb2d896f671e6da595a694139adaf548ba3889fa823b5756ee6a12", + "size": 5433, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/phone-osint.md", + "checksum": "7d5ec4d9abb20ba69baeeb64182f7aa329ac34df08385e632c33159360b69162", + "size": 9579, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/prompt-injection-audit.md", + "checksum": "ec680794cd4e52fee4c400f84f7c403c60fbf52b3fb1ec48f28e64e6b620f0c0", + "size": 8090, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/scam-check.md", + "checksum": "03910880f9cf0deb2b7cae0428647acb26e9226b5e5e0fb59493f8871388f016", + "size": 7241, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/secret-scanning.md", + "checksum": "80f425bc16f60ac856b1cc04c7aaa4fc896088144718dc59b1445284794ef96a", + "size": 6677, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/social-media-platforms.md", + "checksum": "c76d7b46ee03961aa243e0041c2990daf5209bae3b3efb4a7bc62f1cf37a00f6", + "size": 20713, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/threat-intel.md", + "checksum": "d195e21188b662dba312ab4550e4784304bf5ce2c057f53932de04f30ce4fc21", + "size": 13057, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/transport-tracking.md", + "checksum": "367da6ffbc1bbdbc5e9fb73aa4625402be7057a044d547db4aae520c6f6f1a81", + "size": 13931, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/username-osint.md", + "checksum": "e483ea7a608e3abe70451668ff784b9bb50e1963c27f4e3c63cb3e93955a0c8c", + "size": 6273, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/web-collection-scrapling.md", + "checksum": "4c5bd407c721376fc8c0b1a049974c4dc8d0de843ba88968c7f091aa2509c0ab", + "size": 4995, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/web-dns-forensics.md", + "checksum": "79d12d4ff6175e95cbfa6743e57c2ef07342969fe3015da148edcbd17bd65852", + "size": 9493, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/web-traffic-analysis.md", + "checksum": "2a50385db1936ab4f44fd09396495ccdefb931be81a94374a8d1062d2057d046", + "size": 6926, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/whois-universal.md", + "checksum": "899bba76ab804cd161a688648160ec92e39eaa0a0769185282a2196d64e7156f", + "size": 6053, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/techniques/wifi-ssid-osint.md", + "checksum": "828eebfd9ae6e2127d955ed140ca729ba01e2cc7700c99ebe4aa0a9fe5cca7c5", + "size": 8137, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/validation/coverage-matrix.md", + "checksum": "67fec6f5c5edd6930c3de5ebef1ddde733281a1728006b97bd1f2c13343d32ed", + "size": 6986, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/validation/quality-scoring.md", + "checksum": "4d6a23db423d2767003c1ef552c6c4511da09fe5c0793c6009355debf2575512", + "size": 3951, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/validation/verification-checklist.md", + "checksum": "b1625f36e7ea10c693a9a86ea0e032b9cbf4e7164d7e4846c0f640b8e5f9227e", + "size": 6546, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/workflows/wf-hr-screening.md", + "checksum": "d9596f170b77e7dd8e13b9a6dde8669ef8081abc3a83bc639bbc3b993db88898", + "size": 4233, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/workflows/wf-journalist.md", + "checksum": "65f65bd400070dd8fa65a5fc8b7c630de0b9e6dab8c6ebb74da49ffdb5b8d516", + "size": 3640, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/workflows/wf-private-investigator.md", + "checksum": "532b00bb219ee27ae19a473707a020a0d7db57b122d9726c933ecc929073e551", + "size": 4606, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/cti-expert/workflows/wf-threat-analyst.md", + "checksum": "7d306625d99007ca8383ec91e34e37efdd6449c7786054bdb55f8ca139fda918", + "size": 4203, + "lastModified": "2026-04-23T08:35:03+07:00" + }, + { + "path": "skills/databases/SKILL.md", + "checksum": "5185a766e504684fac58fe9148a556e22ba3579669912b44d932af51ddc29532", + "size": 3877, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/databases/analytics.md", + "checksum": "c1f2ce26dcb0d3596b9a7f9f7ddc0c1e93a94cacdabe113061dc1254ec955292", + "size": 5382, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/db-design.md", + "checksum": "6480b91af63cb918756acb21bad5de375645252f889e096ae4c10f247c4ca85b", + "size": 6446, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/incremental-etl.md", + "checksum": "e12f4d07dad041f221ea5f27124cae8903080e8f891d10d789442143acdfb96c", + "size": 5519, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/mongodb-aggregation.md", + "checksum": "b7cca207376f2a9b62de73615ec8ff22dc339f1cb84fb39b6d548a8271fc6b52", + "size": 9333, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/mongodb-atlas.md", + "checksum": "d37fea35012dc79ba21f9f5f541307b9b7289ec828007b58e02621e63010411b", + "size": 9284, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/mongodb-crud.md", + "checksum": "4c931cea2dbab883fe0c904dc3278c779488ad31cba93dd24b937bd5a2674721", + "size": 8355, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/mongodb-indexing.md", + "checksum": "828af24fa18b508b0df3699a0d78345a21a2a6dbb42a6b0522758cc517efce45", + "size": 10618, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/postgresql-administration.md", + "checksum": "3bf09a45484b4a3633d4b8c0e3812051508116233fcef7136ab21aa696ee479b", + "size": 12113, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/postgresql-performance.md", + "checksum": "77f84195e3f519c8f63679d57d80b1517b04b0188a966141a05cba1d72092116", + "size": 11613, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/postgresql-psql-cli.md", + "checksum": "ca3a81fde3d1e894510b5b906c9e91db2d300df4cbdb1171ad5683df7ccc0b61", + "size": 10523, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/references/postgresql-queries.md", + "checksum": "860725feefff992bdef6defb4acb93235f9662abfd076dafb61c194f4e4ee689", + "size": 10091, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/db_backup.py", + "checksum": "ad77002838cfa1e1493ef19208962018251bcc91b6adde571a744e67bc750f2b", + "size": 16765, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/db_migrate.py", + "checksum": "acebd0c938fd079acb7a6c7ac6bccc2917f589bf01712b9c94f4fb26d4982796", + "size": 14220, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/db_performance_check.py", + "checksum": "db2eaeb2cee763cf4141ba838cbbce7c3510ebd0337fd49bb1a853dd8899c338", + "size": 16022, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/requirements.txt", + "checksum": "da0d7d811e02966201fac258844820dc214cb1b3bcea3006bd94029f6a2518d1", + "size": 558, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/tests/coverage-db.json", + "checksum": "f40c12d1ff34d9c927b31ba3b3f57371f06f45cf462f1516d0eb3f1fa2351b0a", + "size": 47444, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/tests/requirements.txt", + "checksum": "52a7b73d3f2b08178eb3bac41cdc1786f4b06336f741c817d89347e8dbb5504d", + "size": 69, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/tests/test_db_backup.py", + "checksum": "ba16ff85557dc29a7a424cb80aebcde760f3a3d59ad7eb4d05a7dfed483d67d7", + "size": 10800, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/tests/test_db_migrate.py", + "checksum": "22f9323d767bdd02a97b7250f14c2cda788f829d9af5497da2417ace21ae2fcc", + "size": 9529, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/scripts/tests/test_db_performance_check.py", + "checksum": "f89b7421305587cd45daf1f47d02a0f6c791a92b5a1b5ac0332982f91b6ed2e9", + "size": 11933, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/stacks/bigquery.md", + "checksum": "297b5daa04f7480f700bf44b1fd41eac4b4ac05e3d7361218e812e750422f905", + "size": 5189, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/stacks/d1_cloudflare.md", + "checksum": "ae4366a04313e5d9d8c78902713d71028a5eebe5b6331ed3795a0322a7fa0086", + "size": 3463, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/stacks/mysql.md", + "checksum": "b143b320e616b047c3e80d7e316408222ca6b4eb3060634a11e383aacea20ea0", + "size": 5642, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/stacks/postgres.md", + "checksum": "c8217ef30a689dd340e18bba1fc5607bd629c2363ce729a4648a80e635d6bdcb", + "size": 5943, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/stacks/sqlite.md", + "checksum": "427caa37a08a5f14efa62398a28f784e1ed26b5da3004858d8817e75e3b751cb", + "size": 6510, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/databases/transactional.md", + "checksum": "d4b1db827ce68af50be390c58f30c544a7287f5f595515ef4bb578ee0d1dc14c", + "size": 4763, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/SKILL.md", + "checksum": "f9434db163d170f9327abb8a5749880901496260610d10242fb0f4fd8018a298", + "size": 6179, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/deploy/references/platform-config-templates.md", + "checksum": "5840c396f3b1c91b77113968eb005f8139f5df91e8d536c8b8dfe601da7f8d8b", + "size": 642, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/aws.md", + "checksum": "360265be42a5129c91dd2b8d790db97134b720a05569d41b6da4e54c83589b2e", + "size": 1206, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/cloudflare.md", + "checksum": "d62859284bdc7412c530d66641d33b27c7ba2d4488f77bd7a13c26fbd0649203", + "size": 735, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/coolify.md", + "checksum": "bdbda9d71d371fb2bd1a970beead101dabb05d921dbb0c7e29c8a43198e5acea", + "size": 741, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/digitalocean.md", + "checksum": "bb578a1c4e809a24036bd51cfd6786ae9bb198833021465640fe153e1fb915d6", + "size": 878, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/dokploy.md", + "checksum": "b226baf473617fbdd8c73e7eb90d3de3c15eefc847f14fb21b8977f0078bc8ed", + "size": 570, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/flyio.md", + "checksum": "bfffd5e8455d037202b9f5102116bbb45c761ad9b96b836a9854ede5d6a5f1d8", + "size": 1028, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/gcp.md", + "checksum": "8ae4f227d3e217f823162afecfce2cf4212c09cf9cf00ebfc3ba3d593c840e9a", + "size": 1127, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/github-pages.md", + "checksum": "bb367a1b63ddec943f5795e38d6d53460f2ccd32540d25432763db4d6c0aae32", + "size": 1218, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/heroku.md", + "checksum": "e6db6c6f0ea03acb7610aa2555a5fbe6d292fe199cbd961e6d5e0323583dd296", + "size": 505, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/netlify.md", + "checksum": "28ae216feeb1de827e671363a65bc403b94071db3e2bfd0f621b9f0af728b2ad", + "size": 737, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/railway.md", + "checksum": "95ed8769d4e4d09992fba58db5768bb34eec5569c90681820b140684f86d56a0", + "size": 693, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/render.md", + "checksum": "2665d84001ae665df6716d88ac79c6a74b69be37bde76f3005964cfb6a2f1038", + "size": 786, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/tose.md", + "checksum": "a0e442b41c887cee2cc54556cca22ed2eba2c9625ca00cbc547f352df7540092", + "size": 1238, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/vercel.md", + "checksum": "05429775a1f9f4f3096934bc11f82368321821377ef8c50f7611687ec8de99f3", + "size": 697, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/deploy/references/platforms/vultr.md", + "checksum": "41aecb5efd19d29dfb465ca5e5999eda007450c54051ff03d28de992013ce4a9", + "size": 648, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/SKILL.md", + "checksum": "88a9027ab4057349cb9b616a129e24b26b71f65382e8c0f6fcf81728e36dccdd", + "size": 11726, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/design/data/cip/deliverables.csv", + "checksum": "229912f35c2f5a790508ddd62270cc7a92a84694027025ea5a30f1fb5ba84b70", + "size": 13385, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/cip/industries.csv", + "checksum": "729b1dea6d6f39b0bc22a1e659584e7ca5cead75841146d599c9f8dc00d4da46", + "size": 4935, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/cip/mockup-contexts.csv", + "checksum": "15d61cef16e6746d5aa665976f4de8074fedb64bfc5c7313a40eec1112a1d499", + "size": 5205, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/cip/styles.csv", + "checksum": "4e7f9e209bc90b60df62fd9843a1a73b365e54161dbd820b82817a8e512af4c4", + "size": 5967, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/icon/styles.csv", + "checksum": "a4aa7d326ffe1e50961eb70e25a6351f45c0247cd245461fa1a27cdc72f903b4", + "size": 2250, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/logo/colors.csv", + "checksum": "d60218f0705bb0f0b892a10468a5c8d9a44eef3d0262ef8df8970ba3fbab567a", + "size": 10674, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/logo/industries.csv", + "checksum": "e58dda4b9d28851f70914f82c1d2a2cff626a991ca41076f64122f33cc8a6525", + "size": 13274, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/data/logo/styles.csv", + "checksum": "ea08bdfb7aa557f08d1b6299222423f948700f8e4029321acb58c8f83197bdf2", + "size": 13678, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/banner-sizes-and-styles.md", + "checksum": "c8906fb1073a576ee8c680d9bc8586249cbc4ed36690da960d65a1c9c37143b7", + "size": 4993, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/cip-deliverable-guide.md", + "checksum": "1424e120b967288e2334f24fcfa5cdc7f238420326a7444f4c5597efecfabc41", + "size": 1735, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/cip-design.md", + "checksum": "47a3b2e445bc07185edd0cd24ba8a417229baf86717dcdff7c4e403adbceb3f1", + "size": 4589, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/cip-prompt-engineering.md", + "checksum": "4bf3a0c858f38c230e43e872857b72d9eb692e066e8de5920da75aac733e753c", + "size": 2493, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/cip-style-guide.md", + "checksum": "f3e15408cd981e93804440c1159c12e02d001bc37a3945f455b3fc13729ed4e1", + "size": 2357, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/design-routing.md", + "checksum": "32914a913f4f20d4cb1e497e5a87cfc04b71af4e6d75db72ecf50e4f060201c8", + "size": 5826, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/icon-design.md", + "checksum": "39281931d070918b4e51ecd71054da99493cabe06a07dfa8f1f682e48637c83f", + "size": 4343, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/logo-color-psychology.md", + "checksum": "3fd0e93e24c3b2ea7f3be778e8f2d03b1c62c7c6eab3ade478c8fca332bff287", + "size": 3341, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/logo-design.md", + "checksum": "2e845fe165c845fd9582c1d74204fa31de607380982a6ea0b5f8db4e293afa3a", + "size": 3163, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/logo-prompt-engineering.md", + "checksum": "e50f55bf323263eb27b4cd4c5172383a787fb894581d5d2befb3f6e0180b253e", + "size": 4314, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/logo-style-guide.md", + "checksum": "611baa841eedab101f45c113c6bfbd4d7e16e859c9d6ebd2cf941827a6e8dd15", + "size": 3435, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides-copywriting-formulas.md", + "checksum": "03733d5916ab771834745550045b736deeb94a08226f2b200f7953009c35b219", + "size": 2604, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides-create.md", + "checksum": "792d647a5d4f87d765cf417f7ac54dd0b2fc4d229cc23ea9df56282d4c1ee086", + "size": 153, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides-html-template.md", + "checksum": "fd5b051a37365fc6059c75bb388ec6f64daf1bd9ae938b287b6d762dc83c0c35", + "size": 9004, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides-layout-patterns.md", + "checksum": "0a967ca3bd829d3234e6f1802bade6c76447fabbaddbc8117c41adbae7dfb6df", + "size": 3691, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides-strategies.md", + "checksum": "27ee3e53ffa0ea679ec83ebeacb0bcfbce498df57277e99f574b9c139dc44286", + "size": 2715, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/slides.md", + "checksum": "5630d5daec947ff58ab1ac97c7a1ee77a21cf6f5dce5155535b65d291691979f", + "size": 1742, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/references/social-photos-design.md", + "checksum": "2e41671b3f89e36e513b6df281bec61c21734af92852e161355e2ea9fe23f8bd", + "size": 11268, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/design/scripts/cip/core.py", + "checksum": "78a78a51f12d2382b2854414df395dc62b68532626ef724ddd5de713507911e4", + "size": 8062, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/cip/generate.py", + "checksum": "769d75af9505c806411024d148171e89716199feac793a8b6f41dcf651ca48e7", + "size": 19483, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/cip/render-html.py", + "checksum": "a49a89a017ea4a2c492438055f05dfba3dfb4f91563f5f913359939beeaeccab", + "size": 13941, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/cip/search.py", + "checksum": "6619fbbe71983003a858c5eb79bc59c607b342610a1178b6976c687c2932161b", + "size": 4524, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/icon/generate.py", + "checksum": "1a6be99dc233f6d9f8b558c26148203418be5b47c677cd83e48e41e78e38780c", + "size": 17151, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/logo/core.py", + "checksum": "4f8b36ffe538e5995d0e0b740053a0899a1adf445ffdf484bd47f94e71ade8d0", + "size": 6023, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/logo/generate.py", + "checksum": "72d81a33219bed0ad23f999228fc313bfbeaddf1e1a590cd8b76b2fc5982e596", + "size": 14686, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/design/scripts/logo/search.py", + "checksum": "693b3a1824831f120d4c60ed72477847604da1f6b654343381f8e9d3800a28f2", + "size": 4745, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/.env.example", + "checksum": "2e90b03a2ca418a05985b6cc4c2a02ccb96764b7b058538597217f1311c7bf18", + "size": 2609, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/SKILL.md", + "checksum": "f59bd229300ec56ae7effcdb5975e21add46820da7377dd65d0ffe3e0c12acbd", + "size": 3500, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/devops/references/browser-rendering.md", + "checksum": "d258f97511e47ef425bfc1ae5578720162fa2499466ef4c275072c1a4db25d9d", + "size": 6932, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-d1-kv.md", + "checksum": "d35c07d3bf5356a21544e088c9995cd59dec463992ae95e7a848130ebf8c6d3d", + "size": 2549, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-platform.md", + "checksum": "d009a10f0f37073a08ae51ab6768a63b3baf20f815c2048e3370dfd263d21e6a", + "size": 7292, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-r2-storage.md", + "checksum": "03c90dd24354676d97ac53b2b111daae3c88002955849f2bddd9689447db4235", + "size": 6274, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-workers-advanced.md", + "checksum": "fc4b2c5bd5c826ce1dbbeec914666dd6c8edc64287dbd0acc75c4de1ccaae019", + "size": 7286, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-workers-apis.md", + "checksum": "d36537cf342f93b3db0bc6457f2e61ac5f10e3daf82fab2d557cdb88278fe57f", + "size": 6947, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/cloudflare-workers-basics.md", + "checksum": "a975a4f0ef7e663e66f54156153568b2735a9a626e0fae13cd777e5399979a37", + "size": 8789, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/docker-basics.md", + "checksum": "9e92f9e2f9e147d1002b3abdb45526ac175fd63d1fec6b5862a3c3c0cb828631", + "size": 5818, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/docker-compose.md", + "checksum": "cf6eb6338aa55201f0a5b4390cdb33d4de2b8cffabf2c2b84dac612a2d4f0816", + "size": 4827, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/gcloud-platform.md", + "checksum": "195c09f69bb47976467fe1e5094a156f16ac88ad8e20003b60d7f9ae037bc09d", + "size": 7015, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/gcloud-services.md", + "checksum": "2581140e4bf5412fdc7b2758e9c2acc59e428117af26b1cc1efb10a21106c454", + "size": 5925, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-basics.md", + "checksum": "7232b88a3ec5a740f08683867e57481dee4ea3083fc27fafb872af51a7aeb12f", + "size": 1739, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-helm-advanced.md", + "checksum": "3fbb59829fbdc9cb5722147889d3d6666d43a3efc7e589667dc92ea0574d13ca", + "size": 1743, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-helm.md", + "checksum": "9496cac90b2bb1656c81d5194858dd974e06ed746ebb1c12d9102641812fbb8a", + "size": 1862, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-kubectl.md", + "checksum": "43fe156bfd4ba7fa44cc76335e709f885c262aa5a5aeb95a047b66141c11c84e", + "size": 1741, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-security-advanced.md", + "checksum": "26e8cbd516658233fe85a3dff805d7697de7615e9711c396bb7c59bd904b1196", + "size": 1817, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-security.md", + "checksum": "83c817d3dae55f4ee170a97bc311ee375e1305cd32be29fc984512bcc5d17ad7", + "size": 1755, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-troubleshooting-advanced.md", + "checksum": "9922fd417784d88ba34d028f45bab63da3c0b97e385ee7f453b6bcf38ff04534", + "size": 1448, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-troubleshooting.md", + "checksum": "5f5d950904dcb79bf926d6bcb41e3b60fc424cc60a9023ba1ca99e20ba8941e9", + "size": 1424, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-workflows-advanced.md", + "checksum": "b18c3169301374f8bb125e710f871aa4ec832cb8257cfca4ba8627c97f3e7242", + "size": 1334, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/references/kubernetes-workflows.md", + "checksum": "dafc947fbad553a3707ef9256093b800b44bc8131eca7ea332c705d31f6b85a2", + "size": 1617, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/cloudflare_deploy.py", + "checksum": "439844726c149c7dd5c7a6fb85b20059b8e230041c1a61364fd609b4c503216c", + "size": 7647, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/docker_optimize.py", + "checksum": "6126aee0ce7901cd5f99fdbf55e34119be7f7b416f93b4c70e53afd680c919fa", + "size": 11733, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/requirements.txt", + "checksum": "4a508a3b086c25ad5adc9b743a8c0a576910e650008b8144fc58f68770b662fd", + "size": 471, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/tests/requirements.txt", + "checksum": "0795bdcfb80afae0ff06e9cbe5bed67b39283e577984bed87d85da3fec798a37", + "size": 52, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/tests/test_cloudflare_deploy.py", + "checksum": "66373336b3290bed9ca300699816954006cabc9f91897cb4759358d365dabc69", + "size": 9261, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/devops/scripts/tests/test_docker_optimize.py", + "checksum": "c82fd9d4f18e60d1ebdbcebda5781d462a6a0c846658512aa5239e1eaee0d9fb", + "size": 12969, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs/SKILL.md", + "checksum": "600985e35fba0b7f405f3761164ee7a7a0263302ebb2ced7e24767b51fdb1e6a", + "size": 2516, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/docs/references/init-workflow.md", + "checksum": "ad20e7954c340bb1c23b52f16066486feb8b306ddf522c52bccc4df81ceb6cb1", + "size": 1687, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs/references/summarize-workflow.md", + "checksum": "2436475d737456c3510ea1dba84bff5b840786dc079a78e1dde50773a0bb6842", + "size": 563, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs/references/update-workflow.md", + "checksum": "c0a651d107c1e7282b71f2578900c47fece8cf76f6d17d774cf6098dadaf3490", + "size": 2475, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/.env.example", + "checksum": "f82721bb3f154eb5aa267821ccd84e83835f8c8a3c758249fc836928f1834851", + "size": 456, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/SKILL.md", + "checksum": "494f5411a9e49d13f5d9fd4b72ca32bba009e50858a63f7ad536526cb89b7963", + "size": 3440, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/docs-seeker/package.json", + "checksum": "4c9713ce6d955daf123cfe1ea5ed0d5aad1bb26ad21a3fed573bb71f2187df65", + "size": 631, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/references/advanced.md", + "checksum": "4bc5569fbe32ddba79760ea5ab010ac43e64dcaf5830b2d159c0ebbf6307db9e", + "size": 1776, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/references/context7-patterns.md", + "checksum": "bf7216d9c5c6fdccc67326e9de5a71d9ac9032ebd6121373558b90b43dfbc355", + "size": 1538, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/references/errors.md", + "checksum": "6eea64783a4b66051a1780e9a6ce725a7ffaa73d09d0f58fbadf736f360c5d23", + "size": 1258, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/analyze-llms-txt.js", + "checksum": "58b753d431b36caf45b3cf9addf2957a3aa6fb638c90f402a1d4e905dd0b05ac", + "size": 5183, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/detect-topic.js", + "checksum": "b3646d33e0c09cd925ca56fc9d38b58527c464ed2e2450d515e813d1558b9cfd", + "size": 4456, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/fetch-docs.js", + "checksum": "232937adff9e3c090b73f56ad796867c8a462dc9845130f6d806075efb6e8b1a", + "size": 4981, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/tests/run-tests.js", + "checksum": "1c92cd7eb0a1c964d671e9648595e8ffd5276bdb52590d437201b297c5097f6e", + "size": 1554, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/tests/test-analyze-llms.js", + "checksum": "9435d5e8a39a9b509e297f7783aa40008d75299e1e50eca6f22cd2f373360e69", + "size": 3831, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/tests/test-detect-topic.js", + "checksum": "a1c60bfec4e177aa888ec37e0d27c3b25dcee3c5ef3a55635339649f00099d7f", + "size": 4009, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/tests/test-fetch-docs.js", + "checksum": "16f3bab18021c44889fd04ba16937787ba158832bc652a49482feff2915a6504", + "size": 2294, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/scripts/utils/env-loader.js", + "checksum": "cafe56ea170394abc121ed71ac1773170720adeef0425d911f4ae351e9867bfa", + "size": 2420, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/workflows/library-search.md", + "checksum": "916b670b15de734d0f49c3295c0303f8cf5a666b51e88ea410726e3ed303bd92", + "size": 2499, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/workflows/repo-analysis.md", + "checksum": "d97bbe0c3444b432cbe10fb6a7ee365ce9cfd74f7b49c2854faa195732b618d8", + "size": 2216, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/docs-seeker/workflows/topic-search.md", + "checksum": "689564fb862dfba754f457cb4aa4244fcbb6aa958e8704922ce6e7da4226278f", + "size": 2177, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/LICENSE.txt", + "checksum": "79f6d8f5b427252fa3b1c11ecdbdb6bf610b944f7530b4de78f770f38741cfaa", + "size": 1467, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/SKILL.md", + "checksum": "7c1f83921bf46d67b981c5b69d60d9152b98457d8a397d5e66e850b6f189b03a", + "size": 10155, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/document-skills/docx/docx-js.md", + "checksum": "83b4a2f88d058a10509fbc0b3b12b6933c407805f4d4afc955cd3fb939c16428", + "size": 16509, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd", + "checksum": "41b93bd8857cc68b1e43be2806a872d736a9bdd6566900062d8fdb57d7bbb354", + "size": 74984, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd", + "checksum": "3fd0586f2637b98bb9886f0e0b67d89e1cc987c2d158cc7deb5f5b9890ced412", + "size": 6956, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd", + "checksum": "29b254ee0d10414a8504b5a08149c7baec35a60d5ff607d6b3f492aa36815f40", + "size": 51302, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd", + "checksum": "5cb76dabd8b97d1e9308a1700b90c20139be4d50792d21a7f09789f5cccd6026", + "size": 624, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd", + "checksum": "5375417f0f5394b8dd1a7035b9679151f19a6b65df309dec10cfb4a420cb00e9", + "size": 152039, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd", + "checksum": "5d389d42befbebd91945d620242347caecd3367f9a3a7cf8d97949507ae1f53c", + "size": 1231, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd", + "checksum": "b4532b6d258832953fbb3ee4c711f4fe25d3faf46a10644b2505f17010d01e88", + "size": 8862, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd", + "checksum": "bdad416b096b61d37b71603b2c949484f9070c830bdaeba93bf35e15c8900614", + "size": 14795, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd", + "checksum": "d173c3e5d61e42e2e3a97226c632fd2ab7cc481fc4e492365b87024ab546daff", + "size": 83612, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd", + "checksum": "3c6709101c6aaa82888df5d8795c33f9e857196790eb320d9194e64be2b6bdd8", + "size": 1269, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd", + "checksum": "0b364451dc36a48dd6dae0f3b6ada05fd9b71e5208211f8ee5537d7e51a587e2", + "size": 7328, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd", + "checksum": "e2abacbb9a55ce1365f8961bc1b1395bbc811e512b111000d8c333f98458dece", + "size": 6382, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd", + "checksum": "0ef4bb354ff44b923564c4ddbdda5987919d220225129ec94614a618ceafc281", + "size": 1248, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd", + "checksum": "0d103b99a4a8652f8871552a69d42d2a3760ac6a5e3ef02d979c4273257ff6a4", + "size": 880, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd", + "checksum": "9c085407751b9061c1f996f6c39ce58451be22a8d334f09175f0e89e42736285", + "size": 2608, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd", + "checksum": "bc92e36ccd233722d4c5869bec71ddc7b12e2df56059942cce5a39065cc9c368", + "size": 3507, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd", + "checksum": "7b5b7413e2c895b1e148e82e292a117d53c7ec65b0696c992edca57b61b4a74b", + "size": 7507, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd", + "checksum": "3213ef1631606250f5010b42cad7ef716f7c59426367798e33c374c0ec391d3a", + "size": 23313, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd", + "checksum": "12264f3c03d738311cd9237d212f1c07479e70f0cbe1ae725d29b36539aef637", + "size": 1367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd", + "checksum": "beffeed56945c22a77440122c8bdc426f3fcbe7f3b12ea0976c770d1f8d54578", + "size": 242277, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd", + "checksum": "f5ee623b08b6a66935e5aced2f5d8ad0fc71bf9e8e833cd490150c0fa94b8763", + "size": 26148, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd", + "checksum": "585bedc1313b40888dcc544cb74cd939a105ee674f3b1d3aa1cc6d34f70ff155", + "size": 25279, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd", + "checksum": "133c9f64a5c5d573b78d0a474122b22506d8eadb5e063f67cdbbb8fa2f161d0e", + "size": 535, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd", + "checksum": "6bdeb169c3717eb01108853bd9fc5a3750fb1fa5b82abbdd854d49855a40f519", + "size": 5712, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd", + "checksum": "475dcae1e7d1ea46232db6f8481040c15e53a52a3c256831d3df204212b0e831", + "size": 4010, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd", + "checksum": "c2dd9f61f892deae6acd8d20771ea79b12018af25f3bf8d06639c8542d218cfd", + "size": 171367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd", + "checksum": "a539aa2fb154fa50e0f5cc97e6ad7cbc66f8ec3e3746f61ec6a8b0d5d15ecdf2", + "size": 4646, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd", + "checksum": "9e0b7209fc69ab11987900404540969976000c5ebe4d4f58c43dc3842886bf3a", + "size": 1963, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd", + "checksum": "451958454e8588dfc7cd945981ada142ca06ff3307937f5700df059c2b307fa8", + "size": 2515, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd", + "checksum": "6de111e11403f7cd49027400755bae0ea1cabef2815f09bd40a24f0017613b24", + "size": 2856, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd", + "checksum": "f565adfef5a502044abc3a9153e157edc25af78304d335994afb958874b15e26", + "size": 1344, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/mce/mc.xsd", + "checksum": "3a37e461ecf5a8670fdec34029703401f8728ab9c96ec1739a6ae58d55212413", + "size": 3127, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-2010.xsd", + "checksum": "568b26ee156cb9549aa439ca2158965f77b7c1602b7e0316f40ac6cf586e35f2", + "size": 26549, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-2012.xsd", + "checksum": "0fa75578a000439a7988ba0c59fdc69f774bbd416cbacc14d07125b3f686cb74", + "size": 3745, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd", + "checksum": "be0ff793a22dd31384650c3a4da14c2fa8062751c2e97b0e5ee852bda13c60ad", + "size": 901, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd", + "checksum": "fddc2b880cabb9005aebbc7e783e53c19fec1c03df7d0e2f2076a33a0fdfd081", + "size": 1778, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd", + "checksum": "127ca209fa73d7cb708449cb355c871867948a96e4a74f7bf5811ef62d17991d", + "size": 1002, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd", + "checksum": "842e7163409c8d74f4d7088a8bc99500d80bc75332681a0980055b08f374a604", + "size": 600, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd", + "checksum": "16f6f8072249f431370723c2cd8974672e0d9c897e00e97dd918079df934871b", + "size": 745, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/pack.py", + "checksum": "6fe762f45aff8c63fd95b9fcb1337b28921d6fa454e18a0e8158d4c8708d6d00", + "size": 5596, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/unpack.py", + "checksum": "0bd17f76a1a4c388aba42c6d1d39015fa84e405c3e0692397fe12762bd632b58", + "size": 1037, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validate.py", + "checksum": "1ec252de8b14b07d16966c48906ccb1c45c68bcd23557ad31d8c50a27f5f8c0f", + "size": 1959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validation/__init__.py", + "checksum": "83e0f035c5abea238d3f2c3968afbd511ed022b527b7c9cb60a9434cc34ff987", + "size": 336, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validation/base.py", + "checksum": "f2c70d481613456e32b43869d1604b05c236c8da34b5b3967677a661cac7ba63", + "size": 39892, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validation/docx.py", + "checksum": "e65d6cda0525866a24cc847b2e883bd2416ae6f87b3f5b9e2784dfbb0ec13093", + "size": 9996, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validation/pptx.py", + "checksum": "00bf2623da1177b3948143a4ade2f1cda7cb389dee31960861913fa42ef1b00f", + "size": 12327, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml/scripts/validation/redlining.py", + "checksum": "97abfdff4f08f43f9a4bb5c8a2f8fd483398b5b339592724e8635153b5507967", + "size": 11179, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/ooxml.md", + "checksum": "a16f922797eeaa3670ea31c1e49d15b799613d03f39445c857a5dd3221aa3597", + "size": 23572, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/__init__.py", + "checksum": "83e262a425814b72add701272b99ddcf9635251c5d4672bf9fc38d2b03f00d85", + "size": 65, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/document.py", + "checksum": "65f8569034a5893bd5ef0654be5168774fe81c0407b0c4ec80992db9fff91c0c", + "size": 50409, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/templates/comments.xml", + "checksum": "87e218a3a295016ec855f2cd74495c416072f29c4846e86b527aec0a4d93ba21", + "size": 2635, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/templates/commentsExtended.xml", + "checksum": "86bf401354c111102033ed147763faccb82479598f17777a3384c2f3e9fa0014", + "size": 2643, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/templates/commentsExtensible.xml", + "checksum": "af5d057e16462ca172cea845e502bafb4f3e1b474a8d5848ffe92214853a4935", + "size": 2739, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/templates/commentsIds.xml", + "checksum": "20168f7b237af091332f8348c548eb7f755f583185bb198359c5978155099d67", + "size": 2651, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/templates/people.xml", + "checksum": "61db9900b579acd4c4f84ff7f40df47e77e9e780c40d5f5ef6a7beba41d62ec5", + "size": 147, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/docx/scripts/utilities.py", + "checksum": "62a4b689056501b91e2df2d1f4e6335818e421c7390e48050717ea8f461a0ed0", + "size": 13694, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/LICENSE.txt", + "checksum": "79f6d8f5b427252fa3b1c11ecdbdb6bf610b944f7530b4de78f770f38741cfaa", + "size": 1467, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/SKILL.md", + "checksum": "fba9c80fe80a041af8c44fd8f8bb61bf4f8d541d152af3886bd83108bcbb184c", + "size": 7192, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/document-skills/pdf/forms.md", + "checksum": "0ab10e9095deb1c1f9f79eb04254589f55c1d16e095cb53191e03f9fc3184449", + "size": 9438, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/reference.md", + "checksum": "03a5f964f8abecbbe156f363356e927e864d7ee964f1012c84ee1bfc8acbeb95", + "size": 16692, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/check_bounding_boxes.py", + "checksum": "eb2a5f79c8aa10c57b5867e1f0fc75b52a68b1218442ef9d838dfb4b9eedc6f4", + "size": 3139, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/check_bounding_boxes_test.py", + "checksum": "f95dca01a8b79aafd152511e9f7bf2bbcd606dde1be77d691f03a18624e002ca", + "size": 8818, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/check_fillable_fields.py", + "checksum": "250d5aa4e8451d6a83d17d3550c14e6c844ac347145f916ebf7980b118312b41", + "size": 362, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/convert_pdf_to_images.py", + "checksum": "095a0105a718af75ede309cb03f84a20c81d17f1727f7686fd4b294f1f40294f", + "size": 1123, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/create_validation_image.py", + "checksum": "89675be66b48925d7b498eb9454521c78cf9e9ff188ebf094934b598550effe5", + "size": 1603, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/extract_form_field_info.py", + "checksum": "9db1a2720cf54223cdc4bf797080c70f4e0d27288d9f400e066c14524519021d", + "size": 6127, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/fill_fillable_fields.py", + "checksum": "65b3e41969707022283a313a4cf9696d31793cbe255dffe13370e75abda448a7", + "size": 4863, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pdf/scripts/fill_pdf_form_with_annotations.py", + "checksum": "599d6f307edb4ee6b837f21d0ea860c41c22246e270b45d6bc750c5b87c86ce0", + "size": 3596, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/LICENSE.txt", + "checksum": "79f6d8f5b427252fa3b1c11ecdbdb6bf610b944f7530b4de78f770f38741cfaa", + "size": 1467, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/SKILL.md", + "checksum": "52ed7d2ca243477cf049e4bbeb9533f6b91beca550eefc69917bcd2c843f3347", + "size": 25654, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/document-skills/pptx/html2pptx.md", + "checksum": "f08ed7580969b796d9cd5ade93e2cdee981dcaf13cc5eb12e8d4a3700c2d6047", + "size": 19859, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd", + "checksum": "41b93bd8857cc68b1e43be2806a872d736a9bdd6566900062d8fdb57d7bbb354", + "size": 74984, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd", + "checksum": "3fd0586f2637b98bb9886f0e0b67d89e1cc987c2d158cc7deb5f5b9890ced412", + "size": 6956, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd", + "checksum": "29b254ee0d10414a8504b5a08149c7baec35a60d5ff607d6b3f492aa36815f40", + "size": 51302, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd", + "checksum": "5cb76dabd8b97d1e9308a1700b90c20139be4d50792d21a7f09789f5cccd6026", + "size": 624, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd", + "checksum": "5375417f0f5394b8dd1a7035b9679151f19a6b65df309dec10cfb4a420cb00e9", + "size": 152039, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd", + "checksum": "5d389d42befbebd91945d620242347caecd3367f9a3a7cf8d97949507ae1f53c", + "size": 1231, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd", + "checksum": "b4532b6d258832953fbb3ee4c711f4fe25d3faf46a10644b2505f17010d01e88", + "size": 8862, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd", + "checksum": "bdad416b096b61d37b71603b2c949484f9070c830bdaeba93bf35e15c8900614", + "size": 14795, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd", + "checksum": "d173c3e5d61e42e2e3a97226c632fd2ab7cc481fc4e492365b87024ab546daff", + "size": 83612, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd", + "checksum": "3c6709101c6aaa82888df5d8795c33f9e857196790eb320d9194e64be2b6bdd8", + "size": 1269, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd", + "checksum": "0b364451dc36a48dd6dae0f3b6ada05fd9b71e5208211f8ee5537d7e51a587e2", + "size": 7328, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd", + "checksum": "e2abacbb9a55ce1365f8961bc1b1395bbc811e512b111000d8c333f98458dece", + "size": 6382, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd", + "checksum": "0ef4bb354ff44b923564c4ddbdda5987919d220225129ec94614a618ceafc281", + "size": 1248, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd", + "checksum": "0d103b99a4a8652f8871552a69d42d2a3760ac6a5e3ef02d979c4273257ff6a4", + "size": 880, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd", + "checksum": "9c085407751b9061c1f996f6c39ce58451be22a8d334f09175f0e89e42736285", + "size": 2608, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd", + "checksum": "bc92e36ccd233722d4c5869bec71ddc7b12e2df56059942cce5a39065cc9c368", + "size": 3507, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd", + "checksum": "7b5b7413e2c895b1e148e82e292a117d53c7ec65b0696c992edca57b61b4a74b", + "size": 7507, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd", + "checksum": "3213ef1631606250f5010b42cad7ef716f7c59426367798e33c374c0ec391d3a", + "size": 23313, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd", + "checksum": "12264f3c03d738311cd9237d212f1c07479e70f0cbe1ae725d29b36539aef637", + "size": 1367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd", + "checksum": "beffeed56945c22a77440122c8bdc426f3fcbe7f3b12ea0976c770d1f8d54578", + "size": 242277, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd", + "checksum": "f5ee623b08b6a66935e5aced2f5d8ad0fc71bf9e8e833cd490150c0fa94b8763", + "size": 26148, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd", + "checksum": "585bedc1313b40888dcc544cb74cd939a105ee674f3b1d3aa1cc6d34f70ff155", + "size": 25279, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd", + "checksum": "133c9f64a5c5d573b78d0a474122b22506d8eadb5e063f67cdbbb8fa2f161d0e", + "size": 535, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd", + "checksum": "6bdeb169c3717eb01108853bd9fc5a3750fb1fa5b82abbdd854d49855a40f519", + "size": 5712, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd", + "checksum": "475dcae1e7d1ea46232db6f8481040c15e53a52a3c256831d3df204212b0e831", + "size": 4010, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd", + "checksum": "c2dd9f61f892deae6acd8d20771ea79b12018af25f3bf8d06639c8542d218cfd", + "size": 171367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd", + "checksum": "a539aa2fb154fa50e0f5cc97e6ad7cbc66f8ec3e3746f61ec6a8b0d5d15ecdf2", + "size": 4646, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd", + "checksum": "9e0b7209fc69ab11987900404540969976000c5ebe4d4f58c43dc3842886bf3a", + "size": 1963, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd", + "checksum": "451958454e8588dfc7cd945981ada142ca06ff3307937f5700df059c2b307fa8", + "size": 2515, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd", + "checksum": "6de111e11403f7cd49027400755bae0ea1cabef2815f09bd40a24f0017613b24", + "size": 2856, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd", + "checksum": "f565adfef5a502044abc3a9153e157edc25af78304d335994afb958874b15e26", + "size": 1344, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/mce/mc.xsd", + "checksum": "3a37e461ecf5a8670fdec34029703401f8728ab9c96ec1739a6ae58d55212413", + "size": 3127, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd", + "checksum": "568b26ee156cb9549aa439ca2158965f77b7c1602b7e0316f40ac6cf586e35f2", + "size": 26549, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd", + "checksum": "0fa75578a000439a7988ba0c59fdc69f774bbd416cbacc14d07125b3f686cb74", + "size": 3745, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd", + "checksum": "be0ff793a22dd31384650c3a4da14c2fa8062751c2e97b0e5ee852bda13c60ad", + "size": 901, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd", + "checksum": "fddc2b880cabb9005aebbc7e783e53c19fec1c03df7d0e2f2076a33a0fdfd081", + "size": 1778, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd", + "checksum": "127ca209fa73d7cb708449cb355c871867948a96e4a74f7bf5811ef62d17991d", + "size": 1002, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd", + "checksum": "842e7163409c8d74f4d7088a8bc99500d80bc75332681a0980055b08f374a604", + "size": 600, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd", + "checksum": "16f6f8072249f431370723c2cd8974672e0d9c897e00e97dd918079df934871b", + "size": 745, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/pack.py", + "checksum": "6fe762f45aff8c63fd95b9fcb1337b28921d6fa454e18a0e8158d4c8708d6d00", + "size": 5596, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/unpack.py", + "checksum": "0bd17f76a1a4c388aba42c6d1d39015fa84e405c3e0692397fe12762bd632b58", + "size": 1037, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validate.py", + "checksum": "1ec252de8b14b07d16966c48906ccb1c45c68bcd23557ad31d8c50a27f5f8c0f", + "size": 1959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validation/__init__.py", + "checksum": "83e0f035c5abea238d3f2c3968afbd511ed022b527b7c9cb60a9434cc34ff987", + "size": 336, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validation/base.py", + "checksum": "f2c70d481613456e32b43869d1604b05c236c8da34b5b3967677a661cac7ba63", + "size": 39892, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validation/docx.py", + "checksum": "e65d6cda0525866a24cc847b2e883bd2416ae6f87b3f5b9e2784dfbb0ec13093", + "size": 9996, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validation/pptx.py", + "checksum": "00bf2623da1177b3948143a4ade2f1cda7cb389dee31960861913fa42ef1b00f", + "size": 12327, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml/scripts/validation/redlining.py", + "checksum": "97abfdff4f08f43f9a4bb5c8a2f8fd483398b5b339592724e8635153b5507967", + "size": 11179, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/ooxml.md", + "checksum": "09868e9f1786765421ecf3f0f49c77006738efda82a76df43ed87f7a9bfe2467", + "size": 10388, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/scripts/html2pptx.js", + "checksum": "c675d09a54d6a002e8ca5917b9d24a6568aa8d455bb7abeb212d4f564dd07a34", + "size": 37795, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/scripts/inventory.py", + "checksum": "adead8fe6270e520c397cec9fbee4d606ab10bb80f749e018b42ec894c60d2e5", + "size": 38126, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/scripts/rearrange.py", + "checksum": "c04ac37916f398ba621b2d9e1e4c1a69225eaad6d7fb0ad116c237ddeb1b2b68", + "size": 8514, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/scripts/replace.py", + "checksum": "8a590747551be847a904e3296fb2f35aa4e7feeb4970a61596c2375306462820", + "size": 13594, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/pptx/scripts/thumbnail.py", + "checksum": "c21fd950b6ada7bd2f029885d3e56bc66b7ff061cc8404c492eb301664aa9e5d", + "size": 15484, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/xlsx/LICENSE.txt", + "checksum": "79f6d8f5b427252fa3b1c11ecdbdb6bf610b944f7530b4de78f770f38741cfaa", + "size": 1467, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/document-skills/xlsx/SKILL.md", + "checksum": "1d9eba0a77ce4d89f51841e4b02237a4f9fedfc44a7eeaac4fb4b3faa7104837", + "size": 10564, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/document-skills/xlsx/recalc.py", + "checksum": "1f4584dec91bd39c182bc333c9cb622046bf6d9739c7e85e997f6ad7827de862", + "size": 6856, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/excalidraw/SKILL.md", + "checksum": "2db9a31c5a4aee9b2665e8b44357b0872535e2e178387651debe00c2f6eb19a4", + "size": 7671, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/excalidraw/references/auto-diagram-guide.md", + "checksum": "9ba27f616afef3a5811bd18ca5f8ec81c73a5bbd8fae8ac46a648e8c38755275", + "size": 4993, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/color-palette.md", + "checksum": "43b92a808cbe45c5f862ab8d50e36c11288136e2eeea8da4bcf7af85d85d0f49", + "size": 3858, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/design-methodology.md", + "checksum": "e9d21309b735b5c67e61a5e78faeb8f3d905adb7b088e8a14e71b4ddb8ebaf51", + "size": 4521, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/element-templates.md", + "checksum": "fdf2c4431aed3fd0232bb50cd849f4bd3fc8f4f88024348c2a7d1358c500f3f2", + "size": 3657, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/file-workflow.md", + "checksum": "8dd2be446f43c9019d9da76f47e5a845ac7adc746b68edb11174b3722b829394", + "size": 2704, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/json-schema.md", + "checksum": "77b2d2becb201f7ccd25e7ad5c1130cff66ea1ff9a17adbed42cf963b96d316c", + "size": 2131, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/mcp-workflow.md", + "checksum": "1ac89af1877484b2c3d1b26bed13bc7178e4a93bbc605bf8ee3c07e54cc6d90e", + "size": 5807, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/pyproject.toml", + "checksum": "b68f2d373a50b623bb04f3f96e9ce12118d89b01d5ac7a538820f64e7fbdcdd0", + "size": 127, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/render_excalidraw.py", + "checksum": "0b82df19bab8b9b54d472d05f04fab496d26f21b58bb63f0461e17015225a674", + "size": 6552, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/render_template.html", + "checksum": "4820b815dd0635db450f2b7a0b0375c61755bdc6827024a34bea77ba4e078db5", + "size": 1686, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/excalidraw/references/uv.lock", + "checksum": "e314f17fee6f25f8655cd2412bf5cdaa5474f4f4f3dcd15b708708b76484dc06", + "size": 19095, + "lastModified": "2026-04-03T15:55:58+07:00" + }, + { + "path": "skills/find-skills/SKILL.md", + "checksum": "47784b20fe8e6e97ef6a97eb84cb41d3585599722a0e18f299d23e0967e521f0", + "size": 4895, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/fix/SKILL.md", + "checksum": "e3bc3b343aaf1eefc3f98021c43beff7ca57e4369c663f972959af685087ed49", + "size": 14677, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/fix/references/complexity-assessment.md", + "checksum": "fe34c07a16940f834f4cfc18440d9c3a20ff85e0b53fbc5d5ba77881730b4052", + "size": 2521, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/diagnosis-protocol.md", + "checksum": "8ea656105b6847c7fa4a83af77aa0198b464bed445dd022d06a75d6c3476ec5c", + "size": 4247, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/mode-selection.md", + "checksum": "f9e281e5e6a595f4db167cfef0287a697ba3b8784ca2db863d1827891e698c27", + "size": 1201, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/parallel-exploration.md", + "checksum": "b1aff6077a68a6061672312d8ff338a8f7d3822790c932a4634a70840a44f129", + "size": 3715, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/prevention-gate.md", + "checksum": "b15763e62e28439cb74d8fa7d9303ec6c5159a7a2edcef408b8ad1bd99bfd379", + "size": 3191, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/review-cycle.md", + "checksum": "10628e4b45a22efac4705794bfdfcf11a24e2a9debc2c810919a445fcb682308", + "size": 2343, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/skill-activation-matrix.md", + "checksum": "60151b3da2fdd605615366f579a4628f133d2c18df81a62a50b79e5308c10c17", + "size": 4659, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/fix/references/task-orchestration.md", + "checksum": "1f6d3895978bcd6a254904728bf8ba71e68dd347ae6777b55496b40b8f0c9a83", + "size": 5409, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/workflow-ci.md", + "checksum": "905dbdae740bee9909aa6714bbe57042960574620273a80f7fd2c288e5a57a92", + "size": 680, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/workflow-deep.md", + "checksum": "9dfb35d8ea8c93bbd28c8392c430bc54b25d0da02f52f70992c6b425d9375834", + "size": 7222, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/fix/references/workflow-logs.md", + "checksum": "505e006df58c5b71cb059a78d5f2b13826b23676563a0cd5302631647bde69df", + "size": 2324, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/workflow-quick.md", + "checksum": "59783e8c68c2210efa3f8a799377b20ea3547ff7e01c4cc4ba4900fc28ecdb91", + "size": 3535, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/fix/references/workflow-standard.md", + "checksum": "b38ed6df75451107628a91e06dd960f106f15374cb7ddbd50934830a0fb178f4", + "size": 5445, + "lastModified": "2026-05-13T13:45:13+07:00" + }, + { + "path": "skills/fix/references/workflow-test.md", + "checksum": "175f2d16955954a40fe8bacd3a2c100162c6981867da2f474980ade5c4a80f0b", + "size": 2277, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/workflow-types.md", + "checksum": "b0c0f7225f614af68f3d2c98234aff2339ad78a06607b96da9791a0358a1e5b3", + "size": 669, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/fix/references/workflow-ui.md", + "checksum": "8a9a45096aad1698b5d9c7cf74587183959f73a1a0e80d44683eae826a466e9d", + "size": 2523, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/frontend-design/SKILL.md", + "checksum": "53e260f55ef8565d488970bf620ca96273794b50031783f699f69ca62ca81de4", + "size": 9499, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/frontend-design/references/ai-multimodal-overview.md", + "checksum": "8525d4269fbc7df8aa056803cd84db352d86a24ca1706825f6dfbe6873856ee3", + "size": 6558, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/frontend-design/references/analysis-best-practices.md", + "checksum": "61f370388d9cc1803927b1a8804e744266d4d45edd501f9704ae169dcac8857e", + "size": 2495, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/analysis-prompts.md", + "checksum": "0db7f84ad1fc380ac99009a7e4c294bd49907150d3bb9346b73ef100800774a1", + "size": 3550, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/analysis-techniques.md", + "checksum": "602d9a0a37c2566cd24531005acd36bdbecb32f6c4331621d53d7e53fe965edf", + "size": 3203, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/animejs.md", + "checksum": "9a8f57874ea054f2bc8661dbbda5b8132bd3196fc8300d099d4d62a90521359b", + "size": 11521, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/anti-slop-rules.md", + "checksum": "89ae8c91a4331ae0c7be775c0f8d953d304ccdfd31c54ffa99fe1358673e3d17", + "size": 5294, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/asset-generation.md", + "checksum": "d9e655d20c039dbab3062024c67f245b341044e762563e4711215c4beed0dc8f", + "size": 10522, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/bento-motion-engine.md", + "checksum": "ab54cf13214fac09d58b170e620138d4f9bad8357ce6db2be082ff154fa5d064", + "size": 5361, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/design-extraction-overview.md", + "checksum": "e8ddc2947bc07a486858e3c174ad7e589d1241d6b15b40ee6892c9bdd35605f6", + "size": 2287, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/extraction-best-practices.md", + "checksum": "c155ab69a55e9cbb72162d67d6c39597138a9a4601a949c03ece507914e67556", + "size": 4235, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/extraction-output-templates.md", + "checksum": "56ce1c81310b9a667c146ce332f33f5df8de7a7f59ab43e3463dda535c345cab", + "size": 4478, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/extraction-prompts.md", + "checksum": "22e1836d0cf5a97ef21e70f313e3deb8e58606a531ad0645a380d9dc5606d55e", + "size": 4751, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/magicui-components.md", + "checksum": "455d5e2bee873078f67acc6d983509649fb6559059aa6a678aa4ef8b67cc9390", + "size": 8686, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/performance-guardrails.md", + "checksum": "3f138048ca8228e08c70a2d72fbfe9b5e69df67516b421accb23f0c21e372ec7", + "size": 4900, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/premium-design-patterns.md", + "checksum": "39e0815106e296165b8e5988711fd24f0690d5a5fca4c4fa15e29da274b7940c", + "size": 6551, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/redesign-audit-checklist.md", + "checksum": "740b23d8980419e42a300bb43b3e1bea2b382a3ee5baf7c0d80b923a56369c76", + "size": 6273, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/technical-accessibility.md", + "checksum": "0eb08a6fcfc2651d7c4bb87a33bc898918cf4bdc43f5601f9314b8e27c2edfc1", + "size": 2902, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/technical-best-practices.md", + "checksum": "c1fa9d8b15e95e870405977f702846c9cbe10cdbad4a0ae002585b8428fe3eae", + "size": 3638, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/technical-optimization.md", + "checksum": "a46bc622c3a2a361c73f673681320a1cf777feb6ad62e8d9995d00cc6de378c6", + "size": 1528, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/technical-overview.md", + "checksum": "073fc8c7f7f7fbfa2305bbfc50c19f62dd383a400639d11e9f74d0183f60e43e", + "size": 2450, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/technical-workflows.md", + "checksum": "f4cc6e127bf54935eb058c3112e08cfc682e1380b8d2c47996275e83a717b153", + "size": 4746, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/visual-analysis-overview.md", + "checksum": "74fd823cb3096b13f2ac2f17a7ad713c22e67b8d54c305f0c69d2bb9db80d145", + "size": 2908, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-3d.md", + "checksum": "3f83345c6690c60363e36c2b13111b3a3e33ec2cf21d1c29e428c1fb9004fff4", + "size": 2497, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-describe.md", + "checksum": "f03eedd271c6938a336b063e250db42708439cc2baeaa951ba6207b6bf758bdb", + "size": 2098, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-immersive.md", + "checksum": "2462655598ace8aff0159b6ff85cfb03f4aff9a25c924b413248a221166a46d7", + "size": 2348, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-quick.md", + "checksum": "53f8830ea21b5a280c8833482fa302f0cec4136ab00b6b92ba34ef3c0cb1b46a", + "size": 1518, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-screenshot.md", + "checksum": "e3943cc4af5d4ac4962b38aa7bd49f0c2d39d18fe35eb929b58895287a26cb21", + "size": 1983, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-design/references/workflow-video.md", + "checksum": "b4b2b28268299bca19e9ac9f6678ede23f9adec0e1640c107ffee077eeddebff", + "size": 1994, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/SKILL.md", + "checksum": "c51a8627b37cb6f39f69d9c4b4800695191010b0dc2f77cc636afad28168c781", + "size": 11370, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/frontend-development/resources/common-patterns.md", + "checksum": "c20826095408922100efb884dc861d1facaa0d2658fd6ec925e66874e2f2fd66", + "size": 8369, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/complete-examples.md", + "checksum": "f77cebe741efa7b5bc6e1b2be0cb52df2538df778128d8341e4353456c9be0c7", + "size": 24524, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/component-patterns.md", + "checksum": "3732ee17b422ef683430adeb5c680dee6d3cc8bb2d51bd50099abbf32f1cb65f", + "size": 10804, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/data-fetching.md", + "checksum": "052ca2bd77244bbd7d11dfebe17b1b21212019fa49e1bc2a786ffa0bf80bc675", + "size": 19817, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/file-organization.md", + "checksum": "d7f8d790d2066d2435573a63df76aa4668b9b5904a48daa36fac5e23c068b52b", + "size": 11871, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/loading-and-error-states.md", + "checksum": "705c5d479704f26bde728f7cccf2cc9b99b926b0fdc8ff2b1e4cbe0a14066330", + "size": 12036, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/performance.md", + "checksum": "8041c56c985c6cc84356de29ed7cdd5f22e183ae22e782cd9b82ddad70de8e18", + "size": 9639, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/routing-guide.md", + "checksum": "1f2d4eeaa9f547db3cdcdff4160b868eaef8436b6f726e1e8597d1504e57bbb7", + "size": 7193, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/styling-guide.md", + "checksum": "165cef2825f61bd981f8d23e102d8453a831cec8e1fb57e4c23e823962bb46fd", + "size": 7905, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/frontend-development/resources/typescript-standards.md", + "checksum": "8c15b5d7822e182a795e24d08950c1ae9910cba2e31d42542584e2bf549d96a1", + "size": 8439, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/SKILL.md", + "checksum": "fcfdf0266078a7f75bfbaf81e5dbf99bbe1666eadd75290bef11ee0e9b37b83f", + "size": 3763, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/git/references/branch-management.md", + "checksum": "c82b4f20fdcdbf8741bd8817391cf9cd9328f56a87e4e431af0b3e6ed32d374d", + "size": 1851, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/commit-standards.md", + "checksum": "d58ba2e249a26f716c23761d7852f2826a589d83029db9d70a1856e946da6548", + "size": 1246, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/gh-cli-guide.md", + "checksum": "c638ddc7c078638d761191075edfdc60386c7581acc6db511feaf0e128c4a9de", + "size": 2517, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/safety-protocols.md", + "checksum": "cc7dcc25e41359e2107425bdff6ce180b36f2b87ca2a7875952a0ba5c61a9b6f", + "size": 1960, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/workflow-commit.md", + "checksum": "0b111c4538c001b3884c9d04af4b899e6fe192e508e72f0745af6f5583fae9ec", + "size": 1572, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/workflow-merge.md", + "checksum": "f36346ced78e8a5ac9b852bcb5fb108f927fbd20e6087856455216bf2d765ad6", + "size": 1174, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/workflow-pr.md", + "checksum": "a81eacbf306317931a034d3c4f6184b71271c5b4558da22b71d5e346754b5a34", + "size": 1464, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/git/references/workflow-push.md", + "checksum": "8e6aad80c4128a8a7a1aa6b4d46b74f7870d81f2320d45a813fdc22d2d155598", + "size": 1424, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/gkg/SKILL.md", + "checksum": "f3b79bcfe5c7a443acf72d41de5ec0e82f18e1f720e2657289753de5a9815d99", + "size": 2672, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/gkg/references/cli-commands.md", + "checksum": "f62bafc2074b47ba75ca311296f6a0c5498f7bef48279e1026c2970d74e84fa6", + "size": 1829, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/gkg/references/http-api.md", + "checksum": "b08ccac0025ac528e78e3d3c6ffb0b089fef903b4319f3ac3405cca89f13b71d", + "size": 1594, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/gkg/references/language-support.md", + "checksum": "e3eac0dc7714ff0bd74b16ef5086dc77250131a71c690fd13e32d3ea8ebdd1ef", + "size": 1764, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/gkg/references/mcp-tools.md", + "checksum": "12feb707267659bbf267dfdea763339c0ed7f6291833a9b6753db01e0ce69f93", + "size": 2216, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/SKILL.md", + "checksum": "8fbda90247d46f533fa7055c32f8d139ddc68176ea3a82500fd71c8d35298745", + "size": 5101, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/google-adk-python/references/agent-types-and-architecture.md", + "checksum": "edf54ebe1293bfbeb40666978b0cf759a41c7c8d168e09e45cd293f9f674b055", + "size": 2979, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/callbacks-plugins-observability.md", + "checksum": "a7d4f0bad7d239efbd31616cdeec1d196b936b9136c71700ec0e004814c0cc73", + "size": 3556, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/deployment-cloud-run-vertex-gke.md", + "checksum": "42f94cdb2324703c84f1d085e50aa21cb9a83dbf7b53e56cff5907793baa9ac7", + "size": 3442, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/evaluation-testing-cli.md", + "checksum": "2c83ff074efca06167b85672f4cc9ea4450578734f9bfe084b23a9c0e0116e82", + "size": 2671, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/multi-agent-and-a2a-protocol.md", + "checksum": "badfdb96be7845cf9b53a58cb2e79b8530e6b17f67300794ec7ab9d38148f89d", + "size": 3850, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/sessions-state-memory-artifacts.md", + "checksum": "8e41bda48a5396ae24f5cd159cfa80c0235ebe0c264538d421e4e3f2ee3f1713", + "size": 4317, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/google-adk-python/references/tools-and-mcp-integration.md", + "checksum": "faa533d7a69f81df4233c7d1e562d8151197bfc346f5642f4de81170a2ba3d91", + "size": 3963, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/install.ps1", + "checksum": "a2179c0b840c5f71e47bf3a26c9ccea831041d30474ae39b2a6043328143ce42", + "size": 53814, + "lastModified": "2026-05-13T10:40:37-04:00" + }, + { + "path": "skills/install.sh", + "checksum": "1a2784213f1a969fcb624d95a7d53a455774223a43fc8818c1d7f0ed8795944a", + "size": 50925, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/journal/SKILL.md", + "checksum": "5a9e7dd428d0877ff7b370fc2fcd5963a053b4adc4cb2281ea22ab3d0202e7da", + "size": 1007, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/llms/SKILL.md", + "checksum": "6618a8f696423b9eb889c62c269ca269dae01e4317770c82e4ddd472ef29385d", + "size": 3598, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/llms/references/llms-txt-specification.md", + "checksum": "1b63d3bb8b67bff0a2dbe116ef4befc27573bd0e7d63e9436952b94b4652deab", + "size": 2784, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/llms/scripts/generate-llms-txt.py", + "checksum": "b8096906ac51297764b9cf663b0bef57e8c139b89fae94c8a167e2ca7cd13a3b", + "size": 10742, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/SKILL.md", + "checksum": "a2bf654f066e29acd683b6d2cb1e98dd101ef1dada5dbfb08f35daaa7eb3f2d2", + "size": 9624, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/directory-browser.css", + "checksum": "78462172853e50d38812075bdc369d80bcb691b79075421be0f359320855195b", + "size": 2993, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/favicon.png", + "checksum": "2ea58b8c84129d6f3fc3b697c57bd26d93218b535d74b0b3fbca713808e62837", + "size": 1833, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/novel-theme.css", + "checksum": "5cd1b6e39f05ab3e47d09bb0e7b4a7bed1c8e887ee84fdfd3e792e9a8d0171e8", + "size": 612, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/reader.js", + "checksum": "3f4a2404f03ec52c42d372d78b7c405a91cf08cac8b13d294b0e51046d4bedec", + "size": 26132, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-base.css", + "checksum": "c4ff0f672e8ac24cdb07de6161f8844188318a76cf4d210fb6e4b0354af413b1", + "size": 1013, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-components.css", + "checksum": "47acc5fe67513e460455775076ba21a91924d20ffb633805f46b96f17ef2504a", + "size": 3858, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-content.css", + "checksum": "dc5ab55144c134e89ecec7a5b4714a2a8b87f3511e9f7404cdf69f44f1f9ff80", + "size": 2947, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-header.css", + "checksum": "f1e0e91b9ea83b804af52dc6d5f2300bd18274ec502e902098751d41fbdca023", + "size": 3980, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-mermaid.css", + "checksum": "6abb1164e3317b3013ad58ffdafe48f0c43610a5351d550e8a2db723ef72979e", + "size": 3223, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-overlays.css", + "checksum": "464d82b4861edcf9ef06d3f1bb0cd1f3775c986ade36b8a8498721d173c89383", + "size": 3729, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-responsive.css", + "checksum": "9b528f14390993caa252aa459a2bba02064a5cc9a69ec492435b27616d722101", + "size": 4653, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-sidebar.css", + "checksum": "db674ec4c3de2962d8e91fde5d5f2e7351aa52da4e0e42b9714bb5f9bbf3800c", + "size": 6376, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/styles/novel-theme-variables.css", + "checksum": "99a1177a06ce7641cdf5e3f831d6e3b84937154012a15204603d13b3ac7370b1", + "size": 1395, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/assets/template.html", + "checksum": "f735e6aab371063babc28b8ec69110edaed15ab7a184561775af1d6ad8ad4b02", + "size": 6181, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/bun.lock", + "checksum": "ad1f38b82bf6cd1cfc569039643c96987f6d7050ff969ec5a117d83a1f778bdf", + "size": 2549, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/package.json", + "checksum": "17277f3b82b5da8d1b464c4806c1549ea00adb279a03e4c0360dff2fd1cb658a", + "size": 419, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/lib/http-server.cjs", + "checksum": "9317b373ec1606a132c226de6b81b19d29a695c47140ad4d2c6a64bb629da1e0", + "size": 11721, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs", + "checksum": "352be28d03fed28a530a1908282f6c5ec67d653083a28177af93bf0a5633bc2c", + "size": 9959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs", + "checksum": "ca55d3e86e00b066ad137d2318e231975da0894a81d8fa366ff2734d244078a6", + "size": 10396, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/lib/port-finder.cjs", + "checksum": "8d0f32b024a88e30a5b23e203fa47a542e1c07f122cb744b00533a302ddda8ea", + "size": 1174, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs", + "checksum": "b800d82e6b4bc0a3e20391e3e63b2f5dc612afb5d01c74238ab8495eacb38ea9", + "size": 3241, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/server.cjs", + "checksum": "e22e45caef9c783bf58881ebaaddd64e3963c11bd67d424665e921eae64724fd", + "size": 12750, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/scripts/tests/server.test.cjs", + "checksum": "716d70a43f4c2d7f3a2f39cfc7e573d47dfde5a5aecb237c8609b5cf4e017d47", + "size": 11529, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/dashboard-assets.test.cjs", + "checksum": "28a137fcd2ffa1ccf347b804bb861cf1a56539755aba7548a83a661311133f31", + "size": 10749, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/dashboard-renderer.test.cjs", + "checksum": "a620de25d3b861a98e8c046ea043c2d5ac08499b8b1041656dc06a29175a5261", + "size": 12532, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/http-server.test.cjs", + "checksum": "a34335e62730a5469099cdf0dafe61328b34543aeeb74391805fb2d54659d72b", + "size": 8065, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/run-tests.cjs", + "checksum": "ef6e8268ab352712220e8d9c372b33d7ed90e9a69efcbe6530d0046c6a6d57ee", + "size": 1054, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/test-framework.cjs", + "checksum": "c8ac1762e27983a3519c026220d1f7ba6842c747ec337214fff78472ee118809", + "size": 3248, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/markdown-novel-viewer/tests/verify-xss.cjs", + "checksum": "9e78d9de8feb97637d1342080d019a82ccc94589105f5911744b7270831c0d70", + "size": 3451, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/LICENSE.txt", + "checksum": "58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd", + "size": 11357, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/SKILL.md", + "checksum": "c10055193387fdf2b7b132c05b8814138891743afdd7a33f13b8e3f4e7c35cbb", + "size": 13684, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/mcp-builder/reference/evaluation.md", + "checksum": "8c99479f8a2d22a636c38e274537aac3610879e26f34e0709825077c4576f427", + "size": 21663, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/reference/mcp_best_practices.md", + "checksum": "3bdf013379bdd3c198baccd0f183441c710fc7cae07ba4c6f8f8048276519688", + "size": 28910, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/reference/node_mcp_server.md", + "checksum": "40b03e9c07463d5db524c1f5140ef60713fdd911c2f4386f89e0b94d43b8764e", + "size": 26709, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/reference/python_mcp_server.md", + "checksum": "4e6db48188f44ff4eb707f50b8d273d5d18af4b88d326f7a26f03a405064bc0b", + "size": 26182, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/scripts/connections.py", + "checksum": "9403668a2041568772082a8b334122c1f88daf0541fb393af4522d0094a47a6e", + "size": 4875, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/scripts/evaluation.py", + "checksum": "de78cc13b47fecbc013994855624c72f3827700b38b25ce87278e4e172565265", + "size": 12884, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/scripts/example_evaluation.xml", + "checksum": "9272b348ddcc4b06ba562367ccd0770e018158c0068ac5116d5e34aaeff8777a", + "size": 1194, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mcp-builder/scripts/requirements.txt", + "checksum": "d5d7558b2368ecea9dfeed7d1fbc71ee9e0750bebd1282faa527d528a344c3c7", + "size": 29, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/SKILL.md", + "checksum": "3663e4f2107b121a67443e403883b757fa1e723af6f9c124e8e0bd91b319ecec", + "size": 3061, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/media-processing/references/common-workflows.md", + "checksum": "4ebf9159c7e6955a49b7323c1a1e367a9e63e7722ed7a71157b3267f67c77f5a", + "size": 2865, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/ffmpeg-encoding.md", + "checksum": "903682c3375524ce29a12f52c72e947ab114cee1187d88652360911d06a5759f", + "size": 9463, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/ffmpeg-filters.md", + "checksum": "347447ae305410e5bb72a4934ad4fadeb91fdc12435551b038a7f895a49a72a0", + "size": 11800, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/ffmpeg-streaming.md", + "checksum": "087eab32cf7336e7815158635a4487db9640d038a22bb01a269277393c5b510f", + "size": 9562, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/format-compatibility.md", + "checksum": "900ac7216f595d94ae597096c2bf12cd62bfe0cf1841b143e4ac8564cd12e02f", + "size": 8667, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/imagemagick-batch.md", + "checksum": "e9aefed340939dc2241df5a45f82a49516bd348b6340d2acb42b4a3cfdf30537", + "size": 12189, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/imagemagick-editing.md", + "checksum": "61f9e9f4d7266db2ed6bd7774f4790c4146fab07c127413a1037b53af8096c0e", + "size": 13182, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/rmbg-background-removal.md", + "checksum": "2311024465a5e1e3c379e58406fb18f5bb6c7e2c861134c8ff3f9e5364aaaada", + "size": 1685, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/references/troubleshooting.md", + "checksum": "064e02fa485a5493e84f362736b13f1d30862e461be3d5074d11504ee5438997", + "size": 2729, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/README.md", + "checksum": "8876aca16d9d78f900fb8cf370f09cc9369134a671a2f8b50788fb72ebd46ff4", + "size": 2606, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/batch-remove-background.sh", + "checksum": "56c990116ccef526957766def641090242ad0b92609580b24b162e8ee7ae3cca", + "size": 3275, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/batch_resize.py", + "checksum": "ce8e55a5546a0c49b84c8e97021a875db7be83f2f8f1a53ee1285e64d4e0b60e", + "size": 10196, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/media_convert.py", + "checksum": "896961d11de1f7040243e388a82b30295e3224ec7b0afb4d023f4579c832e709", + "size": 8439, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/remove-background.sh", + "checksum": "fe8caea66795c3d6b85c478de3e361f4983da486efa3813fda8bd1bcb792089e", + "size": 2407, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/remove-bg-node.js", + "checksum": "1897902d7e6c9ed8837c9277021faaf54fb61c4d4360a09f5f4ea6bad730d7dd", + "size": 4187, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/requirements.txt", + "checksum": "656461e5a959cc78eda21807a73b5c20e78e6bd116fa89c7606c82eeacaab221", + "size": 558, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/tests/requirements.txt", + "checksum": "7f336e73b484fac1a0807a6cfba48eefe79c12f3c348d988a708dda2d6df6d14", + "size": 32, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/tests/test_batch_resize.py", + "checksum": "ce898f6a8f10596399a4dfaadb1abc9e2a133e18e375e1b6a5b5e56faf6d0033", + "size": 10952, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/tests/test_media_convert.py", + "checksum": "c067e325304b7cb84701a1481e2aa077ce8a29a04799a1b31a7768342d4c1f20", + "size": 7836, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/tests/test_video_optimize.py", + "checksum": "483f996459f251f9f15affaca183e9bee558432a7b49903a87fff9d7da244273", + "size": 12131, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/media-processing/scripts/video_optimize.py", + "checksum": "c2df1f79fc8314b94bade5e7ceee7b4d54459402a7f91bf12ebe71b640746b68", + "size": 13064, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mermaidjs-v11/SKILL.md", + "checksum": "422480a65c4159334772f813bc9981915e5e3683b0c826c5216578a1f608a6ca", + "size": 3357, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/mermaidjs-v11/references/cli-usage.md", + "checksum": "cb932f10be5e1f161161c31829cea507b18762498cc6a3c2f413faac82fde175", + "size": 4171, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mermaidjs-v11/references/configuration.md", + "checksum": "ec71b889ad80b92fc80100ef4a8466f6b580931055de35a2eb7523308d9726f0", + "size": 4715, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mermaidjs-v11/references/diagram-types.md", + "checksum": "c9bf1071a6c03fd84d1e9e0485c71f26bda6e43ad0df1e71f23c989bf902ad4d", + "size": 5040, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mermaidjs-v11/references/examples.md", + "checksum": "bf12b42f3b1de3534c156d113b00a56829236c5b50adb93cbfd0fff558ae46f1", + "size": 7187, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mermaidjs-v11/references/integration.md", + "checksum": "4682677fc7eeb335e8587bf893abe808148f9542c5abc37faacad2378194cdfd", + "size": 5815, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/SKILL.md", + "checksum": "55d1fdf6301b8a2a74b0d528b7c8f88fa5a79e3c66b913ae92e9413027f51dce", + "size": 3974, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/mintlify/references/ai-features-and-integrations-reference.md", + "checksum": "8cb36514f4e4d00531ef82a4f28263e32954f63dbdab6fef828a36ae9c3931a1", + "size": 13341, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/references/api-documentation-components-reference.md", + "checksum": "869518c4c37194de0b0ff4f9d8e13173d00e79897241fa2a4542b93e23f14b45", + "size": 16398, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/references/deployment-and-continuous-integration-reference.md", + "checksum": "853e2b70b1d2c06868172bcc0b60a41373d47a4e2ac48c76cd6ff63894e1b92d", + "size": 13094, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/references/docs-json-configuration-reference.md", + "checksum": "e5de8fa71562a52ed51e10370d95e44d7f54ab033067829f1e6ff9d9b59ed39e", + "size": 10996, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/references/mdx-components-reference.md", + "checksum": "7ab8ecc5cf7e40f6e61cedda457db9f0f6fe2e610dd377836c0289c706ee0b08", + "size": 10274, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mintlify/references/navigation-structure-and-organization-reference.md", + "checksum": "da98eefd266a04e037bffc03303ae253482cc4ee86e531c65a44d27946cd8277", + "size": 13669, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/SKILL.md", + "checksum": "70ef349651a1420e26bac11382335a45ce27826f3e5a46cfbb4a388554470081", + "size": 9783, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-android.md", + "checksum": "3ffe2296e0d7fb5bc30726f3178b453ced9eca54e547e551cabeecbbb48b78ac", + "size": 14033, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-best-practices.md", + "checksum": "d7232f95cc8fc46eba9a8e498e108e89b26973d6cb5e22a63ff188c34a2eb449", + "size": 12672, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-debugging.md", + "checksum": "2562a53047463478989afd3a163940ee5f678093c423b363324076db0f26102e", + "size": 21605, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-frameworks.md", + "checksum": "c18d0b5c82fe733ac91be7c5c01ecdb0fa04b2d920d6bf3b68a00fdfe07d942d", + "size": 13999, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-ios.md", + "checksum": "20b2253292952cc58bfa611fdf32a0bf54b5b485f0f747fc0cec3de221020862", + "size": 10583, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/mobile-development/references/mobile-mindset.md", + "checksum": "72119c9cece4093ea23622cd1d4c14c6b10cb5dd469d46dd2993f05a3d557d88", + "size": 16098, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/README.md", + "checksum": "bc170cfff3ceb8eab8282e53a9643f50137c455a64fd063df2a75e12e224b3f7", + "size": 7434, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/SKILL.md", + "checksum": "c6b007108aa34711bb26289b638820120cc88bca9d8f7416345fb34340da68a6", + "size": 4445, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/payment-integration/references/creem/api.md", + "checksum": "a135d189d12a1411c762ad7f5eedf9328cc472347099b9e32317eedfc3d48872", + "size": 3044, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/checkouts.md", + "checksum": "cb4abc34abd528af6965aaed79b28a54daa01a9b7d41220b73a4c2d0d8cfe9ae", + "size": 2537, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/licensing.md", + "checksum": "5eb6450e7373d8cdbfd0e72e3fa295d866ab053c8d969bd7fc8ee544b9f4bc37", + "size": 3151, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/overview.md", + "checksum": "e26ceb657c0aa552144b20b40b88cbdafa8c1ff232b1920256068989f8f3156a", + "size": 2046, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/sdk.md", + "checksum": "f4376e5c0f75ee55bd12a20fd19b72361c6f9fd92867cacde32983dbd81a147b", + "size": 3111, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/subscriptions.md", + "checksum": "29af22a7cac9bb650d72d22ecdc7161d03d45d8613855f3a961c76cefd79f212", + "size": 2858, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/creem/webhooks.md", + "checksum": "1639c9df6408024c6a0e98fb405e50baf139790a2495ee46b1ff5e27cbf5d7db", + "size": 2989, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/implementation-workflows.md", + "checksum": "ee34ca8cea4163510327a27b2dd85e9909e4432090bdf967c42edeed684f79f2", + "size": 2254, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/multi-provider-order-management-patterns.md", + "checksum": "bcc64ec48aacde5347e8917461a70eb89b734ff047ce5f526ba968ae1c83b252", + "size": 23553, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/api.md", + "checksum": "1672b30920ecc6c0b232956a0570e1c20741bac578f61c883d14c019f6432561", + "size": 1843, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/best-practices.md", + "checksum": "a65f0e521d07c8be45b77c500daeb53da93148bd733e828080aef7d4a4823f13", + "size": 3213, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/overview.md", + "checksum": "d7a8f6666da098b89a345ca5f263300bf6fe76973d9ea3ae714c6d7618764dd5", + "size": 1542, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/paddle-js.md", + "checksum": "5d484bc2fab13bdf9e6aa15e55a9a2b930710a4a8fb4a7b6772900ad68f01105", + "size": 2129, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/sdk.md", + "checksum": "45646b1607eed2dfcdb341b3da0b6c64aeeb51a67dbb2e9e5899714ecf298b46", + "size": 2619, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/subscriptions.md", + "checksum": "0224cc12fa5e10c3712f63ba5a7fa095d8efdc716f507ee6ea7a7251e992096a", + "size": 2241, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/paddle/webhooks.md", + "checksum": "df9447392afc5c1978466f379a687bb87bc5776229cf8136cc778e2dc242098c", + "size": 2661, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/benefits.md", + "checksum": "29f4049da57daa0047228b78af80fcfc4ee3621af875ca3e219b86e15ea96350", + "size": 8417, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/best-practices.md", + "checksum": "ee28b89c334842660e5b941f82f97010193633496438c6df8844677f90ce6870", + "size": 26911, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/checkouts.md", + "checksum": "5fd4c244d488e02b7b0ca3a1449f0cec4881e0488d784fd359e3b1b9b03f3f07", + "size": 6328, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/overview.md", + "checksum": "60abeb8bfe879f6706e429fad2999cc314c24a5fdf384536ca02a081dcdcd6c7", + "size": 4663, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/products.md", + "checksum": "9ab521e5cc8dc98e9fd84a3641e68af1a3d2096f2d710e355280f9e80a181505", + "size": 5363, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/sdk.md", + "checksum": "874d967d2e40a84ab79d3f2501813d6147767ec571f4c134a12986a84dbb070a", + "size": 9493, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/subscriptions.md", + "checksum": "f86eb43e9a24d867fce5affe00b04bb98dce71acff7d068765f49803fda59c5f", + "size": 7538, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/polar/webhooks.md", + "checksum": "091a12103d2df9413d836330e36fb1d8ed03527122abdc1aceeb8b191681f1d0", + "size": 9129, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/api.md", + "checksum": "c894057de43384a23053855c2f3b11eea154ee149f7c3b5216998cc28d1908f4", + "size": 3316, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/best-practices.md", + "checksum": "fb36b6ccfc3703f71245bc6444bebbe923b6c6fdabb0bae5802d7acfbde3ee83", + "size": 29693, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/overview.md", + "checksum": "4db01d56869b3084aaaab3560e56a91052ac36c3a4dffcacb49d7e178f3aaedc", + "size": 3556, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/qr-codes.md", + "checksum": "695686e0b8236c82e9400e602c7ff95e6778f248b59fc838b06f5d6c01947660", + "size": 5081, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/sdk.md", + "checksum": "f8b7b555850388790bbbdece145a21379878f6c7401cf6529efb665eca66218e", + "size": 4790, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/sepay/webhooks.md", + "checksum": "15534c7c56b6cbdba7ec13ecae3709127b486c9a8a61fe530cb47a0988a7cda7", + "size": 4723, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/stripe/stripe-best-practices.md", + "checksum": "dc6eaaec4fa486512989d85b28524545c3598bacb2bbdda7642c90aa57c8bce8", + "size": 5426, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/stripe/stripe-cli.md", + "checksum": "e441bb79c57b79e56ed10a57e47499a371413701ffd49c4407b6773566d75bdc", + "size": 3027, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/stripe/stripe-js.md", + "checksum": "ea89bd966fbce6ddac2a2f3db436efe8993c6dddb7e6eb14b8d85bf4ec5513a2", + "size": 2320, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/stripe/stripe-sdks.md", + "checksum": "2e929ac8e8f587e13336e8225249f922092f64f47eba7516c75fdaa5f5992111", + "size": 2202, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/references/stripe/stripe-upgrade.md", + "checksum": "1f3280b10690fe85bcc47fe5f7331d242c9c270f6519486974009182e470bb14", + "size": 5506, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/.env.example", + "checksum": "4191e87eaf4306d0f28485efc494584f76ee535eac350d3c96f7f79f0cef355f", + "size": 619, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/checkout-helper.js", + "checksum": "48cc0954be8777b7400c1cd1597135ce30e05858bf51cfb5e0e1ba97509759ab", + "size": 7377, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/package.json", + "checksum": "67c12896253eba8d80c7a506212c6187424ccdd02b557aad0e31d73b8eee5db3", + "size": 324, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/polar-webhook-verify.js", + "checksum": "ce02731cced61a09fab3dc2cd0591be0dca674e0a300856d4178b376bdbf33e2", + "size": 5650, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/sepay-webhook-verify.js", + "checksum": "17ce071ce56ec84314340ce5d787d7964424bcacd21b8af78bd7c88313ad50e7", + "size": 5504, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/payment-integration/scripts/test-scripts.js", + "checksum": "1964af549c546bbb70897443862965ee3932e6f37d743414bbb7eb92dc4d5cfd", + "size": 7678, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/plans-kanban/SKILL.md", + "checksum": "b32b5081940b7a05774fcee8b354df2fe96c30fd8805cc0e3578d753fc9d161a", + "size": 4756, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/plans-kanban/deprecated/MIGRATION.md", + "checksum": "84b2ed9b903f51d16f89b02499198eb8c82f29c49ed7dec30045f79c5cbd579b", + "size": 1432, + "lastModified": "2026-04-12T18:49:51-04:00" + }, + { + "path": "skills/plans-kanban/package.json", + "checksum": "7e3a8560d706d1bf7c73718c74893a2587e3c2248e0dc08c03c158b106794ccf", + "size": 226, + "lastModified": "2026-04-12T18:49:51-04:00" + }, + { + "path": "skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs", + "checksum": "ebbea04869cea85213cd8116bcadc03d11867f208b4a0aecc175e41906642c05", + "size": 15517, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/plans-kanban/scripts/lib/plan-parser.cjs", + "checksum": "1f3541ed55ea2c7c32a4fed9b8926aeeb65e55a2559b754abeee3fd097358b2d", + "size": 739, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/plans-kanban/scripts/lib/plan-scanner.cjs", + "checksum": "9fb30c731ea46865234896a569060425d0abcbe014c04eeab581e879082842e3", + "size": 8071, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/plans-kanban/scripts/open-dashboard.cjs", + "checksum": "1b98673381319a3687557f592a693b1360e471a283209e073fd0133fed83d81a", + "size": 10489, + "lastModified": "2026-04-23T20:21:07-04:00" + }, + { + "path": "skills/preview/SKILL.md", + "checksum": "3a306832edabe2aa6e4fdef2e93649a1ed00bdb75a39cb17e3e1433a5dec5a90", + "size": 8728, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/preview/references/generation-modes.md", + "checksum": "07aa385406ce8fb661f9cb8e137beb9bd98a5a68a6a87acd451fa92d5bdc2704", + "size": 8383, + "lastModified": "2026-04-28T16:43:56-04:00" + }, + { + "path": "skills/preview/references/html-css-patterns.md", + "checksum": "c2c3f860622465fd4e7c5fbb94ecf39519526a5cc892ae14f8155b1f48ee3216", + "size": 41636, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/references/html-design-guidelines.md", + "checksum": "67b5faf5234614b0ffe765253699067863fd098da97a755c6da6e4a6d1492893", + "size": 15750, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/references/html-libraries.md", + "checksum": "0e0cc223d7cc800cc1e4158d26067e8ea8b41d08adf57d81427dac52ae3f4ab6", + "size": 19592, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/references/html-responsive-nav.md", + "checksum": "c2507c5a468632eab14028780898422b1a6d7a2e3d1708933bd294f2cf6989c3", + "size": 5817, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/references/html-slide-patterns.md", + "checksum": "14da4390afb8c669214e8310153f974b5bbdbd675d84b44510c24bd2e28cba4d", + "size": 40110, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/references/view-mode.md", + "checksum": "74c02f2ec503bb67ca6e95324c14a36dba7d0e4f54e66888bef733c7454f88f1", + "size": 1212, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/templates/architecture.html", + "checksum": "2782993b25404eea110eb07eab968a63b56b9264020726e4851a69f6b4955868", + "size": 19575, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/templates/data-table.html", + "checksum": "30beeb1548b4b129b59ddbf8d80b740512ff62ec6b396bf9d85af20555a76305", + "size": 18231, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/templates/mermaid-flowchart.html", + "checksum": "f944cbaecb0acca12b6e61b688f144c0e0e4ed0d03e76ea670f2172bb03eb121", + "size": 23157, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/preview/templates/slide-deck.html", + "checksum": "284511385868d4886ac3f732fb6f073181e68a6cfd6ae39ba99144b90d884795", + "size": 37580, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/SKILL.md", + "checksum": "09685f4afbffac2e7bcd0ff1d8878a44e0a22412d19da8c8f3a4015d2f8fff74", + "size": 4395, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/problem-solving/references/attribution.md", + "checksum": "31a2aaa9398c34e9d28324cccda7954ad5b8075e6785f2d511b498105247193a", + "size": 2507, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/collision-zone-thinking.md", + "checksum": "6b8b5cd22ba84d42f593b87d2c3f3bebcf865a8a0739a63267ff10fbdfa19aa9", + "size": 2761, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/inversion-exercise.md", + "checksum": "6cf90d3175a73272ddc6b2fcf0d67c2ec4b76146257785800f027dee7bf8e648", + "size": 3095, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/meta-pattern-recognition.md", + "checksum": "948bae5d7a5b3e7d2c05a69ee06e457b9127d55ad4eee670adf4c6ab757659a4", + "size": 2930, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/scale-game.md", + "checksum": "6201d459b1f7956d6bb94320ddfb5c6c11bcecac837dfcef44b079a6ee42f32e", + "size": 3528, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/simplification-cascades.md", + "checksum": "7183cb578e0a3eec635067b3848c7069c89eae093afdd8278cd81ca740b30756", + "size": 2718, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/problem-solving/references/when-stuck.md", + "checksum": "ad5e721ef86f2d19c628bdbf5d7de2e76dfc02388ccdbb595dfa0e68a3f02d48", + "size": 2811, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-management/SKILL.md", + "checksum": "d2e9d9767c48452b2a42d74ef58b7528954d3ced146de9d8f261181e0539c18a", + "size": 5307, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/project-management/references/documentation-triggers.md", + "checksum": "b71f87f979a3c41deaebd027293aa4cfb3c932c6aaefacb25dbdeb337d9c6141", + "size": 2360, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-management/references/hydration-workflow.md", + "checksum": "ef86578bd3ef79eb34e82d4b9039374af4591b2eda8be230eedbb48ab1f0a39e", + "size": 4233, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-management/references/progress-tracking.md", + "checksum": "c8677ed866ae6abc015d8612b7f3619d97edfa9f7f5a646eb23dabb4c22d3991", + "size": 3480, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-management/references/reporting-patterns.md", + "checksum": "3dfab4046ed1442df09bde3abc16f5d248ed3df21dff95640107a605f4524ff6", + "size": 1997, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-management/references/task-operations.md", + "checksum": "7894b9d8361058b176e8c49a8748edd070214a4a38f08c522a36d53322327161", + "size": 3091, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-organization/SKILL.md", + "checksum": "178da9da4e68647a0e16710f7fff53cf32d509878e3b2b87a79949309f0fe99c", + "size": 9564, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/project-organization/references/directory-patterns.md", + "checksum": "5973cf858f405f68269b821523f57262306cb2e1cd9f8e3d8ab9e5627900d7df", + "size": 6637, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-organization/references/markdown-body-templates.md", + "checksum": "19c5e6c97129eddaacbbddf2083113774c4ecf615568407c911fd224a32060cf", + "size": 4983, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/project-organization/references/naming-conventions.md", + "checksum": "bbfe760a99b571f282ae0b95144a346718bed8182ec97d7f2ce141d9423542e3", + "size": 3542, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/AGENTS.md", + "checksum": "9288e276adf1a8e907721874d5c1ca7ea62d57ca81750d5ac9d0d87f4e1c52f8", + "size": 60535, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/README.md", + "checksum": "9eafb2123d3b8b2aef41fba0db2648a3f4f49996f8c7c8bb2c86263befd8b48a", + "size": 3360, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/SKILL.md", + "checksum": "51c0e9f39badcb2228fc8084d15ada399739ee18449aa013f1ad56beab4c4f69", + "size": 5330, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/react-best-practices/metadata.json", + "checksum": "a7d0263491b8f3b2a3439d07d1dfd3f28b74ddbb309ee28392d3ecc5bf411602", + "size": 921, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/_sections.md", + "checksum": "01c59969e4e867f0708c8f8ef9c6d87fab9a07d0586244f429ff84013db8a115", + "size": 1554, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/_template.md", + "checksum": "99df2a3ea088c6c22de2484ddc7e964d0e9923846f44c63380343ecc64455442", + "size": 631, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/advanced-event-handler-refs.md", + "checksum": "86e7c6f5df102a71a2bdbb4b5125a4ddbe1ffe889a95dae86acefadc2af35706", + "size": 1478, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/advanced-use-latest.md", + "checksum": "0b7d925c96c5f063095e627a37f13b2b2cfff22d8c126be6232edcea509fa062", + "size": 1191, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/async-api-routes.md", + "checksum": "523338540d73427dc14c0cbb19f2741ebccdf8b105a7b2c1b33d2905cf237a42", + "size": 1125, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/async-defer-await.md", + "checksum": "9b9166c7fc58b436cf039ac4e36dd0d3c4f762b61111f579d93cdb9f2ab2b6f9", + "size": 2028, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/async-dependencies.md", + "checksum": "bfd348ab519f168447ffdbde7b70f40ecb99115c3cdae9292182ec8e28e1ab63", + "size": 942, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/async-parallel.md", + "checksum": "6d2f841896279e976dfcdc1ac89e70771ac188baadfd43c096b5706cb838b961", + "size": 654, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/async-suspense-boundaries.md", + "checksum": "de05fedac2eb7ae563b887b5a424464ec3dfaf84e5b7797467ebe2a796ac8afc", + "size": 2510, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/bundle-barrel-imports.md", + "checksum": "9e61a5d579a8a7d55194c2e110414d7ee2d8da947ba187d444daa1e54d265f0f", + "size": 2370, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/bundle-conditional.md", + "checksum": "081062850fa0cecb4c2e65a69971b48bf84ada6d26fb09404b98cb596fabaf90", + "size": 866, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/bundle-defer-third-party.md", + "checksum": "3719fb47b191e8db4fe22686ec88448ad5af9e6838585425abbe103d0b642e37", + "size": 920, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/bundle-dynamic-imports.md", + "checksum": "401817a7369f315fc5a68a1095742ff7d53d0461906880dc9d64a41495ee1986", + "size": 791, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/bundle-preload.md", + "checksum": "d1f7cc28da7cd5ab249acd287edc5b761afcfb194e9cb62cd44c5f3543db2de2", + "size": 1149, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/client-event-listeners.md", + "checksum": "242a873349febc1ce685e85617994784dbab92c2eaa68aed7fed5a83e7680e93", + "size": 1969, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/client-swr-dedup.md", + "checksum": "644652c39c6cc00de8d1c77a7273612e868dc3f7edda30764164c12ec0f764a3", + "size": 1159, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-batch-dom-css.md", + "checksum": "b2dc21bef3b5dedef3323cff55cb3394d9e10e497de20a49e45b9f6904bb8649", + "size": 1902, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-cache-function-results.md", + "checksum": "3daaa11d24f4295cb6be8bc6f407f2ce83cc7b5bd1f0e68891ea8ab835721dc7", + "size": 1949, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-cache-property-access.md", + "checksum": "73e47431e74878a927061bf0ddc7cd91a7556cb35d2573f3421e82300d9ae311", + "size": 532, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-cache-storage.md", + "checksum": "11b826b0433898c1ece2d3547010d8e77db9fb240185748c45db91493de9b6cc", + "size": 1651, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-combine-iterations.md", + "checksum": "71add08aeeb43091d4ff4c0b2842cce8b4bdef8ad3e732cc034bb5a84827e746", + "size": 753, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-early-exit.md", + "checksum": "925ce5ce87f3347186ca62212f29cc6baa2b8c85a96d2720ad07c3d0abf781c0", + "size": 1133, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-hoist-regexp.md", + "checksum": "f9e9aef2f7c2307dd7310f283df85dcada45fc43e9bb941b0c3aa414dec21ec4", + "size": 1028, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-index-maps.md", + "checksum": "5df1bdc2cfabb2c98abd55d26762e5c18189535c2e686184f426082e62920391", + "size": 837, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-length-check-first.md", + "checksum": "1a50e03cdacda77a4ecb8d280165fce115feda9f70d39becb159384da26a002a", + "size": 1752, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-min-max-loop.md", + "checksum": "d51fed76afdf565bb3c372d47c7d4c65ec07cba7663cc5e630b59e115442fb65", + "size": 2105, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-set-map-lookups.md", + "checksum": "a7fd781a6ba9ad49065961b6f9a90ef486bf6b648390e1a08704025f98e1642b", + "size": 532, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/js-tosorted-immutable.md", + "checksum": "d0a5e1b0fec48a0a81397957e2f068e224329f7c42cb5feeed8aae6fa64025e8", + "size": 1782, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-activity.md", + "checksum": "1e5e7eaf3555e61d6a2e900089c676527d26259501db5594f59544b6c664f85a", + "size": 564, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-animate-svg-wrapper.md", + "checksum": "9c6ae0ca7a51434e803887c64cded760956579a1452ccb80a461a03f9c937c77", + "size": 1185, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-conditional-render.md", + "checksum": "2ec2fa23c4148285144687050c52369adba3da2fbe3d486f8d3e0aad8f06f2bc", + "size": 980, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-content-visibility.md", + "checksum": "64eee6d5b916fe74df33363994b27fc7f71bea3bcedc7ee04bda23107ca3e6e4", + "size": 815, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-hoist-jsx.md", + "checksum": "93b229560fae92005ed9a2a829064607b39b2e984e92d221d05b2d41df2b7c0e", + "size": 1039, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-hydration-no-flicker.md", + "checksum": "dc7ab358c67c177bca6e6f360fbc935ebe4efa928c0ba3ebd3f9f3d9e2000ca3", + "size": 2308, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rendering-svg-precision.md", + "checksum": "ed468533f6e95f622859c884b122cf21f9f593ed6bb3d500a54de4b9f9bcb9fb", + "size": 588, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-defer-reads.md", + "checksum": "234050a77faf50cb306be10a9e15bd4421134ab5907e75f13e6d78e2bd262dc9", + "size": 973, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-dependencies.md", + "checksum": "17eb5830956fb56486fd3cfc7431f5849d39751730c05ad9e77dd4f0c27169c5", + "size": 824, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-derived-state.md", + "checksum": "011c9d3e655f6e91408e818d47213625c1938008f2c68a42cbd72d2873438d99", + "size": 724, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-functional-setstate.md", + "checksum": "5e68df6b2ae8058e67f476ff1ac67bde159f5a9d18df439e46eabcdeb7b52e58", + "size": 2968, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-lazy-state-init.md", + "checksum": "4ae844740f266fc8cbf050701230286624a2440ec5be67b9a63d9edc3c580573", + "size": 2016, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-memo.md", + "checksum": "1f258990c2f27ff6256b3cc5c43300631bb3f0d81f749aed08d07fcdcc131dd1", + "size": 1148, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/rerender-transitions.md", + "checksum": "60f4033909a62df5e5b8c601494f9e50a562e2f8c1c2d81eac24f38142265f1c", + "size": 1055, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/server-after-nonblocking.md", + "checksum": "d0b8d24a3db9f0f65f9e2bddbf230b0e03a5f60e1229d93a4a18f5e7a991c7c2", + "size": 2012, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/server-cache-lru.md", + "checksum": "1924b64561841923b88a657085097a0aeba3e0ba2d5470b9f5c15cc10d6ae70f", + "size": 1353, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/server-cache-react.md", + "checksum": "c85380a2449dc9635e9bbf27e6a07821e9da864e344bf79f989b9df9b6170107", + "size": 681, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/server-parallel-fetching.md", + "checksum": "3e3bb090981a1609cc86761b595ad97daea09ccc5f1a8748518e57aabcc9468a", + "size": 1515, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/react-best-practices/rules/server-serialization.md", + "checksum": "f4c7d68b29c82381baad059c4a7f09e868e71ec9c3115a26ad3ae7d24c0dfe1f", + "size": 996, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/SKILL.md", + "checksum": "135239fe804dd52a1a28dc0941a3e9d4697294febb405c22529c4107ca2c7225", + "size": 3718, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/remotion/rules/3d.md", + "checksum": "2a5b1a72de35168bba08c7e78153fccd408ec7882fdd1778f2751162e1661378", + "size": 2290, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/animations.md", + "checksum": "99a6377d64061af5f7fcd1a179c0c8f6d7bcd0a515060a46db117a757ac3387a", + "size": 790, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/assets/charts-bar-chart.tsx", + "checksum": "6e5e219c596c8515336570a5bc89c233e32e695d5816dec88eb929e798eeea61", + "size": 3429, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/assets/text-animations-typewriter.tsx", + "checksum": "92b5f47d6d18387a0aa008ce9dceefd30f673ae5879e16892bd4b4ea97f5dddb", + "size": 2183, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/assets/text-animations-word-highlight.tsx", + "checksum": "5dbba688b875baaa62555c7a243f54739e81edbf34148c87048594a210c3ec2c", + "size": 2387, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/assets.md", + "checksum": "664160a48fe6ef76c9b25ea51b3796d39d371cb3632f380b014492412902ad42", + "size": 1590, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/audio.md", + "checksum": "06d859b2f463d0e0e823655548e314b59a1d6321377857fca52a09c629170b12", + "size": 3822, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/calculate-metadata.md", + "checksum": "b258c788fb3337187245c814f2fd4ddf10f7330ec97cb8117202a0145d4d27a6", + "size": 2920, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/can-decode.md", + "checksum": "fb3f9933e45103d72530915b72a844b3454c6acc03289db5efe8f4541b088fad", + "size": 1587, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/charts.md", + "checksum": "2430705a627c468e0922e2f78ca1a2379537d378b5fe76292b69f44659a5d66e", + "size": 1751, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/compositions.md", + "checksum": "58d92350fecc1cb57567615fd5e65f35df3e2893ea58e82768050d051e6e692d", + "size": 3445, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/display-captions.md", + "checksum": "96abde72e0bcb88cdc5871b80b5d6eb0c6aedf0ea9611e6c5157cb0ee980ba99", + "size": 3698, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/extract-frames.md", + "checksum": "b7a63f6509a1a33d624f36d3f6772abbc364b0c883520803f3701c26541e7cd7", + "size": 5496, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/fonts.md", + "checksum": "1749e4cf82e8b157d4b0a26f46721152d3ef9e5e9a1686753b8bb6a1be83ddbc", + "size": 3484, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/get-audio-duration.md", + "checksum": "d5098e8d20b227464e3519c761cba1e03396c77da636d1893c7be3061a0a8e40", + "size": 1354, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/get-video-dimensions.md", + "checksum": "839867aa115e09a719096a902a6ad5e304135f2053cce9928776fb4fcb5bf3e1", + "size": 1627, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/get-video-duration.md", + "checksum": "7b31fab3cbf9b0771bae41e2c41c9abed2b59d495ffac7160e562fdf86848726", + "size": 1341, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/gifs.md", + "checksum": "53d9d658e3093dba4a798945d5c1b7004688ed96a09521cfb22b4cec418a8ae7", + "size": 3868, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/images.md", + "checksum": "91d32f6e528b1f1cddc9a0cf70d0faa74491e3a2fe4a32933da0e21010e9aa74", + "size": 2783, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/import-srt-captions.md", + "checksum": "38d33be5439714a2ddb577d8c8a6b7bf09bd10f66c0540415fb70536d4374e87", + "size": 2113, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/lottie.md", + "checksum": "6c0cb4babcff94e35ecc22ac63a44d2131db26e7e30b53bbae0a1eb0828c74a0", + "size": 1779, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/measuring-dom-nodes.md", + "checksum": "5270db465cb9eed1942b9970de101211f954b7802dfd92e957bdc7e3eebe6c5c", + "size": 974, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/measuring-text.md", + "checksum": "88905cbd701e247306645c19f18e01aebe27c4eb0178a4e5d0377687f5ac1478", + "size": 3000, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/sequencing.md", + "checksum": "ecb74589c87da53d15230ffc669ca8de197c9748de2be7720acd54c1f777950c", + "size": 2389, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/tailwind.md", + "checksum": "bdd5162400cd20c6faebdc9d6d2ff9380f4f213f791b38eeb536c5231be34586", + "size": 422, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/text-animations.md", + "checksum": "40ac6b1bccf1c57d9edd46c74e847ec6e86fe775d3ef4fd14e1338f4a2606171", + "size": 700, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/timing.md", + "checksum": "f639ed8452767a7458a480c7d33b7126b57c70c3b5e061aeaaba382420fd8ad2", + "size": 3939, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/transcribe-captions.md", + "checksum": "e7d3edf667e3b1f3c3ed93431cc7caf5e28786c7d1e547f33ee926480a01c0d0", + "size": 850, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/transitions.md", + "checksum": "a42100803a1e5e679617ae7fb72e91431be2a0ca53e15437fa10bdd651921bfa", + "size": 3730, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/trimming.md", + "checksum": "40727aefd5939a42925f1ee1fcdfaf733f7fc098c26d7676f7fb69b418913375", + "size": 1210, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/remotion/rules/videos.md", + "checksum": "d9d3032a57f92c759daf0bd60b3282f6810ecc9958e9093a6b828de623b05328", + "size": 3509, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/SKILL.md", + "checksum": "7e3fa1770a0ee4fbcf2e9275fb3005bd5373102e53ee739978da56fd896609df", + "size": 6578, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/repomix/references/configuration.md", + "checksum": "a40386b0ca68061d03ba2ae6d1a8109306895b13699e1e05bd4b8b4c4fa7912d", + "size": 4415, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/references/usage-patterns.md", + "checksum": "6e28825bf0c97e05dc367ba590487a6ecb0b3b530ff3540429d761b03b2ad1ed", + "size": 7024, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/scripts/README.md", + "checksum": "0b300fe9fe67e8354085a30c7623967c444dad4bd82f5c985cecbef471fc44a4", + "size": 3796, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/scripts/repomix_batch.py", + "checksum": "3b46726af95b84e0a37035f754107d2739ce1a1c95083305e166f34ab0975449", + "size": 13324, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/scripts/repos.example.json", + "checksum": "5086bf887ccc032abd23715c7ed278bf9844b035068b25469ed4c00435e079fd", + "size": 252, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/scripts/requirements.txt", + "checksum": "abb821f8ee3248ea5c82c2d4b3c103ff411f1f44b484398186844487cf4bd9a6", + "size": 356, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/repomix/scripts/tests/test_repomix_batch.py", + "checksum": "4f15a013b4f1a92cc73e9fc8d1029ebb05fb8c68ac6c6a9c82d56cefd462db18", + "size": 18939, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/research/SKILL.md", + "checksum": "aeb91e29dc6dbcca297b9923ac2714561918ef9b5e7fd16591ad1f30bcd282e9", + "size": 7994, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/retro/SKILL.md", + "checksum": "821c46c903241ca72a51cd676870bc53aee036aea836b83924b400eac0125bf4", + "size": 5669, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/retro/references/metrics-guide.md", + "checksum": "2a06dd83ad6928134f3eed76091dcb522ffec489613b7c227d19d3c8e70d9460", + "size": 4533, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/retro/references/report-template.md", + "checksum": "2528064ff0732b88045d056e3f39536e1cda9a449212eaf8f7d91ffa995d339d", + "size": 2483, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/scout/SKILL.md", + "checksum": "f51582bdab6a8ebbead632a88b4069faa01c8c7758349175eaa899dcc47850f0", + "size": 3952, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/scout/references/external-scouting.md", + "checksum": "baecd1003856246cf222ca3e611204aabcedc32571d93f7d18178ae9a5c640c4", + "size": 4129, + "lastModified": "2026-04-03T19:04:44-04:00" + }, + { + "path": "skills/scout/references/internal-scouting.md", + "checksum": "b3549fa2f2f72cceeb4278c973dc8b52653a1dacf9533bdf0d09a0565e7bbd14", + "size": 2860, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/scout/references/task-management-scouting.md", + "checksum": "78ab0b90b058096fef35601c10d9e082bc2c8de25bdb118e81d2008c2ca1879e", + "size": 4184, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/security-scan/SKILL.md", + "checksum": "afb43bc3488b30e5000e569c34e2ed2e56961e09a9f6809e80a4c8f15342f9da", + "size": 4462, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/security-scan/references/secret-patterns.md", + "checksum": "28f023ff7388821bf74579cb41bdc5ba5d942700e8d3b8a8b536caa15adfb43c", + "size": 1511, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/security-scan/references/vulnerability-patterns.md", + "checksum": "c4fd47950903dc02745fa2299f29bad2912d3f4af9ed68b602d9ae56f6d7cb5c", + "size": 2213, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/.env.example", + "checksum": "69cc3a94aa1459e5ea14044e9a6905fd75beacae9665253a4b0c0bd67b92a43d", + "size": 308, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/.gitignore", + "checksum": "dfb359d3c052adc6f35924dbc58aa578329ff77b8c13f365c92cb80f418f4257", + "size": 180, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/README.md", + "checksum": "f674df8bcd1aa5cf551edd3c55ee580e7b385d2016d847bf23df712fc212dbc1", + "size": 5533, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/SKILL.md", + "checksum": "b00cdf0d1e54bbcbf3e9820ea75ee11218ebe459f5990aab2f6087c947d48242", + "size": 3319, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/sequential-thinking/package.json", + "checksum": "b392f291bd595484a90c2fb88d78810e691056072051b1616dbe1c53dec9ef50", + "size": 697, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/advanced-strategies.md", + "checksum": "27d543374e9f61bcbeb6e9a15521379580610e20ae3cb3ecbebb1e0d0ee30d5f", + "size": 2587, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/advanced-techniques.md", + "checksum": "53dd89b952c1f4489620864626d6a46ec3fe57602b7dc864757ed0dfcc2b246f", + "size": 2375, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/core-patterns.md", + "checksum": "2f11f94fc30d9d9b44c312a3d988bf1479463e936cf5bcc5ca2330318529516a", + "size": 2553, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/examples-api.md", + "checksum": "1bbce0c751d06be5457740a458412d7d5536d585354055aabb2456a3d873ab5b", + "size": 2210, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/examples-architecture.md", + "checksum": "cff32c210dbdf3f3221069a9f5ae1d672b3d4e171a1afdbc0cc78ccc3a942bc8", + "size": 2704, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/references/examples-debug.md", + "checksum": "00d4478d5552a4bf449550711e9f7e4633451bc53f47d02ffebf40431f65a976", + "size": 2496, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/scripts/format-thought.js", + "checksum": "58c3d4b9c96aaa233718cc5ccde2aee83b2da55a06dfe7eda2d9c8e7b3688001", + "size": 4820, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/scripts/process-thought.js", + "checksum": "ef06619176462f81b127d0ec4fed471983bda4d1839c4ba28b5db9e5c088f2d4", + "size": 6755, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/tests/format-thought.test.js", + "checksum": "0250882b794bfac0777fa65845fa9ab8862bc39128c93d93ae3c9f2474f88f54", + "size": 3644, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/sequential-thinking/tests/process-thought.test.js", + "checksum": "ae62b6f1ba2304c62432fe5f53deef7fb315805d1ae54e1cb5f8f322079897ce", + "size": 5698, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/SKILL.md", + "checksum": "57360c6fed21217809c1492e5140e900a9122613933b6000167c55268f17c269", + "size": 4021, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/shader/references/glsl-cellular-voronoi-worley-noise-patterns.md", + "checksum": "b4aebd85844c051a20ee141c5c3c1a5e9909f13eed6ae979392964594c609142", + "size": 3368, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-colors-rgb-hsb-gradients-mixing-color-spaces.md", + "checksum": "0701abae35d0c9a8da69ab62f556a3d8d9e7dc1a981fc44cc62ccb1f10c50a0c", + "size": 3208, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-fbm-fractional-brownian-motion-turbulence-octaves.md", + "checksum": "ad62793ee0378375a4ef10e534d36483460dddb634fd9d2934e21f2ae639e33b", + "size": 3067, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-fundamentals-data-types-vectors-precision-coordinates.md", + "checksum": "3728478ea3493793c8672cc6ff6f1d09da5318ae6799b22a0813ef0e24ae95f3", + "size": 2476, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-noise-random-perlin-simplex-cellular-voronoi.md", + "checksum": "f7fa78c77666919d5b66e61811c21d5ed51dcb3b93c3a7eda6871dff40de8e90", + "size": 2865, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-pattern-symmetry-truchet-domain-warping.md", + "checksum": "1a60f759d4785653f1d2e38f91ebd4f6b1fa534d8db6dca80e9767527069582f", + "size": 2829, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-patterns-tiling-fract-matrices-transformations.md", + "checksum": "7054860563f56bfd7ae822de95683713c0a53b24c5f7e127c27bce83a8e5c95a", + "size": 2445, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-procedural-textures-clouds-marble-wood-terrain.md", + "checksum": "fcd8b3447f265771bd557dc2a11c5f8cf51d7d67b639f47efaf3cadd599ec732", + "size": 3050, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-shader-builtin-functions-complete-api-reference.md", + "checksum": "e3c4b30fcbd2f14f9f69bffce7e0217897ed7ada4dc3b4bbf3bae0bc04a9c9a4", + "size": 3001, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-shapes-polygon-star-polar-sdf-combinations.md", + "checksum": "4be07b3121ec0b506216c18edbe26c6c074fc0ce3573d833a967b676167de37a", + "size": 2933, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-shapes-sdf-circles-rectangles-polar-distance-fields.md", + "checksum": "a8a2e4d72bba22473deba93eb1883057f8099e6d06adc2c9c4977f6d0b5ba88c", + "size": 2443, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shader/references/glsl-shaping-functions-step-smoothstep-curves-interpolation.md", + "checksum": "86761d0cf8b4abd64bd7a1f822f3c235d2fa9a6210768c9ccb73258b7bd11f9a", + "size": 2909, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ship/SKILL.md", + "checksum": "ef530cfeba2bcd7fd36210344e3cf46444a16a99c692b79b26cc37ca5bee7c52", + "size": 5578, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ship/references/auto-detect.md", + "checksum": "92f6380c986cb166d2832251463617cc50d556deda8e1bdc5adda6ffd67f31f5", + "size": 2923, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ship/references/pr-template.md", + "checksum": "0c92b4111ccda2a1cf0ac622b12e9f16d3c43bdf1819fdf6c7eeb1ee17b6348e", + "size": 2231, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ship/references/ship-workflow.md", + "checksum": "74d667833cfbe3ae8cb1318d6338f71d804930dfa4a51752eb4baeb130a9f038", + "size": 7902, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/README.md", + "checksum": "c13775e03e078aae7fee1956ec758e2f728195495a1033680e4c202625bb2d64", + "size": 1687, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/SKILL.md", + "checksum": "a0dfdcd9655dfd510924d1ce90b46cd21c26399d46a9fcd4eeed96e6701b669c", + "size": 7554, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/shopify/references/app-development.md", + "checksum": "af92f5533dec1d23a1836a84e253d2f3737f0f00db03146ab9d1ca171cb05e10", + "size": 9657, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/references/extensions.md", + "checksum": "8264fa2dac7d21493fe23cebe96271fcf90f88119b49491157c29a3fbcdb16e9", + "size": 10544, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/references/themes.md", + "checksum": "0a18523f8183f060d4867bec17a4f25f48f7e8cdbc0b6e543795dd00fa087c67", + "size": 10324, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/scripts/requirements.txt", + "checksum": "ff02bd21c424070c78b466debfc2748ea3f42f43c5d4bd888c6be2c38e3bee45", + "size": 452, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/scripts/shopify_init.py", + "checksum": "baf22c38a9168edecc5a777bb4eba18bc932546bd6da80a402414b6f109c3c18", + "size": 12675, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/shopify/scripts/tests/test_shopify_init.py", + "checksum": "7bb517b08c58b2b1b9b10f89f1437dba378188adfe63e93aa1dccb3abbeabbd3", + "size": 13319, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/show-off/SKILL.md", + "checksum": "83bb6b9ff790955f414179057699a19bad48cad6efb8e356b8ee58525673a759", + "size": 8257, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/show-off/scripts/capture-sections.js", + "checksum": "996f98d742108035c6e554da3162ff623d0f3a4cc01d9e9bd6db5cfa4d41d86f", + "size": 10666, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/show-off/scripts/package.json", + "checksum": "2642df1d428aaf41550398424fb3c20c916e8a2c127a3012168eca7549dd6387", + "size": 284, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/skill-creator/LICENSE.txt", + "checksum": "58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd", + "size": 11357, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/SKILL.md", + "checksum": "e12958e01c924fa74db4d5b196ad4a20ef050711d2c7ebb515e317825bbcb682", + "size": 6352, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/skill-creator/agents/analyzer.md", + "checksum": "bf68f4cac5a56c673a928c2e6d619586c5b93ea364026ab37547772cb45a663a", + "size": 10376, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/agents/comparator.md", + "checksum": "fe1fc9787c495d864c5d6eada47396478572325fde1b33a96d78bf4b849b7a3e", + "size": 7287, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/agents/grader.md", + "checksum": "57134da0c1a4eea33fbd74a1c9c44aa814f07d6bc64de303edb586f941e5d21a", + "size": 9049, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/assets/eval_review.html", + "checksum": "ce477dcc74dc1c0d1d3352646a79167b5a63634e936b1019160025065974e452", + "size": 7058, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/eval-viewer/generate_review.py", + "checksum": "fc9d1b9243fe5ab6012ebd579bd76d0035de1b79fd3b969de114defab26478fb", + "size": 16365, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/eval-viewer/viewer.html", + "checksum": "a53213426ee1100441d701a3a0d49cda7a842f992d2c36463f4d3cc0258575fa", + "size": 44998, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/benchmark-optimization-guide.md", + "checksum": "2e0e24f4012cd3ba35727de9efe23c4164ae62e787567e56adbe28ad00b0b41e", + "size": 4174, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/distribution-guide.md", + "checksum": "8d4f1492887f6873922f06f91b9b22569a91092152fe1160f317fdd13f445dca", + "size": 2666, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/eval-infrastructure-guide.md", + "checksum": "33e7e006324847d704a880b34ed774a974489bdc21c81069999b4a97bc5fa012", + "size": 3518, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/eval-schemas.md", + "checksum": "8d3de1f31b306c202198ab3d8f24f968ff697b3018a760165089586c59583883", + "size": 2571, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/mcp-skills-integration.md", + "checksum": "05d310fadf3ebc4bbfe2081a9e9f977e33cebec96e68621837832180f7cbd83b", + "size": 2462, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/metadata-quality-criteria.md", + "checksum": "0cd072db92ed67381baa41b6ac4dbd32cd866f902dcc363526ae94d5d6a2c34b", + "size": 2605, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/plugin-marketplace-hosting.md", + "checksum": "cd67aed29adec076b5c823c0c8ac6ac55b55180f1109fda025be7946c29ae89b", + "size": 2811, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/plugin-marketplace-overview.md", + "checksum": "8d54a0a8bf443195c6401df7d4a2934fdd81b3a0349ee18b5f8e14f7a5a65e1f", + "size": 3094, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/plugin-marketplace-schema.md", + "checksum": "50d27dd0f01c1d3530e077412a2770c4f96c639ee5c2290eb54a85a3516f21d3", + "size": 3265, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/plugin-marketplace-sources.md", + "checksum": "43ad5b6b30be6c655930c1a2656b846300ed27d5a247981a56325882403575b4", + "size": 2913, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/plugin-marketplace-troubleshooting.md", + "checksum": "3ae22cff058b6ebca1bb826bf2af5c5478670056359ee86dde3b5b35074be026", + "size": 2970, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/script-quality-criteria.md", + "checksum": "0c56828f468e226a340745a1c72ffa75b86de466b49ef76b3b75037833baa474", + "size": 2031, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/skill-anatomy-and-requirements.md", + "checksum": "6e99105d22f5bdb6625b2b6192ade552893e159bab23c9ef12229ef4c0c6dfb5", + "size": 2792, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/skill-creation-workflow.md", + "checksum": "161141424ce080706f36ab1dcd43e59b3a1bcd1a9e9b4c2f3b01345b1a0f0e9e", + "size": 4504, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/skill-design-patterns.md", + "checksum": "646a15112fd05e8b82720511947488a795cdbb48d2728158f7fbeeb78121f7e5", + "size": 2783, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/skillmark-benchmark-criteria.md", + "checksum": "374b6700e9120ef5b2c3c3d635dff156b51931f0ab04248eb5fab75b92aa4d4e", + "size": 2986, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/structure-organization-criteria.md", + "checksum": "1909d00e3a5e8122fff89ac18e026a5580d07d8afde3572b079a341fec289d09", + "size": 2170, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/testing-and-iteration.md", + "checksum": "789e6e3e75756d2ee193fe8174a4322d748d47440dce9f8582849a23cff3ca4c", + "size": 2523, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/token-efficiency-criteria.md", + "checksum": "bf3f353ba8350907dda18f0e4f29f6564a45ecfb7a448c731e2b182770005aa8", + "size": 1990, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/troubleshooting-guide.md", + "checksum": "5e9341af2bd8ac74347105161ce787ce46fdb8aa6551964ef240940898efdee5", + "size": 2633, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/validation-checklist.md", + "checksum": "0ed687bc1e626b37bc2f03d30cd550bfe757c90ace16898ab82c576f5a8409e6", + "size": 2680, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/writing-effective-instructions.md", + "checksum": "ef419db671c42cb20c66baac7f57f15522eef510a1d2625d34dcf4e102d77830", + "size": 2370, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/references/yaml-frontmatter-reference.md", + "checksum": "f8ddb433b67305f82f5d3d078dfe4537902ca233c36047fae7659ef049f10d55", + "size": 2967, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/aggregate_benchmark.py", + "checksum": "123ef128ea5ccc01a4b1ac212ef5567f21e9c13d3d240609780beeb3200c49aa", + "size": 14386, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/debug.zip", + "checksum": "8c52278984264de61f9e7375fa3ebcd416e15aa1307f71b7f6cfff52c563240b", + "size": 21007, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/encoding_utils.py", + "checksum": "ca81ae98072328ad4be406e2ceb672bc5c42fd0a65efdefc836b705e2e9c6c6d", + "size": 1088, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/generate_report.py", + "checksum": "13df7118a3c50c83c4c3250a606d5f2b20b25a3d44cbc392b3d669ec75281453", + "size": 12847, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/improve_description.py", + "checksum": "0dc43232db7ac6361775c894f4a1dbac958cb510c51a1230ff9e7fb30a74a7e8", + "size": 10723, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/init_skill.py", + "checksum": "c8d9850fc3ce7c33f88d96e0a32cbe8cc9f9a3a03eb9e7b6fdac8a306aa2c8ef", + "size": 12860, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/package_skill.py", + "checksum": "93f687766344ebc5c0c9c27aacb315f9c7f9be0bfd4777abb80464d9df7786d4", + "size": 4538, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/quick_validate.py", + "checksum": "3725a380a8e189c98988476df48c9ab0d80f91c018f47f80858e622392371700", + "size": 3838, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/run_eval.py", + "checksum": "43e3b8f80dbf69c343967ba77e268fae991d9fa3ed68b32a0ff02532cd48657f", + "size": 11464, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/run_loop.py", + "checksum": "bafdb8e25c740813c735c54bf0489b9e87146da4cf697265927513c5430112d7", + "size": 13685, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/skill-creator/scripts/utils.py", + "checksum": "3af8ae62c40c73ab712207436a0d9a981e845f25c5a7040229eb189cc8e45bb1", + "size": 1661, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/SKILL.md", + "checksum": "b45ec4f2396043c2d0a8b35ada05b050ce3a2fbf2dc128e026d04d6b60e25a60", + "size": 6245, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/stitch/data/mcp-config-snippet.json", + "checksum": "ec9fab9fef803bd1042baa6fe3a5ab08d8a3a6d1e70b66876a483e44b6d29ac3", + "size": 192, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/references/design-to-code-pipeline.md", + "checksum": "f4ce67b34a40d1e97e655020eb0ba654be3969079b2110f194b98a128938d9ff", + "size": 3497, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/references/quota-management.md", + "checksum": "c5494cb86683121aa6cc9e5f5560a2aad3dd4f7f0d53a9597957326b1073e5eb", + "size": 2179, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/references/stitch-mcp-setup.md", + "checksum": "8628eb8d04d3dd67daadf5e39c7c60b380663ef236e55f564224b793a6ae3cd0", + "size": 2196, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/references/stitch-sdk-api.md", + "checksum": "025560b32916e12ac6b2a2e00dfc806adefad24d2d9343ec31786821c92af6f9", + "size": 3934, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/scripts/package.json", + "checksum": "d45007ec3b308a45dd00f09a7637c18982e780939f263fb194939399b5a28928", + "size": 387, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/stitch/scripts/stitch-export.ts", + "checksum": "d2b62dfd5a80dd5d64174268cff892aee8daae8993742694dd5eecf460cc2484", + "size": 8915, + "lastModified": "2026-04-15T21:19:08-04:00" + }, + { + "path": "skills/stitch/scripts/stitch-generate.ts", + "checksum": "a5871ed3c6826921863010a1bc9374ada686ce10519818ed81f24e62e489fc18", + "size": 8842, + "lastModified": "2026-04-15T21:19:08-04:00" + }, + { + "path": "skills/stitch/scripts/stitch-quota.ts", + "checksum": "5cfdea68f3ec63b6827b8b0b637811a503a1d8d4dc0b4e56001ca45760118456", + "size": 3409, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/tanstack/SKILL.md", + "checksum": "20b854131a3a407bf914e5ecd9ddfe0c9a3cbf7cfd890b8cb7319c2e228b0ae8", + "size": 4959, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/tanstack/references/tanstack-ai.md", + "checksum": "9cc47e81799e6e9b650ac55a07b324b8b7a1d8d13e26567961d0f43127f5489f", + "size": 2367, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/tanstack/references/tanstack-form.md", + "checksum": "522c868d83f1fba7e462bff1a0ce26af7000328c6556be067ad82b9f0298cb01", + "size": 3577, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/tanstack/references/tanstack-start.md", + "checksum": "b5684d38675f2fb5853608f1a66843fc5dc101b8346a3c19c6db9e2e140d3e79", + "size": 2939, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/team/SKILL.md", + "checksum": "f5cf096246494f4256d036d917c7b914d34ea46e53c0149f74c9a66ca98a2d34", + "size": 16088, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/team/references/agent-teams-controls-and-modes.md", + "checksum": "539dd472fcf77b1c46305061bbbd63d42c4086cb1571230453b1e57a2afe9c44", + "size": 4959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/team/references/agent-teams-examples-and-best-practices.md", + "checksum": "8792f1f3dcdc0c6d96474c7cccd4beaac96f0edd9cd3194327a8c66c8ce91f1a", + "size": 8083, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/team/references/agent-teams-official-docs.md", + "checksum": "7d9bd4763e1f4ce7d2384e3107949b9f4a98e71afe5ad5f810454880fd7f6ebc", + "size": 8965, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/tech-graph/LICENSE", + "checksum": "a71a3dde0999e54206cc012fd97f358e9407e030b1110bac31aaf83834ea2c6d", + "size": 1090, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/README.md", + "checksum": "b276d2c9047372485aeb5bf05e1de3e72552c047c24fdc9b6ea80175f2bdd7c2", + "size": 21597, + "lastModified": "2026-05-13T10:40:37-04:00" + }, + { + "path": "skills/tech-graph/SKILL.md", + "checksum": "fd7b129d626d2952998f2dcc1bdfe6f99e9d80655f18825c12cf2e71d2a26f3b", + "size": 22649, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/tech-graph/agents/openai.yaml", + "checksum": "406d03f3c107a86b5f7dd70dd6f7e0707f06857b4175e08b9cda9ff77d3af74c", + "size": 235, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/agent-memory-types-style4.json", + "checksum": "fcaf0fe13e5d0e65f257fe43e3c3eb14062a8b036a403a6ca34504f666ba1d16", + "size": 4570, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/api-flow-style7.json", + "checksum": "cae177ac20bb84c98029592cfd64550d11c94c2d883b9f865abc1d974def1a35", + "size": 3387, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/mem0-style1.json", + "checksum": "256c83d7fd04f327a7cc1c1ea0aadf2c6ab2a944be22057a0bc8154d48747764", + "size": 7996, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/microservices-style3.json", + "checksum": "0794fdb56a53d8e6fa7338165614b994eb18c162fcac100c0cabdd60655ba0c4", + "size": 5316, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/multi-agent-style5.json", + "checksum": "502bf723a5e98d09d7a4d42d804dde25b746fe3d41d0dfaab6330f1389eec9ac", + "size": 4001, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/system-architecture-style6.json", + "checksum": "463a5f1a96d478d9fb371a8ffd240e7b590651312a14879bf82eae0b186ab178", + "size": 4202, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/fixtures/tool-call-style2.json", + "checksum": "bd3043da3d4e6b3fb997dde4dc5a4b20287d34b057b134ba416dbd193ce0462e", + "size": 4877, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/icons.md", + "checksum": "cf9e623bd555d3c445b5a74d3e9b252e89016f53868b5b63baf6c15d0ff79515", + "size": 14668, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-1-flat-icon.md", + "checksum": "667c2b0d97d88a4826020f770f6e0e62a4b5e1b4a7a23a0ecf136ad740aca5a2", + "size": 3110, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-2-dark-terminal.md", + "checksum": "5d25eaee6c02b5162634f0bd62538983bad6a284247a5e445022e1b4f92e6a28", + "size": 2878, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-3-blueprint.md", + "checksum": "0a6cbc4a3b0eabe3da30e4fecc85e16d9a75379b16cab6e2a47ec01bdd9c14f6", + "size": 3245, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-4-notion-clean.md", + "checksum": "51ececad23503891861a9f8c8c3a0f4c90b32bd88d511563c7485e8e2de816e0", + "size": 2828, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-5-glassmorphism.md", + "checksum": "2edbfa67536e037475b3553e2a848eb7d717b4f177e727060b1854afa299a689", + "size": 3724, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-6-claude-official.md", + "checksum": "95d85bfb2ce117626497ea583d351eea6f77afbc57782f0fbbfb922811566df9", + "size": 6879, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-7-openai.md", + "checksum": "4962c87e0e968c0eba93b6cd662c06f92dd37e11b972fe6574f31e480d5f287d", + "size": 6788, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/style-diagram-matrix.md", + "checksum": "957e958b75400dbc2bc46044c7e46c803e86546ab1f5de444f56cca6936696f2", + "size": 6233, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/references/svg-layout-best-practices.md", + "checksum": "1bf2afdbc794999bc0aa6983ca7d7eb7b34980c86699293dfae6d51d5d62d8a6", + "size": 3881, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/scripts/README.md", + "checksum": "fb0c98f94727144e1602f405dd621bc4c64fb64b88edbd7ba87f70cf186d1eff", + "size": 6141, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/scripts/generate-diagram.sh", + "checksum": "5ffad6e9f7e066389e63841061a87831200a1844d666291d18a7412cd7cdaf42", + "size": 4182, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/scripts/generate-from-template.py", + "checksum": "13ad69d58cee6d3a1b43f13c187aab28b3e1df7662d1facd2e5509e2b522ec0a", + "size": 63392, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/scripts/test-all-styles.sh", + "checksum": "7044b54e3e64dd03f468932425e5289473793dcbf2932ee82c31be44d4995b7d", + "size": 4072, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/scripts/validate-svg.sh", + "checksum": "049c44c1ec93c1f0cf19d3428aa9a021cad3f157488b4475902dcc9f1ea7df46", + "size": 8455, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/agent-architecture.svg", + "checksum": "5a7aa6a747bb0591beec6524f18d89772e314d927614524eee330f59bfb98737", + "size": 1324, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/architecture.svg", + "checksum": "e8cb668e02ba42c5be7a0fbf7be97850a2622e7a141fff668616fbb331039162", + "size": 1055, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/comparison-matrix.svg", + "checksum": "d6b44cf5ec097398f500d493ed2ee87ff387ecaf027786235d8e50aa015dd2e6", + "size": 612, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/data-flow.svg", + "checksum": "5a7aa6a747bb0591beec6524f18d89772e314d927614524eee330f59bfb98737", + "size": 1324, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/er-diagram.svg", + "checksum": "bc607a48cb66ca9626ff89bc2c9fbd97a61f2ba4a553c1b4eb36af84e19eb8c0", + "size": 1003, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/flowchart.svg", + "checksum": "46ae9a045dd8d09b32e3040d8e886369ae9a65ca841eaa5ce35039eb8156159c", + "size": 860, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/sequence.svg", + "checksum": "d719d22c55cbfaa60cd65f9b39d0f5095062dc4de7f207404ba79971fae010eb", + "size": 856, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/state-machine.svg", + "checksum": "60f0f85d1750a42a5df0e00fdf74e9c0e652c7dcbca6925eff2833cf105022ea", + "size": 846, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/timeline.svg", + "checksum": "35a3539f9920243eb0b7d07286cf35545569c87f6e54a4b78274b2f11845b4cf", + "size": 832, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/tech-graph/templates/use-case.svg", + "checksum": "ae5cc1d20fe0992fb3cda159d94f21e8b7e8b45d85bc735b06034932d9d75ac0", + "size": 947, + "lastModified": "2026-04-28T16:19:31-04:00" + }, + { + "path": "skills/test/SKILL.md", + "checksum": "a0380aa3923cacd6fee936778ac98f48249c5700494b77cac8c98ff3a9e7bf89", + "size": 5207, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/test/references/report-format.md", + "checksum": "64c483316450d87566e22d78a3c6ff2342d209717b207dfea1d004b3ac99359a", + "size": 1690, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/test/references/test-execution-workflow.md", + "checksum": "541af139cfdd1f2c69fc16b8da82c2248c77a8882cb4addd2a2176ef6b0a5506", + "size": 2620, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/test/references/ui-testing-workflow.md", + "checksum": "4f0ff5dc88909df19249266ba3b537b61bbf843b6dcfad78437b2592f87a5852", + "size": 1789, + "lastModified": "2026-04-30T14:19:02-04:00" + }, + { + "path": "skills/threejs/SKILL.md", + "checksum": "b6b0437fa8bee789fb6ee4a032cbf8404a3a0932c4b38955c4b2b7fef884ad2e", + "size": 4873, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/threejs/data/api-reference.csv", + "checksum": "8e04d20e87f9170ab64959bb881da228e1f05305c60aaae2a9fc763e529e185f", + "size": 8477, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/data/categories.csv", + "checksum": "e9830abb52ad497a62f506051b7e5adc6a03028bf4b4b32abbf9d13439930cf5", + "size": 1991, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/data/examples-all.csv", + "checksum": "57665b06a6f138c22bb4f813ed57348ab591c634a428939ea41639991229cff2", + "size": 132273, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/data/use-cases.csv", + "checksum": "c5887eed6b15186ec7b2e6cc4cbd57483e36635b35c6efdfc610f19f8775b413", + "size": 4306, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/00-fundamentals.md", + "checksum": "b4fb7db57919c57af6dd237513ed68a8fd9db000befada77e4cf44838be890f9", + "size": 11484, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/01-getting-started.md", + "checksum": "bd572f13cbfe5a65db046aaa1e62984bcb5358bdc7772ecd60a1118dccae4bd4", + "size": 3803, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/02-loaders.md", + "checksum": "5975da9fbc494d9e8157897ad436177aab15f28c1540bc8206203dcd330f63f9", + "size": 4060, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/03-textures.md", + "checksum": "499a16dba38153a235499607299eb1967a28da4e2050b526bb7e79772ac04549", + "size": 4238, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/04-cameras.md", + "checksum": "0c0380b4b894f4201113e5617e96aa0011aa89b1f517d190222cdcab824e666c", + "size": 4935, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/05-lights.md", + "checksum": "a35828280d61900505244b43b127e40d98d231a38c5102e20e473f50ae11812e", + "size": 4430, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/06-animations.md", + "checksum": "4012cad031c2ca992a0ba50e3ee85c307b86ef15d9c28830ce4a1aed765fc3b1", + "size": 4780, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/07-math.md", + "checksum": "a870178b12fbdca3c2ed6b812e2675c51db6623b70778e15022d3a3c14055721", + "size": 5262, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/08-interaction.md", + "checksum": "6298b81274cfe24f6de6908a0fb2d2000bc00a3117b45ad724b28afc98b26838", + "size": 6756, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/09-postprocessing.md", + "checksum": "be4898fc85d3a56bf5c8a8c3a96954c3625f04f182ed5df64ba3cdf0d0a288a1", + "size": 5411, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/10-controls.md", + "checksum": "3616fb636e221a13cf48310f5a0dd86bfe26d4579156d58a00dd0130e132258f", + "size": 5980, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/11-materials-advanced.md", + "checksum": "58ed014cb1a458885e9ac4dc12fa18c602296b86ca5d0e23ebbcfed5b8b0f933", + "size": 6009, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/11-materials.md", + "checksum": "940fda0fb5033a56453ce7c92f11b71eb2a3204ec713f8c10105033161699b29", + "size": 13385, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/12-performance.md", + "checksum": "22c1ff72ff22b1581bbe56f955bc8f9248e5b0b59cc78c81f3b6735099fb3cb0", + "size": 6682, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/13-node-materials.md", + "checksum": "b30ea64dd977cb10c2d9546417ecfd9e873419228a0a88e3d04f4aea7f624a1a", + "size": 6863, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/14-physics-vr.md", + "checksum": "3fd89d46ad2a30af09aa86856ae0a9c1f99290600e7ef571969308b731fc63eb", + "size": 6829, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/15-specialized-loaders.md", + "checksum": "550c5014198bd7234b40e22899f1a6cc0aa826a070d00af87213c9e4e87db040", + "size": 7549, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/16-webgpu.md", + "checksum": "7a56835d742407366dce8825c79bd2e75c4107f11d3f6a8f80dad353db0d6853", + "size": 7126, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/17-shader.md", + "checksum": "f17101c36e33d4a45ca1200a7983a07129f4d7da3fdadbe7076e98749eb42501", + "size": 14025, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/references/18-geometry.md", + "checksum": "077e11c07a74aa2fac8c202a642bca1c0ee959373593a77b34b934f2bd09d56a", + "size": 13797, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/scripts/core.py", + "checksum": "9bb93085f5af1596b0a9085d4f5cd607e1b6fb5f083976a6f4fa49bde34444ab", + "size": 7882, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/scripts/extract_examples.py", + "checksum": "c34e57d7b50aef6f5187c032a940a3841802f2fd6f200e116e389e4cbd354c82", + "size": 42111, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/scripts/generate_csv_from_json.py", + "checksum": "10d7799b513277cb8e3368f262345c5a0b7a9023f2c38b7e294fbb1209441761", + "size": 4830, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/threejs/scripts/search.py", + "checksum": "a71e01f7f1d5ef00cd2f3cad4dc358ce6cb462a255908a6d4db008e86828f3c1", + "size": 2797, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/LICENSE.txt", + "checksum": "58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd", + "size": 11357, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/SKILL.md", + "checksum": "da77ab0cfdccd6b95cf8d879ee273d492c4bf048e882e9e1f9a812c49766eebd", + "size": 9886, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/ArsenalSC-OFL.txt", + "checksum": "8ddd61b18ba2c0d0dbe4a691cf5f1a0673f473d02fa0546e67ee88c006aeff6e", + "size": 4373, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf", + "checksum": "65e6f89df58f68fd905b3add34a79dd6106aa3b3044df0dad9676fff53d504b9", + "size": 165848, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf", + "checksum": "b43bcd198b9fdf717dd42aa61a34dba32e01aceaeae659d689afd0ca52c37ea2", + "size": 94528, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BigShoulders-OFL.txt", + "checksum": "fbc746aabf0eb1847dfd92e2efc4596d79fa897d60b8e64062a22f585508fb3f", + "size": 4397, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf", + "checksum": "18a879fc71978a4447150705caf880a9da3860083c259fd29e6dc03057b6842a", + "size": 94396, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Boldonse-OFL.txt", + "checksum": "45cc82ab4032273c0924025ffcf8f0665a68e1a5955e3f7247e5daf1deeb1326", + "size": 4390, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf", + "checksum": "cc2e540604565c0f90a7d8d46194a2f42fc9c45512cd2e39bf03b50eb68c35a4", + "size": 77168, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf", + "checksum": "a737b146fe0d77ffe8a86e3cd16700dd431d3b1e420d4fd80e142cd68a1cb50d", + "size": 90952, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt", + "checksum": "0e4f4eb8534bc66a76aca13dd19c1f9731b2008866b29ccff182b764649df9b4", + "size": 4403, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf", + "checksum": "972a6d098c9867ae131d0ea99e221e63976b11a19d4b931c2c7ace525674e4f6", + "size": 90920, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf", + "checksum": "48f191e38355c8db100eb3ce157c20f9302a3b9a37b44a660f77ecfce3986609", + "size": 107352, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf", + "checksum": "52318db3526b644e6efa60be0b3ca5a50e40fbe8bd026c261e0aa206f0772267", + "size": 108828, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/CrimsonPro-OFL.txt", + "checksum": "35680d14547b6748b6f362a052a46d22764ce5eccf96e18b74f567bb2ee58114", + "size": 4394, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf", + "checksum": "48fad08cb1917a7b2f2c6fe5135d6c07743a6663cf7631ec4481108aaf081422", + "size": 106696, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/DMMono-OFL.txt", + "checksum": "bfe7842fcb88323e2981e24710c25202677385a8c75fb6a87217b275a0247ae3", + "size": 4392, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/DMMono-Regular.ttf", + "checksum": "f98ada968dc3b6b2c08d3f5caaf266977df0bfe0929372b93df5a06cf2ace450", + "size": 48852, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/EricaOne-OFL.txt", + "checksum": "e0de629968b52255548d5fafcf30b24ff9edae0eda362380755a75816404d0fa", + "size": 4410, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf", + "checksum": "db1d89e80e33a8a01beaaac7a85df582857d24a43f1e181461aa7ff5d701476a", + "size": 24872, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf", + "checksum": "75c0828d5c1ee44b9ef9f4df577bf41595ec362e2ea3f1e558590c9e92c7949d", + "size": 78304, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/GeistMono-OFL.txt", + "checksum": "6a873c900f584109b13ae0aaf81d6e3cf0a68751a216b03f7b6c68d547057bb4", + "size": 4388, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf", + "checksum": "a55c1b51cda4afeab9e471e7947b85a20f7c8831d7e6b1470c1b7fbdc0f0f15e", + "size": 78232, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Gloock-OFL.txt", + "checksum": "c0a3f3125ac491ef3d1f09f401be4834c646562f647e44f2bcbc49f0466c656d", + "size": 4381, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Gloock-Regular.ttf", + "checksum": "e86b4ce66dbd3f1f83eee8db99ec96e0da1128c3f53df0e9b3b7472025dfe960", + "size": 95156, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf", + "checksum": "dbd2a2fb024579438d6400a84e57579bfd2dbe67c306c8fd9fde92a61e4f2eea", + "size": 136008, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt", + "checksum": "5294ce778857e1eb02e830b6ab06435537d38f43055327e73d03a2d4d57d5123", + "size": 4363, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf", + "checksum": "ab08018ccd276b79fb2c636bb95b9c543598f9d50505fe92506fcb4dae7810cd", + "size": 133796, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf", + "checksum": "b8d294e9b5c5a0940f167c3ced0f7ef2e3f57082ca3ff096ef30e86e26c1c159", + "size": 161000, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf", + "checksum": "da64b75f4284f53e7b5c71fa190a35b8bf3494fe19f1804c81c3a53340bca570", + "size": 169840, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf", + "checksum": "b11f1048745e715a55c9d837b3f10226ca3d78867b7db7251ddad8f98dcf0f38", + "size": 170004, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf", + "checksum": "77cd233a2af8dc6b1022faea3bb3b01f3c75af68bcf530cb6aeb15982ff3dbb7", + "size": 160380, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf", + "checksum": "444f85bf1c4b0e1ce1ca624f6be54bcd832207714ccaf4ea99ee531341683bdf", + "size": 68084, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf", + "checksum": "3762f6cef95d6039489ad5ba5787d4c30f17a1ad01e9ac3c816ed69692722a68", + "size": 70004, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf", + "checksum": "78e85858e371b2cb4e18f617c10f0f937c0e12a0887ffee98555b24ed305b3a7", + "size": 69900, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSans-OFL.txt", + "checksum": "bf4dc6d13a8cccd4807133c77a1ee9619a16b92cb23322258725ab6731c2f6e5", + "size": 4403, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf", + "checksum": "a22cb26e48fd79bcb01bf2fc92d36785474dce36d9c544ab0a8868c2657c4a87", + "size": 68028, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf", + "checksum": "9c86e4d5a47b50224a2463a9eca8535835257c8e85c470c2c6b454b1af6f046e", + "size": 70868, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf", + "checksum": "56ac3be03ac3ba283196b3e77850ab2ffcf56cfb6fd3212c5620109a972f8c99", + "size": 69312, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Italiana-OFL.txt", + "checksum": "8373b11312ace78c4cec2e8f9f6aa9f2330601107dac7bcf899c6f2dbd40c5a5", + "size": 4394, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Italiana-Regular.ttf", + "checksum": "15c4dd6ab8cf4a29ba8826f65edcbe2f6c266c557d34d081f25072dfd5605fd2", + "size": 27184, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf", + "checksum": "a2349098b9e45419e7bf0e2958d6c4937a049dded37387b08be725be4c7615f3", + "size": 114828, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt", + "checksum": "a76abf002c49097d146e86740a3105a5d00450b1592e820a1109a8c5680cd697", + "size": 4399, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf", + "checksum": "b6b1ff4ddefe36d7f2a6174e1d001cab374e594519ee9049af028d577b64c5f5", + "size": 114904, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Jura-Light.ttf", + "checksum": "c891a381df056b2c4dfe85841e911bf45da0890fa21a7b2692cbe5ea1f505e1e", + "size": 154308, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Jura-Medium.ttf", + "checksum": "c72965cb732a92872643819fd1734128238583cc36b116313859137a51d3368a", + "size": 154488, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Jura-OFL.txt", + "checksum": "eaf9bdb675f6d87e5feb88199ab3ea581d3bd2082f426e384fa9c394576d7260", + "size": 4380, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt", + "checksum": "55959eef5b0c3b2e3c1c7631b8ff0f9447d75de20f29cfa7db5bcfb026763343", + "size": 4449, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf", + "checksum": "2101302538d9e88adb679031c04623e4578b5745e89566284fd2c508d79acae0", + "size": 147584, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Lora-Bold.ttf", + "checksum": "7d74015e950c2fb66519c7295b8155621d22200ae2ca2a4c6b43ce3c490cac87", + "size": 133828, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf", + "checksum": "152f87e71f5ddb60d5c57ecd9132807c947e65c42977193c9164e7c5a6690081", + "size": 140332, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Lora-Italic.ttf", + "checksum": "be627e595184e8afe521f08da0607eee613f1997d423bc8dadc5798995581377", + "size": 139328, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Lora-OFL.txt", + "checksum": "62e37a82d3f1ef2a70712885fa8b3144b65fd144d8e748d6196b690a354d792c", + "size": 4423, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Lora-Regular.ttf", + "checksum": "7ed00e7c9cdf16ab7e2fd2361fe45d4f0b61263cd60aae398b27b7ee08108827", + "size": 133888, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf", + "checksum": "69ac4c301c4a7233c6e602d12a92c54d7967b575f4449951c45ce773f7acff53", + "size": 79208, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/NationalPark-OFL.txt", + "checksum": "81c6c71d83b5b45d7344f96df12bb4a2477a5b092a9144757ee1d0f50f855175", + "size": 4399, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf", + "checksum": "a477338b7e18308d476650dfe31235ef86a883572665e56ffb5fb80f82009b58", + "size": 76424, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt", + "checksum": "7c2a6970584ddad04919816163746f83b378078015899b18468b40f05e9ce128", + "size": 4363, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf", + "checksum": "d866f985896d3280f4fce72db7e17302c24a0c1fdb0699b6b5ed3af14f944d57", + "size": 32020, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Outfit-Bold.ttf", + "checksum": "6654b93d21301ec61887d3cedd6c11d9df1b1dfb63f9cf45ac7995f6e2235ab1", + "size": 55392, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Outfit-OFL.txt", + "checksum": "1945b62cd76da9a3051a1660dde72afaa64ffc2666d30e7a78356d651653ba2f", + "size": 4389, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Outfit-Regular.ttf", + "checksum": "f24945365147c9e783e91d8649959b59be6b00c9ee4ecd2f6b33afbb2dd871fe", + "size": 54912, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf", + "checksum": "38397504f71c122b03d234ea6f55118e3d5bdbddffd82bedddbd7755d3b3be82", + "size": 51072, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/PixelifySans-OFL.txt", + "checksum": "7f54d1d9f1ae1ba9f2722f978145f90324fea34ca3c2304b3a29cfa96ac6037e", + "size": 4395, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/PoiretOne-OFL.txt", + "checksum": "2eaf541f7eb8b512e4c757a5212060abf5b6edfef230e9d7640bf736b315c33a", + "size": 4366, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf", + "checksum": "9cf265b139648b36b6c0afdfeb0bf27f7e66db9a16094bc40f644d8da05bc318", + "size": 45244, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf", + "checksum": "7ef48353f4be5ddb90f000f6fad48f2b62b3e8c27d9818d8d45ff46c201065e0", + "size": 34420, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/RedHatMono-OFL.txt", + "checksum": "435fbfb7e66988b2a06686a4cb966faec733f35d8fe100a1601573c27f3e0bb8", + "size": 4394, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf", + "checksum": "452fe826871b37539f5212b20c87cf30f82f58dd2741f1c96edd1dcbdc0db6b4", + "size": 34488, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Silkscreen-OFL.txt", + "checksum": "6b849745119bbe85ec01fd080c9cd50234da9f52ac6e48b55d1a424a0c4d7ca9", + "size": 4394, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf", + "checksum": "49567408600809e25147e9225ac4f37f410e2df45a750696c45027531fb65f1b", + "size": 31960, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf", + "checksum": "dd76e6e77cce82f827a8654cd906e9ce58f3aaf78adda63c4a7f655b8ecb41f0", + "size": 59704, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/SmoochSans-OFL.txt", + "checksum": "74c9c4eb88e891483e1b7bc54780b452cbf4f4df66d4e71881d7569aa2130749", + "size": 4396, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Tektur-Medium.ttf", + "checksum": "52bbe8c9b057b3d2da4eeace31a524b1ea26a1375ae34319cf6900ccc57a4c82", + "size": 76248, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Tektur-OFL.txt", + "checksum": "3f1466cb5438f31782eeb6e895f3a655bc4d090e24263e331f555357d1cb734e", + "size": 4385, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/Tektur-Regular.ttf", + "checksum": "162e1b36c4718c5b051b36c971ad7e50d341944f35618f480422ebbe72988f98", + "size": 75604, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf", + "checksum": "240d125fc9f8561363dc1ea3f513501253bd70942f41468f48f0b0cafb0c82e2", + "size": 191304, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf", + "checksum": "a5b2cad813df0aaa7d16621f2e93b5117c25e9bc788bc9a3ad218e9d6348ce34", + "size": 175772, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf", + "checksum": "6b7f7002e0b0c8b261fe878658ef5551e3e59d9f6b609b04efb90dde1e2c1ada", + "size": 174280, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/WorkSans-OFL.txt", + "checksum": "ace8c22a3326318b54e67c3691857929634205533f454a70ef5a3473ddb2e2ba", + "size": 4397, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf", + "checksum": "e67985a843df0d3cdee51a3d0f329eb1774a344ad9ff0c9ab923751f1577e2a4", + "size": 188916, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/YoungSerif-OFL.txt", + "checksum": "cdcb8039606b40a027a6d24586ec62d5fe29c701343d82a048c829cb28a3dd28", + "size": 4398, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf", + "checksum": "f8dc08f77abad753a00670af70756a8ace938e5c3f0b770f4f4c2071c4bd8fc6", + "size": 105136, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/canvas-design-system.md", + "checksum": "f5de85ff39d9f3a8275c4164b921ba72d5e1d34b8d7a9243d9ee34b3870a4f5f", + "size": 7888, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/shadcn-accessibility.md", + "checksum": "a22cd4ccf82b635b2b2c4f12416a0c4f7edcd825d219d6089450fa797a0d9511", + "size": 9976, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/shadcn-components.md", + "checksum": "79c4f91cbf68993a43fa3a95889c35db73de45bdd3dfd83a6830863c01aa598a", + "size": 11155, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/shadcn-theming.md", + "checksum": "d17d641474221123ff0e0288043ca2f2dab3ac96908a19eed28d82f9e58865ed", + "size": 8672, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/tailwind-customization.md", + "checksum": "4c5adeed6263a274f74f6eb2c816ca420fd6ef4f35683582988bacd404799afe", + "size": 10171, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/tailwind-responsive.md", + "checksum": "8d00ae620df26daea4623c7bf996d6e612e09d359305fcfa2b40cab757ed840c", + "size": 8270, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/references/tailwind-utilities.md", + "checksum": "aba1c40ef84f43beea142ae310371e332541f39d973df90a71f1854823effda1", + "size": 9980, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/requirements.txt", + "checksum": "09402d2d274248e18bb5fd0a0267fd7cbf99b7a2440e73e87f054aa8f259f9da", + "size": 444, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/shadcn_add.py", + "checksum": "0bcdf28ea2c2d5d4f17a2b1e0a0cab29ff649b9db7b134ecc6e9898a3d84824f", + "size": 7991, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/tailwind_config_gen.py", + "checksum": "e2162f99247e598b50333fda0d55f467422aab0f14631f24d1a2bd93decbe850", + "size": 13643, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/tests/coverage-ui.json", + "checksum": "33bdc1f5998db9a38cac8e6128a82711f8f8b65fbb3dcb0c1680ae260441cbce", + "size": 35121, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/tests/requirements.txt", + "checksum": "80846c98ee02a7e9651ec4eee6709f840b785646b469aad5284ab7ab9b344f17", + "size": 52, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/tests/test_shadcn_add.py", + "checksum": "4012b1efe1e51a5dcf31078b0d9069f92cfe2045e9a35dd52fdd4631b1815150", + "size": 9920, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-styling/scripts/tests/test_tailwind_config_gen.py", + "checksum": "2a8b7b3e8b9ff081532551f2168dd08a8471e71c17747ae8d6026e1273068dc8", + "size": 12158, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/SKILL.md", + "checksum": "20e6e4c1235b4382186d1054a3ff61364097379572aa1966ba272688ade81471", + "size": 44382, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/_sync_all.py", + "checksum": "b540b3a4f87598ae29048b3cceae1fc17b39b629aee2cbe5c802ffc7b48abf6d", + "size": 21832, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/app-interface.csv", + "checksum": "2a17ef810dab715ce1f339861817a8fbe3ccc38142b70517301e874803e838ac", + "size": 9743, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/charts.csv", + "checksum": "ebb565308115f955791b0431797a89d9b3587c25d5babb9428d10712c4924817", + "size": 19391, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/colors.csv", + "checksum": "69ee8c1147b269599d20ca418bdd6f32563a9aa2d962fb9a9b8dec66bf7b1ba4", + "size": 32432, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/design.csv", + "checksum": "6f0ae42f16b3cbfa3f07050268387557859ff666e2651b1b82763f099d724b3f", + "size": 106144, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/draft.csv", + "checksum": "e190c796b707858a5436dc4c27f9ee9bb6618014ca73f533e423abe5ce9e4d06", + "size": 106266, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/google-fonts.csv", + "checksum": "2c03a3cd134d126bd9d6a7dc2a6360dc5272219ad6df3eb9315b031f806e1487", + "size": 745196, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/icons.csv", + "checksum": "f376c29fb4df37b4bdb366a5aa70cb211ba3dd8b435390aaa03152a64b07d2e8", + "size": 20637, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/landing.csv", + "checksum": "080cedbcd61ff8ec9520f33929baa76bee9589e783f83b2f8d824a466b6a46d7", + "size": 16720, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/products.csv", + "checksum": "9fd9e776ba847cf44c1ea78f95fe5e33b2c56bb7e186e3cfff9c49bc7fcb691b", + "size": 58006, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/react-performance.csv", + "checksum": "904c8afcda229629545912dde0e8ac37503757131f0169f80b016f1f58c4fd3f", + "size": 14822, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/stacks/react-native.csv", + "checksum": "a08ca77fcf6b6d9531982dce465366296013bfcf12d2938ac72ad57cf0c4f085", + "size": 10035, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/styles.csv", + "checksum": "9b5089dcde8999333b36878252a255cc3bacbb2fe7b836c76cc7f7aa2abb643d", + "size": 142673, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/typography.csv", + "checksum": "dbea262a54e3bfa2e6c3b15989a365d5ef4c43349316aff46635e82ca825adce", + "size": 49667, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/ui-reasoning.csv", + "checksum": "41976082ecae1100da937c949215dc6694393e03f3c2a7444dd92a9edb43cb11", + "size": 53070, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/data/ux-guidelines.csv", + "checksum": "1870ee048f2a2bdd60709f8f7adf7f3b6dcad560bc005c8b2915a8ac8639820d", + "size": 18766, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/scripts/core.py", + "checksum": "18e00b1a2952fb919dcba0010ee71f75129a670ad565e8d0907958d6be8caeca", + "size": 11512, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/scripts/design_system.py", + "checksum": "4da1d341f3c7749df51b51db4a543a48a427c3c746eb0e9882a1ab86acf3bb54", + "size": 43614, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/ui-ux-pro-max/scripts/search.py", + "checksum": "18b1efa4ee5a2fc1cf14d7b25429ab423ef6026d123878fb93c5884f33cd10db", + "size": 5492, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/use-mcp/SKILL.md", + "checksum": "71fffc9df2eb719d1b34a7055629c4232cbbb9feb1e8c38f5d74a15642dbd681", + "size": 5817, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/use-mcp/assets/tools.json", + "checksum": "2e3e87d128ba6e68c6b80d469968c9db822fb0f67a3323ecdf38db438480a6c7", + "size": 91862, + "lastModified": "2026-04-29T17:01:53-04:00" + }, + { + "path": "skills/use-mcp/references/configuration.md", + "checksum": "08e7a95e077476ac6514b34af8160614ca11933b7fdf15f0161363b57cb0f0fa", + "size": 1735, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/references/gemini-cli-integration.md", + "checksum": "2a4ab31a14d024a2e2e8afd2e6d8ca97da1c19436983250f25143b89437209c8", + "size": 8226, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/references/mcp-protocol.md", + "checksum": "eb4ab38de303d0e9702d5e5f82953e89ad156755b446d07af6fbfd55503d3579", + "size": 2207, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/scripts/.env.example", + "checksum": "58b814af626ee7d10e24653156c0b5df7c7ee236a2757049e0c7a2e99b60fdd1", + "size": 281, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/scripts/.gitignore", + "checksum": "1dc41f5f75efaa8248b4c04cae81f5d7e171935f935b280cbc766a62f0cfed91", + "size": 801, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/scripts/cli.ts", + "checksum": "598056daca6a872a5277569ddfc39065e8df6031cedb2bf5ed35800867be2c8f", + "size": 5393, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/scripts/mcp-client.ts", + "checksum": "bf8cc9a7d564274207bcf2c3972718a56b8cfd771e89125db8f3c9c22510ce63", + "size": 6884, + "lastModified": "2026-04-29T16:55:06-04:00" + }, + { + "path": "skills/use-mcp/scripts/package.json", + "checksum": "29916ad99510cadc3d95cde1be33bffe55542b46a0584d4c977c5fd77f479a01", + "size": 446, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/use-mcp/scripts/smoke-test.sh", + "checksum": "7e653e2ce8a18e43618ccdbd505f06df96dc3cc1b5325863d35822cd1803f3c7", + "size": 3217, + "lastModified": "2026-04-29T17:01:53-04:00" + }, + { + "path": "skills/use-mcp/scripts/tsconfig.json", + "checksum": "84fe410a67bf254076291e1bf4d37d55cc5b14a31f9ff28c4701dccc3d6381eb", + "size": 329, + "lastModified": "2026-04-29T16:46:04-04:00" + }, + { + "path": "skills/watzup/SKILL.md", + "checksum": "eaca4ceb6525a128d4cbca84ad2710a394bb76ef80e427dc18d73ecd46116ba7", + "size": 754, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/web-design-guidelines/SKILL.md", + "checksum": "260af832ed3d2ff5aa6abe553c51855d8d6deed6b80ed897e1555f0141208a3a", + "size": 1390, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/web-frameworks/SKILL.md", + "checksum": "b06031decb9d80527d8e549c621daf880c5adbb19cdfc1085527d031a438ea4e", + "size": 9256, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/web-frameworks/references/nextjs-app-router.md", + "checksum": "bca2cc4b417f2e7aaff4a7491bdd84a10ac03ad4b42839b8c91181b5851a69c7", + "size": 9366, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/nextjs-data-fetching.md", + "checksum": "5175463a517033aa8d3295c4fc7420db57726017450ec637d413afcb541d3e9f", + "size": 10229, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/nextjs-optimization.md", + "checksum": "20b66c2e616ea9af62e1b3a07b68069dfc2df1574dfca6bce2e00a427ac76498", + "size": 11210, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/nextjs-server-components.md", + "checksum": "afce90a0cd5175832212bd03fdf692ee5ad7154dfce0aeb75f153fc244224801", + "size": 10792, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/remix-icon-integration.md", + "checksum": "5f2d77e5b1ddc512e2be1f270e55435e372b332e98ed56d8a399ec48226405a3", + "size": 10810, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/turborepo-caching.md", + "checksum": "2d7056c6cc5b5041e23c2f7bd0ff26da685c6e9513a9271803ae93bc0d2be1e2", + "size": 9714, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/turborepo-pipelines.md", + "checksum": "64279184f245524dbcaf94e29b48c56fb766e41af36e4ad92253edcc648dfe5e", + "size": 8510, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/references/turborepo-setup.md", + "checksum": "429c0ed6cab365a18f3ecfb12df741ece4b4e5bc2052719b6dec97f496f81d8f", + "size": 9696, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/__init__.py", + "checksum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/nextjs_init.py", + "checksum": "6d01dd905055c64b3f637f36ed6beed93dc27b5932f2471a884b75888773b62d", + "size": 15114, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/requirements.txt", + "checksum": "89002a89d32b1f2e71cfb62fe48fe52580aedd6001a4fe761fd1edb8f727af28", + "size": 430, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/tests/coverage-web.json", + "checksum": "737e65f4900cc685612f9831ebd622567efb3bd7de55dd9d97b5aa2e04cd89ec", + "size": 34849, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/tests/requirements.txt", + "checksum": "0795bdcfb80afae0ff06e9cbe5bed67b39283e577984bed87d85da3fec798a37", + "size": 52, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/tests/test_nextjs_init.py", + "checksum": "770ea000b05f56cf199aa93533a070afd2f6113dd1f7a975de0a5ef0168f64d9", + "size": 10735, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/tests/test_turborepo_migrate.py", + "checksum": "2897b6b62df7a8b7d029520ac32a92634e6a19d3cac043ff4ffc3441c014c671", + "size": 12861, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-frameworks/scripts/turborepo_migrate.py", + "checksum": "d31252fe5cf3fe7ed89ded47e8f0b76ac945a84cec2c7ae77c964b4e2c7934a1", + "size": 13231, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/SKILL.md", + "checksum": "2ab3f760a52172c41d3dde1492deb93a6d79d3d3a8f7e27861ba1fb5e6ed69cc", + "size": 3488, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/web-testing/references/accessibility-testing.md", + "checksum": "29240bf03979c9a5ed3a52a30aa88f4097f0baea08bdfac19330437a0a3e96df", + "size": 1959, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/api-testing.md", + "checksum": "014742548e91976caa34d59f7f70d8fe655bf6b01a78be740f312223d40bc2bf", + "size": 1810, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/ci-cd-testing-workflows.md", + "checksum": "f7954eee4a5129623ad56439099d75f1a0b489b59f75607c59db2c062db8c8b3", + "size": 2560, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/component-testing.md", + "checksum": "b7ae79fefa875b39d70f6e3eb065e44ddac1a1729ba30a12f48d4035fdd7f89d", + "size": 2502, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/contract-testing.md", + "checksum": "fe0e3ac8fa27145c7a37e5db054aad7522f97ee6af54f501ec0334e52dd14dfe", + "size": 3334, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/cross-browser-checklist.md", + "checksum": "3e5ef0577ac999e1abe5d92f6936150f82174f11b123485c4485a05570d8ab66", + "size": 1756, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/database-testing.md", + "checksum": "565732257fb98e27d589b9edfb65fc416063227cbd388323082ad1886126c059", + "size": 3336, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/e2e-testing-playwright.md", + "checksum": "b584c854292a1202b3f7873c40d30c524011c857896bb68b4777298d82585bdd", + "size": 2768, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/functional-testing-checklist.md", + "checksum": "373531b6a74e1be71f7daff73e9fcb2c8c1f9f1f97c57cc2e257d6d0ca531333", + "size": 2751, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/interactive-testing-patterns.md", + "checksum": "a9972e974aa4b848d418f130da64a952a899895337852409dce97e163ac819c8", + "size": 2545, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/load-testing-k6.md", + "checksum": "a8ffffcefd3b55139f0be7c7544ee289008aad4d6e8c3c3144c8abf0fbe198bf", + "size": 1784, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/mobile-gesture-testing.md", + "checksum": "7db8c59dc0e6b1a822db5db5d7d331bff4f190c9c841c75963bc578759f27e7f", + "size": 2197, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/performance-core-web-vitals.md", + "checksum": "ceb4712dfa03380c2ea791189e549ae89b14504c60d4827bf023496f9f968d78", + "size": 3174, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/playwright-component-testing.md", + "checksum": "4d9fa5c964f810fcee1025b8bc02a61edf651c92765b88ed0324dec0bdca9a96", + "size": 2856, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/pre-release-checklist.md", + "checksum": "3b733d03085fb9766727ea5ce98012e75a28722956df4c641509a190610417ab", + "size": 1872, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/security-checklists.md", + "checksum": "3be0bd620df2f95fb98650581dae9a14c2fa6a65e6be41037a4239ad9faf4187", + "size": 2517, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/security-testing-overview.md", + "checksum": "f46dbd996ba2bf320bc4d328fc28307ec88847fe2f458932e45c0a8df995f0aa", + "size": 2825, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/shadow-dom-testing.md", + "checksum": "4b21bb4494e2ce27848567e71b90ecf98191b543bfbd4487aa4fbbb46544d7f7", + "size": 1687, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/test-data-management.md", + "checksum": "f3c0147f585ba81e78a60e432b617b75fc49374bed63f8c112c56161bbea717b", + "size": 2919, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/test-flakiness-mitigation.md", + "checksum": "c9abc4971bfffc7c6c971a52aa2682f8c66b1e5f539904c467ea0145d41908ad", + "size": 1819, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/testing-pyramid-strategy.md", + "checksum": "0ecc5115dd9bd6c98c2623b71faafc610570437f32cdd42d22f8512d8b9f0374", + "size": 2164, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/unit-integration-testing.md", + "checksum": "a7218bd576d690298d2234ed0569e981c6e55ab6e212b01715c5d13647f76d0e", + "size": 2725, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/visual-regression.md", + "checksum": "22cdd88965eddb27682ab4562771ba5d4ed6d490dce9d2451cb48fb2c7557081", + "size": 2268, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/references/vulnerability-payloads.md", + "checksum": "c878e61d455058b9772fcda32740d83b982eb0159433b7de5aed23dbd0d7b157", + "size": 1286, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/scripts/analyze-test-results.js", + "checksum": "6d8cc9a2b8b3bcacca34b0366d37a6f7af01a6130573f034f34df1e7baeb568a", + "size": 7960, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/web-testing/scripts/init-playwright.js", + "checksum": "45ee0e2efac0811cf52021569abd2c3bf05ef35ed04fb9668b95fdf95800fdfb", + "size": 6687, + "lastModified": "2026-04-02T18:07:38-04:00" + }, + { + "path": "skills/worktree/SKILL.md", + "checksum": "baa4feabaf11b7d9caaf10cc6caee9265b45bc9f063757ee135467540e671c6d", + "size": 5306, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/worktree/scripts/worktree.cjs", + "checksum": "aa17477d4bc52e72d33944f44daedf5668f60d173e6295630c3c90c8ef011290", + "size": 43919, + "lastModified": "2026-04-14T12:45:35-04:00" + }, + { + "path": "skills/worktree/scripts/worktree.test.cjs", + "checksum": "5df1a3d842ec239e9e8a2f81ff70065be0c4fdd82f16ef818a8be6c3d0d7c8a7", + "size": 39825, + "lastModified": "2026-04-14T12:45:35-04:00" + }, + { + "path": "skills/xia/SKILL.md", + "checksum": "f7b15ee10aeb849d5ac2cf84cb30bb9f67be478770f7c6d31775662b78a697ef", + "size": 7163, + "lastModified": "2026-05-07T11:45:16-04:00" + }, + { + "path": "skills/xia/intro.html", + "checksum": "3ce390cfa97baf4db3ada9b5594e1013dc11c32944418eb1341e670ad0fb5aaa", + "size": 22475, + "lastModified": "2026-04-19T14:51:33+07:00" + }, + { + "path": "skills/xia/references/challenge-framework.md", + "checksum": "b0c7a24dc113cf1e7133ad36ea22ddece34e1156b27019bba7e65af523c03695", + "size": 1682, + "lastModified": "2026-04-07T05:29:49-04:00" + }, + { + "path": "statusline.cjs", + "checksum": "d51a527289324530350be1972c1fff4a05a222f81af4a8165a4b34f70913ce8a", + "size": 8593, + "lastModified": "2026-04-15T01:56:55-04:00" + }, + { + "path": "plans/templates/bug-fix-template.md", + "checksum": "1c6fd2cba4a73d31749529bb404718324e8411e57b2cdae3fdadebd440a05fef", + "size": 1719, + "lastModified": "2025-10-02T12:25:53+07:00" + }, + { + "path": "plans/templates/feature-implementation-template.md", + "checksum": "e5b0e99f3e4bb92e2f841838b0dd85d6ae88155f519ffdf073343d20d87281f0", + "size": 1838, + "lastModified": "2025-10-02T12:25:53+07:00" + }, + { + "path": "plans/templates/refactor-template.md", + "checksum": "9557ca1062d4ec27b3361d1a3cebdd54f8fd54fdc28d2bb5c37c522878473c0a", + "size": 2318, + "lastModified": "2025-10-02T12:25:53+07:00" + }, + { + "path": "plans/templates/template-usage-guide.md", + "checksum": "78c28bbcaae560d78a7ef90f29c2a744b647f45a83574bae7e369a6951843096", + "size": 2028, + "lastModified": "2025-10-07T14:33:09+07:00" + }, + { + "path": ".gitignore", + "checksum": "a4432c9a656b2887b8c465350dc84bc182e82c904d13e683af8c537c827f5819", + "size": 1575, + "lastModified": "2026-04-29T17:01:53-04:00" + }, + { + "path": ".repomixignore", + "checksum": "979502d648dad5903d9c366c53037d7ab247137fa5f9f8e6d559aaad0e8cf8dc", + "size": 209, + "lastModified": "2025-11-05T11:04:50+07:00" + }, + { + "path": "CLAUDE.md", + "checksum": "9bdabcb1e272c51319dca31bec358330c302c6c654310faa730a1dfcf118c5c9", + "size": 4246, + "lastModified": "2026-05-02T21:24:08-04:00" + } + ] +} diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..193a917 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,657 @@ +@import "tailwindcss"; + +/* ───────────────────────────────────────────────────────── + Places App — Design tokens (warm travel) + shadcn-flavoured CSS variables, OKLCH-based. + ───────────────────────────────────────────────────────── */ + +:root { + /* Type */ + --font-sans: -apple-system, BlinkMacSystemFont, "Inter", "SF Pro Text", + "Segoe UI", system-ui, sans-serif; + --font-display: "Newsreader", "Iowan Old Style", "Georgia", serif; + + /* Radius scale (driven by --r) */ + --r: 1; + --radius-sm: calc(6px * var(--r)); + --radius-md: calc(10px * var(--r)); + --radius-lg: calc(14px * var(--r)); + --radius-xl: calc(20px * var(--r)); + --radius-2xl: calc(28px * var(--r)); + --radius-pill: 9999px; + + /* Spacing (compact <-> comfy via density) */ + --d: 1; + --pad-x: 16px; + --row-gap: calc(12px * var(--d)); + --card-pad: calc(14px * var(--d)); + + /* Light palette — warm travel */ + --background: oklch(98% 0.008 75); + --background-soft: oklch(96.5% 0.012 75); + --card: oklch(100% 0 0); + --foreground: oklch(22% 0.018 55); + --muted: oklch(95% 0.012 75); + --muted-foreground: oklch(48% 0.022 55); + --subtle-foreground: oklch(62% 0.018 55); + --border: oklch(91% 0.014 70); + --border-strong: oklch(86% 0.018 70); + --input: oklch(96% 0.01 75); + + /* Accent (primary terracotta) */ + --primary: oklch(58% 0.155 38); + --primary-soft: oklch(94% 0.04 38); + --primary-foreground: oklch(99% 0.005 75); + --ring: oklch(58% 0.155 38 / 0.4); + + /* Semantic */ + --success: oklch(58% 0.13 155); + --success-soft: oklch(94% 0.05 155); + --warning: oklch(72% 0.15 75); + --warning-soft: oklch(95% 0.06 75); + --danger: oklch(58% 0.18 25); + --danger-soft: oklch(95% 0.05 25); + --star: oklch(74% 0.15 75); + + /* Category accents */ + --cat-food: oklch(60% 0.16 35); + --cat-cafe: oklch(50% 0.07 55); + --cat-shopping: oklch(58% 0.14 320); + --cat-entertainment: oklch(55% 0.12 200); + --cat-other: oklch(55% 0.02 60); + + /* Shadows */ + --shadow-sm: 0 1px 2px rgba(28, 22, 14, 0.05); + --shadow-md: 0 1px 3px rgba(28, 22, 14, 0.06), 0 4px 10px rgba(28, 22, 14, 0.04); + --shadow-lg: 0 4px 12px rgba(28, 22, 14, 0.08), 0 16px 40px rgba(28, 22, 14, 0.08); + --shadow-sheet: 0 -8px 30px rgba(28, 22, 14, 0.12); +} + +[data-theme="dark"] { + --background: oklch(16% 0.014 55); + --background-soft: oklch(19% 0.014 55); + --card: oklch(21% 0.015 55); + --foreground: oklch(96% 0.006 75); + --muted: oklch(24% 0.014 55); + --muted-foreground: oklch(68% 0.018 55); + --subtle-foreground: oklch(56% 0.018 55); + --border: oklch(28% 0.016 55); + --border-strong: oklch(34% 0.018 55); + --input: oklch(24% 0.014 55); + + --primary: oklch(72% 0.135 40); + --primary-soft: oklch(28% 0.06 40); + --primary-foreground: oklch(14% 0.014 55); + --ring: oklch(72% 0.135 40 / 0.4); + + --success: oklch(72% 0.12 155); + --success-soft: oklch(28% 0.05 155); + --warning: oklch(78% 0.13 75); + --warning-soft: oklch(28% 0.06 75); + --danger: oklch(70% 0.16 25); + --danger-soft: oklch(28% 0.06 25); + --star: oklch(80% 0.14 75); + + --cat-food: oklch(72% 0.14 35); + --cat-cafe: oklch(68% 0.05 55); + --cat-shopping: oklch(72% 0.13 320); + --cat-entertainment: oklch(72% 0.11 200); + --cat-other: oklch(68% 0.02 60); + + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4); + --shadow-md: 0 1px 3px rgba(0, 0, 0, 0.4), 0 4px 10px rgba(0, 0, 0, 0.3); + --shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.45), 0 16px 40px rgba(0, 0, 0, 0.4); + --shadow-sheet: 0 -8px 30px rgba(0, 0, 0, 0.55); +} + +/* ── Reset / base ── */ +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; height: 100%; } +body { + font-family: var(--font-sans); + background: var(--background); + color: var(--foreground); + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} +button { font-family: inherit; cursor: pointer; } +input, textarea { font-family: inherit; } + +.no-scrollbar { scrollbar-width: none; } +.no-scrollbar::-webkit-scrollbar { display: none; } + +/* ── App shell — mobile-first frame (max 480px), full-bleed below ── */ +.app-frame { + position: relative; + width: 100%; + max-width: 480px; + margin: 0 auto; + min-height: 100dvh; + background: var(--background); + color: var(--foreground); + display: flex; + flex-direction: column; + overflow: hidden; + font-family: var(--font-sans); + font-size: 16px; + line-height: 1.5; +} + +@media (min-width: 481px) { + .app-frame { + height: 100dvh; + border-left: 0.5px solid var(--border); + border-right: 0.5px solid var(--border); + box-shadow: var(--shadow-lg); + } +} + +.app-surface { + flex: 1; + min-height: 0; + background: var(--background); + color: var(--foreground); + display: flex; + flex-direction: column; + font-family: var(--font-sans); + font-size: 16px; + line-height: 1.5; +} + +.app-scroll { + flex: 1; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; + position: relative; +} + +/* ── Sticky top header ── */ +.app-header { + position: sticky; + top: 0; + z-index: 20; + background: color-mix(in oklch, var(--background) 92%, transparent); + -webkit-backdrop-filter: blur(20px) saturate(180%); + backdrop-filter: blur(20px) saturate(180%); + border-bottom: 0.5px solid var(--border); +} + +/* ── Bottom tab bar ── */ +.tabbar { + position: relative; + z-index: 30; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + align-items: center; + height: 64px; + padding-bottom: env(safe-area-inset-bottom, 0); + background: color-mix(in oklch, var(--card) 88%, transparent); + -webkit-backdrop-filter: blur(24px) saturate(180%); + backdrop-filter: blur(24px) saturate(180%); + border-top: 0.5px solid var(--border); +} +.tabbar-btn { + appearance: none; + border: 0; + background: transparent; + height: 50px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 2px; + color: var(--subtle-foreground); + font-size: 11px; + font-weight: 500; + letter-spacing: 0.01em; + transition: color 0.15s ease; +} +.tabbar-btn[data-active="true"] { color: var(--primary); } +.tabbar-fab { + position: absolute; + right: 16px; + bottom: 84px; + width: 56px; + height: 56px; + border-radius: 9999px; + background: var(--primary); + color: var(--primary-foreground); + display: flex; + align-items: center; + justify-content: center; + border: 0; + z-index: 40; + box-shadow: 0 2px 6px rgba(28, 22, 14, 0.18), 0 12px 28px rgba(28, 22, 14, 0.22); + transition: transform 0.18s cubic-bezier(.3, .7, .4, 1); +} +.tabbar-fab:active { transform: scale(0.94); } +[data-theme="dark"] .tabbar-fab { + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5), 0 12px 28px rgba(0, 0, 0, 0.45); +} + +/* ── Card ── */ +.card { + background: var(--card); + border: 0.5px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); +} + +/* ── Filter pills ── */ +.pill { + display: inline-flex; + align-items: center; + gap: 6px; + height: 36px; + padding: 0 14px; + border-radius: 9999px; + background: var(--card); + border: 0.5px solid var(--border); + color: var(--foreground); + font-size: 14px; + font-weight: 500; + white-space: nowrap; + flex-shrink: 0; + transition: all 0.15s ease; +} +.pill[data-active="true"] { + background: var(--foreground); + color: var(--background); + border-color: var(--foreground); +} + +/* ── Badge ── */ +.badge { + display: inline-flex; + align-items: center; + gap: 4px; + height: 22px; + padding: 0 8px; + border-radius: 9999px; + background: var(--muted); + color: var(--muted-foreground); + font-size: 12px; + font-weight: 500; + letter-spacing: 0.01em; + white-space: nowrap; +} +.badge--outline { + background: transparent; + border: 0.5px solid var(--border-strong); +} +.badge--primary { + background: var(--primary-soft); + color: var(--primary); +} +.badge--success { + background: var(--success-soft); + color: var(--success); +} + +/* ── Button ── */ +.btn { + appearance: none; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + height: 44px; + padding: 0 16px; + border: 0; + border-radius: var(--radius-md); + background: var(--primary); + color: var(--primary-foreground); + font-size: 15px; + font-weight: 600; + letter-spacing: -0.01em; + transition: opacity 0.15s ease, transform 0.1s ease; +} +.btn:active { transform: scale(0.98); } +.btn:disabled { opacity: 0.5; } +.btn--block { width: 100%; } +.btn--lg { height: 52px; font-size: 16px; } +.btn--ghost { background: var(--muted); color: var(--foreground); } +.btn--outline { + background: transparent; + border: 0.5px solid var(--border-strong); + color: var(--foreground); +} +.btn--icon { width: 44px; height: 44px; padding: 0; border-radius: 9999px; } +.btn--danger { background: var(--danger); color: white; } + +/* ── Input / textarea ── */ +.input { + display: flex; + align-items: center; + gap: 8px; + height: 48px; + padding: 0 14px; + border-radius: var(--radius-md); + background: var(--input); + border: 0.5px solid var(--border); + color: var(--foreground); + font-size: 16px; + width: 100%; + outline: none; + transition: border-color 0.15s ease, background 0.15s ease; +} +.input:focus-within { + border-color: var(--primary); + background: var(--card); +} +.input input, +.input textarea { + flex: 1; + border: 0; + background: transparent; + outline: none; + color: inherit; + font: inherit; + min-width: 0; +} +.input--multi { + height: auto; + min-height: 96px; + padding: 12px 14px; + align-items: flex-start; +} + +/* ── Star rating ── */ +.stars { display: inline-flex; gap: 2px; } +.stars button { + background: transparent; + border: 0; + padding: 2px; + display: flex; + align-items: center; + justify-content: center; +} + +/* ── Place card ── */ +.place-card { + display: flex; + gap: 12px; + padding: var(--card-pad); + background: var(--card); + border-radius: var(--radius-lg); + border: 0.5px solid var(--border); + text-align: left; + width: 100%; + appearance: none; + color: inherit; + transition: transform 0.12s ease, box-shadow 0.15s ease; +} +.place-card:active { transform: scale(0.985); } + +/* ── Category icon-tile ── */ +.cat-tile { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + border-radius: inherit; + background: color-mix(in oklch, var(--cat-color) 20%, var(--background-soft)); + color: var(--cat-color); +} + +/* ── Headline (display) ── */ +.display { + font-family: var(--font-display); + font-weight: 500; + letter-spacing: -0.02em; + font-feature-settings: "ss01" on; +} + +/* ── Toast ── */ +.toast { + position: absolute; + left: 50%; + bottom: 96px; + transform: translateX(-50%); + padding: 12px 16px; + background: oklch(20% 0.018 55); + color: oklch(98% 0.005 75); + border-radius: 9999px; + font-size: 14px; + font-weight: 500; + box-shadow: var(--shadow-lg); + z-index: 100; + display: inline-flex; + align-items: center; + gap: 8px; + white-space: nowrap; + animation: toast-in 0.22s cubic-bezier(.3, .7, .4, 1); +} +@keyframes toast-in { + from { opacity: 0; transform: translate(-50%, 12px); } + to { opacity: 1; transform: translate(-50%, 0); } +} + +/* ── Overlay / sheet / dialog ── */ +.overlay { + position: absolute; + inset: 0; + background: rgba(20, 14, 8, 0.4); + z-index: 200; + animation: fade-in 0.18s ease; +} +@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } + +.sheet { + position: absolute; + left: 0; + right: 0; + bottom: 0; + z-index: 210; + background: var(--card); + border-top-left-radius: var(--radius-2xl); + border-top-right-radius: var(--radius-2xl); + box-shadow: var(--shadow-sheet); + max-height: 85%; + display: flex; + flex-direction: column; + animation: sheet-in 0.28s cubic-bezier(.3, .7, .4, 1); + padding-bottom: 24px; +} +@keyframes sheet-in { + from { transform: translateY(100%); } + to { transform: translateY(0); } +} +.sheet-handle { + width: 36px; + height: 5px; + border-radius: 9999px; + background: var(--border-strong); + margin: 8px auto 4px; +} + +.dialog { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 210; + background: var(--card); + border-radius: var(--radius-xl); + width: calc(100% - 32px); + max-width: 380px; + max-height: 90%; + box-shadow: var(--shadow-lg); + overflow: hidden; + display: flex; + flex-direction: column; + animation: dialog-in 0.22s cubic-bezier(.3, .7, .4, 1); +} +@keyframes dialog-in { + from { opacity: 0; transform: translate(-50%, -46%) scale(0.96); } + to { opacity: 1; transform: translate(-50%, -50%) scale(1); } +} + +/* ── Page transition ── */ +.page-enter { animation: page-in 0.2s ease; } +@keyframes page-in { + from { opacity: 0; transform: translateY(6px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ── Avatar stack ── */ +.avatar { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 9999px; + background: var(--muted); + color: var(--muted-foreground); + overflow: hidden; + font-weight: 600; + font-size: 13px; + flex-shrink: 0; +} +.avatar img { width: 100%; height: 100%; object-fit: cover; } +.avatar-stack { display: inline-flex; } +.avatar-stack > * { + margin-left: -8px; + box-shadow: 0 0 0 2px var(--card); +} +.avatar-stack > *:first-child { margin-left: 0; } + +/* ── Tabs ── */ +.tabs { + display: flex; + background: var(--muted); + border-radius: var(--radius-md); + padding: 4px; + gap: 2px; +} +.tabs button { + appearance: none; + flex: 1; + height: 36px; + border: 0; + background: transparent; + border-radius: calc(var(--radius-md) - 2px); + color: var(--muted-foreground); + font-size: 14px; + font-weight: 500; + transition: all 0.15s ease; +} +.tabs button[data-active="true"] { + background: var(--card); + color: var(--foreground); + box-shadow: var(--shadow-sm); +} + +/* ── Progress bar ── */ +.progress { + height: 6px; + border-radius: 9999px; + background: var(--muted); + overflow: hidden; +} +.progress > div { + height: 100%; + background: var(--primary); + border-radius: 9999px; + transition: width 0.4s cubic-bezier(.3, .7, .4, 1); +} + +/* ── Divider ── */ +.divider { + height: 0.5px; + background: var(--border); + margin: 0; + border: 0; +} + +/* ── Skeleton for missing cover ── */ +.cover-fallback { + background: + radial-gradient(ellipse at 30% 20%, color-mix(in oklch, var(--cat-color) 30%, transparent), transparent 60%), + radial-gradient(ellipse at 80% 90%, color-mix(in oklch, var(--cat-color) 18%, transparent), transparent 60%), + var(--background-soft); +} + +/* ── Offline banner ── */ +.offline-banner { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 16px; + background: var(--warning-soft); + color: oklch(38% 0.12 75); + font-size: 13px; + font-weight: 500; + border-bottom: 0.5px solid color-mix(in oklch, var(--warning) 30%, transparent); +} +[data-theme="dark"] .offline-banner { color: var(--warning); } + +/* ── Checkbox ── */ +.checkbox { + appearance: none; + width: 24px; + height: 24px; + border-radius: 7px; + border: 1.5px solid var(--border-strong); + background: var(--card); + display: inline-flex; + align-items: center; + justify-content: center; + transition: all 0.15s ease; + color: transparent; + position: relative; +} +.checkbox[data-checked="true"] { + background: var(--primary); + border-color: var(--primary); + color: var(--primary-foreground); +} +.checkbox svg { width: 14px; height: 14px; display: block; } + +/* ── ToggleGroup ── */ +.toggle-group { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 6px; +} +.toggle-group button { + appearance: none; + border: 1px solid var(--border); + background: var(--card); + border-radius: var(--radius-md); + padding: 10px 4px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + color: var(--muted-foreground); + font-size: 12px; + font-weight: 500; + height: 72px; + transition: all 0.15s ease; +} +.toggle-group button[data-active="true"] { + border-color: var(--primary); + background: var(--primary-soft); + color: var(--primary); +} + +/* ── Detail page hero scrim ── */ +.hero-scrim { + position: absolute; + inset: 0; + background: linear-gradient(180deg, + rgba(0, 0, 0, 0.25) 0%, + rgba(0, 0, 0, 0) 25%, + rgba(0, 0, 0, 0) 55%, + rgba(0, 0, 0, 0.7) 100%); +} + +/* Focus rings */ +:focus { outline: none; } +:focus-visible { + outline: 2px solid var(--ring); + outline-offset: 2px; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..6886bd9 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,39 @@ +import type { Metadata, Viewport } from "next"; +import "./globals.css"; + +export const metadata: Metadata = { + title: "Places — Lưu địa điểm cùng nhóm nhỏ", + description: + "Lưu quán ăn, cà phê, địa điểm — cùng bạn bè và gia đình quản lý, tag, rate, và xem trên bản đồ.", +}; + +export const viewport: Viewport = { + width: "device-width", + initialScale: 1, + maximumScale: 1, + themeColor: "#e8e2d6", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + + + + {children} + + ); +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..a58a906 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,5 @@ +import { PlacesApp } from "./places-app"; + +export default function Page() { + return ; +} diff --git a/src/app/places-app.tsx b/src/app/places-app.tsx new file mode 100644 index 0000000..a393040 --- /dev/null +++ b/src/app/places-app.tsx @@ -0,0 +1,157 @@ +"use client"; + +import { useEffect, useReducer } from "react"; +import { COLLECTIONS } from "@/lib/mock-data"; +import { + INITIAL_STATE, + reducer, + type Screen, + type Tab, +} from "@/lib/app-state"; +import { TabBar } from "@/components/ui-primitives"; +import { Icons } from "@/components/icons"; +import { PlacesListScreen } from "@/screens/places-list-screen"; +import { PlaceDetailScreen } from "@/screens/place-detail-screen"; +import { CollectionsListScreen } from "@/screens/collections-list-screen"; +import { CollectionDetailScreen } from "@/screens/collection-detail-screen"; +import { ProfileScreen } from "@/screens/profile-screen"; +import { AddPlaceSheet } from "@/sheets/add-place-sheet"; +import { InviteDialog } from "@/sheets/invite-dialog"; +import { MembersSheet, ConfirmDialog } from "@/sheets/members-sheet"; + +export function PlacesApp() { + const [state, dispatch] = useReducer(reducer, INITIAL_STATE); + + useEffect(() => { + if (!state.toast) return; + const key = state.toastKey; + const id = setTimeout( + () => dispatch({ type: "CLEAR_TOAST", key }), + 2200, + ); + return () => clearTimeout(id); + }, [state.toast, state.toastKey]); + + // Online/offline detection + useEffect(() => { + const sync = () => + dispatch({ type: "SET_OFFLINE", value: !navigator.onLine }); + sync(); + window.addEventListener("online", sync); + window.addEventListener("offline", sync); + return () => { + window.removeEventListener("online", sync); + window.removeEventListener("offline", sync); + }; + }, []); + + const top = state.stack[state.stack.length - 1]; + const activeTab: Tab = + top.screen === "place" || top.screen === "collection" + ? state.tab + : (top.screen as Tab); + + const onTab = (id: string) => { + if (id === "profile" || id === "collections" || id === "places") { + dispatch({ type: "TAB", tab: id }); + } + }; + + const renderScreen = (screen: Screen) => { + if (screen === "places") + return ; + if (screen === "collections") + return ; + if (screen === "profile") + return ; + if (screen === "place") + return ( + + ); + if (screen === "collection") + return ( + + ); + return null; + }; + + const m = state.modal; + const placeForDelete = + m?.type === "confirmDeletePlace" + ? state.places.find((p) => p.id === m.placeId) + : null; + const collectionForDelete = + m?.type === "confirmDeleteCollection" + ? COLLECTIONS.find((c) => c.id === m.collectionId) + : null; + + return ( +
+ {renderScreen(top.screen)} + dispatch({ type: "OPEN_ADD" })} + showFab={top.screen !== "profile"} + /> + + {m?.type === "add" && ( + dispatch({ type: "CLOSE_MODAL" })} + dispatch={dispatch} + /> + )} + {m?.type === "invite" && ( + dispatch({ type: "CLOSE_MODAL" })} + dispatch={dispatch} + /> + )} + {m?.type === "members" && ( + dispatch({ type: "CLOSE_MODAL" })} + dispatch={dispatch} + /> + )} + {m?.type === "confirmDeletePlace" && placeForDelete && ( + + dispatch({ type: "DELETE_PLACE", placeId: m.placeId }) + } + onClose={() => dispatch({ type: "CLOSE_MODAL" })} + /> + )} + {m?.type === "confirmDeleteCollection" && collectionForDelete && ( + { + dispatch({ type: "CLOSE_MODAL" }); + dispatch({ type: "BACK" }); + dispatch({ type: "TOAST", value: "Đã xóa" }); + }} + onClose={() => dispatch({ type: "CLOSE_MODAL" })} + /> + )} + + {state.toast && ( +
+ + {state.toast} +
+ )} +
+ ); +} diff --git a/src/components/avatar.tsx b/src/components/avatar.tsx new file mode 100644 index 0000000..8e05db3 --- /dev/null +++ b/src/components/avatar.tsx @@ -0,0 +1,66 @@ +import type { CSSProperties } from "react"; +import type { User } from "@/lib/types"; +import { USERS } from "@/lib/mock-data"; + +export function Avatar({ + user, + size = 32, +}: { + user?: User; + size?: number; +}) { + const u = user; + const style: CSSProperties = { + width: size, + height: size, + fontSize: Math.round(size * 0.42), + background: u?.color || "var(--muted)", + color: u?.color ? "rgba(255,255,255,0.95)" : "var(--muted-foreground)", + }; + return ( + + {u?.avatar_url ? ( + // eslint-disable-next-line @next/next/no-img-element + {u.name} + ) : ( + u?.initials || (u?.name || "?").slice(0, 2).toUpperCase() + )} + + ); +} + +export function AvatarStack({ + userIds, + max = 4, + size = 28, + extra = 0, +}: { + userIds: string[]; + max?: number; + size?: number; + extra?: number; +}) { + const list = userIds.slice(0, max); + const more = userIds.length + extra - list.length; + return ( + + {list.map((id) => ( + + ))} + {more > 0 && ( + + +{more} + + )} + + ); +} diff --git a/src/components/cover-image.tsx b/src/components/cover-image.tsx new file mode 100644 index 0000000..086795e --- /dev/null +++ b/src/components/cover-image.tsx @@ -0,0 +1,67 @@ +"use client"; + +import { useState, type CSSProperties } from "react"; +import { CATEGORIES } from "@/lib/mock-data"; +import type { CategoryId } from "@/lib/types"; +import { Icons } from "./icons"; + +export function CategoryTile({ + category, + size = "sm", +}: { + category: CategoryId; + size?: "sm" | "md" | "lg"; +}) { + const cat = CATEGORIES[category] || CATEGORIES.other; + const Icon = Icons[cat.icon as keyof typeof Icons]; + const iconSize = { sm: 22, md: 28, lg: 40 }[size]; + return ( +
+ +
+ ); +} + +export function CoverImage({ + src, + alt, + category, + style, +}: { + src?: string | null; + alt?: string; + category: CategoryId; + style?: CSSProperties; +}) { + const [err, setErr] = useState(false); + if (!src || err) { + return ( +
+ +
+ ); + } + return ( + // eslint-disable-next-line @next/next/no-img-element + {alt} setErr(true)} + style={{ objectFit: "cover", ...style }} + /> + ); +} diff --git a/src/components/icons.tsx b/src/components/icons.tsx new file mode 100644 index 0000000..77e0f18 --- /dev/null +++ b/src/components/icons.tsx @@ -0,0 +1,294 @@ +import type { SVGProps } from "react"; + +type IconProps = Omit, "stroke" | "fill"> & { + size?: number; + stroke?: number; + fill?: string; +}; + +const Icon = ({ + size = 20, + stroke = 1.75, + children, + fill = "none", + noStroke = false, + ...rest +}: IconProps & { children: React.ReactNode; noStroke?: boolean }) => ( + + {children} + +); + +export const Icons = { + MapPin: (p: IconProps) => ( + + + + + ), + Search: (p: IconProps) => ( + + + + + ), + Plus: (p: IconProps) => ( + + + + ), + X: (p: IconProps) => ( + + + + ), + ChevronLeft: (p: IconProps) => ( + + + + ), + ChevronRight: (p: IconProps) => ( + + + + ), + ChevronDown: (p: IconProps) => ( + + + + ), + MoreHorizontal: (p: IconProps) => ( + + + + + + ), + MoreVertical: (p: IconProps) => ( + + + + + + ), + Check: (p: IconProps) => ( + + + + ), + Star: (p: IconProps) => ( + + + + ), + StarFilled: (p: IconProps) => ( + + + + ), + Heart: (p: IconProps) => ( + + + + ), + Bookmark: (p: IconProps) => ( + + + + ), + Folder: (p: IconProps) => ( + + + + ), + Plane: (p: IconProps) => ( + + + + ), + User: (p: IconProps) => ( + + + + + ), + Users: (p: IconProps) => ( + + + + + + + ), + Utensils: (p: IconProps) => ( + + + + + + ), + Coffee: (p: IconProps) => ( + + + + + + ), + ShoppingBag: (p: IconProps) => ( + + + + + + ), + Sparkles: (p: IconProps) => ( + + + + + ), + ExternalLink: (p: IconProps) => ( + + + + + + ), + Lock: (p: IconProps) => ( + + + + + ), + Link: (p: IconProps) => ( + + + + + ), + Copy: (p: IconProps) => ( + + + + + ), + Mail: (p: IconProps) => ( + + + + + ), + Send: (p: IconProps) => ( + + + + + ), + WifiOff: (p: IconProps) => ( + + + + + + + + + + ), + Settings: (p: IconProps) => ( + + + + + ), + Edit: (p: IconProps) => ( + + + + + ), + Edit2: (p: IconProps) => ( + + + + ), + Trash: (p: IconProps) => ( + + + + + + ), + Share: (p: IconProps) => ( + + + + + + + ), + Crosshair: (p: IconProps) => ( + + + + + ), + Camera: (p: IconProps) => ( + + + + + ), + LogOut: (p: IconProps) => ( + + + + + + ), + Bell: (p: IconProps) => ( + + + + + ), + Globe: (p: IconProps) => ( + + + + + ), + Calendar: (p: IconProps) => ( + + + + + ), + Eye: (p: IconProps) => ( + + + + + ), + CircleCheck: (p: IconProps) => ( + + + + + ), +}; + +export type IconName = keyof typeof Icons; diff --git a/src/components/place-card.tsx b/src/components/place-card.tsx new file mode 100644 index 0000000..bdf854a --- /dev/null +++ b/src/components/place-card.tsx @@ -0,0 +1,206 @@ +import type { ReactNode } from "react"; +import { CATEGORIES } from "@/lib/mock-data"; +import type { Place } from "@/lib/types"; +import { Icons } from "./icons"; +import { CoverImage } from "./cover-image"; + +export function PlaceCard({ + place, + onTap, + trailing, + showCity = false, +}: { + place: Place; + onTap?: () => void; + trailing?: ReactNode; + showCity?: boolean; +}) { + const cat = CATEGORIES[place.category] || CATEGORIES.other; + const CatIcon = Icons[cat.icon as keyof typeof Icons]; + return ( + + ); +} diff --git a/src/components/rating-stars.tsx b/src/components/rating-stars.tsx new file mode 100644 index 0000000..48b584b --- /dev/null +++ b/src/components/rating-stars.tsx @@ -0,0 +1,44 @@ +"use client"; + +import { useState } from "react"; +import { Icons } from "./icons"; + +export function RatingStars({ + value = 0, + size = 16, + readOnly = true, + onChange, +}: { + value?: number; + size?: number; + readOnly?: boolean; + onChange?: (v: number) => void; +}) { + const [hover, setHover] = useState(0); + const display = hover || value; + return ( + + {[1, 2, 3, 4, 5].map((n) => { + const filled = n <= display; + const Icon = filled ? Icons.StarFilled : Icons.Star; + return ( + + ); + })} + + ); +} diff --git a/src/components/ui-primitives.tsx b/src/components/ui-primitives.tsx new file mode 100644 index 0000000..c82c8e5 --- /dev/null +++ b/src/components/ui-primitives.tsx @@ -0,0 +1,391 @@ +"use client"; + +import type { CSSProperties, ReactNode } from "react"; +import { Icons, type IconName } from "./icons"; + +// ── Header (sticky top) ───────────────────────────────── +export function Header({ + title, + subtitle, + left, + right, + big = false, + sticky = true, +}: { + title: string; + subtitle?: ReactNode; + left?: ReactNode; + right?: ReactNode; + big?: boolean; + sticky?: boolean; +}) { + if (big) { + return ( +
+
+
+

+ {title} +

+ {subtitle && ( +
+ {subtitle} +
+ )} +
+ {right && ( +
+ {right} +
+ )} +
+
+ ); + } + return ( +
+
+
+ {left} +
+
+ {title} +
+
+ {right} +
+
+
+ ); +} + +// ── Icon button (44×44, round) ───────────────────────── +export function IconBtn({ + icon, + onClick, + label, + variant = "ghost", + size = 22, + stroke = 1.75, + ...rest +}: { + icon: IconName; + onClick?: () => void; + label?: string; + variant?: "ghost" | "muted" | "glass" | "glass-dark"; + size?: number; + stroke?: number; +} & React.ButtonHTMLAttributes) { + const I = Icons[icon]; + const bg = + variant === "ghost" + ? "transparent" + : variant === "glass" + ? "rgba(255,255,255,0.85)" + : variant === "glass-dark" + ? "rgba(20,16,10,0.55)" + : "var(--muted)"; + const fg = + variant === "glass-dark" + ? "#fff" + : variant === "glass" + ? "#1a1612" + : "var(--foreground)"; + const backdrop = variant.startsWith("glass") + ? "blur(20px) saturate(180%)" + : undefined; + return ( + + ); +} + +// ── Bottom tab bar ────────────────────────────────────── +export function TabBar({ + active, + onTab, + onFab, + showFab = true, +}: { + active: string; + onTab: (id: string) => void; + onFab: () => void; + showFab?: boolean; +}) { + const tabs: { id: string; label: string; icon: IconName }[] = [ + { id: "places", label: "Địa điểm", icon: "MapPin" }, + { id: "collections", label: "Bộ sưu tập", icon: "Folder" }, + { id: "profile", label: "Hồ sơ", icon: "User" }, + ]; + return ( +
+ {tabs.map((t) => { + const I = Icons[t.icon]; + const isActive = active === t.id; + return ( + + ); + })} + {showFab && ( + + )} +
+ ); +} + +// ── Offline banner ────────────────────────────────────── +export function OfflineBanner() { + return ( +
+ + Đang xem bản offline. Một số thao tác bị tạm khóa. +
+ ); +} + +// ── Empty state ───────────────────────────────────────── +export function EmptyState({ + icon = "MapPin", + title, + body, + cta, +}: { + icon?: IconName; + title: string; + body: string; + cta?: ReactNode; +}) { + const I = Icons[icon]; + return ( +
+
+ +
+
+
+ {title} +
+
+ {body} +
+
+ {cta &&
{cta}
} +
+ ); +} + +// ── Checkbox ────────────────────────────────────────── +export function Checkbox({ + checked, + onClick, +}: { + checked?: boolean; + onClick?: () => void; +}) { + return ( + + ); +} + +// ── Menu item (in sheet) ──────────────────────────────── +export function MenuItem({ + icon, + label, + onClick, + danger = false, +}: { + icon: IconName; + label: string; + onClick?: () => void; + danger?: boolean; +}) { + const I = Icons[icon]; + return ( + + ); +} + +// ── Field label (form) ────────────────────────────────── +export function FieldLabel({ + children, + required, +}: { + children: ReactNode; + required?: boolean; +}) { + return ( +
+ {children} + {required && *} +
+ ); +} diff --git a/src/lib/app-state.ts b/src/lib/app-state.ts new file mode 100644 index 0000000..a55339f --- /dev/null +++ b/src/lib/app-state.ts @@ -0,0 +1,149 @@ +import type { Place } from "./types"; +import { PLACES } from "./mock-data"; + +export type Screen = "places" | "collections" | "profile" | "place" | "collection"; + +export type Tab = "places" | "collections" | "profile"; + +export type StackFrame = { + screen: Screen; + placeId?: string; + collectionId?: string; +}; + +export type Modal = + | { type: "add" } + | { type: "invite"; collectionId: string } + | { type: "members"; collectionId: string } + | { type: "confirmDeletePlace"; placeId: string } + | { type: "confirmDeleteCollection"; collectionId: string } + | null; + +export type AppState = { + tab: Tab; + stack: StackFrame[]; + filter: string; + search: string; + places: Place[]; + modal: Modal; + toast: string | null; + toastKey: number; + offline: boolean; +}; + +export type Action = + | { type: "NAV"; screen: Screen; placeId?: string; collectionId?: string } + | { type: "BACK" } + | { type: "TAB"; tab: Tab } + | { type: "SET_FILTER"; value: string } + | { type: "SET_SEARCH"; value: string } + | { type: "TOGGLE_VISITED"; placeId: string } + | { type: "SET_RATING"; placeId: string; value: number } + | { type: "SET_NOTES"; placeId: string; value: string } + | { type: "ADD_PLACE"; place: Place } + | { type: "DELETE_PLACE"; placeId: string } + | { type: "TOAST"; value: string } + | { type: "CLEAR_TOAST"; key: number } + | { type: "OPEN_ADD" } + | { type: "OPEN_INVITE"; collectionId: string } + | { type: "OPEN_MEMBERS"; collectionId: string } + | { type: "CONFIRM_DELETE_PLACE"; placeId: string } + | { type: "CONFIRM_DELETE_COLLECTION"; collectionId: string } + | { type: "CLOSE_MODAL" } + | { type: "SET_OFFLINE"; value: boolean }; + +export const INITIAL_STATE: AppState = { + tab: "places", + stack: [{ screen: "places" }], + filter: "all", + search: "", + places: PLACES, + modal: null, + toast: null, + toastKey: 0, + offline: false, +}; + +export function reducer(state: AppState, action: Action): AppState { + switch (action.type) { + case "NAV": { + const stack = [ + ...state.stack, + { screen: action.screen, placeId: action.placeId, collectionId: action.collectionId }, + ]; + return { ...state, stack }; + } + case "BACK": { + if (state.stack.length <= 1) return state; + return { ...state, stack: state.stack.slice(0, -1) }; + } + case "TAB": { + return { ...state, tab: action.tab, stack: [{ screen: action.tab }] }; + } + case "SET_FILTER": + return { ...state, filter: action.value }; + case "SET_SEARCH": + return { ...state, search: action.value }; + case "TOGGLE_VISITED": { + const places = state.places.map((p) => + p.id === action.placeId + ? { + ...p, + visited: !p.visited, + visited_at: !p.visited + ? new Date().toISOString().slice(0, 10) + : undefined, + } + : p, + ); + return { ...state, places }; + } + case "SET_RATING": { + const places = state.places.map((p) => + p.id === action.placeId + ? { ...p, my_rating: action.value || undefined } + : p, + ); + return { ...state, places }; + } + case "SET_NOTES": { + const places = state.places.map((p) => + p.id === action.placeId ? { ...p, my_notes: action.value } : p, + ); + return { ...state, places }; + } + case "ADD_PLACE": { + return { ...state, places: [action.place, ...state.places] }; + } + case "DELETE_PLACE": { + return { + ...state, + places: state.places.filter((p) => p.id !== action.placeId), + stack: state.stack.length > 1 ? state.stack.slice(0, -1) : state.stack, + modal: null, + }; + } + case "TOAST": + return { ...state, toast: action.value, toastKey: state.toastKey + 1 }; + case "CLEAR_TOAST": + return state.toastKey === action.key ? { ...state, toast: null } : state; + case "OPEN_ADD": + return { ...state, modal: { type: "add" } }; + case "OPEN_INVITE": + return { ...state, modal: { type: "invite", collectionId: action.collectionId } }; + case "OPEN_MEMBERS": + return { ...state, modal: { type: "members", collectionId: action.collectionId } }; + case "CONFIRM_DELETE_PLACE": + return { ...state, modal: { type: "confirmDeletePlace", placeId: action.placeId } }; + case "CONFIRM_DELETE_COLLECTION": + return { ...state, modal: { type: "confirmDeleteCollection", collectionId: action.collectionId } }; + case "CLOSE_MODAL": + return { ...state, modal: null }; + case "SET_OFFLINE": + return { ...state, offline: action.value }; + default: + return state; + } +} + +export type Dispatch = (action: Action) => void; diff --git a/src/lib/format.ts b/src/lib/format.ts new file mode 100644 index 0000000..78dd20b --- /dev/null +++ b/src/lib/format.ts @@ -0,0 +1,19 @@ +export function fmtDate(s?: string | null) { + if (!s) return ""; + const d = new Date(s); + return `${d.getDate()}/${d.getMonth() + 1}/${d.getFullYear()}`; +} + +export function fmtShortDate(s?: string | null) { + if (!s) return ""; + const d = new Date(s); + return `${d.getDate()}/${d.getMonth() + 1}`; +} + +export function tripDays(start?: string, end?: string) { + if (!start || !end) return ""; + const s = new Date(start); + const e = new Date(end); + const days = Math.round((e.getTime() - s.getTime()) / (1000 * 60 * 60 * 24)) + 1; + return `${days} ngày`; +} diff --git a/src/lib/mock-data.ts b/src/lib/mock-data.ts new file mode 100644 index 0000000..b290ef7 --- /dev/null +++ b/src/lib/mock-data.ts @@ -0,0 +1,323 @@ +import type { CategoryId, CategoryMeta, Collection, Place, User } from "./types"; + +export const ME: User = { + id: "u_me", + name: "Minh Anh", + email: "minhanh@places.app", + avatar_url: null, + initials: "MA", +}; + +export const USERS: Record = { + u_me: ME, + u_tung: { id: "u_tung", name: "Tùng Lâm", initials: "TL", avatar_url: null, color: "oklch(70% 0.12 145)" }, + u_linh: { id: "u_linh", name: "Linh Đan", initials: "LD", avatar_url: null, color: "oklch(70% 0.13 320)" }, + u_hung: { id: "u_hung", name: "Hùng Phạm", initials: "HP", avatar_url: null, color: "oklch(68% 0.12 245)" }, + u_thao: { id: "u_thao", name: "Thảo Vy", initials: "TV", avatar_url: null, color: "oklch(72% 0.11 35)" }, +}; + +export const PLACES: Place[] = [ + { + id: "p_pho_gia_truyen", + name: "Phở Gia Truyền Bát Đàn", + address: "49 Bát Đàn, Hoàn Kiếm, Hà Nội", + short_address: "49 Bát Đàn · Hoàn Kiếm", + category: "food", + tags: ["phở bò", "sáng", "cổ truyền"], + cover_url: null, + created_by: "u_me", + created_at: "2026-04-12", + my_rating: 5, + my_notes: "Đi sớm trước 8h kẻo hết. Tái nạm gầu là chân ái.", + visited: true, + visited_at: "2026-04-14", + avg_rating: 4.6, + city: "Hà Nội", + }, + { + id: "p_bun_cha_huong_lien", + name: "Bún chả Hương Liên", + address: "24 Lê Văn Hưu, Hai Bà Trưng, Hà Nội", + short_address: "24 Lê Văn Hưu · Hai Bà Trưng", + category: "food", + tags: ["bún chả", "combo Obama"], + cover_url: "https://images.unsplash.com/photo-1606851094291-6efae152bb87?w=600&q=80", + created_by: "u_tung", + created_at: "2026-04-08", + my_rating: 4, + my_notes: "", + visited: true, + visited_at: "2026-04-20", + avg_rating: 4.2, + city: "Hà Nội", + }, + { + id: "p_cafe_giang", + name: "Cà phê Giảng", + address: "39 Nguyễn Hữu Huân, Hoàn Kiếm, Hà Nội", + short_address: "39 Nguyễn Hữu Huân · Hoàn Kiếm", + category: "cafe", + tags: ["cà phê trứng", "cổ điển"], + cover_url: "https://images.unsplash.com/photo-1442975631115-c4f7b05b8a2c?w=600&q=80", + created_by: "u_me", + created_at: "2026-04-02", + my_rating: 5, + my_notes: "Tầng 2 yên hơn. Trứng đánh bông kiểu cũ.", + visited: true, + visited_at: "2026-04-05", + avg_rating: 4.7, + city: "Hà Nội", + }, + { + id: "p_the_note", + name: "The Note Coffee", + address: "64 Lương Văn Can, Hoàn Kiếm, Hà Nội", + short_address: "64 Lương Văn Can · Hoàn Kiếm", + category: "cafe", + tags: ["view hồ Gươm", "sticky notes"], + cover_url: "https://images.unsplash.com/photo-1521017432531-fbd92d768814?w=600&q=80", + created_by: "u_linh", + created_at: "2026-03-28", + my_rating: 4, + visited: false, + avg_rating: 4.1, + city: "Hà Nội", + }, + { + id: "p_cong_nha_tho", + name: "Cộng Cà Phê — Nhà Thờ", + address: "27 Nhà Thờ, Hoàn Kiếm, Hà Nội", + short_address: "27 Nhà Thờ · Hoàn Kiếm", + category: "cafe", + tags: ["cốt dừa", "concept bao cấp"], + cover_url: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=600&q=80", + created_by: "u_me", + created_at: "2026-03-15", + my_rating: 4, + visited: true, + visited_at: "2026-03-15", + avg_rating: 4.0, + city: "Hà Nội", + }, + { + id: "p_ta_hien", + name: "Bia hơi Tạ Hiện", + address: "Tạ Hiện, Hoàn Kiếm, Hà Nội", + short_address: "Tạ Hiện · Hoàn Kiếm", + category: "entertainment", + tags: ["phố tây", "tối"], + cover_url: "https://images.unsplash.com/photo-1514933651103-005eec06c04b?w=600&q=80", + created_by: "u_hung", + created_at: "2026-03-10", + visited: false, + avg_rating: 3.8, + city: "Hà Nội", + }, + { + id: "p_trang_tien", + name: "Kem Tràng Tiền", + address: "35 Tràng Tiền, Hoàn Kiếm, Hà Nội", + short_address: "35 Tràng Tiền · Hoàn Kiếm", + category: "food", + tags: ["kem", "tráng miệng"], + cover_url: "https://images.unsplash.com/photo-1497034825429-c343d7c6a68f?w=600&q=80", + created_by: "u_thao", + created_at: "2026-03-05", + my_rating: 3, + visited: true, + visited_at: "2026-03-06", + avg_rating: 3.6, + city: "Hà Nội", + }, + { + id: "p_banh_mi_huynh_hoa", + name: "Bánh mì Huỳnh Hoa", + address: "26 Lê Thị Riêng, Quận 1, TP. Hồ Chí Minh", + short_address: "26 Lê Thị Riêng · Q1", + category: "food", + tags: ["bánh mì", "pate"], + cover_url: null, + created_by: "u_me", + created_at: "2026-02-20", + my_rating: 5, + my_notes: "Béo, ngậy, đi 2 người ăn 1 ổ là vừa.", + visited: true, + visited_at: "2026-02-21", + avg_rating: 4.5, + city: "TP. HCM", + }, + { + id: "p_workshop", + name: "The Workshop Coffee", + address: "27 Ngô Đức Kế, Quận 1, TP. Hồ Chí Minh", + short_address: "27 Ngô Đức Kế · Q1", + category: "cafe", + tags: ["specialty", "không gian rộng"], + cover_url: "https://images.unsplash.com/photo-1453614512568-c4024d13c247?w=600&q=80", + created_by: "u_linh", + created_at: "2026-02-18", + my_rating: 4, + visited: false, + avg_rating: 4.3, + city: "TP. HCM", + }, + { + id: "p_pho_le", + name: "Phở Lệ", + address: "413 Nguyễn Trãi, Quận 5, TP. Hồ Chí Minh", + short_address: "413 Nguyễn Trãi · Q5", + category: "food", + tags: ["phở Nam", "mở khuya"], + cover_url: "https://images.unsplash.com/photo-1591814468924-caf88d1232e1?w=600&q=80", + created_by: "u_tung", + created_at: "2026-02-10", + visited: false, + avg_rating: 4.4, + city: "TP. HCM", + }, + { + id: "p_ben_thanh", + name: "Chợ Bến Thành", + address: "Lê Lợi, Quận 1, TP. Hồ Chí Minh", + short_address: "Lê Lợi · Q1", + category: "shopping", + tags: ["chợ", "đặc sản"], + cover_url: "https://images.unsplash.com/photo-1555529669-e69e7aa0ba9a?w=600&q=80", + created_by: "u_me", + created_at: "2026-02-01", + visited: true, + visited_at: "2026-02-02", + my_rating: 3, + avg_rating: 3.5, + city: "TP. HCM", + }, + { + id: "p_banh_mi_phuong", + name: "Bánh mì Phượng", + address: "2B Phan Châu Trinh, Hội An, Quảng Nam", + short_address: "2B Phan Châu Trinh · Hội An", + category: "food", + tags: ["bánh mì", "huyền thoại"], + cover_url: "https://images.unsplash.com/photo-1558030006-450675393462?w=600&q=80", + created_by: "u_me", + created_at: "2026-05-01", + visited: false, + avg_rating: 4.7, + city: "Hội An", + }, + { + id: "p_reaching_out", + name: "Reaching Out Tea House", + address: "131 Trần Phú, Hội An, Quảng Nam", + short_address: "131 Trần Phú · Hội An", + category: "cafe", + tags: ["trà", "yên tĩnh"], + cover_url: "https://images.unsplash.com/photo-1556679343-c7306c1976bc?w=600&q=80", + created_by: "u_linh", + created_at: "2026-05-02", + visited: false, + avg_rating: 4.8, + city: "Hội An", + }, + { + id: "p_my_quang", + name: "Mỳ Quảng Bà Mua", + address: "95 Nguyễn Tri Phương, Đà Nẵng", + short_address: "95 Nguyễn Tri Phương · Đà Nẵng", + category: "food", + tags: ["mỳ Quảng", "đặc sản"], + cover_url: "https://images.unsplash.com/photo-1569718212165-3a8278d5f624?w=600&q=80", + created_by: "u_tung", + created_at: "2026-05-03", + visited: false, + avg_rating: 4.3, + city: "Đà Nẵng", + }, + { + id: "p_hoi_an_old_town", + name: "Phố cổ Hội An", + address: "Phố cổ, Hội An, Quảng Nam", + short_address: "Phố cổ · Hội An", + category: "entertainment", + tags: ["di sản", "đèn lồng", "tối"], + cover_url: "https://images.unsplash.com/photo-1540541338287-41700207dee6?w=600&q=80", + created_by: "u_me", + created_at: "2026-05-04", + visited: false, + avg_rating: 4.9, + city: "Hội An", + }, +]; + +export const COLLECTIONS: Collection[] = [ + { + id: "c_ha_noi", + name: "Hà Nội phải đi", + type: "folder", + owner_id: "u_me", + member_count: 3, + place_count: 7, + my_role: "owner", + cover_place_ids: ["p_pho_gia_truyen", "p_cafe_giang", "p_ta_hien"], + place_ids: ["p_pho_gia_truyen", "p_bun_cha_huong_lien", "p_cafe_giang", "p_the_note", "p_cong_nha_tho", "p_ta_hien", "p_trang_tien"], + members: ["u_me", "u_tung", "u_linh"], + }, + { + id: "c_hoi_an", + name: "Hội An tháng 6", + type: "trip", + owner_id: "u_me", + trip_start: "2026-06-12", + trip_end: "2026-06-18", + member_count: 4, + place_count: 5, + my_role: "owner", + cover_place_ids: ["p_hoi_an_old_town", "p_banh_mi_phuong", "p_reaching_out"], + place_ids: ["p_banh_mi_phuong", "p_reaching_out", "p_my_quang", "p_hoi_an_old_town", "p_cong_nha_tho"], + members: ["u_me", "u_tung", "u_linh", "u_thao"], + }, + { + id: "c_cafe", + name: "Quán cà phê cuối tuần", + type: "folder", + owner_id: "u_me", + member_count: 1, + place_count: 4, + my_role: "owner", + cover_place_ids: ["p_cafe_giang", "p_workshop", "p_the_note"], + place_ids: ["p_cafe_giang", "p_workshop", "p_the_note", "p_cong_nha_tho"], + members: ["u_me"], + }, + { + id: "c_sg_short", + name: "Sài Gòn 2 ngày", + type: "trip", + owner_id: "u_hung", + trip_start: "2026-05-23", + trip_end: "2026-05-25", + member_count: 5, + place_count: 6, + my_role: "viewer", + cover_place_ids: ["p_banh_mi_huynh_hoa", "p_pho_le", "p_ben_thanh"], + place_ids: ["p_banh_mi_huynh_hoa", "p_workshop", "p_pho_le", "p_ben_thanh"], + members: ["u_hung", "u_me", "u_tung", "u_linh", "u_thao"], + }, +]; + +export const CATEGORIES: Record = { + food: { label: "Ăn uống", icon: "Utensils", color: "var(--cat-food)" }, + cafe: { label: "Cà phê", icon: "Coffee", color: "var(--cat-cafe)" }, + shopping: { label: "Mua sắm", icon: "ShoppingBag", color: "var(--cat-shopping)" }, + entertainment: { label: "Giải trí", icon: "Sparkles", color: "var(--cat-entertainment)" }, + other: { label: "Khác", icon: "MapPin", color: "var(--cat-other)" }, +}; + +export const FILTERS: { id: string; label: string }[] = [ + { id: "all", label: "Tất cả" }, + { id: "food", label: "Ăn uống" }, + { id: "cafe", label: "Cà phê" }, + { id: "shopping", label: "Mua sắm" }, + { id: "entertainment", label: "Giải trí" }, + { id: "visited", label: "Đã đến" }, + { id: "unvisited", label: "Chưa đến" }, +]; diff --git a/src/lib/types.ts b/src/lib/types.ts new file mode 100644 index 0000000..11901c2 --- /dev/null +++ b/src/lib/types.ts @@ -0,0 +1,53 @@ +export type CategoryId = "food" | "cafe" | "shopping" | "entertainment" | "other"; + +export type CollectionType = "folder" | "trip"; + +export type Role = "owner" | "editor" | "viewer"; + +export type User = { + id: string; + name: string; + email?: string; + avatar_url?: string | null; + initials: string; + color?: string; +}; + +export type Place = { + id: string; + name: string; + address: string; + short_address: string; + category: CategoryId; + tags: string[]; + cover_url?: string | null; + created_by: string; + created_at: string; + my_rating?: number; + my_notes?: string; + visited: boolean; + visited_at?: string; + avg_rating?: number; + city: string; +}; + +export type Collection = { + id: string; + name: string; + type: CollectionType; + owner_id: string; + trip_start?: string; + trip_end?: string; + member_count: number; + place_count: number; + my_role: Role; + cover_place_ids: string[]; + place_ids: string[]; + members: string[]; +}; + +export type CategoryMeta = { + label: string; + icon: string; + color: string; +}; diff --git a/src/screens/collection-detail-screen.tsx b/src/screens/collection-detail-screen.tsx new file mode 100644 index 0000000..d7a7363 --- /dev/null +++ b/src/screens/collection-detail-screen.tsx @@ -0,0 +1,367 @@ +"use client"; + +import { useState } from "react"; +import { COLLECTIONS } from "@/lib/mock-data"; +import { fmtShortDate, tripDays } from "@/lib/format"; +import type { AppState, Dispatch } from "@/lib/app-state"; +import { + Header, + IconBtn, + Checkbox, + MenuItem, + EmptyState, +} from "@/components/ui-primitives"; +import { PlaceCard } from "@/components/place-card"; +import { AvatarStack } from "@/components/avatar"; +import { Icons } from "@/components/icons"; + +export function CollectionDetailScreen({ + state, + dispatch, +}: { + state: AppState & { collectionId?: string }; + dispatch: Dispatch; +}) { + const c = COLLECTIONS.find((x) => x.id === state.collectionId); + const [vfilter, setVfilter] = useState<"all" | "visited" | "unvisited">( + "all", + ); + const [menuOpen, setMenuOpen] = useState(false); + if (!c) return null; + const places = c.place_ids + .map((id) => state.places.find((p) => p.id === id)) + .filter((p): p is NonNullable => Boolean(p)); + + const filtered = places.filter((p) => { + if (vfilter === "visited") return p.visited; + if (vfilter === "unvisited") return !p.visited; + return true; + }); + const visitedCount = places.filter((p) => p.visited).length; + const isTrip = c.type === "trip"; + const isViewer = c.my_role === "viewer"; + + return ( +
+
dispatch({ type: "BACK" })} + /> + } + right={ + setMenuOpen(true)} + /> + } + /> + +
+ {/* Hero */} +
+
+ + {isTrip ? ( + + ) : ( + + )} + {isTrip ? "Chuyến đi" : "Thư mục"} + + {isViewer && ( + + + Chỉ xem + + )} +
+
+ {c.name} +
+ + {isTrip ? ( + <> +
+ + {fmtShortDate(c.trip_start)} → {fmtShortDate(c.trip_end)} + · + {tripDays(c.trip_start, c.trip_end)} +
+
+
+ + Đã ghé + + + {visitedCount}/{places.length} + +
+
+
+
+
+ + ) : ( +
+ {places.length} địa điểm · {visitedCount} đã đến +
+ )} + +
+ + {!isViewer && ( + + )} +
+
+ + {/* Filter pills */} +
+ {( + [ + { id: "all", label: `Tất cả ${places.length}` }, + { + id: "unvisited", + label: `Chưa đến ${places.length - visitedCount}`, + }, + { id: "visited", label: `Đã đến ${visitedCount}` }, + ] as const + ).map((f) => ( + + ))} +
+ + {/* Place list */} +
+ {filtered.length === 0 ? ( + + ) : ( + filtered.map((p) => ( + + dispatch({ type: "NAV", screen: "place", placeId: p.id }) + } + trailing={ + + dispatch({ type: "TOGGLE_VISITED", placeId: p.id }) + } + /> + } + /> + )) + )} +
+
+ + {menuOpen && ( + <> +
setMenuOpen(false)} /> +
+
+
+ {!isViewer && ( + { + setMenuOpen(false); + dispatch({ type: "TOAST", value: "Sửa (demo)" }); + }} + /> + )} + {!isViewer && ( + { + setMenuOpen(false); + dispatch({ type: "OPEN_INVITE", collectionId: c.id }); + }} + /> + )} + { + setMenuOpen(false); + dispatch({ type: "OPEN_MEMBERS", collectionId: c.id }); + }} + /> + { + setMenuOpen(false); + dispatch({ type: "TOAST", value: "Đã sao chép liên kết" }); + }} + /> + {c.my_role === "owner" && ( + { + setMenuOpen(false); + dispatch({ + type: "CONFIRM_DELETE_COLLECTION", + collectionId: c.id, + }); + }} + /> + )} +
+
+ + )} +
+ ); +} diff --git a/src/screens/collections-list-screen.tsx b/src/screens/collections-list-screen.tsx new file mode 100644 index 0000000..8e31cb1 --- /dev/null +++ b/src/screens/collections-list-screen.tsx @@ -0,0 +1,248 @@ +"use client"; + +import { type CSSProperties, useState } from "react"; +import { COLLECTIONS, PLACES } from "@/lib/mock-data"; +import { fmtShortDate } from "@/lib/format"; +import type { AppState, Dispatch } from "@/lib/app-state"; +import type { Collection } from "@/lib/types"; +import { Header, IconBtn } from "@/components/ui-primitives"; +import { CoverImage } from "@/components/cover-image"; +import { AvatarStack } from "@/components/avatar"; +import { Icons } from "@/components/icons"; + +export function CollectionsListScreen({ + dispatch, +}: { + state: AppState; + dispatch: Dispatch; +}) { + const [tab, setTab] = useState<"all" | "trips" | "folders">("all"); + const filtered = COLLECTIONS.filter((c) => { + if (tab === "all") return true; + if (tab === "trips") return c.type === "trip"; + return c.type === "folder"; + }); + + return ( +
+
c.my_role !== "owner").length} được chia sẻ`} + right={ + + dispatch({ type: "TOAST", value: "Tạo bộ sưu tập mới (demo)" }) + } + /> + } + /> +
+
+ + + +
+
+ +
+
+ {filtered.map((c, i) => ( + + dispatch({ + type: "NAV", + screen: "collection", + collectionId: c.id, + }) + } + style={{ animationDelay: `${i * 30}ms` }} + /> + ))} +
+
+
+ ); +} + +function CollectionCard({ + c, + onTap, + style, +}: { + c: Collection; + onTap: () => void; + style?: CSSProperties; +}) { + const places = c.cover_place_ids + .map((id) => PLACES.find((p) => p.id === id)) + .filter((p): p is NonNullable => Boolean(p)); + const isTrip = c.type === "trip"; + return ( + + ); +} diff --git a/src/screens/place-detail-screen.tsx b/src/screens/place-detail-screen.tsx new file mode 100644 index 0000000..f48c419 --- /dev/null +++ b/src/screens/place-detail-screen.tsx @@ -0,0 +1,469 @@ +"use client"; + +import { useState } from "react"; +import { CATEGORIES, COLLECTIONS, USERS } from "@/lib/mock-data"; +import { fmtDate } from "@/lib/format"; +import type { AppState, Dispatch } from "@/lib/app-state"; +import { IconBtn, Checkbox, MenuItem } from "@/components/ui-primitives"; +import { CoverImage } from "@/components/cover-image"; +import { RatingStars } from "@/components/rating-stars"; +import { Avatar } from "@/components/avatar"; +import { Icons } from "@/components/icons"; + +export function PlaceDetailScreen({ + state, + dispatch, +}: { + state: AppState & { placeId?: string }; + dispatch: Dispatch; +}) { + const place = state.places.find((p) => p.id === state.placeId); + const [notes, setNotes] = useState(place?.my_notes || ""); + const [menuOpen, setMenuOpen] = useState(false); + if (!place) return null; + const cat = CATEGORIES[place.category]; + const CatIcon = Icons[cat.icon as keyof typeof Icons]; + const collectionsContaining = COLLECTIONS.filter((c) => + c.place_ids.includes(place.id), + ); + const creator = USERS[place.created_by]; + + return ( +
+
+ {/* Hero */} +
+ +
+
+ dispatch({ type: "BACK" })} + /> +
+ + dispatch({ type: "TOAST", value: "Đã sao chép liên kết" }) + } + /> + setMenuOpen((v) => !v)} + /> +
+
+
+
+ + {cat.label} + {place.visited && ( + <> + · + + Đã đến + + )} +
+

+ {place.name} +

+
+
+ + {/* Body */} +
+ {place.tags.length > 0 && ( +
+ {place.tags.map((t) => ( + + {t} + + ))} +
+ )} + + {/* Address row */} + + + {/* Visited + Rating */} +
+
+
+
Đã đến đây
+
+ {place.visited && place.visited_at + ? `Đánh dấu vào ${fmtDate(place.visited_at)}` + : "Bấm khi bạn đã ghé"} +
+
+ + dispatch({ type: "TOGGLE_VISITED", placeId: place.id }) + } + /> +
+
+
+
+
+ Đánh giá của bạn +
+ + dispatch({ + type: "SET_RATING", + placeId: place.id, + value: v, + }) + } + /> +
+
+ {place.my_rating ? ( + <> + Bạn{" "} + + ★{place.my_rating} + + + ) : ( + "Chưa đánh giá" + )} + {place.avg_rating && ( + <> + · + Nhóm{" "} + + ★{place.avg_rating.toFixed(1)} + + + )} +
+
+
+ + {/* Notes */} +
+
+ + Ghi chú riêng tư +
+
+