
dcovelli.com: behind the scenes
A quick tour of what this site is — an interactive resume you can interview in plain English, download as a polished PDF, and that adapts to the time of day.
This site isn't a static resume. I built it as a small web app that actually does things — answers questions the way I would, hands you a print-ready PDF on demand, and quietly adapts to your surroundings. Here's the quick tour.
Interview it
The button in the corner opens Interview me — a chat assistant that answers questions about my experience, skills, and projects the way I might. Ask what I built at Groundswell, which tools I reach for, or whether my background fits a role you're hiring for, and it replies in real time.
It runs on Claude, with a fallback chain across several models that I can configure from the admin panel — if one model is having a bad day, the chat quietly moves on to the next. The reasoning there was simple: a visitor gets exactly one shot at trying the assistant, and an assistant that's down is worse than no assistant at all.
The same panel gives me a workspace for tweaking the assistant's system prompts, so I can adjust how it talks — its tone, its priorities, what it leads with — without touching code.
Your conversation is also saved, so you can pick it up again on your next visit!

Download the resume
The reasonable assumption regarding the implementation of the Download resume button is
that it serves a static PDF sitting in blob storage — that's what almost
every site would do.
What actually happens is that the PDF is generated the moment you click: Puppeteer is used to spins up a headless Chromium, points it at a print-formatted Next.js route rendering the resume, and hands back the result.
This allows me to update something on the website — a new role, a reworded bullet — and have it immediately be reflected the next time someone downloads the resume. One edit, and every copy from that moment on is current.

A site that follows the sun
The theme isn't random. If you share your location, the site computes the sun's actual position above or below your horizon — no library, just the standard low-precision equations from the Astronomical Almanac, small enough to run in the browser with no dependencies. Decline, and it falls back to your local time instead. Either way, the theme shifts between light and dark as your day goes on. And if you disagree with the sun, a toggle in the nav overrides it and remembers your choice. A theme that fights your preference isn't clever, it's annoying.

Writing
Longer technical write-ups live in the Writing section — including the one you're reading. I author posts in Markdown and they render with syntax-highlighted code, tables, and diagrams, because some ideas are only worth explaining if you can show the code and the picture next to the claim.

Editable end to end
Everything here — the resume, this article, even the assistant's personality — lives in a database and gets edited from a private admin panel. No code changes, no redeploys. The honest description is that the site is a small content system wearing a resume.
Built with
- Next.js 14 + React for the site and server rendering
- Claude (Anthropic) for the assistant
- PostgreSQL + Prisma for content
- Puppeteer for on-demand PDF export
- Tailwind CSS for styling
Click around and explore — and when you want to know more about me, the assistant in the corner is one tap away.