what is this?
This is a photography portfolio showcasing images from Halifax, Nova Scotia and surrounding areas. But it's also something else: a working example of what happens when you build an entire website through conversation with AI.
I'm Adrian Hensler, a photographer and technologist. This site serves as both my portfolio and a showcase of AI-assisted development. Every feature you see here was built through collaboration between human creative direction and AI implementation.
built with artificial intelligence
The entire codebase for this site was created using Claude Code, Anthropic's AI coding assistant. I describe what I want, and we build it together through conversation.
Think of it as pair programming with an AI. I provide the creative direction, requirements, and quality standards. Claude handles the implementation details, writes the code, and helps debug issues.
The workflow looks like this: I say "add a dark mode toggle to the settings page" and Claude writes the HTML, CSS, and JavaScript. I review it, suggest changes, and we iterate until it's right.
I also use other AI tools when they make sense: GitHub Copilot for quick completions, OpenAI's Codex-based tools for specific tasks. The goal is always the same: build something good, efficiently.
ai-powered features
Several features on this site use AI behind the scenes. Here's what's actually happening when you browse the gallery.
Every image description you see in the gallery was generated by Claude's Vision API. When I upload a photo, the AI analyzes it and suggests a title, caption, tags, and category.
You might notice a subtle "AI-generated description" label in the lightbox. That's intentional transparency. If I review and edit a description, that label disappears because a human has approved the content.
I can also choose different AI "styles" for descriptions: a minimal, factual style or a more artistic, evocative approach. The minimal style is my attempt to avoid what people call "AI slop" - those overly flowery, generic-sounding descriptions.
The technical stack, for those curious:
- Frontend: Vanilla HTML, CSS, JavaScript. No frameworks.
- Backend: Python with FastAPI for the image management API
- Database: SQLite storing image metadata, EXIF data, and analytics
- Image processing: Automatic WebP conversion (images are 10-20x smaller)
- Hosting: Docker containers on a VPS, Caddy for HTTPS
- Analytics: Privacy-preserving (no cookies, hashed IPs, no personal data)
explore the code
This project is open source. You can browse the repository, see how everything is built, and even fork it if you want to build something similar.
The repository is organized around a multi-site architecture:
/sites/adrian/- This site you're viewing/sites/liam/- My son's photography portfolio/sites/shared/- Common gallery code shared between sites/api/- FastAPI backend for image management
The management interface at /manage lets me upload images, edit metadata,
publish/unpublish photos, and view analytics. It's all built with the same AI-assisted workflow.
Incidentally, this About page was also written by AI.
But I promise a human checked my work.