Back to Projects

Project Overview

A full-stack web application for real-time inventory tracking. Supports multiple user roles (Admin, Manager, Staff), automated low-stock alerts, purchase order generation, and supplier management — all in a clean responsive UI built with Flask and Bootstrap.

3User Roles
Real-timeStock Updates
AutoLow-Stock Alerts
PDFPO Generation

Core Features

  • Stock Management: Add, update, transfer stock between locations
  • Low-Stock Alerts: Auto email when item drops below reorder threshold
  • Purchase Orders: Generate PDF POs from low-stock items in one click
  • Supplier Portal: Track supplier contacts, lead times, unit costs
  • Reports: Stock movement history, valuation reports, fast/slow movers
  • Role-Based Access: Staff see only their location; Managers see all

Flask Backend

Python
from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, login_required, current_user
from functools import wraps

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:pass@localhost/inventory_db'
db = SQLAlchemy(app)

class Product(db.Model):
    id           = db.Column(db.Integer, primary_key=True)
    name         = db.Column(db.String(100), nullable=False)
    sku          = db.Column(db.String(50), unique=True)
    quantity     = db.Column(db.Integer, default=0)
    reorder_qty  = db.Column(db.Integer, default=10)
    unit_cost    = db.Column(db.Float)
    supplier_id  = db.Column(db.Integer, db.ForeignKey('supplier.id'))

@app.route('/api/stock/update', methods=['POST'])
@login_required
def update_stock():
    data = request.json
    product = Product.query.get_or_404(data['product_id'])
    product.quantity += data['quantity_delta']
    db.session.commit()
    if product.quantity < product.reorder_qty:
        send_low_stock_alert(product)    # async email via celery
    return jsonify({'status':'ok','new_qty':product.quantity})

Outcome

Deployed for a small retail business managing 500+ SKUs across 3 locations. Eliminated manual spreadsheet tracking and reduced stockout incidents by 40% in the first month through proactive alerts.

FlaskMySQLSQLAlchemy BootstrapHTML/CSS/JSPython