Portfolio, research blog, and audit-finding archive for Binston Cardoza.
- Next.js App Router with TypeScript strict mode
- Tailwind CSS v4 with CSS-first tokens in
app/globals.css - MDX content loaded from
content/**and validated with Zod frontmatter schemas next-themesdark/light theme supportcmdk+fuse.jssearch over published posts and audit findings- Dynamic OG images, RSS, sitemap, robots, and Vercel Analytics
pnpm dev
pnpm lint
pnpm exec tsc --noEmit
pnpm build
pnpm startThe production build fetches Google font assets through next/font/google.
If the local environment blocks outbound network access, pnpm build can fail
at the font step even when linting and TypeScript are clean.
content/writing/*.mdx -> /writing/[slug]
content/audits/*.mdx -> /audits/[slug]
content/projects/*.mdx -> /projects
Filenames become slugs. Frontmatter is parsed in lib/content.ts and validated
by lib/schemas.ts; malformed content fails the build.
- Social/contact links live in
app/(site)/page.tsx,app/(site)/about/page.tsx, andcomponents/ui/Footer.tsx. - The CV link appears only when
public/cv.pdfexists. - Custom MDX components are registered in
mdx-components.tsx. - Search index generation lives in
lib/search.tsandapp/api/search/route.ts.