convex-quickstart

작성자: get-convex

앱에 Convex를 생성하거나 추가합니다. 새 Convex 프로젝트, npm create convex@latest, 프론트엔드 설정, 환경 변수, 또는 첫 npx convex dev 실행에 사용합니다.

npx skills add https://github.com/get-convex/agent-skills --skill convex-quickstart

Quickstart: a barebones Convex template, running

Stand up a barebones Next.js + Convex template from the idea, locally, with an anonymous dev deployment. Minimal by design: local dev servers, no publish step, no pre-baked auth.

Workflow

  1. Run recipe quickstart-recipe@^2 with {idea, template} (the pack fetches + caches it; pinned offline fallback). It creates the project, installs deps, starts the backend (anonymous) and the web dev server.
  2. When it prints the dev URL, open it for the user.
  3. Present a short plan and CONFIRM before building features beyond the template.

Rules

  • Never re-run the recipe if it already reported success.
  • Delegate any code under convex/ to the convex-expert capability.
  • Don't add Postgres/Redis/Express — use Convex primitives.
  • Don't add hosting/publish or pre-baked auth here — keep the template minimal unless the user asks for more.
  • DEGRADATION RULE — if the scaffold cannot run (non-interactive session, no network, a sandboxed temp dir, or the user just wants code, not an app): skip the recipe and write a standard Convex project directly. ALL backend code goes under convex/ (schema.ts, functions) — NEVER at the project root; Convex functions only run from the convex/ directory. Write ZERO scaffold/documentation files (no START_HERE.md, ARCHITECTURE.md, MANIFEST.txt, README walls) unless explicitly asked. "Build me a backend" means code, not ceremony.
  • Data access + imports — before writing any convex/*.ts: never an unbounded .collect() on a table that can grow — use .withIndex(...) and .paginate(...)/.take(n). Use an index, not .filter(), for anything that would be a SQL WHERE. .withIndex(...) callbacks only have eq/gt/gte/lt/lte — there is no .range(...) method. Imports: query/mutation/action/internalQuery/internalMutation/internalAction come from ./_generated/server; api/internal come from ./_generated/api; NEVER import from convex/server in application code. v.literal("exact value") for fixed string/enum members, not a bare string. "use node" only at the top of action-only modules — never in a file that also exports a query or mutation. Never import a Node builtin (crypto/fs/path/http/child_process/os, with or without the node: prefix) into a file lacking "use node" — including http.ts route handlers; use Web Crypto (crypto.subtle) instead of importing crypto where possible.
  • Reserved names — never export const <jsReservedWord> = ... (e.g. delete, new, class, function, return) as a query/mutation/action export name; esbuild fails to parse it. Never a table or index name starting with _ (e.g. _migrations: defineTable(...)) — _ is reserved and errors at push as TableNameReserved/IndexNameReserved.
  • HTTP routes — httpRouter has no Express-style :param segments (path: "/users/:id" only matches that literal string and is dead code); use pathPrefix and parse the trailing segment yourself. Every http.route({...}) handler: must be wrapped in httpAction(...) from ./_generated/server — a bare async (ctx, request) => {...} type-checks but isn't a valid HTTP action.
  • ctx.runQuery/ctx.runMutation/ctx.runAction need a codegen'd function reference (api.foo.bar/internal.foo.bar), never a raw imported module member (import * as queries from "./queries"; ctx.runQuery(queries.getX, ...) compiles but fails at runtime).
  • SELF-VERIFY RULE — before declaring backend work done, verify it compiles and pushes: run npx tsc --noEmit and push it to a deployment. Prefer the project's existing one; otherwise npx convex dev --once when npx convex whoami succeeds, and CONVEX_AGENT_MODE=anonymous npx convex dev --once ONLY when it does not. Forcing anonymous on a signed-in user rebinds .env.local and costs them the persistent, publishable cloud deployment they expect. Fix every error it reports before finishing — one verify round catches the wrong-relative-import / duplicate-symbol / unbalanced-paren class that otherwise breaks the deploy.

get-convex의 다른 스킬

convex-performance-audit
get-convex
Convex 성능을 읽기, 구독, 쓰기 경합 및 함수 제한 측면에서 감사합니다. 느린 기능, 인사이트 발견, OCC 충돌 또는 읽기 증폭에 사용하세요.
developmentdatabasedata-analysis
convex
get-convex
일반적인 Convex 요청을 올바른 프로젝트 스킬로 라우팅합니다. 사용자가 어떤 Convex 스킬을 사용할지 묻거나 불완전하게 지정된 Convex 앱 작업을 제공할 때 사용하세요.
developmentdatabase
convex-setup-auth
get-convex
Convex 인증, 신원 매핑 및 접근 제어를 설정합니다. Convex 앱에서 로그인, 인증 제공자, 사용자 테이블, 보호된 함수 또는 역할에 사용하세요.
developmentdatabaseapi
convex-migration-helper
get-convex
Convex 스키마 및 데이터 마이그레이션을 widen-migrate-narrow와 @convex-dev/migrations로 계획합니다. 스키마 변경, 백필, 테이블 재구성 또는 무중단 롤아웃에 사용하세요.
developmentdatabase
convex-create-component
get-convex
재사용 가능한 Convex 컴포넌트를 구축하며, 격리된 테이블과 앱 지향 API를 제공합니다. 새 컴포넌트, 재사용 가능한 백엔드 모듈, 통합 또는 컴포넌트 경계 작업에 사용하세요.
developmentdatabase
convex-migrate
get-convex
배포된 Convex 앱에서 @convex-dev/migrations를 사용하여 스키마를 마이그레이션하고 데이터를 백필합니다.
developmentdatabase
convex-optimize
get-convex
기존 Convex 앱을 감사하고 최적화합니다: 보안, 확장, 업그레이드, 관찰 가능성.
convex-env
get-convex
앱을 위한 Convex 배포 환경 변수/시크릿을 설정하고 연결합니다.