Open-source digital business card platform with QR codes and PWA support
Swiish is a self-hostable platform for creating and sharing digital business cards. Create beautiful, customizable business cards with QR codes, share them via links, and let users save your contact information directly to their phones.
- π Create and manage digital business cards - Build professional digital cards with all your contact information
- π¨ Advanced theming engine - Fully customizable design system with multiple theme variants, design token system, background textures, and automatic light/dark mode support
- π± Progressive Web App (PWA) - Install cards as apps on mobile devices for offline access
- π² QR code generation - Generate QR codes with simple URLs or full vCard contact information
- π Privacy controls - Require interaction before revealing contact details, obfuscate contact info, and block search engines
- π€ File uploads - Upload custom avatars and banner images
- π Dark mode support - Automatic dark mode with manual toggle
- π± Responsive design - Works beautifully on desktop, tablet, and mobile
- π Admin dashboard - Manage all your cards, users, and organization settings from a central dashboard
Have a look at a working demo:
- How your cards can look
- How the admin dashboard looks (demo will bypass login)
Note: The demo is reset hourly and doesn't include the setup process that runs when you first install Swiish.
- For Docker deployment: Docker and Docker Compose
- For local development: Node.js 18+ and npm
See DOCKER.md for complete Docker setup instructions.
-
Clone and install dependencies:
git clone https://github.com/MrCrin/swiish.git cd swiish npm install -
Configure environment:
cp .env.example .env # Edit .env -
Start development server:
npm start # React dev server on http://localhost:3000
For production, build and serve:
npm run build
npm run serve # Runs on PORT from .env, default 3000All configuration is done via environment variables. Copy .env.example to .env and fill in your values.
JWT_SECRET- Secret key for JWT token signing. Generate with:openssl rand -base64 32
NODE_ENV- Environment mode (developmentorproduction)PORT- Server port (default:3000)APP_URL- Base URL for the application (required in production)ALLOWED_ORIGINS- Comma-separated list of allowed CORS originsMAX_FILE_SIZE- Maximum file upload size in bytes (default: 5MB)FORCE_HTTPS- Force HTTPS redirects (trueorfalse)- Email Configuration (SMTP) - For email features like invitations
See .env.example for all available options and their descriptions.
Demo mode allows visitors to explore Swiish without requiring authentication or setup. This is useful for showcasing the platform on dedicated demo instances.
- Set the
DEMO_MODEenvironment variable totrue - Restart the server
- The app will automatically:
- Seed the database with demo company "Demon Straight" (a fictional company that makes really straight things)
- Create 6 demo employees with different card configurations
- Skip the login flow and auto-authenticate visitors
- Reset all data every hour to maintain a clean demo state
- Complete the initial setup wizard at
/setupto create your organization and admin account - Log in to access the admin dashboard at
/admin - Click "Create New Card"
- Enter a unique slug (e.g.,
john-doe) - Fill in your contact information, upload images, customize the theme
- Click "Save"
- Your card is now available at
http://your-domain.com/john-doe
- Direct Link: Share the card URL directly
- QR Code: Click the share button on any card to generate a QR code
- Simple Mode: QR code contains just the card URL
- Full Details Mode: QR code contains vCard data for direct contact saving
Each card supports three privacy options:
- Require Interaction: Users must click "See my details" before contact info is revealed
- Client-Side Obfuscation: Contact information is obfuscated in the HTML
- Block Robots: Prevents search engines from indexing the card
Swiish features a powerful theming engine with design tokens for colors, textures, border radius, and border width. Built-in themes include "swiish" and "minimal". You can create custom themes by adding files to src/theme/.
For detailed theming instructions, see the full documentation.
-
Clone and install:
git clone https://github.com/MrCrin/swiish.git cd swiish npm install -
Set up environment:
cp .env.example .env # Configure for development -
Start development server:
npm run dev # Runs build and server in watch mode
swiish/
βββ src/ # React frontend
β βββ App.js # Main application
β βββ index.js # React entry point
β βββ theme/ # Theming system
βββ public/ # Static assets
βββ server.js # Express backend
βββ data/ # SQLite database
βββ uploads/ # User uploads
βββ migrations/ # Database migrations
npm start- Start React development servernpm run build- Build production React appnpm run serve- Serve production buildnpm run dev- Development mode with hot reloadnpm run migrate- Run database migrations
We welcome contributions!
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes and add tests
- Run the development server:
npm run dev - Submit a pull request
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
See CHANGELOG.md for a list of changes and version history.