diff --git a/README.md b/README.md index 82adc213..96a4c516 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Built to work across modern frontend, backend, mobile, cloud, and media stacks. - **Languages & Runtimes:** TypeScript, Node.js, Go, Bun, Deno, Dart - **Backend & APIs:** Express, Hono, NestJS, Spring Boot - **Mobile & Desktop:** Expo, React Native, Flutter, SwiftUI, Android, Kotlin Multiplatform, Tauri, Electron -- **Data & Storage:** Supabase, Neon, Prisma, Drizzle ORM, Zod, React Hook Form +- **Data & Storage:** Supabase, Neon, Prisma, Drizzle ORM, Zod, React Hook Form, SWR - **Auth & Billing:** Better Auth, Clerk, Stripe - **Testing:** Vitest, Playwright - **Cloud & Infrastructure:** Vercel, Vercel AI SDK, Cloudflare, Durable Objects, Cloudflare Agents, Cloudflare AI, AWS, Azure, Terraform diff --git a/packages/autoskills/README.md b/packages/autoskills/README.md index 6fc63020..7303653b 100644 --- a/packages/autoskills/README.md +++ b/packages/autoskills/README.md @@ -111,6 +111,7 @@ If `claude-code` is auto-detected or passed with `-a`, `autoskills` writes a `CL | Supabase | `@supabase/supabase-js`, `@supabase/ssr` | | Zod | `zod` package | | React Hook Form | `react-hook-form` package | +| SWR | `swr` package | | Neon Postgres | `@neondatabase/serverless` | | Prisma | `prisma`, `@prisma/client` | | Drizzle ORM | `drizzle-orm`, `drizzle-kit` | diff --git a/packages/autoskills/skills-map.ts b/packages/autoskills/skills-map.ts index 061c91e7..c09b1db1 100644 --- a/packages/autoskills/skills-map.ts +++ b/packages/autoskills/skills-map.ts @@ -157,6 +157,14 @@ export const SKILLS_MAP: Technology[] = [ }, skills: ["pproenca/dot-skills/react-hook-form"], }, + { + id: "swr", + name: "SWR", + detect: { + packages: ["swr"], + }, + skills: ["https://github.com/vercel-labs/vercel-plugin#swr"], + }, { id: "zod", name: "Zod", diff --git a/packages/autoskills/tests/detect.test.ts b/packages/autoskills/tests/detect.test.ts index b67be9b3..4cb64ae8 100644 --- a/packages/autoskills/tests/detect.test.ts +++ b/packages/autoskills/tests/detect.test.ts @@ -260,6 +260,14 @@ describe("detectTechnologies", () => { ok(combos.some((c) => c.id === "react-hook-form-zod")); }); + it("detects SWR from dependencies", () => { + writePackageJson(tmp.path, { dependencies: { swr: "^2.3.4" } }); + const { detected } = detectTechnologies(tmp.path); + const swr = detected.find((t) => t.id === "swr"); + ok(swr); + ok(swr.skills.includes("https://github.com/vercel-labs/vercel-plugin#swr")); + }); + it("detects Go from go.mod", () => { writePackageJson(tmp.path); writeFile(tmp.path, "go.mod", "module example.com/test\n\ngo 1.24.0\n"); diff --git a/src/icons/swr.svg b/src/icons/swr.svg new file mode 100644 index 00000000..cafbd257 --- /dev/null +++ b/src/icons/swr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/pages/index.astro b/src/pages/index.astro index fa92ae0a..ad9a4ac7 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -81,6 +81,7 @@ const popularityOrder = [ 'typescript', 'zod', 'react-hook-form', + 'swr', 'react', 'nextjs', 'node',