Technical Project
identi.
I built a digital business card platform from profile editing through deployment. Teams manage branded contact pages, photos, and engagement analytics in one directory; visitors share profiles by QR code or save contact details directly to their phones. Image conversion, cropping, and contact-file generation run in the browser.
The problem
A digital business card needs to be quick to share and easy to maintain. The platform brings profile editing, photo handling, company branding, and engagement reporting into one admin workflow.
How I approached it
I built the product end to end with Next.js Server Components and type-safe Server Actions over a five-table Drizzle and SQLite schema. Photo editing and contact-file generation run in the browser. The app runs in Docker on private self-hosted infrastructure behind Traefik, utilizing Cloudflare Zero Trust for secure edge ingress without exposing open inbound ports.
Inside the build
- Built a client-side photo pipeline for HEIC-to-JPEG conversion, circular cropping, and canvas rendering; the 1.3 MB HEIC decoder loads only when needed.
- Generated vCard 3.0 contact files and QR codes in the browser, with readable profile URLs and collision-checked short links for sharing.
- Added per-profile, group, and company visit analytics with time-window filters, CSV export, and date-range deletion; admin views are excluded from visit counts.
- Implemented pointer- and keyboard-operated drag-and-drop ordering for people and profile links, with optimistic updates that preserve hidden rows in filtered views.
- Built automatic link detection for 19 social platforms, plus company, email, and document links, to assign icons and labels from pasted URLs.
- Replaced a custom webhook and PM2 deployment with Docker Compose and GitHub Actions, including a dedicated schema migrator, a non-root runtime, and persistent SQLite storage.
The result
Delivered a complete directory-to-contact-sharing workflow with branded profiles, photo editing, and engagement reporting. A one-command developer setup creates credentials and demo data without overwriting existing records, with three tests covering the setup tooling.