QR4DOC
Note: this project is in search for funding, or it’s source code is for sale. If you are interested in pushing this project forward, please do reach out to me.
Description
A short-lived SaaS developed for validation, supplemental information, and notification on change for printed documents, originally intended for insurance policies.
It generates a unique link that gets embedded in the document in the form of a QR code. Scanning the code and opening the link will display a document summary (for all it’s versions) for a visual comparison of important document elements as a method of checking if the print is a fraud copy or obsolete. The page can also contain multiple web links (think Linktree) relevant for the document, and visitors can subscribe for notifications on new document versions, or the change of it’s status if it has any.
Technical details
Primary service:
- Multi-tenant (per document issuer), multilingual application that hosts the Web UI and a JSON API, tenancy is based on combination of separate PostgreSQL schemas and a tenant key
- Issuer creation and usage limits (depending on subscription, manually configured), global usage limits & request throttling, User creation and auth, file & document creation (documents are append only), document detail masking, visitor complaint forms, basic visitor stats, web push notifications on file update
- QR and DataMatrix codes for generated file URLs
- Developed in Elixir + Phoenix LiveView + Tailwind + hacks, deployed as systemd service on an Ubuntu box behind a Caddy server proxy, blue-green deployment via custom bash scripts (binaries built locally)
- Translations for: English, Serbian (cyrillic), Bosnian, Croatian
Secondary (untested) service:
- Mobile API service with a custom public key authentication, push notification subscriptions and delivery via FCM or Huawei PushKit
- Developed in Go language, with an end-goal to port all functionality from the primary service in order to improve portability and maintainability of the project
Mobile client app was planned, but not developed.
Some screenshots