The platform uses two separate SharePoint sites accessed through the Microsoft Graph API:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/devRepro/reprodisseny/llms.txt
Use this file to discover all available pages before exploring further.
- CMS site — source of truth for categories, products, and page content. Read at build time by the sync script.
- CRM site — stores price request submissions, comments, and attachment metadata. Written at runtime by Nitro server routes.
Both sites require an Azure App registration with the
Sites.ReadWrite.All and Files.ReadWrite.All Microsoft Graph application permissions granted by a tenant administrator.CMS site
The CMS site holds three SharePoint Lists:| List | Env var | Purpose |
|---|---|---|
| Categories | CMS_CATEGORIES_LIST_ID | Product category tree, slugs, SEO fields, tabs |
| Products | CMS_PRODUCTS_LIST_ID | Individual product records with pricing and attributes |
| Assets | CMS_ASSETS_LIST_ID | Media asset metadata |
Sync script
scripts/sync-sharepoint-to-cms.mjs fetches all published items from the CMS Lists and writes two files:
cms/catalog.json— full catalog with categories and productscms/routes.json— flat list of URL paths for Nuxt pre-rendering
npm run build and npm run generate. For local development, run it once after cloning and again whenever SharePoint content changes.
The script uses @azure/identity ClientSecretCredential and @microsoft/microsoft-graph-client to authenticate:
$top=999 and retries throttled requests (HTTP 429/503) with exponential backoff up to 6 attempts.
Category data shape
Each category incms/catalog.json includes:
CRM site
The CRM site stores operational data created at runtime:| List | Env var | Purpose |
|---|---|---|
| Price requests | CRM_PRICE_REQUESTS_LIST_ID | One item per quote submission |
| Comments | CRM_PRICE_REQUESTS_COMMENTS_LIST_ID | Internal notes on requests |
| Attachments library | CRM_ATTACHMENTS_LIBRARY_LIST_ID | Document library for uploaded files |
createPriceRequest service writes to the price requests list and optionally uploads a file to the attachments Drive via Graph.