Files
QRForge-selfhosted/README.md
T
dillard f8addb95f1 Rebrand to QRForge (local only - do not push before domain confirmed)
Applies the approved QRForge brand kit throughout the app:
- New logo/icon SVGs, favicon set (ico/svg/png), apple-touch-icon, all
  copied from the approved brand kit into src/dist/img/brand/. Old
  Symbol_WhiteBlue.png/DynamicQRCode_Original.png removed (unused after
  the swap).
- Sidebar brand image/text, login and change-password page logos, all
  <title> tags, manifest.json name/theme-color, and the PWA icons
  (dist/img/icon-192.png/icon-512.png, same filenames so no other
  reference needed to change) updated to QRForge branding and the
  #2563EB brand blue.
- New about.php page (+ sidebar link): credits the original upstream
  fork (Giandonato Inverso) and chillerlan/php-qrcode, links to the free
  qr.ensembia.com try-out, the commercial www.qrforge.eu product page,
  and this GitHub repo for self-hosters.
- Footer now reads "QRForge" + "About / credits" + "Version 3.0"
  (replaces the inherited "PHP Qrcode Generator by Giandonato Inverso" /
  "Version 2.3.0" line - full credit moved to the About page instead).
- README.md rewritten: current feature set (all 16 static qr types,
  presets, scanner, PWA, location search, roles), qr.ensembia.com as the
  free try-out, www.qrforge.eu as the commercial product page, corrected
  Docker Compose setup steps (.env is required now, the old README still
  described the single-file demo setup from the original upstream fork).

IMPORTANT: not pushed to origin/gitea. Per user instruction, no push
until qrforge.eu domain registration is confirmed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Fo3DiRRpmz2DXjD7Uzhc8u
2026-07-11 02:48:05 +02:00

2.9 KiB

QRForge

Self-hosted, open-source QR code generator.

QRForge creates and manages static and dynamic QR codes from a clean, responsive control panel. It's a security-hardened, actively maintained fork of the original PHP Dynamic Qr code project by Giandonato Inverso, built on AdminLTE.

  • Try it free: qr.ensembia.com - fully functional OSS test instance, register your own account any time.
  • Commercial VIP edition (self-service create-rights, logo-embedded QR codes): www.qrforge.eu.
  • Self-host it yourself: this repository, MIT-licensed.

Features

  • Dynamic QR codes with a database-backed URL shortener
    • Create, edit, delete, enable/disable the redirect
    • Download any time, bulk download/delete
    • Batch-generate from a CSV file
  • 16 static QR code types: Text, Email, Phone, SMS, WhatsApp, Skype, Location, vCard, Event/calendar, Bookmark, WiFi (incl. WPA3), PayPal, Bitcoin, 2FA, App Link (Android intent / universal links), Bluetooth
  • QR code styling: 6 export formats, foreground/background color, 4 precision levels, 10 sizes, optional label text below the code (custom font + size), optional icon shown above the code, save/load your own style presets
  • Address search (OpenStreetMap Nominatim) for Location QR codes
  • Built-in QR scanner (camera or image upload, decodes entirely client-side)
  • Installable as a PWA
  • Role-based access: super (full access + user management), admin (scoped to their own codes and sub-users), user (read-only, with optional per-account create rights and view toggles set by an admin)
  • Dashboard with QR/scan statistics and a 7-day activity chart
  • CSRF protection, login rate limiting, session hardening, audit log
  • Docker Compose setup, both a dev image and a production Nginx + PHP-FPM image

What is included

  • PHP 8.4 application source
  • Database schema + migrations
  • Docker Compose files (dev and production)
  • CSS/JS assets

Setup with Docker Compose

  1. Clone this repository.
  2. Copy .env.example to .env and set a real DATABASE_PASSWORD / MYSQL_ROOT_PASSWORD.
  3. Start the stack:
    docker compose up -d --build
    
  4. Open http://localhost and log in with superadmin / superadmin. You'll be required to set a new password on first login.

For a production deployment behind a reverse proxy, use docker-compose.prod.yml (Nginx + PHP-FPM) instead of the dev stack.

Credits

License

MIT - see LICENSE.