Project cover

CardUI - Digital Business Cards for Apple Wallet

by Noah PenzaSun Aug 24 2025

CardUI is a web-app that allows businesses to quickly and easily create digital business cards for Apple Wallet. It also enables them to build custom landing pages with personalized links, logos, and brand colors. This was a side project I built and marketed independently.

The Problem

Physical business cards are inherently limited: you might forget them at home, run out at crucial networking events, or find the printed information outdated. Once printed, they're static - any change in contact details, job title, or company information means reprinting entirely.

The Solution

Having your business card in Apple Wallet means it's always with you and can be updated instantly to reflect the latest information. You also have full control over where the QR code directs people - whether to a phone number, company website, or your custom CardUI landing page featuring multiple links, company branding, and personalized styling.

Technical Implementation

Architecture & Stack Built as a decoupled full-stack application with Next.js handling the client-side interface and Nest.js (not to be confused with Next) powering the backend API. While I could have used Next.js for the entire stack, I chose Nest.js for the backend as an opportunity to explore its dependency injection system and modular architecture, which enabled clean separation of concerns and highly testable code.

Frontend (Next.js) The client-side application focuses purely on user experience, leveraging Tailwind CSS for rapid, utility-first styling. This separation allowed for optimized bundle sizes and clear boundaries between presentation and business logic.

Backend (Nest.js) Nest.js proved excellent for organizing complex business logic into isolated, injectable services. The modular architecture made it straightforward to separate concerns like:

  • User authentication and authorization
  • Business card data validation and processing
  • Apple Wallet pass generation workflows
  • Payment processing integration

Apple Wallet Integration The core functionality uses passkit-generator to create compliant .pkpass files. Key implementation details:

  • Dynamic pass generation with proper Apple Developer certificate signing
  • Real-time pass updates through Apple's web service endpoints
  • Robust error handling for malformed business data and Apple's strict pass requirements
  • Secure pass distribution through authenticated download endpoints

Payment Processing Stripe integration handles one-time payments, supporting the business model of unlimited card generations for one fixed price.

Benefits of the Architecture The Next.js/Nest.js separation provided excellent developer experience with clear API boundaries, made testing individual components straightforward, and allowed independent scaling of frontend and backend services. Nest.js's dependency injection particularly shined when mocking services for unit tests.