NeerajMohanty/byzcard

Local-first digital business card. No account, stored on your device, shared by QR.

TypeScript

2

13 commits

updated Sep 7, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

I built an open-source digital business card because paying a subscription for a business card felt ridiculous! (r/SideProject)

I was tired of paying so many subscriptions and when I realized I have to pay one for this for my entire team, felt absolutely worthless. So I built this with Claude. Sharing here mades sense because, because everyone one of us, at some point always wanted a digital business card to promote…

1

Sep 18, 2026

README

Byzcard

Your identity is not a subscription.

Open source · Local-first · No account · No subscription · MIT

$0/month · QR + NFC · Clean links · Works offline · Fully customizable


Create yours →

byzcard.cc · Source


MIT License CI


Stop renting your business card.

Most digital business cards work the same way.

Create a profile. Add your details. Get a link. Then keep paying every month.

Byzcard does not.

Create your card.

Keep it.

Share it.

Done.

No account. No subscription. No central card database for the core experience. No lock-in.


One link. Your name.

byzcard.cc/neeraj-mohanty

Your Byzcard can have a clean link based on your name.

Easy to remember. Easy to share. Easy to put in your bio.

byzcard.cc/john-doe
byzcard.cc/mary-oconnor
byzcard.cc/krishna-kumaravel

One button.

SHARE

[ Share card ]

Tap Share card and Byzcard hands your link to your phone's own share sheet.

On iPhone that is the normal iOS share sheet, so the system offers what you already have: AirDrop, Messages, Mail, WhatsApp, Copy, and your other apps.

No custom picker. No extra steps.

The clean link is prepared quietly in the background. If the clean-link service is ever unavailable, Byzcard shares the self-contained card link instead. The button stays the same.


Local-first, precisely.

Your card is created and stored locally by default.

The core card does not require an account or a central profile database.

A self-contained share URL carries the card itself in the URL fragment:

byzcard.cc/s/neeraj-mohanty#<payload>

The recipient's browser reads the fragment and renders the card. No central card lookup is required for this core sharing mode.

The QR code, NFC tags and Wallet passes all carry that self-contained URL. Durable, physical sharing should not depend on an optional service.


$0/month.

Not a trial.

Not a freemium tier.

Free.


Your business card should survive the company that made it.

The core card is self-contained.

The recipient needs no account.

The card is not fundamentally tied to a hosted profile record.

Self-contained sharing works even without the clean-link redirect service. The clean link itself is a convenience layered on top; the card underneath does not depend on it.


Typical digital card SaaSByzcard
Monthly subscription$0
Account requiredNo account
Hosted profile databaseLocal-first core
ProprietaryOpen source
Vendor lock-inSelf-hostable
Limited customizationFully customizable
Platform controls your cardYou control your card

What you get

  • Local-first card creation
  • No account
  • No subscription
  • Progressive Web App
  • Home Screen installation
  • Offline support
  • QR sharing
  • NFC sharing
  • vCard
  • Native Web Share
  • Clean human-readable URLs
  • Self-contained share URLs
  • Local photo processing
  • Backup export/import
  • ID card printing
  • Event badge printing
  • Mobile-first interface
  • Open source
  • Self-hostable
  • MIT licensed

On your Home Screen

Byzcard can be installed to your phone's Home Screen as a Progressive Web App.

The icon opens straight to your card and its QR code. No native app download is required for the core experience.


Keep a backup

Local-first means the card lives on your device, so keep a backup.

Byzcard exports your card and photo as a single file and imports it again on any device. Save it wherever you like: iCloud Drive, Google Drive, Dropbox, your computer, anywhere.

Byzcard never uploads backups on its own.


Print it

Two formats, from your browser's print dialog, with the QR code on the card:

FormatSize
Standard ID Card3.375 × 2.125 in
Event Badge4 × 6 in

Why does this exist?

A business card is simple.

A name. A role. A company. A few contact details. A few links. A QR code.

That should not need another permanent subscription.

So Byzcard does not have one.


What Byzcard is not

Byzcard is not trying to become:

  • a CRM
  • a social network
  • an advertising network
  • a contact-data marketplace
  • an analytics surveillance platform
  • another subscription

It is a business card.

That is enough.


Open source, so make it yours

Want a different layout? Change it.

Want different branding? Change it.

Want your own domain? Use one.

Want to remove short links? Remove them.

Want to build your own version? Fork it.

Before adding something large, ask:

Does this make the business card better, or does it just make Byzcard bigger?

Prefer the first.




Architecture

Core:

Your device
    ↓
Create card
    ↓
Self-contained URL
/s/name#payload
    ↓
QR / NFC / Share / recipient

Optional clean URL:

byzcard.cc/name
    ↓
short-link lookup
    ↓
byzcard.cc/s/name#payload
    ↓
recipient

