HAIZEL // Blkbook · professional networking PWA
A digital business card built to replace the paper one — and LinkedIn
The client came to Coralsoft with a clear ambition: build a digital product that makes the paper business card and the static LinkedIn profile obsolete. Professionals — founders, photographers, designers, realtors, creative talent — needed a living portfolio they could hand to anyone, in person or remotely, that actually reflected their brand identity rather than a generic form.
The core challenge was not just building a profile page. It was architecting a flexible content system that could serve radically different professional personas, a contact exchange mechanism that worked with and without accounts, and a mobile experience so polished it felt native — all delivered as a progressive web app, with no App Store dependency.
The product surface
Coralsoft designed and delivered the entire product from scratch — architecture, backend, frontend, AI integrations, and third-party pipelines. The result is a full-stack SaaS platform with a server-actions data layer (no REST API), Supabase PostgreSQL with row-level security, React Query for all client state, and a PWA shell installable on iOS and Android.
Customisable digital profile
15 typed content blocks — Hero, Portfolio, Timeline, Press, Quote, Ventures and more — each independently editable, reorderable and toggleable. Six role-based default stacks get users to a complete profile without starting from blank.
Smart contact exchange
Three exchange patterns — authenticated mutual, guest one-way (no account required), admin-created — each running through atomic PostgreSQL RPC functions that share fields and upsert vault entries for both parties in a single transaction.
Business card scanner
Gemini 2.5 Flash Vision OCR turns a camera photo or upload into structured contact fields — name, role, email, phone, LinkedIn — in seconds, directly prefilling the vault contact form.
Apple Wallet pass
An end-to-end .pkpass generation pipeline with Apple certificate signing, served from an authenticated API route. Users add their contact card to iPhone Wallet in one tap — no third-party app required.
Contact vault
A CRM-lite for managing professional contacts. Imports from manual entry, exchange acceptance, business card scan, or LinkedIn URL via Apify — with avatar upload to Supabase Storage and full rich-field records.
AI-assisted onboarding
Gemini generates initial profile section content based on the user's role and name during onboarding. Users start with a credible, structured profile rather than an empty page — dramatically improving activation.




Decisions, not just dependencies.
All mutations flow through Next.js server actions — components never touch Supabase directly. Data access helpers encapsulate raw queries; React Query hooks wrap server actions to add caching, optimistic updates, and background invalidation. A four-tier middleware routing model enforces auth and onboarding redirects at the edge before any page renders.
Type safety is enforced end-to-end: types/database.ts is auto-generated from the live Supabase schema, making every data access call compile-time safe. Pre-commit quality gates (ESLint 9, Prettier, Husky, CommitLint) and Vercel branch previews per pull request keep the codebase production-ready at every commit.
What was hard, and how we shipped it.
- 01
Zero-to-production architecture
Designed and built the complete full-stack system from scratch: Supabase schema with RLS policies, server actions layer, React Query integration, and PWA configuration — no inherited codebase, no scaffolding shortcuts.
- 02
Apple Wallet pass pipeline
End-to-end .pkpass generation including Apple certificate management, pass template design, cryptographic signing via node-forge, and authenticated binary serving from a Next.js API route.
- 03
Atomic exchange system
PostgreSQL RPC-backed contact exchange handling mutual, guest, and admin flows — with 24-hour deduplication on guest submissions and automatic vault upsert on acceptance, all in a single database transaction.
- 04
LinkedIn import pipeline
Apify-powered contact prefill: scrapes a public LinkedIn profile, uploads the avatar to Supabase Storage, and populates all vault contact fields — triggered from a single URL input.
- 05
Invite and access-request system
Full lifecycle: public application form → admin review dashboard → invite code generation → personalised transactional email via Resend → gated signup. Built as a first-class product feature to support the curated network model.
Looking at a project that sits at this kind of seam?
Bring us the architecture, the constraints, and the ship date. We will bring the rest.