Files
myeasycms-v2/apps/dev-tool/app/prds/_lib/server/prd-page.loader.ts
Giancarlo Buomprisco 7ebff31475 Next.js Supabase V3 (#463)
Version 3 of the kit:
- Radix UI replaced with Base UI (using the Shadcn UI patterns)
- next-intl replaces react-i18next
- enhanceAction deprecated; usage moved to next-safe-action
- main layout now wrapped with [locale] path segment
- Teams only mode
- Layout updates
- Zod v4
- Next.js 16.2
- Typescript 6
- All other dependencies updated
- Removed deprecated Edge CSRF
- Dynamic Github Action runner
2026-03-24 13:40:38 +08:00

78 lines
1.6 KiB
TypeScript

import 'server-only';
import { PRDManager } from '@kit/mcp-server/prd-manager';
import { relative } from 'node:path';
export interface CustomPhase {
id: string;
name: string;
description: string;
color: string;
order: number;
userStoryIds: string[];
}
export interface PRDData {
introduction: {
title: string;
overview: string;
lastUpdated: string;
};
problemStatement: {
problem: string;
marketOpportunity: string;
targetUsers: string[];
};
solutionOverview: {
description: string;
keyFeatures: string[];
successMetrics: string[];
};
userStories: Array<{
id: string;
title: string;
userStory: string;
businessValue: string;
acceptanceCriteria: string[];
priority: 'P0' | 'P1' | 'P2' | 'P3';
status:
| 'not_started'
| 'research'
| 'in_progress'
| 'review'
| 'completed'
| 'blocked';
notes?: string;
estimatedComplexity?: string;
dependencies?: string[];
completedAt?: string;
}>;
customPhases?: CustomPhase[];
metadata: {
version: string;
created: string;
lastUpdated: string;
approver: string;
};
progress: {
overall: number;
completed: number;
total: number;
blocked: number;
};
}
export async function loadPRDPageData(filename: string): Promise<PRDData> {
try {
PRDManager.setRootPath(relative(process.cwd(), '../..'));
const content = await PRDManager.getPRDContent(filename);
return JSON.parse(content) as PRDData;
} catch (error) {
console.error(`Failed to load PRD ${filename}:`, error);
throw new Error(`PRD not found: ${filename}`);
}
}