Byzcard is a Next.js app. Card creation, editing, photo processing, QR generation, vCard generation, NFC payloads, backup export/import, printing and offline use all run in the browser. The only server functionality is a pair of optional, stateless Wallet signing endpoints and the optional clean-link endpoints described below. Details: docs/ARCHITECTURE.md.

Privacy

Two sharing modes, two different promises.

Self-contained cardbyzcard.cc/s/name#<payload>. The card travels inside the link. Browsers never send the fragment to the server, so the server sees only the path. No central card database is involved.

Clean short linkbyzcard.cc/name. This redirects to the self-contained URL above. For it to work, the configured short-link service stores a redirect mapping from the slug to the self-contained destination URL. That destination contains the encoded, compressed card payload. It is not encrypted, and it is not database-free: the clean link requires that redirect mapping.

Byzcard adds no analytics and no tracking. QR codes, NFC tags and Wallet passes always use the self-contained URL.

Clean links are optional per deployment. Byzcard supports a separately deployed open-source short-link service; the official deployment uses Sink on a Cloudflare Worker with D1 and KV, hosted separately from Byzcard itself. Byzcard talks to it only over its HTTP API.

Sink is separate AGPL-3.0 software. Byzcard remains MIT, and no Sink source is part of this repository. Optional clean links can be backed by a separately deployed Sink instance.

Setup, the ownership model and the privacy details live in docs/SHORT_LINKS.md.

Self-hosting

git clone https://github.com/NeerajMohanty/byzcard.git
cd byzcard
npm install
npm run dev

The core application works without configuring the optional short-link service or Wallet credentials. Copy .env.example to .env.local and set NEXT_PUBLIC_APP_URL to your origin when you deploy. Deployment notes: docs/DEPLOYMENT.md. Wallet passes: docs/WALLET_SETUP.md.

Development

npm run dev            # local development server
npm run format:check   # Prettier
npm run lint           # ESLint
npm run typecheck      # TypeScript
npm run test           # unit and integration tests (Vitest)
npm run build          # production build
npx playwright test    # browser tests (Chromium + WebKit, mobile + desktop)

npm run verify runs the first five checks in one go.

Contributing

Issues and pull requests are welcome. Keep changes focused, keep the core local-first and account-free, and add tests for behaviour you touch.

License

MIT. Third-party notices: THIRD_PARTY_NOTICES.md.


Stop renting your business card.

Build it once. Keep it yours.

Create yours →

https://byzcard.cc

Contributors

NeerajMohanty

13 commits

NeerajMohanty/byzcard

Local-first digital business card. No account, stored on your device, shared by QR.

TypeScript

2

13 commits

updated Sep 7, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

I built an open-source digital business card because paying a subscription for a business card felt ridiculous! (r/SideProject)

I was tired of paying so many subscriptions and when I realized I have to pay one for this for my entire team, felt absolutely worthless. So I built this with Claude. Sharing here mades sense because, because everyone one of us, at some point always wanted a digital business card to promote…

1

Sep 18, 2026

README

Byzcard

Your identity is not a subscription.

Open source · Local-first · No account · No subscription · MIT

$0/month · QR + NFC · Clean links · Works offline · Fully customizable


Create yours →

byzcard.cc · Source


MIT License CI


Stop renting your business card.

Most digital business cards work the same way.

Create a profile. Add your details. Get a link. Then keep paying every month.

Byzcard does not.

Create your card.

Keep it.

Share it.

Done.

No account. No subscription. No central card database for the core experience. No lock-in.


One link. Your name.

byzcard.cc/neeraj-mohanty

Your Byzcard can have a clean link based on your name.

Easy to remember. Easy to share. Easy to put in your bio.

byzcard.cc/john-doe
byzcard.cc/mary-oconnor
byzcard.cc/krishna-kumaravel

One button.

SHARE

[ Share card ]

Tap Share card and Byzcard hands your link to your phone's own share sheet.

On iPhone that is the normal iOS share sheet, so the system offers what you already have: AirDrop, Messages, Mail, WhatsApp, Copy, and your other apps.

No custom picker. No extra steps.

The clean link is prepared quietly in the background. If the clean-link service is ever unavailable, Byzcard shares the self-contained card link instead. The button stays the same.


Local-first, precisely.

Your card is created and stored locally by default.

The core card does not require an account or a central profile database.

A self-contained share URL carries the card itself in the URL fragment:

byzcard.cc/s/neeraj-mohanty#<payload>

The recipient's browser reads the fragment and renders the card. No central card lookup is required for this core sharing mode.

The QR code, NFC tags and Wallet passes all carry that self-contained URL. Durable, physical sharing should not depend on an optional service.


$0/month.

Not a trial.

Not a freemium tier.

Free.


Your business card should survive the company that made it.

The core card is self-contained.

The recipient needs no account.

The card is not fundamentally tied to a hosted profile record.

Self-contained sharing works even without the clean-link redirect service. The clean link itself is a convenience layered on top; the card underneath does not depend on it.


