Digital print ordering for faster requests, clearer production, and smoother pickup.
PrintGo is a modern online printing platform built for students, campus organizations, and small print shops that want faster ordering, clearer handoffs, and less back-and-forth.
Instead of handling print requests through chat messages, paper forms, and manual follow-ups, PrintGo gives customers a simple digital flow for uploading files, choosing print settings, submitting payment proof, and tracking order progress from request to pickup.
- turns manual print requests into a structured digital workflow
- supports both customer ordering and admin-side fulfillment operations
- designed for real print-shop friction, not just generic storefront browsing
- built as a practical service-business product with room to scale
PrintGo is more than a file-upload form. It handles the operational details that make print ordering actually usable in practice: file validation, page counting, layout options, payment proof, order tracking, and admin-side queue management.
That makes the repo attractive for:
- campus entrepreneurs or print shops looking for a digital ordering workflow
- recruiters evaluating practical full-stack execution and operational UX
- collaborators who want a product with obvious real-world use and room to scale
PrintGo helps print businesses look more professional and operate more efficiently.
Customers get:
- a cleaner ordering experience
- clearer print options per file
- easier payment-proof submission
- order tracking without needing constant follow-up
Operators get:
- a more organized print queue
- fewer manual clarifications
- better visibility into order status
- a workflow that can scale beyond casual chat-based ordering
The product story is easy to understand in one quick walkthrough:
- A customer uploads a file and chooses print settings.
- The customer selects page ranges, layout options, and order details.
- Payment proof is submitted inside the same workflow.
- Staff review the request in the admin queue and move it through fulfillment.
- The customer tracks progress until the order is ready for pickup.
That flow makes PrintGo feel like a real operations product, not just a landing page with a form attached.
Traditional print ordering is messy.
- customers send incomplete instructions through chat
- operators have to clarify paper size, page range, copies, and layout manually
- payment verification slows down fulfillment
- order updates depend on someone replying at the right time
- growing order volume quickly turns into queue confusion
For student-heavy printing environments, that friction adds up fast.
PrintGo turns that manual process into a structured ordering workflow.
- customers upload files and configure print options per document
- the system supports page-range selection and pages-per-sheet layouts
- payment proof can be attached directly to the order
- customers can track progress without repeated follow-up messages
- admins get a cleaner queue, order history, and workflow visibility
The result is a smoother experience on both sides of the counter.
- License: LICENSE
- Security policy: SECURITY.md
- Contribution guide: CONTRIBUTING.md
- guest and account-based ordering
- PDF and Office file uploads
- per-file print settings
- page-range selection
1-up,2-up, and4-upprinting- GCash payment proof upload
- order tracking
- admin dashboard, queue, history, and logs
- structured ordering that reduces incomplete or confusing requests
- operational support for both PDF and Office-based print jobs
- built-in payment-proof handling for smoother confirmation
- status visibility for customers and queue visibility for operators
- strong base for future notifications, pricing rules, and multi-branch workflows
- student-focused print services
- school and campus printing operations
- small print shops that want a digital order pipeline
- founders validating a practical service-business product
- improves customer experience with a more polished ordering journey
- reduces repeated clarification work for shop staff
- creates a more reliable handoff between payment, production, and pickup
- makes small print operations feel more credible and scalable
- turns a manual service into a productized workflow
- A customer uploads a file and selects print preferences.
- The platform captures the order details needed for production.
- The customer submits payment proof.
- Staff review and process the job through the admin workflow.
- The customer tracks progress until the order is ready for pickup.
- built around real print-shop friction, not just generic ecommerce patterns
- handles operational edge cases like file type support and page counting
- useful for both guest users and returning account-based customers
- practical admin workflow instead of a customer-only frontend
- strong foundation for future expansion into pricing automation, notifications, and branch operations
PrintGo is a strong portfolio piece because it shows:
- product thinking around a real-world operational problem
- full-stack implementation across frontend, backend, storage, and file handling
- workflow design for both customer-facing and admin-facing users
- practical business framing instead of a purely technical demo
This project is developed with support from Claude and Codex for implementation, iteration, debugging, and QA workflows.
See CREDITS.md for project credit details.
- Node.js
- Express
- Supabase Postgres
- Supabase Storage
- Vanilla HTML, CSS, and JS
- LibreOffice for Office file page counting (
docx,xlsx,pptx)
The sections below focus on local setup and implementation details for contributors and evaluators who want to run the project.
Install:
- Node.js 22+
- npm
- Supabase project
- LibreOffice
LibreOffice is needed if you want automatic page counting for:
.docx.xlsx.pptx
Without LibreOffice:
- PDF counting still works
- Office files fall back to manual page count
npm installCopy:
copy .env.example .envThen fill in real values in .env:
SUPABASE_URLSUPABASE_SERVICE_KEYAPP_AUTH_SECRETSUPABASE_STORAGE_BUCKETBINDING_FEERUSH_FEEGCASH_ACCOUNT_NAMEGCASH_ACCOUNT_NUMBERGCASH_QR_URL
If LibreOffice is installed locally, also set:
LIBREOFFICE_PATH=C:\Program Files\LibreOffice\program\soffice.exeIn Supabase:
- create your project
- create the storage bucket
printgo-files - run the required SQL migrations in Supabase SQL Editor
Recommended migration order:
- server/db/schema.sql
- server/db/username_auth_migration.sql
- server/db/order_items_migration.sql
- server/db/pickup_confirmation_migration.sql
- server/db/page_selection_and_a3_migration.sql
- server/db/pages_per_sheet_migration.sql
If you are working from an older database, also review:
Development:
npm run devProduction-style local run:
npm startDefault local URL:
http://localhost:3000
Check these:
//order/tracking/login/register/admin/admin/orders
Then test:
- create an order
- upload a payment proof
- track the order
- review it in admin
- move it through completion
This repo already includes:
Push the repo to your GitHub remote.
In Render:
- choose
New - choose
Blueprint - select this repo
- keep:
- branch:
main - blueprint path:
render.yaml
- branch:
Set these in Render:
SUPABASE_URLSUPABASE_ANON_KEYSUPABASE_SERVICE_KEYAPP_AUTH_SECRETGCASH_ACCOUNT_NAMEGCASH_ACCOUNT_NUMBERGCASH_QR_URL
Already handled by render.yaml:
PORT=10000SUPABASE_STORAGE_BUCKET=printgo-filesBINDING_FEE=15RUSH_FEE=10LIBREOFFICE_PATH=/usr/bin/libreoffice
Apply the Blueprint and wait for the service to build.
Health check path:
/order
Open the live app and test:
- homepage
- order flow
- tracking
- admin dashboard
- admin queue
- proof/file preview and download
Important:
- Render free may sleep when idle
- first load can be slow
If you want a more reliable production setup, use a VPS.
This repo includes:
Copy the project to your Ubuntu server.
Copy:
cp .env.production.example .envThen fill in real values.
chmod +x scripts/deploy-ubuntu.sh
./scripts/deploy-ubuntu.shOptional Nginx setup:
DOMAIN_NAME=yourdomain.com RUN_NGINX_SETUP=true ./scripts/deploy-ubuntu.shRun the same SQL migrations in your production Supabase project before going live.
Automatic page counting for Office files depends on LibreOffice.
If it is missing:
- the app still runs
- PDF counting still works
- Office files may need manual page count
Uploaded files are stored in Supabase Storage, not permanently on local disk.
The app uses temporary local upload processing, then pushes files into the storage bucket.
/admin= dashboard/admin/orders= order queue
Before demo or go-live, follow:
Also review:
Available npm scripts:
npm run dev
npm startIf you are changing core order/admin flows:
- run the end-to-end smoke test again
- avoid mixing feature work with release fixes
- verify mobile and desktop before pushing


