Overview
Your upload journey
flowchart TD
A[Etsy purchase] --> B[Confirmation email with upload link]
B --> C[upload.html — one form]
C --> D[Order # + package tier]
C --> E[Trip title + route table + phases]
C --> F[Photo .zip]
C --> G[Optional: placements, notes, passcode]
D --> H[We package slug.zip]
E --> H
F --> H
G --> H
H --> I[Dashboard build — 5–7 business days]
I --> J[Private link via Etsy Messages]
J --> K[You review --> final delivery]
How each photo is included on your dashboard
flowchart TD
P[Photo in your zip] --> Q{Has GPS location data?}
Q -->|Yes| R[Included — placed on map near matching stop]
Q -->|No| S{Listed in photo placements?}
S -->|Yes| T[We look up your place name on the map]
T --> U[Included — attached to nearest stop on your route]
S -->|No| V[Excluded — not shown on dashboard]
How we rank your inputs
Your text and placement tables always win over automated guesses. We use geotagged photo timestamps and locations to build a timeline first, then look up city and landmark names on the map where you did not provide them. Photos without GPS need a placement row with a place name (city or landmark) — not exact coordinates.
What takes priority when building your dashboard
flowchart TD
subgraph trip["Trip story — legs, days, map route"]
T1["1st — Your form, notes, or trip-plan file"]
T2["2nd — Photo GPS timeline\n(sorted by date, grouped by location)"]
T3["3rd — AI trip plan\n(leg names + title from Mapbox;\nor format your markdown)"]
T1 --> T2 --> T3
end
subgraph pics["Which photos appear"]
P1["1st — Your photo-placements table"]
P2["2nd — Automatic GPS match to stops"]
P3["3rd — Excluded if no GPS and no row"]
P1 --> P2 --> P3
end
| You provide | We use it for | Rank |
|---|---|---|
| Trip phases + route legs + day titles | Phase names, dates, map route | Highest |
| Photo placements table | Non-GPS images — place name looked up on map | Highest (photos) |
| Geotagged photo zip | Stop order, coordinates, map labels | Structure |
| Waypoint names without coordinates | Map lookup fills Lon/Lat for routes | Fills gaps |
| Nothing except photos | Mapbox labels stops → AI names legs + title → we review before delivery | Photos-only path |
Place names & map lookup
You usually do not need to look up coordinates. Type place names the way you would in a map app.
Paris, Colmar, Eiffel Tower, Versailles, Richmond, Virginia
| Your input | What we do |
|---|---|
| Geotagged photos | Read GPS → group stops → look up city/landmark names |
| Photo placement (no GPS) | Look up place name → attach photo to nearest route stop |
| Waypoint name, Lon/Lat blank | Look up place → fill coordinates for driving route |
| Trip legs & day titles you wrote | Always kept — automation only fills gaps |
Placement rows do not need to match stop names character-for-character. Use the city, neighborhood, or landmark where the photo belongs.
Before you start
| Item | Required? | Notes |
|---|---|---|
| Etsy order number | Yes | From receipt or confirmation email |
| Package (Basic / Standard / Premium) | Yes | Must match the listing you bought |
| Trip title | Yes | Dashboard headline — e.g. Spring Break 2026 |
| Subtitle | No | Optional banner under title — e.g. Dad and Mae |
| Main destination + dates + start/end | Yes | Bookends for the trip and route table helpers |
| Trip phases table | Yes | Label, name, dates, location — see route table guide |
| Route legs table | Yes | One row per movement — pick a phase on each row |
| Basecamps / overnight stays | Optional | Extra lodging detail — skip for transit-only trips |
| Day-by-day plans | Optional | Rough daily notes |
Photo .zip | Yes | How to zip geotagged photos |
| Photo placements | Optional | Only for images without GPS |
| Dashboard URL name | Optional | Auto-filled from trip title |
| Extra notes | Optional | Flights, hotels, companions |
| Dashboard passcode | If ordered | At least 8 characters |
* You can paste a quick table or simple text trip file into optional day-by-day or notes instead of typing everything on the form.
Your dashboard
Authoritative layout: the live trip page matches
templates/index.html and templates/app-template.js in our build.
If any description here disagrees with a deployed dashboard, trust what you see on the page.
Dashboard layout (top to bottom)
flowchart TB
TB["Top bar — trip title, theme toggle"]
H["Hero — title, optional subtitle, stats row"]
M["Map — route, photo pins, legend, phase filters"]
G["Phase cards — grid below the map"]
TB --> H --> M --> G
| Area | What you see |
|---|---|
| Top bar | Trip title only (brand + name) — not the subtitle. Light/dark theme. Iceland trips also show road-condition links. |
| Hero | Large trip title; optional subtitle below when provided; stats for km mapped, baseline drive time, and phases · dates. |
| Map | Full-width interactive map: colored route by phase, photo pins, legend, All / Phase 1 / … filter buttons. |
| Phase cards | Grid below the map — click a card or filter button to focus the map on that phase. |
Phase card header (colored bar): headline on the left; earliest local sunrise · sunset for that phase’s dates on the right when available.
Headlines: departure transit Phase 1: Depart Mar 10; return transit Phase 4: Return Mar 19–20; stay phases show location only (e.g. Phase 2: Paris, FR) — lodging names appear in the narrative body, not the headline.
Card body: one narrative paragraph per phase (no sunrise/sunset in the text — those appear in the header). Map pins open stop popups with photos; optional passcode gate when ordered.
Upload form fields
Open upload.html. Fields marked required on the form must be filled unless noted.
Upload form layout (top to bottom)
flowchart TB
subgraph order["1 · Order"]
O1["Etsy order # — required"]
O2["Package tier — required"]
end
subgraph trip["2 · Trip details"]
T1["Trip title — required"]
T2["Subtitle — optional"]
T3["Main destination — required"]
T4["Start / end dates — required"]
T5["Trip start / end places — required"]
T6["Trip phases table — required"]
T7["Route legs table — required"]
T8["Basecamps — optional"]
end
subgraph optTrip["Optional trip settings"]
OT1["Timezone"]
OT2["Primary travel mode"]
end
subgraph itin["3 · Optional on form"]
I1["Day-by-day plans — optional"]
end
subgraph photos["4 · Photos"]
P1["Photo zip — required"]
P2["EXIF location consent — required"]
P3["EXIF time consent — required"]
P4["Custom dashboard URL name — optional"]
end
subgraph extra["5 · Optional extras"]
E1["Photo placements"]
E2["Notes"]
E3["Dashboard passcode — if ordered"]
end
C["Confirm paid and Upload trip — required"]
order --> trip --> optTrip --> itin --> photos --> extra --> C
Order reference required
Your Etsy order number. If the order is unknown or already uploaded, the form explains why.
Package required
| Tier | Max zip size | Consulting |
|---|---|---|
| Basic | 1 GB | — |
| Standard | 3 GB | — |
| Premium | 8 GB | 1 × 30-min session included |
Live planning sessions are purchased on the Consultation Etsy listing (not this upload form). At checkout enter dashboard order # plus primary and secondary meeting times — we confirm by Etsy Message after your order. Premium includes one session; add-on tiers add more.
Trip title required
Dashboard headline — the name of the trip (e.g. Spring Break 2026). Also used to suggest your URL slug (mushinsolutions.com/trips/your-trip/).
Subtitle optional
Optional banner line under the title — who traveled (e.g. Dad and Mae, The Johnson family). Leave blank if the trip title alone is enough.
Main destination, dates, start/end required
Primary region (e.g. Paris, France), first/last day of the trip, and where the trip started and ended. Use the same start/end place for loop trips.
Trip phases required
Major blocks — one table row per phase. Pick a label (transit, basecamp, day trip, residency), then name, dates, and location (location blank for transit).
Toolbar: + Add phase · Suggest starter phases (uses trip dates, destination, and basecamp rows if any).
The form stores ### lines behind the scenes. Example serialized output:
### 1 | Departure Transit | Mar 10 | In transit | #0c6fa8
### 2 | Paris Residency | Mar 11–15 | Paris, FR — AirBnB | #148b63
### 4 | Return Transit | Mar 19–20 | In transit | #8f3d97
Actual route / transit legs required
One row per movement — flights, trains, ferries, drives. Pick a Phase on each row from your trip phases table. Use → to for a direct leg or , then for comma-style station chains. Set mode on every non-driving leg.
Full column reference: ROUTE_TABLE_INPUTS.md · click Insert starter legs from trip start/end after start/end places and dates are filled.
Serialized example:
Mar 10 | 1 — Richmond, VA --> Alexandria, VA (train)
Mar 10 | 1 — Washington, DC (DCA) --> Paris, FR (flight)
Mar 11–15 | 2 — Paris --> Colmar (basecamp)
Basecamps / overnight stays optional
Optional extra lodging detail — one row per anchor. Optional detail after —:
Paris, FR — AirBnB
La Wantzenau — Omar's house, 24 Rue de Madrid
Transit-only trips can skip this table.
Day-by-day plans optional
One block per travel day:
### <date> | <phase #> | <day title>
What you did or plan to do. Optional: **Drive**: distance and time.
Example:
### 2026-03-12 | 2 | Arrive Paris
Check in Montmartre Airbnb, evening walk.
### 2026-03-13 | 2 | Left Bank & Seine
Classic sights along the river.
Dates can be 2026-03-13 or Mar 13 (include the year somewhere if you use short dates).
Photo zip required
- One
.zipwith all trip photos - iPhone HEIC and JPEG supported
- Location Services on when photos were taken — we place geotagged images automatically
- Visual step-by-step: How to create your photo zip
Dashboard URL name optional
Lowercase letters, numbers, hyphens. Usually auto-derived from your trip title.
Photo placements optional
Open Optional photo fixes on the form when some pictures lack location data (screenshots, exports, Location Services off).
One row per file — use the exact filename inside your zip (e.g. Day2.png, IMG_6261.HEIC).
| Filename | Stop or place | Phase | Day (optional) |
|----------|---------------|-------|----------------|
| Day2.png | Paris — Montmartre | 2 | Mar 13 |
| IMG_6199.HEIC | Colmar — Petite Venise | 3 | 2026-03-16 |
Plain-text alternative:
Day2.png | Paris — Montmartre | phase 2 | Mar 13
IMG_6199.HEIC | Colmar | phase 3 | 2026-03-16
- Phase = number from your Trip phases
- Stop or place = city, neighborhood, or landmark — we look it up on the map; exact spelling match to your legs is not required
- Day = optional but helps group photos on the right travel day
Only list exceptions — geotagged photos are placed automatically. Click Insert starter template on the form for a prefilled table. See also Place names & map lookup.
Extra notes optional
Flight numbers, hotel names, travel companions, special requests.
Password protection
If your order includes it, choose a passcode (8–128 characters). Share the dashboard link and passcode separately with viewers you trust.
Trip plan formats
All formats become one structured trip plan
flowchart LR
A[Your trip input] --> B[Upload form\nroute table + phases]
A --> C[Quick table]
A --> D[Simple text file]
A --> E[Full plan\nwith waypoints]
B --> F[trip-plan.md]
C --> F
D --> F
E --> F
F --> G[Dashboard route + days]
| Format | Best for |
|---|---|
| Upload form (phase table + route table + optional basecamps) | Most customers — Suggest starter phases / Insert starter legs on the form |
| Quick table | Day-by-day spreadsheet style |
| Simple text | Copy/paste without markdown tables |
| Full trip plan | Road trips with waypoints and route overrides |
Quick table
Paste into day-by-day plans or save as .md / .txt in your zip:
## Date / Phase / Location
| Date | Phase | From --> To | Main Location / Activity |
|------|-------|-----------|----------------------------|
| Mar 10 | Phase 1 – Name | City A --> City B | Overnight near airport |
| Mar 11 | Phase 1 – Name | City B --> City C | Arrive destination |
| Mar 12 | Phase 2 – Name | City C --> City D | Check in, city walk |
One row per travel day. Repeat the same Phase label for every day in that leg.
Simple text
TRIP TITLE: Spring Break 2026
SUBTITLE: Dad and Mae
DESTINATION: France
PHASES:
1. Transatlantic leap | Mar 10–11 | Ramstein
2. Paris residency | Mar 12–15 | Paris
3. Alsace expedition | Mar 16–18 | Colmar / Strasbourg
DAYS:
Mar 12 | Phase 2 | Arrive Paris — Montmartre
Mar 13 | Phase 2 | Left Bank, Seine
Mar 16 | Phase 3 | TGV to Colmar
NOTES (optional):
Traveling with family of four.
Full trip plan
For driving routes with exact stop order, prepare Phases, Waypoints, Days, and optional Route overrides. You can add a ## Photo Placements section at the bottom instead of a separate placements file.
Waypoints — coordinates optional. Leave Lon and Lat blank and list place names only (e.g. Paris, Strasbourg) — we look up coordinates automatically. If you have exact coordinates, use Lon first, Lat second in the table.
Photo zip — requirements
- At least two geotagged photos, or two placed photos in your placements table, or enough route detail in your trip plan
- Photos in subfolders inside the zip are fine
- Do not password-protect the zip file itself
Geotagging on iPhone
- Settings --> Privacy & Security --> Location Services — On
- Camera — allow location (While Using or Always)
- Take photos during the trip — location is stored in the file
What we exclude
| Situation | Result |
|---|---|
| Photo has GPS | Included on map (city name from map lookup) |
| No GPS + placement row | Included — place name looked up, attached to nearest stop |
| No GPS + no placement row | Excluded |
| PDF or PNG itinerary screenshot | Not read — paste into a template |
| Wrong filename in placements | Row skipped; noted at delivery |
| Place name not near your route | Row skipped — try a city on your trip |
We do not read text inside screenshot images — put place names in the placements table.
After you upload
- Form confirms success — we do not send a separate “processing received” email
- We build your dashboard (typically 5–7 business days)
- Private link arrives via Etsy Messages when ready for review
- After you approve, we send final delivery (URL + summary of included/excluded photos)
Troubleshooting
| Problem | What to do |
|---|---|
| “Zip too large” | Reduce size or upgrade Etsy tier |
| “Order not found” | Check Etsy order #; wait for confirmation email |
| Photos missing on map | Confirm GPS was on, or add placement rows with a city/landmark |
| Placement row skipped | Match filename exactly; use a place on your route (e.g. Paris) |
| Screenshot itinerary ignored | Paste schedule into quick table or day-by-day fields |
| Wrong package | Select tier matching your Etsy listing |
| Passcode rejected | Use at least 8 characters |