~/projects/glyn-dev
glyn.dev
This site: a data-driven personal platform (portfolio, blog, and research hub) built with Next.js 16, Supabase, and shadcn/ui, where every page updates without a redeploy.
$ render article.mdx
~/projects/glyn-dev
This site: a data-driven personal platform (portfolio, blog, and research hub) built with Next.js 16, Supabase, and shadcn/ui, where every page updates without a redeploy.
$ render article.mdx
Search posts, research, projects and tags, or jump to a page.
Every page on this site is data-driven. Posts, projects, research papers, and even the home-page bio live in Postgres and render through one MDX pipeline, so content updates go live without a redeploy.
The front end is Next.js 16 on the App Router, built almost entirely from React Server Components and styled with Tailwind CSS v4 and shadcn/ui. Content is MDX stored in Postgres and rendered on the server. The backend is Supabase, which provides Postgres, authentication, and private file storage. Everything deploys to Vercel.
Public reads go through a small data layer wrapped in unstable_cache with
cache tags. Admin edits call updateTag, so you read your own writes
immediately. Edits made straight in Supabase Studio propagate through a
database webhook that hits /api/revalidate, and a one-hour ISR window is the
safety net. Nothing here needs a deploy to change.
Research PDFs sit in a private storage bucket. GET /api/download/[slug]
checks that the paper is published, logs the download, and redirects to a
60-second signed URL. The download is free for everyone, and the raw storage
path grants nothing on its own.
Posts and papers are MDX with GitHub-flavored markdown, KaTeX math, and shiki
syntax highlighting, plus custom components like <Callout>, <Figure>, and
<PaperCard slug="..." /> to embed a paper inline. Comments use Supabase Auth
and are post-moderated: visible immediately, hideable by the admin.