backend:
  name: gitea
  repo: SloanOps/3031023-xyz
  branch: cms
  app_id: c07dba05-eb09-48f0-8da4-6df775a13995
  api_root: https://git.sloanops.com/api/v1
  base_url: https://git.sloanops.com
  auth_endpoint: https://git.sloanops.com/login/oauth/authorize

publish_mode: simple
site_url: https://cms-3031023-xyz-www.sloanops.workers.dev
display_url: https://cms-3031023-xyz-www.sloanops.workers.dev
show_preview_links: false

media_folder: public/images/uploads
public_folder: /images/uploads

slug:
  encoding: ascii
  clean_accents: true
  sanitize_replacement: "-"

collections:
  - name: primary_faq
    label: Primary site — FAQs
    label_singular: FAQ
    description: Answers shown on the primary Happy Tails site. Draft entries stay out of the generated site.
    folder: sites/www/content/faq
    create: true
    delete: true
    extension: md
    format: frontmatter
    identifier_field: question
    slug: "{{slug}}"
    summary: "{{question}} ({{category}})"
    sortable_fields: [order, question, category, draft]
    fields:
      - label: Question
        name: question
        widget: string
        pattern: ['^.{12,180}$', 'Use 12–180 characters.']
      - label: Category
        name: category
        widget: string
        default: General
        pattern: ['^.{2,48}$', 'Use 2–48 characters.']
      - label: Display order
        name: order
        widget: number
        value_type: int
        min: 0
        max: 99
        step: 1
        default: 0
      - label: Draft (excluded from generated site)
        name: draft
        widget: boolean
        default: false
      - label: Answer
        name: body
        widget: markdown
        buttons: [bold, italic, link, heading-two, heading-three, quote, bulleted-list, numbered-list]
        editor_components: []

  - name: primary_services
    label: Primary site — Services
    label_singular: Service
    description: Service cards shown on the primary Happy Tails site.
    folder: sites/www/content/services
    create: true
    delete: true
    extension: md
    format: frontmatter
    identifier_field: title
    slug: "{{slug}}"
    summary: "{{title}} — {{price}}"
    sortable_fields: [order, title, featured, draft]
    fields:
      - label: Title
        name: title
        widget: string
        pattern: ['^.{3,80}$', 'Use 3–80 characters.']
      - label: Price label
        name: price
        widget: string
        pattern: ['^.{2,48}$', 'Use 2–48 characters.']
      - label: Included items
        name: items
        widget: list
        min: 1
        max: 8
        field:
          label: Item
          name: item
          widget: string
          pattern: ['^.{3,80}$', 'Use 3–80 characters.']
      - label: Display order
        name: order
        widget: number
        value_type: int
        min: 0
        max: 99
        step: 1
        default: 0
      - label: Featured
        name: featured
        widget: boolean
        default: false
      - label: Draft (excluded from generated site)
        name: draft
        widget: boolean
        default: false
      - label: Description
        name: body
        widget: markdown
        buttons: [bold, italic, link, heading-two, heading-three, quote, bulleted-list, numbered-list]
        editor_components: []

  - name: primary_team
    label: Primary site — Team
    label_singular: Team member
    description: Team profiles shown on the primary Happy Tails site.
    folder: sites/www/content/team
    create: true
    delete: true
    extension: md
    format: frontmatter
    identifier_field: name
    slug: "{{slug}}"
    summary: "{{name}} — {{role}}"
    sortable_fields: [order, name, role, draft]
    fields:
      - label: Name
        name: name
        widget: string
        pattern: ['^.{3,80}$', 'Use 3–80 characters.']
      - label: Role
        name: role
        widget: string
        pattern: ['^.{3,80}$', 'Use 3–80 characters.']
      - label: Approved raster image
        name: image
        widget: image
        required: false
        choose_url: false
        allow_multiple: false
        pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
        media_library:
          config:
            max_file_size: 26214400
            multiple: false
      - label: Display order
        name: order
        widget: number
        value_type: int
        min: 0
        max: 99
        step: 1
        default: 0
      - label: Draft (excluded from generated site)
        name: draft
        widget: boolean
        default: false
      - label: Biography
        name: body
        widget: markdown
        buttons: [bold, italic, link, heading-two, heading-three, quote, bulleted-list, numbered-list]
        editor_components: []

  - name: primary_page_images
    label: Primary site — Page images
    description: Optional images and required accessible descriptions for the primary site's main pages.
    files:
      - label: Home, About, Services, and Contact
        name: primary
        file: sites/www/content/page-images/primary.md
        fields:
          - label: Home hero image
            name: homeHeroImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: Home hero image description
            name: homeHeroImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']
          - label: Home story image
            name: homeStoryImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: Home story image description
            name: homeStoryImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']
          - label: About hero image
            name: aboutHeroImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: About hero image description
            name: aboutHeroImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']
          - label: About story image
            name: aboutStoryImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: About story image description
            name: aboutStoryImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']
          - label: Services hero image
            name: servicesHeroImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: Services hero image description
            name: servicesHeroImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']
          - label: Contact hero image
            name: contactHeroImage
            widget: image
            required: false
            choose_url: false
            allow_multiple: false
            pattern: ['^[A-Za-z0-9][A-Za-z0-9._-]*\.(?:jpe?g|png|webp|avif)$', 'Choose an approved JPG, PNG, WebP, or AVIF upload. SVG and general files are not allowed.']
            media_library:
              config: { max_file_size: 26214400, multiple: false }
          - label: Contact hero image description
            name: contactHeroImageAlt
            widget: string
            pattern: ['^.{8,180}$', 'Describe the image in 8–180 characters.']

  - name: journal_posts
    label: Journal — Posts
    label_singular: Journal post
    description: Markdown posts published on the Happy Tails Journal preview. Draft entries stay out of the generated site.
    folder: sites/blog/content/posts
    create: true
    delete: true
    extension: md
    format: frontmatter
    identifier_field: title
    slug: "{{slug}}"
    summary: "{{title}} — {{pubDate}}"
    sortable_fields: [pubDate, updatedDate, title, draft]
    fields:
      - label: Title
        name: title
        widget: string
        pattern: ['^.{12,100}$', 'Use 12–100 characters.']
      - label: Description
        name: description
        widget: text
        pattern: ['^[\s\S]{30,180}$', 'Use 30–180 characters.']
      - label: Publish date
        name: pubDate
        widget: datetime
        default: "{{now}}"
        date_format: YYYY-MM-DD
        time_format: false
        picker_utc: true
      - label: Updated date
        name: updatedDate
        widget: datetime
        date_format: YYYY-MM-DD
        time_format: false
        picker_utc: true
        required: false
      - label: Tags
        name: tags
        widget: list
        min: 1
        max: 4
        field:
          label: Tag
          name: tag
          widget: string
          pattern: ['^.{2,32}$', 'Use 2–32 characters.']
      - label: Draft (excluded from generated site)
        name: draft
        widget: boolean
        default: false
      - label: Body
        name: body
        widget: markdown
        buttons: [bold, italic, link, heading-two, heading-three, quote, bulleted-list, numbered-list]
        editor_components: []
