Self-hosted bar staff management — scheduling, time clock, tip pool, and payroll estimates. Runs on any PC or Raspberry Pi; staff access it from any phone or laptop on the same WiFi.
Hobbyist project — personally tested and stable for day-to-day use, but not a certified payroll or HR system. See the disclaimer below.
| Module | |
|---|---|
| 📅 Schedule | Monthly calendar, shift assignment, colour-coded attendance |
| 🕐 Time Clock | PIN-protected, trusted-device lock, punctuality tracking |
| 🔁 Shift Swaps | Staff request → target accepts → manager approves |
| 🏖️ Leave Requests | Vacation / sick / personal — manager approve/reject |
| ✍️ Writeups | Manual + auto-generated (lateness, no-show) |
| 💰 Tip Pool | Distribute by hours worked, role snapshot, full audit trail |
| 📊 Payroll Estimates | Hours × rate + daily OT at 1.5× |
| 🏠 Dashboard | Today's shifts, late clock-ins, no-shows, pending approvals |
git clone https://github.com/techsociology/barboard.git
cd barboard
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python app.pyOpen http://localhost:5050 — default login is admin / admin123, change it immediately.
- Find the host machine's local IP — Windows:
ipconfig, Mac/Linux:ip addr - On any device on the same WiFi open
http://<that-ip>:5050 - No app install needed, works in any browser
Everything is stored in a single SQLite file — barboard.db, created automatically on first run.
| How you run it | Where the DB lives |
|---|---|
python app.py |
Next to app.py in the project folder |
Windows .exe (run directly) |
Same folder as BarBoard.exe |
| Windows (installed via Setup.exe) | %APPDATA%\BarBoard\barboard.db |
| Linux binary | Same folder as the BarBoard binary |
BARBOARD_DATA env var set |
<BARBOARD_DATA>/barboard.db |
BARBOARD_DB env var set |
Exactly the path you set |
Backup — copy barboard.db anywhere safe.
Restore — replace the file and restart.
Wipe — delete the file; a fresh database is created on next startup.
barboard.dband.secret_keyare in.gitignoreand should never be committed.
Double-click build_exe.bat. Output lands in dist\BarBoard\. Optionally install NSIS first to also get a single BarBoard_Setup.exe installer.
bash build_linux.sh
# output: dist/BarBoard/BarBoard# In Ubuntu (WSL) — clone into Linux home dir, not /mnt/c
cd ~
git clone https://github.com/techsociology/barboard.git && cd barboard
bash build_linux.sh
cp -r dist/BarBoard /mnt/c/Users/YourName/Desktop/Clone into
~, not/mnt/c/...— Windows drives cause permission errors in WSL.
| Variable | Default | |
|---|---|---|
BARBOARD_DB |
barboard.db next to the script |
Override DB path |
SECRET_KEY |
Auto-generated .secret_key file |
Set to keep sessions across restarts |
PORT |
5050 |
Listening port |
FORCE_HTTPS |
0 |
Set 1 when behind an HTTPS proxy |
BarBoard estimates only — regular hours × rate + OT hours × rate × 1.5. It does not calculate tax withholdings, benefits, or jurisdiction-specific labour rules. Do not use these figures to issue paychecks without review by a qualified payroll provider.
Daily OT = hours worked past the scheduled shift end. Clock-ins with no linked shift count entirely as OT.
| Role | Access |
|---|---|
| admin | Everything — users, settings, trusted devices, delete records |
| manager | Schedule, time records, reports, tips, writeups, approve requests |
| staff | Own time clock, schedule view, availability, swap & leave requests |
| Project | Role |
|---|---|
| Flask | Web framework |
| Werkzeug | WSGI utilities & password hashing |
| Flask-WTF | CSRF protection |
| Flask-Talisman | Security headers |
| Flask-Limiter | Rate limiting |
| Waitress | Production WSGI server |
| PyInstaller | Standalone executables |
| NSIS | Windows installer |
Built with assistance from Claude (Anthropic AI) ❤️ — see CONTRIBUTING.md to get involved.
MIT — see LICENSE.
