verified Open Source · Self-Hosted

OuchTracker
Injury & Kit Tracker

Track inventory, schedule inspections, scan QR codes, and report incidents — all from a single, role-based dashboard. Keep your organisation safe and compliant.

2 User Roles
10+ Features
100% Dockerised
OuchTracker Dashboard illustration
expand_more
Features

Everything you need to manage
first aid kits at scale

From inventory tracking to compliance reporting, OuchTracker covers every aspect of first aid kit management.

medical_services

Kit Management

Create, edit, and organise kits by location. Track every item with name, category, quantity, and expiry date.

qr_code_2

QR Code Access

Generate printable QR codes for each kit. Scan to instantly access contents, start inspections, or file reports.

fact_check

Kit Inspections

Step-through checklist inspections with quantity verification. Full audit trail maintained per kit.

assignment_late

Incident Reports

Record items consumed during incidents. Stock is automatically deducted, keeping your inventory always accurate.

admin_panel_settings

Role-Based Access

Admin and Checker roles with fine-grained permissions. Checkers only see kits assigned to them.

event_busy

Expiry Tracking

Items flagged as expired or expiring within 30 days with colour-coded alerts on the dashboard.

wifi_off

Offline-First PWA

Install on any device — no app store needed. All kit data is pre-cached on first load. Checkers can inspect kits and file incidents with no connection; submissions queue and sync automatically when back online.

picture_as_pdf

BoM PDF Export

Export a print-ready Bill of Materials PDF for any kit — items grouped by category, colour-coded expiry status, kit QR code, and summary statistics included.

translate

Multilingual (i18n)

Full English and Greek (Ελληνικά) UI translations. Language preference is saved per user in the database and restored automatically on login.

Workflow

How it works

A streamlined workflow for admins and checkers alike.

1
add_box

Set Up Kits

Admin creates kits with location info and adds items — manually or via CSV import. Assign checkers to each kit.

2
qr_code_scanner

Print QR Codes

Generate and download QR codes for each kit. Stick them on the physical kit for instant on-site access.

3
checklist

Run Inspections

Checkers scan the QR code and step through every item, recording quantities and notes. Inspections are logged automatically.

4
monitor_heart

Monitor & Report

The admin dashboard shows expiry alerts, recent inspections, and incident reports. Everything in one place.

5
picture_as_pdf

Export & Print

Export a branded Bill of Materials PDF for any kit — complete with QR code and expiry status — and insert it into the physical kit for offline reference.

Technology

Built with modern tools

A battle-tested stack that's easy to deploy and maintain.

Vue 3

Composition API

Quasar v2

UI Framework

NestJS v11

Backend API

Prisma 7

ORM

PostgreSQL 16

Database

Docker

Containerised

vue-i18n v9

Localisation

Architecture

Data model overview

Clean, normalised schema designed for auditability and real-time stock tracking.

User ──< KitAssignees >── Kit ──< KitItem
                           │         │
                           │         ├──< InspectionLogItem >── InspectionLog >── User
                           │         └──< IncidentReportItem >── IncidentReport >── User
                           ├──< InspectionLog
                           └──< IncidentReport
person User

Admin or Checker, many-to-many with kits

medical_services Kit

Physical first-aid kit at a location

inventory_2 KitItem

Item in a kit with expiry tracking

fact_check InspectionLog

Per-session inspection with item snapshots

Quick Start

Up and running in minutes

Just Docker and Docker Compose. Nothing else to install.

code

Development

# Clone the repo
git clone https://github.com/athamour1/OuchTracker.git
cd OuchTracker

# Start everything (PWA dev server + HMR)
docker compose -f docker-compose.dev.yml up --build
rocket_launch

Production

# Copy env and configure secrets
cp .env.prod.example .env.prod

# Pull pre-built PWA images and start
docker compose -f docker-compose.prod.yml \
  --env-file .env.prod up -d

# Or pin to a specific release
IMAGE_TAG=v1.2.0 docker compose \
  -f docker-compose.prod.yml \
  --env-file .env.prod up -d
vpn_key Default Admin Credentials
Email admin@ouchtracker.local
Password Admin1234!