Muhammad Arslan
Hire me
Back to projects

Halatap

A platform for creating, sharing, and exporting modern business cards from one dashboard, to email, QR, vCard, and Apple Wallet.

Role: Front-end and feature engineer (multi-developer team)Timeline: 2025-2026Type: Full-stack web app

Next.js 16

React 19

TypeScript

Convex

Tailwind CSS 4

Radix UI

Resend

Halatap interactive digital card preview with a sample identity

Overview

Halatap replaces the paper business card with a digital one you can actually keep up to date. Each user gets a dashboard to build cards from a set of templates, then shares them however the moment calls for: a public link, a QR code, an email, a downloadable contact file, or a pass saved straight into Apple Wallet. It's a full-stack app built on Next.js and Convex, with secure accounts, real-time data, and support for both English and Arabic.

The Problem

Paper cards have aged badly. The information goes stale the moment a job title or phone number changes, they're easy to lose, and they only exist in one physical format. Sharing digitally is no better in practice, because it ends up fragmented across links, PDFs, QR codes, and messaging apps with no single source of truth. On top of that, international users need cards in more than one language, and teams need a way to create many cards at once instead of one at a time. Halatap set out to fold all of that into one system.

My Role & Approach

This was a team project, and I contributed across the front end and several end-to-end features alongside other developers. The work spanned the card-building and dashboard experience, the sharing flows, and the integrations that make a card useful outside the app: wallet passes, vCard export, and email delivery. The approach throughout was to keep the product modular. One template system feeds both the editor preview and the public card, and one card schema serves both single-card creation and bulk import, so features reused the same foundations instead of branching.

Tech Stack

FrameworkNext.js 16 (App Router) with React 19 and TypeScript
BackendConvex for the real-time database, queries, and mutations
Styling / UITailwind CSS 4 with Radix UI primitives
Authcustom email/password plus Google OAuth
EmailResend, through the Convex integration
Wallet passespasskit-generator with node-forge for certificate signing
ExtrasJotai for local state, Framer Motion for transitions, react-qr-code, Sonner for notifications

Key Features

Template-based card buildermultiple templates where the preview and the final public card render from the same components, so what you design is exactly what you share.
Multi-card dashboardcreate, edit, duplicate, delete, and share any number of cards from one place.
Public and private sharingpublic cards open from a link; private cards are restricted to specific recipient emails, enforced in the backend.
Email sharingsend a card invitation through Resend with the link and context attached.
Apple Wallet passesgenerate a signed PKPass with card-specific colours, a QR barcode for the public link, and localised fields.
vCard exportdownload contact data that drops straight into a phone's address book.
Bulk CSV uploadimport many cards at once, mapping identity fields, social links, and per-row images.
Bilingual supportEnglish and Arabic versions of key fields, resolved through both the UI and the generated passes.

Gallery

Halatap card editor with a sample profile and contact details
Halatap social-link editor with an example website URL

Challenges & Solutions

Access control had to be flexible without becoming a tangle. Public and private cards need different rules, so sharing is modelled with a dedicated shares table tied to card and recipient. Public access is allowed only when a card is explicitly marked public, and the check lives inside the card query itself rather than scattered through the UI.

Authentication was built rather than fully outsourced, which meant doing it carefully. Passwords are hashed with salted PBKDF2 through the Web Crypto API instead of being stored raw, and reset tokens are time-bound and marked used once spent. The most involved feature was Apple Wallet pass generation. It requires certificate-based signing, the right bundled assets, an embedded QR payload, and formatted localised fields, all produced on demand and returned with the correct content type. Supporting both single users and teams came down to reusing one card schema across a normal creation flow and a separate CSV import path.

Outcome

Halatap ends up doing what a digital business card should: one editable identity that travels across web, email, QR, contact files, and Apple Wallet, in two languages, for both individuals and teams. The wallet-pass and bulk-import features in particular push it past the typical "profile page" product into something that fits real-world, multi-channel sharing.

Have a similar product problem?

Share the current product, the outcome you need, and the constraints already in the way. I will use that to define a sensible first milestone.

Hire a full stack developer
Start your project brief
All projectsNext projectMLZ-Advanced