naica.tech Start a project
← back to case studies
Jul 8, 2026

Knex Card — Digital Business Cards for the Modern Network

Laravel Vue 3 Inertia TypeScript TailwindCSS Filament NFC QR Code NativePHP SaaS Fortify Sanctum

The Problem

Business cards are still the default handshake in networking — but they get lost, outdated, or thrown away. Professionals need something as easy to share as a physical card but that never goes stale. Knex Card set out to build exactly that: a digital business card platform where a single link or NFC tap gives anyone your latest contact info, and you control what they see.

Stack Choices

Backend — Laravel 13 + Filament v5

Laravel 13 is the backbone — handling authentication, API routing, database migrations, queue jobs, and the admin panel. Authentication is powered by Laravel Fortify with email/password, social login (Google, LinkedIn, Facebook, Apple via Socialite), passkeys (WebAuthn), and two-factor authentication (TOTP). API authentication uses Laravel Sanctum for mobile token-based access.

The admin panel runs on Filament v5 with custom resources for user management, profile moderation, team oversight, and global analytics — giving the Knex operations team full control without building a custom admin UI. Filament widgets display real-time stats, industry distribution charts, and top-profile leaderboards.

Frontend — Vue 3 + Inertia + TailwindCSS v4

The front end is a single-page application built with Vue 3 (Composition API, TypeScript) and Inertia.js v3. Inertia bridges server-side routing with SPA UX — pages are Vue components rendered server-side (SSR enabled for SEO), then hydrated client-side for instant navigation. TailwindCSS v4 handles all styling with a dark, modern design system.

Key frontend packages:

Mobile — NativePHP + NFC

A companion mobile app built with NativePHP wraps the web platform and exposes NFC capabilities — Android HCE (Host Card Emulation) and iOS Core NFC. A phone tap on an NTAG215 sticker opens the card instantly in the browser. No app install needed on the receiver's end.

Architecture

The platform is organized into three layers:

The app exposes both web (Inertia) and JSON API (/api/v1/) endpoints in parallel — the web layer serves the dashboard SPA, while the API layer serves the mobile app and third-party integrations.

Multi-Tenancy

Teams act as tenants with a session-based scoping strategy. A tenant_id column on all scoped models, a reusable BelongsToTenant trait, and a global TenantScope automatically filter queries by the active tenant. Corporate accounts can lock theme colours, branding, and hide the "Powered by" footer — essentially white-labelling the platform for their employees.

Code Organisation

Business logic is extracted into single-responsibility Action classes (app/Actions/CreateProfile, TrackProfileView, GenerateVCard). Validation lives in Form Requests, authorization in Policies, and API responses are transformed through Eloquent API Resources. Controllers stay thin.

Key Features

Rich Profiles

Each profile supports name, job title, company, bio, tagline, photos (avatar, cover, logo), contact info (email, phone, mobile, WhatsApp), full address (country, state, city, ZIP, street), social links (LinkedIn, Facebook, Instagram, TikTok, X, YouTube, GitHub, Dribbble, and more), custom dynamic fields (text, URL, email, phone, file types), business details (industry, description, services, products, business hours), and six built-in themes with custom accent colours (Emerald, Ocean, Sunset, Royal, Rose, Slate).

vCard (.vcf) Downloads

Profiles are downloadable as standard vCard 3.0 files — compatible with Android, iOS, Outlook, Gmail, and Apple Contacts. Every field is included: name, title, company, emails, phones, WhatsApp, URL, address, bio, and social links.

Dynamic QR Codes

Every profile gets a dynamic QR code (profile link, URL, or vCard download) with customizable foreground/background colours and an optional logo. Scans are tracked per QR code with device, browser, OS, country, city, IP, referrer, and whether the contact was saved. SVG download included.

NFC Sharing

The profile URL is encoded into an NTAG215 sticker. Tap a phone, browser opens, card renders. No app install, no friction. The mobile app handles NFC writing and pairing.

Analytics Dashboard

Profile views and QR scans are tracked with breakdowns by device, browser, OS, and geography (IP-based country/city). Users see total views, unique views, daily/weekly/monthly/yearly trends, contact save rates, and a paginated scan history with filtering.

Team & Corporate Plans

Teams can issue cards to employees with locked branding, custom domains, and role-based permissions (Owner > Admin > Manager > Member). Invitations are managed through the dashboard. Corporate branding controls include theme colour locking, accent colour locking, avatar/logo/cover image locking, company name and tagline locking, "Powered by" visibility toggle, and custom domain support.

The Build

From kickoff to first live card: roughly 6 weeks. The bulk of that time went into the dashboard UX and the analytics engine — the public profile view is deliberately minimal and fast.

Key decisions that shaped the build:

Production Readiness

The project scored 8.5/10 in its production audit across six categories — the highest marks in Architecture (9/10), Maintainability (9/10), and API Quality (9/10):

Architecture9/10
Security8/10
Scalability8/10
Performance8/10
Maintainability9/10
API Quality9/10

The complete tech stack includes 21 database migrations covering users, profiles, social links, custom fields, profile analytics (IP, device, browser, OS, referrer tracking), QR codes, QR code scans, teams, team members, and passkeys.

What's Next

Upcoming features include AI-powered business card OCR (snap a photo of a physical card and auto-import the fields), Apple Wallet and Google Pay passes, CRM integrations (HubSpot, Salesforce), an email signature generator, digital catalog pages for product showcases, and bulk CSV team imports.

Knex Card is live and actively evolving. Visit the platform to see the latest.