Print Fly

Website Development

Aug 2025

A few college friends asked me to help improve their work experience project. Printing documents on campus is usually stressful and confusing for both students and vendors. They built a web app where students can upload files, choose print settings, pay online, and get notified when their prints are ready, making the whole process smoother and less crowded. They had a basic version, and I helped refine and improve it.

Print Fly Cover Image

Print Fly Cover Image

Planning

First I had a meeting with them on the same day and got to know the current status of their project. They had created a basic interface using HTML and Tailwind CSS, using SQLAlchemy for their database and flask framework. Their prototype was capable of:

They were facing several issues, the main one being integrating the online payment feature. While significant progress was made, their prototype had many flaws. Their tech stack selection wasn’t compatible when it came to full scale deployment and there were several functionalities that were yet to be added. I analyzed everything and decided it would be best if we started the whole project from scratch instead of trying to fix the existing one since it would take up a lot of time. I proposed a new tech stack comprising:

Tech Stack

PrintFly Tech Stack

PrintFly Tech Stack

I also requested for a process diagram from one of them to have an in-depth understanding of the overall flow of the application. They agreed to my proposal and project Print Fly was officially initiated. Recreating a project from scratch does sound daunting especially with a tight deadline, however it’s not impossible, so I just had to plan and work accordingly.

Getting Started

Print Fly Me Page

Print Fly Me Page

I began working on the project the next day after the meeting. I understood the overall workflow and first redesigned a few of the basic elements of their prototype like the signup page, login page, admin dashboard, document upload page and other basic pages using react.js. Why? The shift to React.js was primarily to adopt a more dynamic and component-based architecture, which would handle API integrations, state management, and future scalability more efficiently than a largely static frontend set-up. I also added a separate interface for admin signup/ login for precautionary reasons.

Print Fly Dashboard

Print Fly Dashboard

Afterwards, I set up an environment for backend using node.js and began working on the database. While SQLite was a good choice for initial development, it is less suited for scalable, production-level deployment and is not optimal for handling high concurrent transactions, hence I decided to switch to using PostgreSQL with Prisma ORM.

Prisma Schema Diagram

Prisma Schema Diagram

The next thing to consider was Razorpay API. It is a suitable option when it came to integration of payment gateway. It provides a user-friendly interface and is highly adaptable. However, there are certain issues that arise when we use this like requiring proper business certification for QR Code generation. Once that’s acquired, we can implement it for real-time functionality.

Print Fly Payment Flow

Print Fly Payment Flow

Workflow

UploadThing Flow

UploadThing Flow

After finalizing the redesigned interface, I initialized the database using PostgreSQL with Prisma ORM and configured the backend environment using Node.js. UploadThing was integrated to enable seamless document handling for the admin dashboard. Once the core structure was stable, I proceeded with integrating the Razorpay API and ensured smooth communication between the frontend and backend.

Razorpay Flow

Razorpay Flow

Following integration, I conducted a review session with the team. Based on their feedback, additional features were implemented, including real-time job status notifications, enhanced print specifications, and input validation constraints for email and phone numbers.

The project was completed over a span of three weeks. Throughout development, I encountered challenges related to environment configuration and dependency management, but careful debugging and structured testing ensured stable and efficient deployment.

Conclusion

Print Fly Collage

Print Fly Collage

After three weeks from initiation, the project was successfully completed. The prototype developed was much more refined with extra functionality than the original one. It was honestly an amazing learning experience for me as I worked experimenting and implementing new features.