Skip to content

Built for the purchase process at Sri JCBM College

Vendor Quotation Comparison System

Buying equipment for a college usually means collecting quotations from several vendors, comparing them line by line, and issuing a purchase order. Done in spreadsheets, the comparison is slow and easy to get wrong. This application keeps the quotations in one place and does the comparison for you.

At a glance

  • Main developer of a Windows desktop app, completed and packaged with an installer in April 2026.
  • Compares quotations by item and by vendor, marks the best price for every item, and recommends the cheapest mix of vendors.
  • Generates purchase orders and PDF comparisons, with no server or internet connection needed.
Who it's for
College staff who handle equipment purchases
Role
Main developer in a six-person team
Team
Team of 6
When
October 2025 – April 2026
Status
Status: Completed

Packaged as a Windows desktop application with an installer.

Built with
  • Python
  • Flask
  • SQLAlchemy
  • SQLite
  • JavaScript
  • Bootstrap 5
  • pywebview
  • PyInstaller
The Item-wise Price Comparison table: items such as a Dell OptiPlex desktop, an HP monitor, a Canon printer, an Epson projector and an APC UPS in rows, and five vendors in columns. Each cell shows the unit price, quantity and total; the cheapest vendor for each item is highlighted in green with a Best Price label, and items a vendor didn't quote show Not Available.
Five vendors compared item by item. The cheapest quote for each item is highlighted; an item a vendor didn't quote shows Not Available. Vendors are fictional; products and prices are realistic.

Context and problem

Each vendor sends a quotation in its own format, with its own item names, quantities and tax treatment. Comparing three or four of them means retyping everything into one sheet before any comparison can start.

Purchase orders then have to be prepared from the chosen prices, and earlier quotations and orders need to be found again later.

Objectives

  • Enter each quotation once, with items, quantities, unit prices and GST.
  • Compare vendors side by side, either by item or by vendor.
  • Generate purchase orders and printable documents from the comparison.
  • Run on an office PC without a server or an internet connection.

My role

Main developer in a six-person team

  • A teammate started the project with a small Flask prototype. I rebuilt and extended it into the current application: the Flask backend, the data model, and the comparison screens, including best-price detection and the vendor recommendation.
  • Built GST and PAN validation for registered and unregistered vendors.
  • Built the backup and restore system and the desktop packaging with pywebview and PyInstaller.
  • Two teammates also contributed code: the Excel export, purchase-order and print-preview updates, and dashboard changes.

Approach

The application is a Flask web app wrapped in a native desktop window with pywebview. That gave me HTML and JavaScript for a data-heavy interface, while the people using it simply open a desktop program.

Vendors, quotation items, purchase orders and order items are stored in SQLite through SQLAlchemy. Deleting a vendor or a quotation moves it to a recycle bin first, so mistakes can be undone.

Architecture

Backend
Flask with SQLAlchemy models for vendors, items, purchase orders and order items.
Interface
Server-rendered templates with Bootstrap 5 and plain JavaScript for the comparison views.
Desktop shell
pywebview opens the app in a native window; the packaged build only accepts connections from the same machine.
Data
SQLite, with automatic and manual backups and restore.
Distribution
PyInstaller builds a Windows executable and an installer.

Challenges and decisions

  1. Recommending a mix of vendors, not just the cheapest one

    The vendor with the lowest total is rarely the cheapest for every item. The comparison marks the best price for each item separately, then recommends buying each item from the vendor that quoted it lowest, with the total cost of that mix. Comparing by vendor shows which single vendor is cheapest overall, and by how much. Items a vendor didn't quote are shown as Not Available, rather than being treated as free.

  2. Desktop rather than hosted

    The purchase data is internal and the office already works on Windows PCs. A packaged desktop app avoids hosting costs and accounts, and keeps the data on the machine that uses it.

The Price Comparison Chart: grouped bars showing the subtotal, GST amount and total of each of five vendors' quotations, above summary cards for each vendor, with the lowest total marked Best Price.
Each vendor's subtotal, GST and total side by side, with the lowest overall quote marked.
The Comparison Summary: potential savings, savings percentage, average price and number of vendors compared, and a recommendation naming the vendor with the best overall price and the saving against the highest quote.
The summary names the cheapest vendor overall and how much it saves against the highest quote.
A purchase order generated by the application, on the college letterhead: college and vendor details, the PO number, PO date, quotation number and date, a table of five items with quantity, price, GST and total, the subtotal, GST and grand total, and a signature line for the Principal.
A purchase order generated from the chosen vendor's quotation, ready to print and sign.
A saved quotation open in the Add Vendor Quotation form: vendor name, phone, email and address, a GST or PAN toggle with the GST number, and the quotation number and date above its items.
Entering a quotation. A vendor is identified by GST number or, if unregistered, by PAN.
The Saved Vendors list: five vendors with their GST or PAN number, quotation date, phone, number of quotations and items, and actions to edit, view, add items, issue a purchase order, exclude from comparison or delete.
Every saved quotation, with actions to edit it, add items or issue a purchase order.

Outcome and status

Implemented: quotation entry with drafts, comparison by item and by vendor, best-price detection and a mixed-vendor recommendation, purchase orders with cancel and restore, PDF export of comparisons, print previews, a recycle bin for vendors and quotations, and scheduled backups.

The application was completed and packaged with a Windows installer in April 2026.

Built for internal use, so there is no public demo or repository.

Lessons

What I learned

Packaging Python for Windows took far longer than expected: file paths, write permissions and bundled assets all behave differently once installed. I now test the installed build early, not just the development version.

Fixes made as one-off scripts are hard to track. On later projects I keep every fix in the codebase and its version history, where it can be reviewed and repeated.

Got something that needs building?

Tell me what's slowing your team down. I'll tell you honestly what it would take, and whether I'm the right person for it.

adithyamdgowda@gmail.com

Hiring a developer? I'm also open to full-time roles. View my resume.