@crownpeak/dqm-react-component-dev-mcp 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/data/.glfrc.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "inputs": ["./package.json", "./mcp-server/package.json"],
2
+ "inputs": ["./package.json", "./mcp-server/package.json", "./website/package.json"],
3
3
  "output": "./THIRD_PARTY_LICENSES.txt",
4
4
  "lineEnding": "lf",
5
5
  "omitVersions": false,
package/data/CHANGELOG.md CHANGED
@@ -5,6 +5,56 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.0] - 2026-01-09
9
+
10
+ ### Added
11
+ - **GPT-5.2 Support**: Default AI model upgraded from `gpt-4.1-mini` to `gpt-5.2`
12
+ - 1M token context window enables larger translation batches and fewer API calls
13
+ - New `reasoning_effort` parameter (`low`/`medium`/`high`) for GPT-5 models
14
+ - Automatic API adaptation for GPT-5 vs GPT-4 differences:
15
+ - Token parameter: `max_completion_tokens` (GPT-5) vs `max_tokens` (GPT-4)
16
+ - Structured output: `json_schema` (GPT-5) vs `json_object` (GPT-4)
17
+ - System role: `developer` (GPT-5) vs `system` (GPT-4)
18
+ - 50,000 token context budget (vs 12,000 for GPT-4o)
19
+ - **Model Capabilities Module**: New `src/utils/modelCapabilities.ts` for centralized model detection
20
+ - `isGPT5Model()`, `isReasoningModel()` utility functions
21
+ - `getModelCapabilities()` returns full capability info per model
22
+ - `buildTokenParams()`, `buildReasoningParams()`, `getSystemRole()` helpers
23
+ - **Reasoning Effort UI**: New setting in AI Settings dialog (only visible for GPT-5 models)
24
+ - Persisted to `localStorage` as `dqm_reasoning_effort`
25
+ - Full i18n support (EN/DE/ES)
26
+ - **MCP Server Feature**: Added MCP Server section to website features
27
+ - New feature card with link to documentation
28
+ - Translations for all 3 languages
29
+
30
+ ### Changed
31
+ - **AI Settings Dialog**: GPT-5.2 now shown with "NEW" badge in model selector
32
+ - **AI Summary Card**: Improved layout with column flex direction for better readability
33
+ - **Website Hero Badge**: Updated from version number to "GPT-5.2 Powered AI"
34
+ - **Website MSW Provider**: Refactored to `useMSW()` hook for better lifecycle control
35
+ - MSW now starts only when sidebar opens
36
+ - MSW resets completely when sidebar closes
37
+ - **Footer Links**: Updated Crownpeak DQM Platform URL to German FirstSpirit product page
38
+
39
+ ### Fixed
40
+ - **Translation Feature Descriptions**: Updated to reflect GPT-5.2 capabilities
41
+ - **Website Feature Cards**: Added MCP Server feature with external documentation link
42
+ - **Accessibility**: Added `aria-label` to MCP Server feature link
43
+
44
+ ## [1.2.4] - 2026-01-08
45
+
46
+ ### Added
47
+ - **Marketing Website**: New Next.js marketing/documentation website deployed to GitHub Pages
48
+ - Hero section with animated feature highlights
49
+ - Interactive demo section with live sidebar preview
50
+ - Integration section with code examples and copy functionality
51
+ - Multi-language support (English, German, Spanish) using react-i18next
52
+ - Framer Motion animations throughout
53
+ - Built with Tailwind CSS and shadcn/ui components
54
+ - WCAG AA accessibility compliant (proper aria-labels, 4.5:1+ contrast ratios)
55
+ - Static export for GitHub Pages hosting
56
+ - **AI Agent Documentation**: Added comprehensive Website section to `.github/copilot-instructions.md`
57
+
8
58
  ## [1.2.2] - 2026-01-08
9
59
 
10
60
  ### Fixed
package/data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Crownpeak Technology GmbH
3
+ Copyright (c) 2025-2026 Crownpeak Technology GmbH
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -69,10 +69,46 @@ flowchart TD
69
69
  ### OpenAI Backend
70
70
 
71
71
  **Models Supported**:
