I'm not a software developer. I'm a photographer who got frustrated.
Here's what happened. I was shooting headshots at a conference using a third-party platform for attendee sign-up and photo delivery. The signup form couldn't be embedded on the sponsor's page. The email delivery was delayed. I couldn't customize the branding. I couldn't export the attendee data the way the sponsor needed it.
So I built my own.
What the app does
It lives at app.erickjohnsonphotography.com. Here's the flow:
1. Attendee walks up. They scan a QR code or type in a short URL.
2. They register. Name, email, company, title — whatever fields the sponsor wants. Custom-branded to the event.
3. I shoot them. 60-90 seconds, done.
4. They get their headshot. Retouched, branded, delivered to their inbox. Before they walk away.
5. Sponsor gets their data. Full CSV export — every attendee's info, ready for their CRM.
The whole thing runs on a Node.js backend I wrote and host on a server in Germany. Cloudflare in front for speed and security. Square handles payments. Resend handles the email delivery. R2 handles photo storage.
Why I built it instead of buying it
Because the tools that existed were built for photographers who think like photographers. I needed a tool built for a photographer who thinks like a marketer.
The headshot station isn't about delivering pretty pictures. It's about delivering leads. The photo is the magnet. The data is the product. No existing platform understood that.
So now I have a system where:
- Every session is custom-branded to the client
- Attendee data is captured in real-time
- Photos are delivered instantly via email
- The sponsor gets a full CSV export same-day
- I have a live dashboard showing registrations as they happen
The technical stuff (for the nerds)
The app runs on Express with PM2 as the process manager. SQLite for the database (it's one photographer, not Netflix — keep it simple). Cloudflare R2 for photo storage. Resend for transactional email. Square for live payments when sponsors want to pay on-site.
TLS is Cloudflare Full Strict with an origin certificate. Socket.io powers the real-time dashboard so I can see registrations come in live during an event.
The whole thing runs on a $6/month server. Total infrastructure cost for running a lead-gen platform that charges $8,000 per activation: six dollars a month.
What I learned
Building it was hard. I'm not going to pretend otherwise. There were nights debugging SSL certificates at midnight before an event. There was the time PM2 kept restarting the app and I couldn't figure out why. There was the moment I realized my backup script wasn't actually backing up to the right storage bucket.
But now it works. Perfectly. And it gives me something no competitor in DFW has: full control of the experience from the first scan to the last email.
When you own the platform, you own the product.
If you want to see the headshot station in action at your next event, visit erickjohnsonphotography.com.