Self-hosted PWA · Port 6969

Digital business cards.
On your NAS.

CardKit is a lean PWA for personal digital business cards — share by link or QR, secure and independent on your own NAS.

Image ghcr.io/olivermandic/cardkit:latest Port 6969
CardKit on two iPhones — light and dark mode

What CardKit does

Create your own cards, share, and save — no org admin and no SaaS baggage.

Personal cards

Name, title, company, photo, banner, contact & socials. Empty fields stay hidden.

Create multiple cards

Create as many cards as you need — personal, business, side hustle, or different companies — and keep each identity separate.

Photo → PWA icon

Add the PWA to your Home Screen and the card’s profile photo becomes the app icon. With multiple cards, the installed PWA dynamically shows a picker so you can choose which card to open; one card opens directly.

QR & vCard

QR for link or contact file. Save contact as .vcf.

Themes

Red, yellow, blue, green, orange, gray — or a custom accent. Light/dark included.

How it looks

CardKit card in light mode
Card · Light
CardKit card in dark mode
Card · Dark
Live demo

Try CardKit now

Open the public demo card, or sign in to the demo admin to explore the full UI. Hosted at cardkit-demo.olivermandic.de.

Demo card

Public sample card — share link / QR as end users see it.

Open demo card

https://cardkit-demo.olivermandic.de/c/ck

Demo admin

Public demo credentials — for exploring the admin UI only. Do not reuse elsewhere.

Email
admin@admin.ad
Password
admin678
Open demo root

Installation

Pull-based setup with Docker Compose. Image from GHCR, host port 6969.

docker-compose.yml

GHCR · latest
services:
  cardkit:
    image: ghcr.io/olivermandic/cardkit:latest
    ports:
      - "6969:8080"
    environment:
      ALLOW_SIGNUP: "true"
      # Optional: set PB_SUPERUSER_EMAIL / PB_SUPERUSER_PASSWORD via .env
    volumes:
      - cardkit-data:/pb/pb_data
    restart: unless-stopped

volumes:
  cardkit-data:

Quick start

  1. 1
    Create the Compose file Save the snippet above — or take it from the repo.
  2. 2
    Pull & start docker compose pull && docker compose up -d
  3. 3
    Open http://<host>:6969 — create an account, then a card.
  4. 4
    Lock signup Then set ALLOW_SIGNUP=false and recreate the container.

Portainer

Stacks → new stack → paste Compose → Deploy. Leave the image name unchanged.

Dockhand

Create a Compose project, use the same service block, publish port 6969.

Synology Container Manager

Create a project, load the YAML, keep the volume for /pb/pb_data.

Note: Data and uploads live in the cardkit-data volume. Put HTTPS in front of port 6969 for the PWA offline cache (Caddy/Traefik). Image: ghcr.io/olivermandic/cardkit:latest.

App languages

CardKit’s UI ships in these locales (from the app).