strapi.md 3.3 KB


name: strapi category: cms public: false database: required hosting_hints:

  • vps
  • docker
  • render
  • railway
  • strapi-cloud audit_stack:
  • analyze
  • code-clean
  • cso
  • perf
  • doc plugins: context7: yes ui-ux-pro-max: no gstack: no ---

Strapi (headless CMS, Node.js)

CMS headless Node.js, API REST + GraphQL. Admin panel React intégré. Consomé par frontend séparé (Next/Nuxt/Astro/React/etc.).

Detection signals

Strong signals (×3)

  • DEP: package.json contient "@strapi/strapi" OR "strapi"
  • FILE: config/server.js OR config/server.ts
  • FILE: config/admin.js OR config/admin.ts
  • FILE: config/database.js OR config/database.ts

Medium signals (×2)

  • DIR: src/api/
  • DIR: src/components/
  • DIR: config/env/
  • FILE: .strapi-updater.json
  • DEP: @strapi/plugin-*

Weak signals (×1)

  • DIR: public/uploads/
  • FILE: database/migrations/
  • FILE: favicon.png (admin panel favicon)
  • DEP: "sqlite3" OR "pg" OR "mysql2" (DB adapter)

Implications

  • Hébergement : VPS, Docker (Render, Railway, Fly), Strapi Cloud
  • Base de données : REQUISE — SQLite (dev), PostgreSQL/MySQL (prod)
  • SEO/GEO : N/A (admin panel non indexé) — mais le frontend qui consomme peut être public
  • Surface sécurité : GRANDE — API publique, permissions par type de contenu, tokens API
  • UI/UX : admin panel built-in (rarement customisé)

Typical pain points

  • Permissions roles & users mal configurées (Public peut lire/écrire par défaut)
  • API tokens permanents (non expirants) en dur dans frontend
  • JWT_SECRET en dur ou faible
  • ADMIN_JWT_SECRET non rotaté
  • SQLite en production (verrouillage, pas scalable)
  • uploads/ non délégué à CDN/S3 → storage serveur plein
  • Content types modifiés en prod sans migration (données perdues)
  • Plugins marketplace obsolètes
  • Pas de CI (schema.json versionné mais pas de tests API)
  • Strapi v3 → v4 migration non effectuée (v3 EOL)
  • Webhook secrets en dur
  • CORS config mal restrictive
  • Rate limiting absent (DDOS admin trivial)
  • config/database.js committé avec credentials

Interview questions (adaptive)

En plus du set minimum business :

  • Version Strapi ? (v3 / v4 / v5)
  • Base de données prod : PostgreSQL / MySQL / SQLite (warn si SQLite) ?
  • Plugins marketplace utilisés ? (top 5)
  • API consommateurs : frontend(s) propre(s) ? tierces parties ?
  • Tokens API : permanents ou revocables ?
  • Content-types count et profondeur (nested components) ?
  • Uploads : local / S3 / Cloudinary / autre ?
  • Déploiement : VPS / Docker / Strapi Cloud ?
  • Webhooks configurés ? (revalidate frontend après changement content)
  • GraphQL activé ?
  • Rate limiting + CORS correctement configurés ?
  • Environnement staging ?

Plugin recommendations

  • context7 : ON — Strapi évolue (v4 → v5 breaking changes fréquents)
  • ui-ux-pro-max : OFF (admin panel built-in, rarement customisé)
  • gstack : OFF

Example project layout

package.json
config/
  server.ts
  admin.ts
  database.ts
  plugins.ts
  env/
    production/
      database.ts
src/
  api/
    article/
      controllers/
      routes/
      services/
      content-types/
        article/
          schema.json
  components/
    seo/
      metadata.json
  extensions/
public/
  uploads/
database/
  migrations/