This site. A statically exported Next.js 16 application that doubles as the delivery surface for everything else in this portfolio: project case studies driven by typed data, long-form security write-ups, a markdown blog, and an interactive terminal with its own virtual filesystem.
OBSIDIAN IS THE CMS - Posts are written as plain markdown notes in a private Obsidian vault that is itself a git repository (PontoPe/ObsidianGit). There is no admin panel, no database, and no headless CMS to keep online. Publishing is "commit the note". A push in the vault fires a repository_dispatch event at the website repository, and the deploy pipeline checks the vault out into portfolio/_content with a scoped token, copies any referenced images into public/blog-images, and builds the blog routes from frontmatter using gray-matter.
SCHEDULED WITHOUT A SERVER - Frontmatter carries an ISO date. Future-dated notes are filtered out of both the blog index and generateStaticParams, and dynamicParams is disabled, so an unpublished post is not merely hidden - the route does not exist. Because a static export cannot decide at request time that "today" has changed, the deploy workflow also runs on a nightly cron at 00:17 America/Sao_Paulo: a post scheduled for a given date goes live on that date even if nobody commits anything.
CI/CD - One GitHub Actions workflow composes two repositories into one artifact: checkout public site, checkout private vault, npm ci on Node 24, collect images, next build (output: "export"), then FTP the out/ directory to the host. Triggers are push to main, the vault's repository_dispatch, the nightly cron, and manual dispatch. Every third-party action is pinned to a full commit SHA, the job runs with permissions: contents: read, and persist-credentials is disabled so the checkout token is never left behind in the runner's git config.
THE TERMINAL - The homepage carries "PontoPe OS", a client-side shell over a virtual filesystem defined in lib/virtualFS.ts: ls (with -a), cd, cat, tab completion for both commands and paths, plus shortcuts that route to the blog and a set of easter eggs ending in a Konami-code BSOD. It has no shell, no eval, and no network calls - the filesystem is a static object shipped with the page, so the whole thing is a self-contained interaction rather than an attack surface.
DELIVERY - Static export with trailingSlash for the FTP host, unoptimized images, hardened response headers, and no server runtime at all: the published artifact is a directory of HTML, CSS, JS, and images.