2026-01-16 12:48:03 -05:00
2026-01-16 12:48:03 -05:00

Drug Inventory System

A simple, lightweight drug inventory management system for small charity veterinary clinics.

Tech Stack

  • Backend: Python + FastAPI + Uvicorn + SQLite
  • Frontend: Plain HTML, CSS, JavaScript (no frameworks)
  • Database: SQLite (file-based, zero setup)

Features

Add, edit, delete drugs
Track quantities and units
Low stock alerts
Filter by inventory status
Responsive design (works on desktop and mobile)
Fast and lightweight

Everything runs in containers. Just make sure you have Docker and Docker Compose installed.

docker-compose up

That's it! Everything will start automatically:

  • Frontend: http://localhost (Nginx serving the UI)
  • Backend API: http://localhost:8000 (FastAPI)
  • API Docs: http://localhost:8000/docs (Interactive Swagger UI)
  • Database: SQLite file at ./drugs.db (auto-created)

To stop:

docker-compose down

To rebuild after code changes:

docker-compose up --build

Project Structure

/drugs
  /backend
    /app
      __init__.py       # Database config
      database.py       # Database connection setup
      models.py         # SQLAlchemy models
      main.py           # FastAPI app and routes
    requirements.txt    # Python dependencies
    Dockerfile          # Container image
  
  /frontend
    index.html          # Main page
    styles.css          # All styling
    app.js              # All JavaScript logic
  
  docker-compose.yml    # Run everything with Docker Compose
  nginx.conf            # Nginx config for frontend

API Endpoints

Method Endpoint Description
GET /drugs List all drugs
GET /drugs/{id} Get specific drug
POST /drugs Create new drug
PUT /drugs/{id} Update drug
DELETE /drugs/{id} Delete drug
GET /drugs/low-stock Get low stock drugs

Database

SQLite database is stored as drugs.db in the project root. It's a single file that persists between container restarts. You can:

  • Backup by copying the file
  • Share with team members

Configuration

Edit environment variables in docker-compose.yml:

environment:
  - DATABASE_URL=sqlite:///./drugs.db

Development

When you run docker-compose up, the backend automatically reloads when code changes (--reload flag). Just refresh your browser to see updates.

Production Deployment

For production:

  1. Disable --reload in docker-compose.yml command
  2. Use a production WSGI server (e.g., Gunicorn)
  3. Add environment variables for security
  4. Use a managed database instead of SQLite if scaling

Future Enhancements

  • User authentication & roles
  • Audit log (who changed what and when)
  • Export to CSV
  • Barcode/QR code scanning
  • Email alerts for low stock
  • Multi-location support
  • Mobile app
Description
No description provided
Readme 195 KiB
Languages
JavaScript 36.2%
Python 30.8%
HTML 17.8%
CSS 14.3%
Shell 0.5%
Other 0.4%