import { readFile } from "node:fs/promises"; import { resolve } from "node:path"; import portfolioData from "@/public/portfolio-data.json"; import { createProjectHealthSnapshot, filterLiveProjects, type ProjectHealthSnapshot, } from "./project-health"; export type PortfolioData = typeof portfolioData; export type PortfolioProject = PortfolioData["projects"][number]; export type PortfolioExperience = PortfolioData["experiences"][number]; export type PortfolioSkillCategory = PortfolioData["skills"]["technical"][number]; export const portfolio = portfolioData; export function getLiveFeaturedProjects( snapshot: ProjectHealthSnapshot | null, now = new Date(), ) { return filterLiveProjects( portfolio.projects, snapshot, now, ); } export async function loadProjectHealthSnapshot(): Promise { try { const path = resolve(process.cwd(), "data/project-health.json"); return JSON.parse(await readFile(path, "utf8")) as ProjectHealthSnapshot; } catch { return null; } } export async function loadLiveFeaturedProjects() { const fromSnapshot = getLiveFeaturedProjects(await loadProjectHealthSnapshot()); if (fromSnapshot.length > 0) return fromSnapshot; const projectDemos = portfolio.projects.reduce< Array<{ id: string; demoUrl: string }> >((demos, project) => { if (project.demoUrl) demos.push({ id: project.id, demoUrl: project.demoUrl }); return demos; }, []); const freshSnapshot = await createProjectHealthSnapshot(projectDemos); return getLiveFeaturedProjects(freshSnapshot); }