Skip to content
Michael Lizzio

Trip Planner

A shared trip plan where friends add ideas, vote on conflicts and pack together

  • Python
  • Flask
  • Server-Sent Events
  • Vanilla JavaScript
  • Jinja templates
  • Portalocker
  • Werkzeug authentication

August 2025

Trip Planner itinerary showing a Finger Lakes weekend organized into dated cards with events and voting controls
A weekend trip, one card per day.
What it is
A shared trip planner where friends add plans to a day-by-day itinerary, vote when two plans clash, and build a packing list together.
Why I made it
I wanted a group trip to have one shared plan instead of living in a giant group chat.
What I did
I built it in August 2025 with Flask and plain JavaScript, with live updates and JSON files that lock, so two people saving at once can't wipe each other out.
How it turned out
Everyone sees changes right away without refreshing. If more than a few friends used it, a real database would be the next step.

The details

Planning outside the group chat

Anyone on the trip can add an event with a time, place, notes or a link, and everyone else sees it without refreshing. I kept the front end to plain HTML, CSS and JavaScript so it stayed small and simple.

Voting on conflicts

Trip Planner itinerary with two competing 11 AM activities grouped as options and visible upvote and downvote controls
Two 11 AM plans, turned into a vote.

If two plans land at the same time, they turn into options and everyone votes them up or down. You can only delete your own plans, unless you're an admin, or everyone else has voted it down.

Packing together

Trip Planner packing page with categorized cards for a first-aid kit, board games, snacks, coffee, and a shared playlist
The shared packing list.

There's also a shared packing list, split into items, snacks and other stuff. You can heart the good ideas, and it remembers who hearted what.

Under the hood

Live updates use Server-Sent Events: when anything changes, the server tells every open browser to refresh that part of the page. Everything is saved in JSON files with a lock, so two people saving at the same time can't wipe each other out. A real database would be the next step if more than a few friends used it.

  • Trip Planner account administration page listing four made-up users with password reset, role, and deletion controls
    Admins can add people and reset passwords.
  • Add Event dialog in Trip Planner with fields for time, title, description, location, and link
    Adding an event. Only the title is required.