72
- - `gpt-4o-mini` (Recommended, fast & cheap)
73
- - `gpt-4o` (Higher quality)
74
- - `gpt-4.1-mini`
75
- - `gpt-4.1`
72
+
73
+ | Model | Context Window | Recommended For |
74
+ |-------|----------------|-----------------|
75
+ | `gpt-5.2` | 1M tokens | 🌟 Default – Best performance & quality |
76
+ | `gpt-4.1-mini` | 1M tokens | Cost-effective alternative |
77
+ | `gpt-4.1` | 1M tokens | High quality GPT-4 |
78
+ | `gpt-4o-mini` | 128K tokens | Fast & cheap (legacy) |
79
+ | `gpt-4o` | 128K tokens | Higher quality (legacy) |
80
+
81
+ > **🚀 GPT-5.2** is the new default model with 1M token context window, enabling much larger translation batches and better quality.
82
+
83
+ #### GPT-5 vs GPT-4 Differences
84
+
85
+ The component automatically adapts to API differences between GPT-5 and GPT-4 models:
86
+
87
+ | Feature | GPT-5.x | GPT-4.x |
88
+ |---------|---------|---------|
89
+ | Token Parameter | `max_completion_tokens` | `max_tokens` |
90
+ | Structured Output | `json_schema` | `json_object` |
91
+ | System Role | `developer` | `system` |
92
+ | Reasoning Effort | ✅ Supported | ❌ Not available |
93
+ | Context Budget | 50,000 tokens | 12,000 tokens |
94
+
95
+ #### Reasoning Effort (GPT-5 Only)
96
+
97
+ GPT-5 models support a **Reasoning Effort** parameter that controls how deeply the model analyzes translations:
98
+
99
+ | Level | Description | Best For |
100
+ |-------|-------------|----------|
101
+ | `low` | Fast, straightforward translations | Simple content, high volume |
102
+ | `medium` | Balanced analysis (default) | Most use cases |
103
+ | `high` | Deep reasoning, highest accuracy | Technical content, quality-critical |
104
+
105
+ Configure via the **AI Settings** dialog or localStorage:
106
+
107
+ ```typescript
108
+ localStorage.setItem('dqm_reasoning_effort', 'medium'); // 'low' | 'medium' | 'high'
109
+ ```
110
+
111
+ > **Note:** Reasoning Effort is only visible in the UI when a GPT-5 model is selected.
76
112
 
77
113
  **Setup**:
78
114
 
@@ -284,6 +320,8 @@ graph TD
284
320
  - **Tiny**: 20+ checkpoints → Top 5 most critical only
285
321
  - **Fail**: > 50 checkpoints → Skip summary (too large)
286
322
 
323
+ > **💡 GPT-5 Advantage**: With GPT-5.2's 1M token context window, the component uses a 50,000 token context budget (vs 12,000 for GPT-4o), enabling larger batches and fewer API calls.
324
+
287
325
  **Prompt Template**:
288
326
 
