Skip to content

Repository files navigation

Travel Manager

A personal travel planning system built around an Excel workbook and a Python desktop GUI. Designed to replace a multi-system workflow (Asana checklist, separate spreadsheets, manual calendar blocking across 3 calendars) with a single hub.

The problem

Every trip required touching 6+ systems: Asana for the task checklist, a travel Excel doc, a presentations list, 3 separate calendars (KF Squared, Hughes Fam, DataOnWheels), Precursive (twice, for no-travel block and PTO), Trinet for PTO, and then back to the spreadsheet for final expenses. That meant the same trip info was being entered in multiple places, and it was easy to forget a step.

Design decisions

Excel as the data store, not a database or app

Travel planning is inherently a data problem. The volume is low (dozens of trips per year, not thousands), the data is simple (names, dates, prices, yes/no flags), and the user already works in Excel daily. A database would add complexity without adding value. Excel also means anyone can open the file, filter, sort, and do ad hoc analysis without special tools.

Python GUI instead of VBA

The original plan was to embed a VBA UserForm directly in the workbook. We tried multiple approaches to programmatically inject VBA into an .xlsm file (openpyxl, LibreOffice UNO API, manual vbaProject.bin construction). None worked reliably because VBA binary format (vbaProject.bin) is a proprietary Microsoft OLE compound document that no open-source tooling can create from scratch.

Rather than require a manual VBA import process (Alt+F11, import .bas file, build UserForm by hand), we pivoted to a Python tkinter GUI. This is better for several reasons: it runs on any OS with Python, it has no dependency on Excel's macro security settings, and it can be launched with a double-click. The Excel file stays as a clean .xlsx data store with no macros to worry about.

.ics files for calendar events instead of API integration

The 3 calendars (KF Squared, Hughes Fam, DataOnWheels) are a mix of providers. Rather than building separate integrations for Google Calendar, Outlook, and Apple Calendar, we generate standard .ics files. Every calendar app on every platform can import .ics. One click in the GUI generates all 3 calendar folders. The tradeoff is that importing is manual (drag the .ics file into the calendar), but it only happens once per trip.

Checklist replaces Asana template

The Asana "Travel Template" was a task checklist with 15 items. Rather than keep Asana in the loop as a separate system, the checklist is now a tab in the Excel workbook and a section in the GUI. Checking a box in the GUI writes "Done" directly to the Trip Checklist tab. A % Complete formula shows progress at a glance.

Split flight types (leaving vs. returning)

The original Flight & Hotel Options tab had a single "Flight" type. We split it into "Flight - Leaving" and "Flight - Returning" so outbound and return options can be compared independently. The GUI shows them in separate sections, and the calendar event description lists them separately in the booked itinerary.

Booked itinerary in calendar events

Calendar events include the full booked itinerary in the description field: outbound flight with times and confirmation number, return flight, hotel with confirmation number, venue, event link, and general notes. This means all trip details are visible in the calendar without opening the spreadsheet.

What's in this repo

File Purpose
Travel Manager v2.xlsx Main workbook (6 tabs: Trips, Flight & Hotel Options, Expenses, Presentations, Trip Checklist, Packing Checklist)
trip_dashboard.py Desktop GUI for managing trips, checklists, options, and calendar generation
generate_calendar.py Standalone CLI for generating .ics files from the workbook
SETUP.md Quick-start setup instructions
calendar_events/ Generated .ics files organized by calendar (KF_Squared, Hughes_Fam, DataOnWheels)
TravelManager_VBA.bas VBA module (unused, kept for reference if VBA approach is ever revisited)
TripDashboard_UserForm.txt VBA UserForm instructions (unused, kept for reference)

Quick start

pip install openpyxl
python trip_dashboard.py

What's not automated (yet)

These still require manual action in external systems. The checklist tracks whether they've been done.

  • Blocking time in Precursive (no travel + PTO)
  • Entering PTO in Trinet
  • Importing .ics files into each calendar
  • Entering final expenses into the company travel spreadsheet

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages