SnapContact β a project by Ahsan Mahmood
Contact-intelligence suite that turns every chat, business card, or email signature into a structured, scored, searchable contact across web, Android, andβ¦
There is a gap between talking to somebody and actually having them saved. SnapContact is built inside that gap and nowhere else.
Capture comes first.
A person can arrive by hand, from a photograph of a business card, out of a chat or profile export, off a QR code, or in one tap from the browser extension while their page is open in front of you.
What comes out the other side is a structured record: name, phone, email, source, context, timezone and social links.
Source and context are the two that matter.
A phone number with nothing attached to it is a phone number you will not act on in three weeks. Recording how you met somebody is most of the difference between a contact list and a list of strings.
The card photograph deserves its own sentence.
Recognition runs in the browser, on the device, so the image is read where it was taken rather than uploaded somewhere to be processed. That has a cost, because a model inside a browser tab has less to work with than a server that can throw hardware at the same picture.
The photograph stays where it was taken.
Then the workspace. Contacts are organised, searched with fuzzy matching across everything at once, scored from activity that actually happened, given reminders, and put through automation workflows.
Duplicate detection sits underneath all of it.
Five routes into one list is five ways to save the same person twice, and a contact tool that quietly does that is a contact tool people stop trusting after the second time they notice.
Sending is where the cost decisions become visible.
Outgoing SMS, WhatsApp, Telegram and email go device-native by default, which means the phone sends them and the application never becomes a sending service in the middle.
Bulk sending is the exception.
Anyone who needs it brings their own Twilio, SendGrid or Mailgun key, and those keys are encrypted on the device and never uploaded. Bring your own key is what keeps a per-message cost out of the product, and it is the more honest arrangement, because a key that never leaves your handset is a key nobody else is able to spend.
It is friction. It is also deliberate.
The backbone underneath is free-tier Firebase, with no paid service anywhere in the path a user touches.
About 50 distinct feature modules ship, and every one of them is wired to a real service with no demo data behind it. 66 prerendered pages carry JSON-LD so the product can be found by a crawler that runs no JavaScript.
No demo data is a rule with teeth.
A screen wired to a fake array looks finished in a screenshot and falls over the first time somebody real uses it. That count is 50 things that work rather than 50 that render.
What it cost is width.
A product with that many modules has that many things that can break, and there is exactly one person available to notice when one of them does. Import and sync alone reaches into Google, Outlook, Excel and iCloud, and every one of those is somebody else's format changing on somebody else's schedule.
Width is the bill.
It is at snapcontact.aoneahsan.com, with a Chrome and Firefox extension built on WXT beside it.
The provider keys never leave the handset, which also means that losing the handset loses them.
What it does, and what that costs to build
- One-tap capture from any chat surface
- Browser-side business-card OCR (no upload)
- Import/sync (Google, Outlook, Excel, iCloud)
- BYOK messaging (device-local AES-encrypted keys)
- Real Firestore-backed engagement scoring
- Automation workflows + duplicate detection
- 66 prerendered SEO pages with rich JSON-LD
Built with
- React 19
- TypeScript
- Vite 8
- Radix UI Themes
- TanStack Query
- Firebase
- CapacitorJS
- WXT
- D3.js
Worth knowing
- contacts
- lead-capture
- crm
- extension
- react
- firebase
Who built SnapContact?
Ahsan Mahmood built it on his own, and it is at snapcontact.aoneahsan.com. The capture routes, the browser-side recognition, the workspace, the automation layer, the Firestore rules and the browser extension are all one person's work, which is why five different ways of saving a person produce the same record shape. It is React and TypeScript on Vite with Radix UI Themes and TanStack Query, Firebase underneath, D3 for the charts, Capacitor for the packaged build and WXT for the Chrome and Firefox extension.
Does a photographed business card get uploaded anywhere?
No. The recognition runs in the browser, on the device holding the photograph, so the image is read where it was taken and is not sent away to be processed. That choice costs something: a model running inside a browser tab has less to work with than a server that can throw hardware at the same picture, so accuracy is the thing being traded. It is the right trade for a card that often carries somebody else's mobile number and home address, and it is worth knowing which way the trade went.
What happens to my Twilio, SendGrid or Mailgun keys?
They are encrypted on the device and never uploaded. Outgoing messages go device-native by default, which means the phone sends the text, the WhatsApp message or the email rather than the application acting as a sending service on your behalf. Bringing your own provider key is only needed for bulk sending, and it keeps a per-message cost out of the product entirely. The consequence sits on your side: a key that never leaves the handset is a key nobody else can spend, and also one that goes when the handset does.
How is a contact's engagement score worked out?
From activity the application actually recorded, held in Firestore, rather than from a rating anybody types in. That is the whole claim being made for it. What the weighting is, how recency is treated and where the thresholds sit are not described on this page, because the record these pages are written from does not define them, and a scoring formula invented for a portfolio page would be a number a reader could act on. The score is a prompt to follow up rather than a verdict on a person.
Does SnapContact work on iPhone?
No, there is no iOS application. It is a web application any phone can open in a browser, its codebase is packaged with Capacitor for a mobile build, and the extension side covers Chrome and Firefox. There is no Apple Developer account behind this work, so nothing here has been submitted to the App Store, and the only product link the record carries is the web one at snapcontact.aoneahsan.com.
https://aoneahsan.com/projects/com.aoneahsan.snapcontact