daraitis.com
This site. Self-hosted portfolio with photos in Swift and projects as MDX in the repo.
why
Most portfolio platforms either lock you in (Squarespace, Cargo) or want you to manage a CMS for the sake of it. I wanted something simple: a static-ish Next.js site that compiles MDX from the repo and serves photos from object storage I already run.
stack
- Next.js 15 App Router + RSC for fast photo pages
- MDX for project writeups (frontmatter + portable content)
- Tailwind for the dark, monospace-leaning aesthetic
- OpenStack Swift for photos — container
daraitis.com, public-read via tempurl/ACL sharpgenerates webp variants at upload time- Caddy fronts the app, handles
daraitis.com→www.daraitis.comredirect + auto-TLS
upload flow
``bash pnpm upload-photo ./trip.jpg --collection iceland ``
CLI presigns a Swift PUT, uploads the original, runs sharp for thumb + display variants, and updates content/photos/collections.json. Same flow available via /admin/upload (basic auth) for one-offs.
photos
Photos live in Swift, not in the repo. collections.json holds metadata; Swift holds bytes. next/image remote-loads from Swift and serves through its optimizer.