commit b7a13e9c39fbb868e5e0e1f62508e7a858f127bf Author: James Pattinson Date: Fri Jan 16 12:48:03 2026 -0500 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..a93592c --- /dev/null +++ b/README.md @@ -0,0 +1,113 @@ +# 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 + +## Quick Start (Docker - Recommended) + +Everything runs in containers. Just make sure you have Docker and Docker Compose installed. + +```bash +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: +```bash +docker-compose down +``` + +To rebuild after code changes: +```bash +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`: + +```yaml +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