289
327
  ```typescript
@@ -397,7 +435,8 @@ The AI features store configuration in `localStorage`:
397
435
  | `dqm_translate_results_mode` | `'fast' \| 'full'` | `'fast'` | Translation mode |
398
436
  | `dqm_ai_summary_enabled` | `'true' \| 'false'` | `'true'` | Summary toggle |
399
437
  | `dqm_openai_apiKey` | `string` | `null` | OpenAI API key |
400
- | `dqm_openai_model` | `string` | `'gpt-4.1-mini'` | OpenAI model name |
438
+ | `dqm_openai_model` | `string` | `'gpt-5.2'` | OpenAI model name |
439
+ | `dqm_reasoning_effort` | `'low' \| 'medium' \| 'high'` | `'medium'` | GPT-5 reasoning depth |
401
440
  | `dqm_openai_baseUrl` | `string` | `'https://api.openai.com/v1'` | OpenAI base URL |
402
441
 
403
442
  **Access Pattern**:
@@ -439,6 +478,24 @@ setLocalStorageItem('dqm_openai_apiKey', 'sk-...');
439
478
 
440
479
  ### Cost Estimation (OpenAI)
441
480
 
481
+ #### GPT-5.2 (Default)
482
+
483
+ Based on `gpt-5.2` pricing (~$0.10/1M input tokens, ~$0.40/1M output tokens):
484
+
485
+ | Operation | Average Tokens | Cost per Call |
486
+ |-----------|----------------|---------------|
487
+ | Translate 1 checkpoint | ~200 input, ~100 output | ~$0.00006 |
488
+ | Translate 50 checkpoints | ~10k input, ~5k output | ~$0.003 |
489
+ | Summary (5 issues) | ~500 input, ~200 output | ~$0.00013 |
490
+ | Summary (20 issues) | ~2k input, ~500 output | ~$0.0004 |
491
+
492
+ **Monthly costs** (assuming 1000 analyses/month with 20 checkpoints each):
493
+ - Translation only: ~$3.00/month
494
+ - Summary only: ~$0.40/month
495
+ - Both: ~$3.40/month
496
+
497
+ #### GPT-4o-mini (Legacy)
498
+
442
499
  Based on `gpt-4o-mini` pricing (~$0.15/1M input tokens, ~$0.60/1M output tokens):
443
500
 
444
501
  | Operation | Average Tokens | Cost per Call |
@@ -334,7 +334,7 @@ function MyComponent() {
334
334
  const engine = useAIEngine({
335
335
  enabled: true,
336
336
  openAiApiKey: 'sk-...',
337
- openAiModel: 'gpt-4.1-mini', // Optional, default: 'gpt-4.1-mini'
337
+ openAiModel: 'gpt-5.2', // Optional, default: 'gpt-5.2'
338
338
  openAiBaseUrl: 'https://api.openai.com/v1', // Optional
339
339
  });
340
340
  }
@@ -346,7 +346,7 @@ function MyComponent() {
346
346
  |----------|------|----------|-------------|
347
347
  | `enabled` | `boolean` | ✅ | Whether AI features are enabled |
348
348
  | `openAiApiKey` | `string` | ❌ | OpenAI API key |
349
- | `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-4.1-mini') |
349
+ | `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-5.2') |
350
350
  | `openAiBaseUrl` | `string` | ❌ | OpenAI base URL (default: 'https://api.openai.com/v1') |
351
351
 
352
352
  ##### Returns (UseAIEngineReturn)
@@ -386,7 +386,7 @@ function MyComponent() {
386
386
  cacheManager,
387
387
  originalData: analysisData,
388
388
  targetLang: 'de',
389
- modelId: 'gpt-4.1-mini',
389
+ modelId: 'gpt-5.2',
390
390
  enabled: true,
391
391
  mode: 'fast',
392
392
  computeBudgetMs: 15000,
@@ -466,7 +466,7 @@ function MyComponent() {
466
466
  engine,
467
467
  originalData: analysisData,
468
468
  targetLang: 'de',
469
- modelId: 'gpt-4.1-mini',
469
+ modelId: 'gpt-5.2',
470
470
  enabled: true,
471
471
  cache: cacheManager.cache,
472
472
  });
@@ -988,7 +988,7 @@ The DQM component uses localStorage for persisting user preferences and authenti
988
988
  | Key | Type | Description |
989
989
  |-----|------|-------------|
990
990
  | `dqm_openai_apiKey` | `string` | OpenAI API key for translation/summary |
991
- | `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-4.1-mini') |
991
+ | `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-5.2') |
992
992
  | `dqm_target_language` | `string` | Target language for translation (ISO 639-1) |
993
993
  | `dqm_translate_results_enabled` | `'true' \| 'false'` | Translation feature enabled |
994
994
  | `dqm_ai_summary_enabled` | `'true' \| 'false'` | AI summary feature enabled |
@@ -1007,7 +1007,7 @@ The DQM component uses localStorage for persisting user preferences and authenti
1007
1007
  ```typescript
1008
1008
  // Set OpenAI configuration before loading DQM
1009
1009
  localStorage.setItem('dqm_openai_apiKey', 'sk-...');
1010
- localStorage.setItem('dqm_openai_model', 'gpt-4o-mini');
1010
+ localStorage.setItem('dqm_openai_model', 'gpt-5.2');
1011
1011
  localStorage.setItem('dqm_target_language', 'de');
1012
1012
  localStorage.setItem('dqm_translate_results_enabled', 'true');
1013
1013
  ```
@@ -419,11 +419,11 @@ export default App;
419
419
  ```
420
420
 
421
421
  **Key Features:**
422
- - **Backend:** OpenAI (gpt-4o-mini, gpt-4o, gpt-4.1)
422
+ - **Backend:** OpenAI (gpt-5.2, gpt-4o, gpt-4.1)
423
423
  - **Performance:** ~2-5s for 50 checkpoints (batch processing with 3 concurrent requests)
