# Configuration de Sveltia CMS pour le blog Scaaze (ex-Rozawa). Les articles vivent dans le dépôt de contenu
# lde-cloud/rozawa-blog, aux mêmes chemins que dans le dépôt du site. Les champs suivent le schéma
# de src/content.config.ts du site : les modifier ensemble (et scripts/blog-frontmatter.mjs).
backend:
  name: github
  repo: lde-cloud/rozawa-blog
  branch: main
  # Relais de connexion « Sveltia CMS Authenticator » (docs/blog/README.md, mise en place).
  base_url: https://sveltia-cms-auth.louisdegot98-e35.workers.dev

locale: fr
display_url: https://scaaze.com

media_folder: /src/assets/blog
public_folder: /src/assets/blog

# Images déposées : nom en minuscules et tirets, 15 Mo au plus. Aucune conversion ici : la
# synchronisation du site part de l'original (recadrage 16:10, réduction à 1 600 px, réencodage).
media_libraries:
  default:
    config:
      max_file_size: 15728640
      slugify_filename: true

collections:
  - name: blog
    label: Articles du blog
    label_singular: Article
    folder: src/content/blog
    extension: mdx
    format: frontmatter
    create: true
    delete: false
    slug: '{{fields.slug}}'
    identifier_field: title
    summary: '{{title}}'
    sortable_fields: [pubDate, title]
    # Images de l'article dans son propre dossier. Le site remet ces chemins en forme relative.
    media_folder: /src/assets/blog/{{slug}}
    public_folder: /src/assets/blog/{{slug}}
    editor:
      preview: false
    fields:
      - name: title
        label: Titre de l'article (H1)
        hint: Mot-clé principal en tête. Sans tiret long.
        widget: string
        minlength: 10
        maxlength: 120
        pattern: ['^[^—–]+$', 'Sans tiret long ni demi-cadratin.']
      - name: metaTitle
        label: Titre pour Google
        hint: 50 à 60 caractères visés, 70 au plus.
        widget: string
        minlength: 10
        maxlength: 70
        pattern: ['^[^—–]+$', 'Sans tiret long ni demi-cadratin.']
      - name: description
        label: Description pour Google
        hint: 150 à 160 caractères, répond à la requête.
        widget: text
        minlength: 50
        maxlength: 200
        pattern: ['^[^—–]+$', 'Sans tiret long ni demi-cadratin.']
      - name: excerpt
        label: Extrait affiché sur les cartes
        hint: 110 à 170 caractères, deux lignes au plus.
        widget: text
        minlength: 60
        maxlength: 200
        pattern: ['^[^—–]+$', 'Sans tiret long ni demi-cadratin.']
      - name: lead
        label: Chapô
        hint: Accroche puis réponse à la requête. Texte brut, sans lien, 70 à 110 mots.
        widget: text
        minlength: 100
      - name: slug
        label: Adresse de l'article
        hint: Minuscules, chiffres et tirets. Ne change plus après publication.
        widget: string
        pattern: ['^[a-z0-9]+(?:-[a-z0-9]+)*$', 'Minuscules, chiffres et tirets uniquement.']
      - name: pubDate
        label: Date de publication
        widget: datetime
        format: YYYY-MM-DD
        date_format: DD/MM/YYYY
        time_format: false
        picker_utc: true
      - name: updatedDate
        label: Date de mise à jour
        hint: À renseigner seulement après une vraie modification du contenu.
        widget: datetime
        format: YYYY-MM-DD
        date_format: DD/MM/YYYY
        time_format: false
        picker_utc: true
        required: false
        default: ''
      - name: author
        label: Auteur
        widget: select
        options: ['Louis Dégot', 'Sary Audeh']
        default: 'Louis Dégot'
      - name: category
        label: Catégorie
        widget: select
        options:
          - { label: Agents IA, value: agents-ia }
          - { label: Cas d'usages, value: cas-d-usages }
          - { label: Formations IA, value: formations-ia }
          - { label: Outils IA, value: outils-ia }
          - { label: Financements, value: financements }
          - { label: Actualités, value: actualites }
      - name: cover
        label: Image de couverture
        hint: Format 16:10, 1 600 pixels de large.
        widget: image
        choose_url: false
      - name: coverAlt
        label: Texte alternatif de la couverture
        hint: Description factuelle de la photo.
        widget: string
      - name: featured
        label: À la une
        hint: Un seul article à la fois.
        widget: boolean
        default: false
        required: false
      - name: tocLabels
        label: Libellés du sommaire
        hint: Un libellé court par titre de niveau 2, dans l'ordre, 30 caractères au plus.
        widget: list
        required: false
        field: { name: label, label: Libellé, widget: string }
      - name: cta
        label: Bandeau final
        widget: object
        fields:
          - { name: title, label: Titre du bandeau, hint: 60 caractères au plus., widget: string, maxlength: 60 }
          - { name: text, label: Texte du bandeau, hint: Une ou deux phrases, limitées aux faits de l'offre., widget: text }
      - name: primaryKeyword
        label: Requête principale
        widget: string
      - name: keywords
        label: Requêtes secondaires
        widget: list
        required: false
        field: { name: keyword, label: Requête, widget: string }
      - name: draft
        label: Brouillon
        hint: Coché, l'article n'est pas publié. Décocher pour le mettre en ligne.
        widget: boolean
        default: true
        required: false
      - name: body
        label: Corps de l'article
        hint: Markdown et composants de graphiques. Coller le texte produit avec Claude.
        widget: markdown
        modes: [raw]
