A desktop-first, local-first print request management system for registered print offices and libraries.
The current version is designed mainly for local desktop use inside a print office, with an optional online workflow. Students can upload files either through the office’s local network or through the online website, while the office owner manages all requests from an Electron desktop application linked to a specific office.
In many university print offices, students usually send their files in inefficient ways:
- Telegram: the student sends the file manually, then the office owner has to ask for the name, quantity, print type, and other details.
- Bluetooth or cable transfer: this is slow, unreliable, and especially problematic for iPhone users.
- Manual handling: files, names, quantities, and payment status can easily become mixed up.
This causes delays, mistakes, repeated questions, and an unorganized printing workflow.
UOADrop provides a structured workflow between students and print offices.
The system consists of two connected parts:
-
Student Upload Page A browser-based upload page that works on the same local network or through the online website.
-
Office Dashboard An Electron desktop dashboard used by the office owner to manage requests, files, pricing, status, and delivery.
-
Upload multiple files within the same request.
-
Support for multiple offices/libraries.
-
Each office has its own activation code, upload link, and QR code.
-
Public upload link allows the student to choose the office.
-
Office-specific QR link automatically selects the correct office.
-
Student name and default settings are saved locally for repeated use.
-
Independent print settings for each file inside the same request.
-
Ticket number and pickup PIN are displayed immediately after submission.
-
Automatic page counting for supported files:
PDFPPTXJPGPNG
-
Real-time dashboard updates when a new request arrives.
-
Review request files and edit print settings from the dashboard.
-
Manual price entry by the office owner before marking an order as ready.
-
Dashboard filters by:
- status
- source:
local/online - payment status
- ticket number
- name
- Telegram username
- transaction number
-
Clear workflow buttons:
PrintReadyReceived
-
Automatic movement of requests to the ready section or archive.
-
Online requests are synced with Supabase when status, price, or payment changes.
-
Online mirror is removed when an online request is deleted locally, preventing re-import.
-
Bulk announcement system for online requests using Email/Telegram.
-
Live recipient count from Supabase before sending announcements.
-
Project information tab inside the dashboard.
-
Developer, academic, and official page cards inside the dashboard.
-
“About UOADrop” section inside the student page.
-
University and college branding inside the student page.
-
Local serving of logos and UI assets from the Fastify server to ensure the system works inside the local network without depending on external internet access.
| Role | Description | Device/Access |
|---|---|---|
| Office Owner | Manages print requests | Laptop/PC + router + printer |
| Local Student | Uploads inside the office network | Browser connected to the office Wi-Fi |
| Online Student | Uploads remotely | Public website or office QR link |
Student Device
│
Browser on Local Network
│
http://<LAN-IP>:3737/
│
┌────────▼────────┐
│ Electron Desktop │
│ Fastify Server │
│ SQLite Database │
└────────┬────────┘
│
React Dashboard
for Office Owner| Layer | Technology |
|---|---|
| Language | TypeScript |
| Student Page | Standalone HTML/CSS/JS inside apps/desktop/resources/student.html |
| Dashboard UI | React + Vite inside Electron renderer |
| Desktop App | Electron |
| Local Server | Fastify |
| Local Database | better-sqlite3 |
| Local Assets | Logos and UI files served locally from resources/ |
| Page Counting | pdf-lib + local PPTX analysis + images as one page |
| Online Web App | Next.js on Vercel |
| Online Backend | Supabase Storage + Supabase Postgres |
| Monorepo | pnpm workspaces + Turborepo |
| Notifications | Local Electron system notifications + online Email/Telegram notifications |
| Scheduled Alerts | Supabase pg_cron for delay notifications |
| File | Purpose |
|---|---|
docs/ARCHITECTURE.md |
Full architecture and technical details |
docs/SETUP.md |
Router and laptop setup guide for office owners |
docs/RISKS.md |
Risks, prevention, and response plan |
docs/ROADMAP.md |
Product roadmap and phases |
docs/NOTIFICATIONS.md |
Online notification system using Email and Telegram |
docs/GAPS.md |
Critical gap analysis before release |
docs/DECISIONS.md |
Final product decisions such as PIN, pricing, and queue behavior |
docs/HARDENING.md |
Phase 0.5 security and reliability fixes |
docs/GLOSSARY.md |
Terms, roles, and system vocabulary |
docs/RELEASE-v0.1.5.md |
Current release notes and download files |
- Node.js 20 or higher
- pnpm 8 or higher
- Git
pnpm installpnpm --filter @uoadrop/desktop devpnpm --filter @uoadrop/desktop buildUOADrop/
├── apps/
│ ├── web/ # Next.js online upload app + notification APIs
│ └── desktop/ # Electron + Fastify + SQLite + React dashboard
├── packages/
│ └── shared/ # shared types, constants, and validation helpers
├── docs/ # full documentation
├── pnpm-workspace.yaml
└── turbo.jsonCurrent version: v0.1.5
Download release: GitHub Releases — UOADrop v0.1.5
Published release files:
UOADrop.Setup.0.1.5.exe— Windows installerUOADrop.0.1.5.exe— Windows portable versionUOADrop-0.1.5.dmg— macOS IntelUOADrop-0.1.5-mac.zip— macOS Intel ZIPUOADrop-0.1.5-arm64.dmg— macOS Apple SiliconUOADrop-0.1.5-arm64-mac.zip— macOS Apple Silicon ZIPSHA256SUMS.txt— file checksums
- Electron app with React dashboard
- Local Fastify server on port
3737 - Local SQLite database and migrations
- Browser-based student upload page
- Pickup PIN shown in the student page and dashboard
- Page counting for supported file types
- Independent print settings per file
- Project information tab inside the dashboard
- Local visual identity assets served through the local server
- Academic information section inside the student page and dashboard
- Online upload through Next.js/Vercel and Supabase
- Import online requests into the desktop app
- Download online files locally
- Sync online mirror when price, status, payment, or deletion changes
- Ready/Received notifications
- Bulk announcement interface for online recipients through Email/Telegram
- Office selection from the public link
- Automatic office detection from office QR links
- Admin panel for managing offices/libraries
- Activation codes for offices
- Copy activation code buttons
- Delete libraries from the admin panel
- Desktop release builds uploaded through GitHub Releases
The local-first desktop workflow is working and can be used inside a print office without depending on external internet access.
The online workflow is also working:
- Students upload through
https://uoadrop.vercel.app - Files are stored in Supabase
- Requests are imported into the desktop app
- Status, price, payment, and deletion changes are synced back
The system supports multiple registered offices/libraries:
- Each office has an activation code
- Each desktop app is linked to a specific office
- Each office has its own upload link and QR code
- The public upload link allows students to choose the correct office
- Official code signing and notarization
- Full auto-update system
See docs/ROADMAP.md for more details.
University software project focused on solving a real workflow problem in print offices and libraries using a local-first desktop architecture with optional online support.
Private university project — license not specified yet.