424
424
  - **Caching:** Automatic IndexedDB + In-Memory caching (FNV-1a hash-based)
425
425
  - **Mode:** `fast` (15s timeout, fails gracefully) or `full` (120s timeout, complete translation)
426
- - **Cost:** ~$0.001-0.003 per checkpoint (gpt-4o-mini)
426
+ - **Cost:** ~$0.001-0.003 per checkpoint (gpt-5.2)
427
427
 
428
428
  ### Example 7: AI Summary Generation
429
429
 
@@ -462,7 +462,7 @@ export default App;
462
462
  ```
463
463
 
464
464
  **Key Features:**
465
- - **Backend:** OpenAI (gpt-4o-mini, gpt-4o, gpt-4.1)
465
+ - **Backend:** OpenAI (gpt-5.2, gpt-4o, gpt-4.1)
466
466
  - **Performance:** ~3-8s for 50 checkpoints
467
467
  - **Chunking:** Automatic chunking based on token count (single/chunk/tiny strategies)
468
468
  - **Caching:** Persistent IndexedDB cache (reuses summaries across sessions)
@@ -525,7 +525,7 @@ export default App;
525
525
  **Performance Tips:**
526
526
  - Use `mode: 'fast'` for translation if you prioritize speed over completeness
527
527
  - Enable caching to avoid re-translation on subsequent analyses
528
- - Use gpt-4o-mini for cost efficiency, gpt-4o for best quality
528
+ - Use gpt-5.2 for optimal balance of speed, cost, and quality
529
529
 
530
530
  ### Example 9: AI Settings UI (Advanced)
531
531
 
@@ -608,7 +608,7 @@ export default App;
608
608
  **UI Features:**
609
609
  - **Settings Dialog:** Click gear icon in sidebar header to open AI settings
610
610
  - **Real-time Toggle:** Enable/disable translation and summary without reloading
611
- - **Model Selection:** Choose between OpenAI models (gpt-4o-mini, gpt-4o, gpt-4.1)
611
+ - **Model Selection:** Choose between OpenAI models (gpt-5.2, gpt-4o, gpt-4.1)
612
612
  - **Language Selection:** Change target language on the fly
613
613
  - **Persistent Settings:** All settings saved to localStorage
614
614
 
@@ -122,7 +122,7 @@ config={{
122
122
  translation: {
123
123
  enabled: true, // MUST be true
124
124
  apiKey: 'sk-...', // Valid OpenAI API key
125
- model: 'gpt-4o-mini', // Correct model name
125
+ model: 'gpt-5.2', // Correct model name
126
126
  targetLanguage: 'de', // ISO 639-1 code
127
127
  mode: 'fast',
128
128
  },
@@ -144,14 +144,14 @@ console.log('OpenAI API Key Set:', !!localStorage.getItem('dqm_openai_apiKey'));
144
144
  **A:** Try these optimizations:
145
145
 
146
146
  1. **Switch to Fast Mode**: `mode: 'fast'` (15s timeout vs 120s for `'full'`)
147
- 2. **Use a faster model**: `gpt-4o-mini` is optimized for speed
147
+ 2. **Use a faster model**: `gpt-5.2` is optimized for speed and cost-efficiency
148
148
 
149
149
  ```typescript
150
150
  // Optimize for speed
151
151
  translation: {
152
152
  enabled: true,
153
153
  apiKey: 'sk-...',
154
- model: 'gpt-4o-mini', // Fast + cheap
154
+ model: 'gpt-5.2', // Fast + cheap
155
155
  targetLanguage: 'de',
156
156
  mode: 'fast', // 15s timeout
157
157
  }
