A Flask application for logistics teams to schedule and track pickup/delivery operations. Users manage events with customer details (name, phone, address), item descriptions, vehicle assignments, and scheduling. Events display in a calendar view, export to iCalendar, and generate printable PDF tickets for drivers.
  • Python 58.5%
  • JavaScript 21.6%
  • HTML 11.9%
  • Shell 5.9%
  • CSS 1.8%
  • Other 0.3%
Find a file
2026-05-12 15:27:35 +02:00
.forgejo/workflows Use python+node docker image 2026-04-05 23:04:40 +02:00
app Add tooltips, mobile agenda wrapping, auto-sync, and tests 2026-05-12 15:11:44 +02:00
migrations Add blocked days and holiday calendar features 2026-05-12 15:03:48 +02:00
presentations Presentation 2026-01-28 20:17:59 +01:00
scripts Add deploy script for server setup and upgrades 2026-04-06 16:32:25 +02:00
tests Add tooltips, mobile agenda wrapping, auto-sync, and tests 2026-05-12 15:11:44 +02:00
.gitignore Added functionality to create and view events 2025-11-14 14:21:24 +01:00
config.py Add blocked days and holiday calendar features 2026-05-12 15:03:48 +02:00
LICENSE Add MIT license and project README 2026-04-17 20:52:01 +02:00
pytest.ini Added tests 2025-11-17 16:13:43 +01:00
README.md Rewrite README to focus on user-facing features and include blocked days, holidays, and mobile support 2026-05-12 15:27:35 +02:00
requirements.txt Add deploy script for server setup and upgrades 2026-04-06 16:32:25 +02:00
run.py New beginnings 2025-10-23 13:46:24 +02:00

Pickup Scheduler

A calendar-based scheduling tool for logistics teams to manage pickups and deliveries. Events display in a calendar view, export to iCalendar, and generate printable PDF tickets for drivers.

Python Flask SQLAlchemy pytest License


Features

  • Calendar Overview — Monthly calendar grid with events, blocked days, and holidays color-coded for quick scanning
  • Event Management — Create, edit, and delete pickup/delivery events with customer details (name, phone, address), item descriptions, and vehicle assignments
  • PDF Tickets — Download printable PDF tickets per event for drivers
  • iCalendar Export — Export all events to .ics format with token-based sharing links
  • Blocked Days — Mark date ranges as unavailable to prevent scheduling conflicts
  • Holiday Calendar — Automatically sync public holidays from an iCal feed (refreshes every 30 days)
  • Role-Based Access — Four permission levels: viewer, editor, admin, and owner
  • User Management — Admins can create, edit, and deactivate user accounts; registration can be toggled on/off
  • Mobile-Friendly — Responsive layout switches to an agenda view on narrow screens
  • Vehicle Tracking — Optionally assign vehicles to events (toggle via config)

Quick Start

Prerequisites

  • Python 3.11+
  • SQLite

Setup

git clone <repository-url>
cd pickup_scheduler
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Create a .env file:

FLASK_CONFIG=DevelopmentConfig
SECRET_KEY=<your-secret-key>
JWT_SECRET_KEY=<your-jwt-secret>
DATABASE_URL=sqlite:///app.db
OWNER_USERNAME=admin
OWNER_PASSWORD=<your-admin-password>
OWNER_NAME=Admin
REGISTRATION_ENABLED=true
SHOW_VEHICLES=true
HOLIDAY_CALENDAR_URL=https://www.thunderbird.net/media/caldata/autogen/SwedishHolidays.ics

Run migrations and start the server:

flask db upgrade
python run.py

Usage

What you can do How
View schedule Open the app — events, blocked days, and holidays appear on the calendar
Add event Click a date or use the "Nytt event" button
Block a date Admin panel → "Blockerade dagar" tab → pick date(s)
Print driver ticket Click an event → "PDF" button (shareable link available)
Export calendar Use the iCal export link with your token
Manage users Admin panel → "Användare" tab

Deployment

sudo ./scripts/deploy.sh deploy

The deploy script also supports upgrade, start, stop, restart, and status commands.


Testing

pytest -v

License

MIT License — see LICENSE for details.