Communitygithub.com

waynesutton/convex-best-practices

Bonnes pratiques pour construire des applications Convex prêtes pour la production, couvrant l'organisation des fonctions, les motifs de requête, la validation, l'utilisation de TypeScript, la gestion des erreurs et la philosophie de conception Zen de Convex.

Qu'est-ce que convex-best-practices ?

Ce skill fournit un ensemble structuré de bonnes pratiques pour les développeurs créant des applications robustes et maintenables avec Convex. Il aborde l'organisation des fonctions de mutation et de requête, les patterns de requête efficaces (lectures, agrégations, etc.), les stratégies de validation des données, l'utilisation stricte de TypeScript pour la sécurité des types, et la gestion des erreurs avec des codes d'erreur explicites. Le skill s'appuie sur la philosophie de conception 'Zen de Convex' pour promouvoir des architectures simples, performantes et scalables. Utile pour les développeurs utilisant Convex sur n'importe quelle plateforme (Claude Code, Cursor, etc.), il offre des directives concrètes pour éviter les pièges courants, optimiser les performances des requêtes, structurer le projet de manière logique, et écrire du code résilient en production.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/waynesutton/convexskills/tree/main/skills/convex-best-practices

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait convex-best-practices ?

Bonnes pratiques pour construire des applications Convex prêtes pour la production, couvrant l'organisation des fonctions, les motifs de requête, la validation, l'utilisation de TypeScript, la gestion des erreurs et la philosophie de conception Zen de Convex.

Introduction

Ce guide rassemble les meilleures pratiques pour développer avec Convex, une plateforme de backend serverless et réactive. En suivant ces recommandations, vous créerez des applications plus robustes, maintenables et performantes.

Organisation des fonctions

  • Regroupez les fonctions par domaine fonctionnel (par exemple users.ts, posts.ts) plutôt que par type (queries.ts, mutations.ts).
  • Utilisez des fichiers séparés pour les mutations et les requêtes dans chaque domaine si le nombre de fonctions devient important.
  • Nommez les fichiers en minuscules avec des tirets (kebab-case).
  • Exportez uniquement les fonctions qui doivent être visibles publiquement (via export default pour une mutation/requête).

Motifs de requête

  • Privilégiez les requêtes avec projection pour limiter les données récupérées : utilisez le deuxième paramètre de query pour spécifier les champs nécessaires.
  • Évitez les N+1 requêtes en utilisant withIndex ou withField pour les recherches par index.
  • Utilisez des requêtes agrégées (via aggregate) uniquement lorsque c'est nécessaire, car elles peuvent être coûteuses à grande échelle.
  • Favorisez les requêtes simples et paginées avec cursor pour les listes longues.

Validation

  • Validez les entrées de toutes les mutations et requêtes exposées publiquement avec Zod (ou un schéma de validation équivalent).
  • Utilisez des transformateurs pour nettoyer les données (par exemple z.string().trim()).
  • Gérez les erreurs de validation en retournant un objet avec un code d'erreur explicite plutôt que de les propager.
  • Évitez de valider des données qui sont déjà garanties par le système (comme l'ID d'utilisateur authentifié).

Utilisation de TypeScript

  • Activez strict: true dans tsconfig.json pour bénéficier de la sécurité de type maximale.
  • Définissez des types explicites pour les arguments des fonctions et les retours.
  • Évitez le mot-clé any ; utilisez unknown si nécessaire avec une vérification de type.
  • Utilisez des types utilitaires comme Partial<T>, Pick<T>, Omit<T> pour manipuler les types sans duplication.

Gestion des erreurs

  • Utilisez des codes d'erreur HTTP standard dans les mutations/requêtes (ex. 401, 404, 409, 500).
  • Ne renvoyez jamais de messages d'erreur internes à l'utilisateur final ; loggez-les côté serveur.
  • Pour les erreurs d'authentification et d'autorisation, utilisez convexError avec un statut HTTP approprié.
  • En cas d'échec de mutation, assurez-vous que l'état de l'application reste cohérent (rollback automatique dans Convex).

Zen de Convex

La philosophie de Convex repose sur quelques principes fondamentaux :

  • Simplicité : Évitez la complexité inutile. Convex gère les mises à jour en temps réel, la synchronisation et le cache. Laissez-le faire.
  • Explicite : Soyez clair sur les dépendances (par exemple, les requêtes doivent importer explicitement les documents nécessaires).
  • Performant : Profitez des requêtes optimisées, des caches et des mises à jour incrémentales de Convex. Évitez les calculs coûteux côté client.
  • Maintenable : Organisez le code de manière logique, documentez les choix importants et testez les mutations critiques.

Ressources supplémentaires

Individual skills in this repo

This repo contains 13 individual skills — each has its own dedicated page.

waynesutton/avoid-feature-creep

Prevent feature creep when building software, apps, and AI-powered products. Use this skill when planning features, reviewing scope, building MVPs, managing backlogs, or when a user says "just one more feature." Helps developers and AI agents stay focused, ship faster, and avoid bloated products.

waynesutton/convex

Umbrella skill for all Convex development patterns. Routes to specific skills like convex-functions, convex-realtime, convex-agents, etc.

waynesutton/convex-agents

Building AI agents with the Convex Agent component including thread management, tool integration, streaming responses, RAG patterns, and workflow orchestration

waynesutton/convex-component-authoring

How to create, structure, and publish self-contained Convex components with proper isolation, exports, and dependency management

waynesutton/convex-cron-jobs

Scheduled function patterns for background tasks including interval scheduling, cron expressions, job monitoring, retry strategies, and best practices for long-running tasks

waynesutton/convex-file-storage

Complete file handling including upload flows, serving files via URL, storing generated files from actions, deletion, and accessing file metadata from system tables

waynesutton/convex-functions

Writing queries, mutations, actions, and HTTP actions with proper argument validation, error handling, internal functions, and runtime considerations

waynesutton/convex-http-actions

External API integration and webhook handling including HTTP endpoint routing, request/response handling, authentication, CORS configuration, and webhook signature validation

waynesutton/convex-migrations

Schema migration strategies for evolving applications including adding new fields, backfilling data, removing deprecated fields, index migrations, and zero-downtime migration patterns

waynesutton/convex-realtime

Patterns for building reactive apps including subscription management, optimistic updates, cache behavior, and paginated queries with cursor-based loading

waynesutton/convex-schema-validator

Defining and validating database schemas with proper typing, index configuration, optional fields, unions, and migration strategies for schema changes

waynesutton/convex-security-audit

Deep security review patterns for authorization logic, data access boundaries, action isolation, rate limiting, and protecting sensitive operations

waynesutton/convex-security-check

Quick security audit checklist covering authentication, function exposure, argument validation, row-level access control, and environment variable handling

Skills associés