The problem
When you print your phone number on a business card, a flyer or a sign, you give it to everyone, and you never learn whether anyone looked. We wanted a contact card that opens from a QR code, shows how often it’s scanned, and lets a visitor call without either side seeing the other’s real number.
What we built
Each customer gets a public contact card with its own QR code. They edit the card, download the code, or regenerate it, which makes the old code stop working straight away. Every scan is recorded with its time, browser and device, so the customer can see which flyers and cards actually get used.
On the card, a visitor enters their number and the app connects both people through a proxy number taken from a shared pool. The number goes back into the pool when the call ends. Admins manage customers and the number pool from their own area.
- Contact cards: public cards on unguessable links, with QR codes to download or regenerate.
- Scan tracking: totals per code, the latest scans on the dashboard, and a full history with masked IP addresses.
- Private calling: a proxy number per call through Twilio Voice, with live call status on the page.
- Admin area: customers, their profiles and scan history, and the proxy number pool.
- API: a versioned REST API secured with Laravel Sanctum.
Security and quality
Phone numbers are encrypted in the database, access is controlled by roles and permissions, logins and public calls are rate limited, Twilio webhooks are verified, and account changes are logged. The code uses service and repository layers and has 59 automated feature tests.
What it shows we can do
Privacy-first products, telephony with Twilio, and clean admin tools around a simple customer experience.








