Skip to main content

Current Features

Qprint is a full-stack print-on-demand platform. This document lists all features implemented and available today.


Customer Features

FeatureDescription
User registration & authenticationJWT-based login: password (username/email/mobile) or email OTP; sign-up requires email OTP verification (6-digit code via Resend). All OTP flows are email only (no SMS).
File uploadPDF, images (PNG/JPG/JPEG), Word (DOC/DOCX), PowerPoint (PPT/PPTX). Billing uses real page/slide count where available; see Supported File Types below.
Print optionsCopies, single/double sided, color/B&W, paper size (A4, Letter, etc.)
Private printsUnique 6-character code for pickup
Queue printsSend to a specific shopkeeper for printing
Payment integrationRazorpay (card, UPI, netbanking)
Wallet paymentsPre-load balance, instant payments, hybrid (wallet + Razorpay)
Cost calculationPre-payment cost estimate
File history & trackingView uploads, status (including "Printing at shop...", "Cancelled by shop"), queue position; cancel reason shown when shop cancels an order
Expense trackingTrack print spending (cancelled orders excluded from pending costs)
Shop favoritesSave preferred shopkeepers
Nearest shop finderLocation-based shop discovery (requires login; GET /shops is protected)
Withdraw printsCancel and get automatic refund; withdraw is disabled while the shop has started printing (status printing); re-enabled if print fails or times out; withdraw hidden for orders cancelled by shop (status cancelled; customer is refunded automatically)
Login with email OTPOptional: request OTP to email → verify 6-digit code → receive JWT (web, customer app, shopkeeper app). Email only.
Password/username recoveryEmail-based reset via Resend API
Profile managementUpdate account details
Delete accountSelf-service account deletion with password confirmation
Map viewSee shop locations on a map
Real-time queue positionLive updates on queue status
Download Apps pagePublic page with Windows/Android/iOS app links (admin-configurable)
Delete data (GDPR)Public /delete-data page for Play Store "Delete data" link requirement

Shopkeeper Features

FeatureDescription
Shop registrationCreate shop with name, address, location (lat/long)
Queue managementView and process print queue; cancel order (with required reason) before printing — customer is notified, refunded, and sees the reason; cancel not allowed once printing has started
Private print code entryEnter customer code to fetch and print
Print job processingProcess single or batch prints; print-started and print-failed API calls so customer withdraw is disabled while printing and re-enabled on failure
Windows silent printingSumatraPDF CLI — no dialogs
Print verificationWMI-based completion check; page-based timeout (60 + 15 × pages seconds, no cap) before confirming
Multi-file batch printingQueue multiple prints to different printers
Shop status toggleMark shop open/closed; optional auto-close when app heartbeat and web activity are stale
Shop heartbeatApp sends heartbeat to keep shop "open"; sweeper auto-closes when both app and web are inactive
Earnings statisticsView revenue and commissions
Print historyPast jobs and status
Payout trackingTrack pending and completed payouts
Printer selectionChoose printer per job
File conversionWord/PPT → PDF via LibreOffice (Windows). Pre-convert runs in background when queue loads; at print time cache is used or on-demand convert.
Delete accountSelf-service account deletion with password confirmation
Windows installerMSIX package (Publisher: Qprint, white logo, desktop shortcut); optional classic .exe (Inno Setup) with install-directory choice and desktop-shortcut checkbox. See Windows Installer.

Supported File Types (Platform-Wide)

TypeExtensionsPage/slide countNotes
PDF.pdfFrom filePassthrough; no conversion
Images.png, .jpg, .jpeg1 per fileConverted to single-page PDF (fit to paper)
Word.doc, .docxDOC: OLE SummaryInformation; DOCX: app.xml or document.xmlConverted via LibreOffice (shopkeeper Windows)
PowerPoint.ppt, .pptxSlide count (PPTX: slide XMLs; PPT: binary)Converted via LibreOffice (shopkeeper Windows)
  • Billing: Cost = pages × copies × rate. When the backend cannot determine page/slide count (e.g. .doc without summary, corrupted or non-standard file), the API returns 400 with: "Page count not available for this file. Please convert to PDF and upload."
  • Max 20MB per file, 100MB total per upload batch.

Admin Features

FeatureDescription
User managementView users, user details, delete user accounts
Order managementView all payment orders
Payout managementUpdate payout status (single or bulk), export payouts
Manage paymentsPer-shop payout history and mark-as-paid
App download linksSet Windows/Android/iOS download URLs and "coming soon" flags (shown on public Download Apps page)
Dashboard statisticsPlatform analytics overview

Platform Features

FeatureDescription
Multi-role systemCustomer, Shopkeeper, Admin
Payment gatewayRazorpay integration
Email serviceResend API (recommended) or SMTP
File storageLocal (default) or AWS S3
Database migrationsPostgreSQL with schema management
JWT authenticationSecure API access
CORS configurationConfigurable allowed origins
Webhook handlingRazorpay payment confirmations
Commission systemConfigurable platform commission
Wallet serviceTop-up, pay, refund, transaction history

Security Features (Implemented)

ComponentFeatures
BackendJWT validation (32+ chars), CORS, rate limiting, file upload validation (MIME + magic bytes), security headers, password reset token hashing, webhook signature verification, secure account deletion; optional SKIP_AUTH_COOKIE so only Bearer auth is accepted (no cookie when opening API URL in browser)
Frontend WebhttpOnly cookie auth, CSRF protection, security headers, generic error messages, delete account with password confirmation
Customer AppSecure token storage, certificate pinning, root/jailbreak detection, session timeout (15 days idle), registration duplicate-field messages (username/email/mobile), delete account
Shopkeeper AppSecure token storage, certificate pinning, HTTP timeout, API URL config, PowerShell injection fix, path traversal sanitization, verbose logging, session timeout (30 min), token fallback restriction, file integrity verification, delete account

See Security Audit for full details.


Deployment & Integrations

  • Backend: Render-ready (Go)
  • Frontend: Vercel-ready (Next.js)
  • Mobile: Flutter (Android, iOS, Windows for shopkeeper)
  • Printing: SumatraPDF (required), LibreOffice (optional, for Word/PPT)

Last Updated: February 2026 (page count by file type; convert-to-PDF message when count unavailable; pre-convert cache; email-only OTP; shopkeeper cancel with reason; SKIP_AUTH_COOKIE)