Typical digital card SaaSByzcard
Monthly subscription$0
Account requiredNo account
Hosted profile databaseLocal-first core
ProprietaryOpen source
Vendor lock-inSelf-hostable
Limited customizationFully customizable
Platform controls your cardYou control your card

What you get

  • Local-first card creation
  • No account
  • No subscription
  • Progressive Web App
  • Home Screen installation
  • Offline support
  • QR sharing
  • NFC sharing
  • vCard
  • Native Web Share
  • Clean human-readable URLs
  • Self-contained share URLs
  • Local photo processing
  • Backup export/import
  • ID card printing
  • Event badge printing
  • Mobile-first interface
  • Open source
  • Self-hostable
  • MIT licensed

On your Home Screen

Byzcard can be installed to your phone's Home Screen as a Progressive Web App.

The icon opens straight to your card and its QR code. No native app download is required for the core experience.


Keep a backup

Local-first means the card lives on your device, so keep a backup.

Byzcard exports your card and photo as a single file and imports it again on any device. Save it wherever you like: iCloud Drive, Google Drive, Dropbox, your computer, anywhere.

Byzcard never uploads backups on its own.


Print it

Two formats, from your browser's print dialog, with the QR code on the card:

FormatSize
Standard ID Card3.375 × 2.125 in
Event Badge4 × 6 in

Why does this exist?

A business card is simple.

A name. A role. A company. A few contact details. A few links. A QR code.

That should not need another permanent subscription.

So Byzcard does not have one.


What Byzcard is not

Byzcard is not trying to become:

  • a CRM
  • a social network
  • an advertising network
  • a contact-data marketplace
  • an analytics surveillance platform
  • another subscription

It is a business card.

That is enough.


Open source, so make it yours

Want a different layout? Change it.

Want different branding? Change it.

Want your own domain? Use one.

Want to remove short links? Remove them.

Want to build your own version? Fork it.

Before adding something large, ask:

Does this make the business card better, or does it just make Byzcard bigger?

Prefer the first.




Architecture

Core:

Your device
    ↓
Create card
    ↓
Self-contained URL
/s/name#payload
    ↓
QR / NFC / Share / recipient

Optional clean URL:

byzcard.cc/name
    ↓
short-link lookup
    ↓
byzcard.cc/s/name#payload
    ↓
recipient

Byzcard is a Next.js app. Card creation, editing, photo processing, QR generation, vCard generation, NFC payloads, backup export/import, printing and offline use all run in the browser. The only server functionality is a pair of optional, stateless Wallet signing endpoints and the optional clean-link endpoints described below. Details: docs/ARCHITECTURE.md.

Privacy

Two sharing modes, two different promises.

Self-contained cardbyzcard.cc/s/name#<payload>. The card travels inside the link. Browsers never send the fragment to the server, so the server sees only the path. No central card database is involved.

Clean short linkbyzcard.cc/name. This redirects to the self-contained URL above. For it to work, the configured short-link service stores a redirect mapping from the slug to the self-contained destination URL. That destination contains the encoded, compressed card payload. It is not encrypted, and it is not database-free: the clean link requires that redirect mapping.

Byzcard adds no analytics and no tracking. QR codes, NFC tags and Wallet passes always use the self-contained URL.

Clean links are optional per deployment. Byzcard supports a separately deployed open-source short-link service; the official deployment uses Sink on a Cloudflare Worker with D1 and KV, hosted separately from Byzcard itself. Byzcard talks to it only over its HTTP API.

Sink is separate AGPL-3.0 software. Byzcard remains MIT, and no Sink source is part of this repository. Optional clean links can be backed by a separately deployed Sink instance.

Setup, the ownership model and the privacy details live in docs/SHORT_LINKS.md.

Self-hosting

git clone https://github.com/NeerajMohanty/byzcard.git
cd byzcard
npm install
npm run dev

The core application works without configuring the optional short-link service or Wallet credentials. Copy .env.example to .env.local and set NEXT_PUBLIC_APP_URL to your origin when you deploy. Deployment notes: docs/DEPLOYMENT.md. Wallet passes: docs/WALLET_SETUP.md.

Development

npm run dev            # local development server
npm run format:check   # Prettier
npm run lint           # ESLint
npm run typecheck      # TypeScript
npm run test           # unit and integration tests (Vitest)
npm run build          # production build
npx playwright test    # browser tests (Chromium + WebKit, mobile + desktop)

npm run verify runs the first five checks in one go.

Contributing

Issues and pull requests are welcome. Keep changes focused, keep the core local-first and account-free, and add tests for behaviour you touch.

License

MIT. Third-party notices: THIRD_PARTY_NOTICES.md.


Stop renting your business card.

Build it once. Keep it yours.

Create yours →

https://byzcard.cc

Contributors

NeerajMohanty

13 commits

Languages

TypeScript

87.5%

CSS

11.0%

JavaScript

1.5%