import type { PortfolioProjectView } from "@/lib/portfolio-data"; export type NotebookProject = { id: string; title: string; subtitle: string; demoUrl: PortfolioProjectView["demoUrl"]; demoAvailability: PortfolioProjectView["demoAvailability"]; demoCheckedAt: PortfolioProjectView["demoCheckedAt"]; technologies: string[]; screenshotSrc: string; }; const NOTEBOOK_ORDER = [ "nutriscan", "sc-plus", "sev-modaintima", "as-servicos", ] as const; const SCREENSHOT_BY_PROJECT_ID: Record< (typeof NOTEBOOK_ORDER)[number], string > = { nutriscan: "/assets/prints/print-nutriscan.png", "sc-plus": "/assets/prints/print-scplus.png", "sev-modaintima": "/assets/prints/print-sev.png", "as-servicos": "/assets/prints/print-asservicos.png", }; function isApprovedDemoUrl( value: PortfolioProjectView["demoUrl"], ): value is string { return typeof value === "string" && /^https?:\/\//.test(value); } export function selectNotebookProjects( projects: readonly PortfolioProjectView[], ): NotebookProject[] { return NOTEBOOK_ORDER.flatMap((id) => { const project = projects.find((candidate) => candidate.id === id); const screenshotSrc = SCREENSHOT_BY_PROJECT_ID[id]; if ( !project || (project.demoUrl !== null && !isApprovedDemoUrl(project.demoUrl)) ) { return []; } return [ { id: project.id, title: project.title, subtitle: project.subtitle, demoUrl: project.demoUrl, demoAvailability: project.demoAvailability, demoCheckedAt: project.demoCheckedAt, technologies: [...project.technologies], screenshotSrc, }, ]; }); }