@@ -164,7 +164,7 @@ translation: {
164
164
  **A:** Check these:
165
165
 
166
166
  1. **OpenAI API Key**: Summary requires valid OpenAI key
167
- 2. **Model**: Ensure model supports JSON mode (`gpt-4o-mini`, `gpt-4o`, `gpt-4.1`)
167
+ 2. **Model**: Ensure model supports JSON mode (`gpt-5.2`, `gpt-4o`, `gpt-4.1`)
168
168
  3. **Timeout**: Increase timeout if analysis has many checkpoints
169
169
 
170
170
  ```typescript
package/data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crownpeak/dqm-react-component",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "private": false,
5
5
  "description": "A React component for Crownpeak Digital Quality Management (DQM) integration",
6
6
  "type": "module",
@@ -84,7 +84,7 @@
84
84
  "test:e2e:debug": "playwright test --debug",
85
85
  "wiki:build": "./scripts/wiki-build.sh",
86
86
  "wiki:deploy": "./scripts/wiki-deploy.sh",
87
- "setVersion": "npm version --workspaces --no-git-tag-version",
87
+ "setVersion": "node ./scripts/npm-set-version.mjs",
88
88
  "licenses:generate": "generate-license-file --config .glfrc.json",
89
89
  "licenses:check": "license-checker --onlyAllow 'MIT;ISC;Apache-2.0;BSD-2-Clause;BSD-3-Clause;0BSD;Unlicense;CC0-1.0;CC-BY-3.0;CC-BY-4.0;Python-2.0;BlueOak-1.0.0;Zlib;WTFPL' --production",
90
90
  "licenses:check:all": "npm run licenses:check && npm run licenses:check --prefix mcp-server",
@@ -92,7 +92,8 @@
92
92
  "prepare": "husky"
93
93
  },
94
94
  "workspaces": [
95
- "mcp-server"
95
+ "mcp-server",
96
+ "website"
96
97
  ],
97
98
  "peerDependencies": {
98
99
  "@mui/icons-material": ">=5.0.0",
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execSync } from 'child_process';
4
+ import { dirname, join } from 'path';
5
+ import { fileURLToPath } from 'url';
6
+
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ const rootDir = join(__dirname, '..');
9
+
10
+ // Get version from command line argument
11
+ const newVersion = process.argv[2];
12
+
13
+ if (!newVersion) {
14
+ console.error('Usage: npm run setVersion <version>');
15
+ console.error('Example: npm run setVersion 1.2.3');
16
+ process.exit(1);
17
+ }
18
+
19
+ // Validate version format
20
+ const versionRegex = /^\d+\.\d+\.\d+(-[\w.]+)?$/;
21
+ if (!versionRegex.test(newVersion)) {
22
+ console.error(`Invalid version format: ${newVersion}`);
23
+ console.error('Expected format: x.y.z or x.y.z-prerelease');
24
+ process.exit(1);
25
+ }
26
+
27
+ // Main execution
28
+ console.log(`Setting version to ${newVersion} in all packages...\n`);
29
+
30
+ try {
31
+ // Update root package.json
32
+ execSync(`npm version ${newVersion} --no-git-tag-version`, { cwd: rootDir, stdio: 'inherit' });
33
+
34
+ // Update all workspace packages
35
+ execSync(`npm version ${newVersion} --workspaces --no-git-tag-version`, { cwd: rootDir, stdio: 'inherit' });
36
+
37
+ console.log('\nVersion update complete!');
38
+ } catch (error) {
39
+ console.error(`Failed to update version: ${error.message}`);
40
+ process.exit(1);
41
+ }
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Crownpeak Technology GmbH
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,95 @@
1
+ # Crownpeak DQM React Component - Demo Website
2
+
3
+ Eine interaktive Demo-Website für das [@crownpeak/dqm-react-component](https://www.npmjs.com/package/@crownpeak/dqm-react-component) Paket.
4
+
5
+ ## 🚀 Features
6
+
7
+ - **Interaktive Demo** - Erleben Sie das DQM React Component mit Mock-Daten
8
+ - **Mehrsprachig** - Verfügbar in Deutsch, Englisch und Spanisch
9
+ - **Statischer Export** - Läuft ohne Server, nur HTML/CSS/JS
10
+ - **GitHub Pages Ready** - Automatisches Deployment via GitHub Actions
11
+
12
+ ## 🛠️ Entwicklung
13
+
14
+ ### Voraussetzungen
15
+
16
+ - Node.js 20+
17
+ - Yarn 1.22+
18
+
19
+ ### Installation
20
+
21
+ ```bash
22
+ yarn install
23
+ ```
24
+
25
+ ### Entwicklungsserver starten
26
+
27
+ ```bash
28
+ yarn dev
29
+ ```
30
+
31
+ Die Website ist dann unter [http://localhost:3000](http://localhost:3000) erreichbar.
32
+
33
+ ### Produktions-Build
34
+
35
+ ```bash
36
+ yarn build
37
+ ```
38
+
39
+ Der statische Export wird im `out/`-Ordner erstellt.
40
+
41
+ ## 📦 Deployment
42
+
43
+ ### GitHub Pages (automatisch)
44
+
45
+ 1. Repository auf GitHub erstellen
46
+ 2. Code pushen
47
+ 3. In den Repository-Einstellungen:
48
+ - **Settings** → **Pages** → **Source**: "GitHub Actions"
49
+
50
+ Der Workflow in `.github/workflows/deploy.yml` übernimmt den Rest.
51
+
52
+ ### Manuelles Deployment
53
+
54
+ Der `out/`-Ordner kann auf jedem statischen Hosting-Service deployed werden:
55
+
56
+ - Netlify
57
+ - Vercel
58
+ - AWS S3
59
+ - Cloudflare Pages
60
+ - etc.
61
+
62
+ ## 🔧 Konfiguration
63
+
64
+ ### Base Path (für Subdirectory-Deployment)
65
+
66
+ Falls die Website nicht im Root einer Domain gehostet wird, setze die Umgebungsvariable:
67
+
68
+ ```bash
69
+ NEXT_PUBLIC_BASE_PATH=/mein-pfad yarn build
70
+ ```
71
+
72
+ ## 📁 Projektstruktur
73
+
74
+ ```
75
+ ├── src/
76
+ │ ├── app/ # Next.js App Router
77
+ │ ├── components/ # React Komponenten
78
+ │ ├── i18n/ # Internationalisierung
79
+ │ ├── lib/ # Utility-Funktionen
80
+ │ ├── locales/ # Übersetzungen (de, en, es)
81
+ │ ├── mocks/ # MSW Mock-Handler
82
+ │ └── store/ # Redux Store
83
+ ├── public/ # Statische Assets
84
+ └── out/ # Build-Output (nach `yarn build`)
85
+ ```
86
+
87
+ ## 📄 Lizenz
88
+
89
+ © 2024 Crownpeak Technology GmbH. Alle Rechte vorbehalten.
90
+
91
+ ## 🔗 Links
92
+
93
+ - [DQM React Component auf npm](https://www.npmjs.com/package/@crownpeak/dqm-react-component)
94
+ - [GitHub Repository](https://github.com/Crownpeak/dqm-react-component)
95
+ - [Crownpeak Website](https://www.crownpeak.com)
@@ -0,0 +1,42 @@
1
+ # Crownpeak DQM Website - Release Notes
2
+
3
+ ## v1.2.4 - 2026-01-08
4
+
5
+ ### 🚀 Initial Release
6
+
7
+ The Crownpeak DQM React Component now has an official marketing and documentation website, hosted on GitHub Pages.
8
+
9
+ #### ✨ Features
10
+
11
+ - **Hero Section**: Animated landing page with feature highlights and call-to-action
12
+ - **Features Section**: Grid layout showcasing component capabilities
13
+ - **Demo Section**: Interactive sidebar demonstration with live preview
14
+ - **Integration Section**: Code examples with syntax highlighting and one-click copy
15
+ - **Footer**: Links to documentation, GitHub repository, and NPM package
16
+
17
+ #### 🌍 Internationalization
18
+
19
+ - Multi-language support: English (default), German, Spanish
20
+ - Language switcher in navigation
21
+ - Browser language auto-detection
22
+ - URL parameter override (`?lang=de`)
23
+
24
+ #### ♿ Accessibility (WCAG AA)
25
+
26
+ - Proper `aria-label` attributes on all icon-only interactive elements
27
+ - Color contrast ratio of 6.5:1+ on dark backgrounds
28
+ - Semantic HTML structure
29
+ - Keyboard navigation support
30
+
31
+ #### 🛠 Tech Stack
32
+
33
+ - **Framework**: Next.js 14 with App Router
34
+ - **Styling**: Tailwind CSS
35
+ - **Components**: shadcn/ui
36
+ - **Animations**: Framer Motion
37
+ - **i18n**: react-i18next
38
+ - **Deployment**: Static export to GitHub Pages
39
+
40
+ #### 📦 Deployment
41
+
42
+ Automatic deployment via GitHub Actions on push to `main` branch. Manual trigger also available via workflow dispatch.
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "default",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/app/globals.css",
9
+ "baseColor": "slate",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "utils": "@/lib/utils",
16
+ "ui": "@/components/ui",
17
+ "hooks": "@/hooks",
18
+ "lib": "@/lib"
19
+ },
20
+ "iconLibrary": "lucide",
21
+ "registries": {
22
+ "@aceternity": "https://ui.aceternity.com/registry/{name}.json",
23
+ "@shadcnblocks": {
24
+ "url": "https://www.shadcnblocks.com/r/{name}",
25
+ "headers": {
26
+ "Authorization": "Bearer YOUR_API_KEY_HERE"
27
+ }
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig, globalIgnores } from "eslint/config";
2
+ import nextVitals from "eslint-config-next/core-web-vitals";
3
+ import nextTs from "eslint-config-next/typescript";
4
+
5
+ const eslintConfig = defineConfig([
6
+ ...nextVitals,
7
+ ...nextTs,
8
+ globalIgnores([
9
+ ".next/**",
10
+ "out/**",
11
+ "build/**",
12
+ "next-env.d.ts",
13
+ ]),
14
+ ]);
15
+
16
+ export default eslintConfig;
@@ -0,0 +1,25 @@
1
+ import type { NextConfig } from "next";
2
+
3
+ const isProd = process.env.NODE_ENV === 'production';
4
+
5
+ const nextConfig: NextConfig = {
6
+ // Static export for GitHub Pages
7
+ output: 'export',
8
+
9
+ // Base path for GitHub Pages (repository name)
10
+ // Wird automatisch von GitHub Actions gesetzt, oder manuell konfiguriert
11
+ basePath: isProd ? process.env.NEXT_PUBLIC_BASE_PATH || '' : '',
12
+
13
+ // Asset prefix for proper asset loading on GitHub Pages
14
+ assetPrefix: isProd ? process.env.NEXT_PUBLIC_BASE_PATH || '' : '',
15
+
16
+ // Disable image optimization for static export
17
+ images: {
18
+ unoptimized: true,
19
+ },
20
+
21
+ // Trailing slash for better compatibility with static hosting
22
+ trailingSlash: true,
23
+ };
24
+
25
+ export default nextConfig;
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@crownpeak/dqm-react-component-website",
3
+ "version": "1.3.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "eslint"
10
+ },
11
+ "dependencies": {
12
+ "@crownpeak/dqm-react-component": "^1.2.2",
13
+ "@emotion/react": "^11.14.0",
14
+ "@emotion/styled": "^11.14.1",
15
+ "@mui/icons-material": "^7.3.7",
16
+ "@mui/material": "^7.3.7",
17
+ "@radix-ui/react-accordion": "^1.2.12",
18
+ "@radix-ui/react-avatar": "^1.1.11",
19
+ "@radix-ui/react-progress": "^1.1.8",
20
+ "@radix-ui/react-scroll-area": "^1.2.10",
21
+ "@radix-ui/react-separator": "^1.1.8",
22
+ "@radix-ui/react-slot": "^1.2.4",
23
+ "@radix-ui/react-tabs": "^1.1.13",
24
+ "@radix-ui/react-tooltip": "^1.2.8",
25
+ "@reduxjs/toolkit": "^2.11.2",
26
+ "class-variance-authority": "^0.7.1",
27
+ "clsx": "^2.1.1",
28
+ "framer-motion": "^12.24.10",
29
+ "i18next": "^25.7.4",
30
+ "i18next-browser-languagedetector": "^8.2.0",
31
+ "lucide-react": "^0.562.0",
32
+ "next": "16.1.1",
33
+ "react": "19.2.3",
34
+ "react-dom": "19.2.3",
35
+ "react-i18next": "^16.5.1",
36
+ "react-redux": "^9.2.0",
37
+ "tailwind-merge": "^3.4.0",
38
+ "vanilla-cookieconsent": "^3.1.0"
39
+ },
40
+ "devDependencies": {
41
+ "@tailwindcss/postcss": "^4",
42
+ "@types/node": "^20",
43
+ "@types/react": "^19",
44
+ "@types/react-dom": "^19",
45
+ "eslint": "^9",
46
+ "eslint-config-next": "16.1.1",
47
+ "husky": "^9.1.7",
48
+ "msw": "^2.12.7",
49
+ "tailwindcss": "^4",
50
+ "typescript": "^5"
51
+ },
52
+ "packageManager": "yarn@1.22.22",
53
+ "msw": {
54
+ "workerDirectory": [
55
+ "public"
56
+ ]
57
+ }
58
+ }
@@ -0,0 +1,7 @@
1
+ const config = {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
6
+
7
+ export default config;
File without changes