Inspiration

I love China and keep going back to learn its culture, from high-tech cities to traditional river houses. Every trip leaves me with thousands of photos, and I have always struggled to keep them organised by date and place. When I need to know where I was and when, for a visa form or just for myself, my answer is always the same: scroll the camera roll and search old emails for flight confirmations.

The answer is already in the photos. Each one with a place and a capture time is a dated sighting of me somewhere.

What it does

Where Was I rebuilds a travel history from the photo library on a UGREEN AI NAS:

  • One row per stay in each country, with the first and last date that has evidence
  • The route inside that stay: the cities seen, in date order
  • Each border crossing as a window between two photos, narrowed to an exact date when a saved ticket or booking shows one
  • A day count per stay and per country per year, with both dates printed beside it
  • Conflicts between photos and papers shown side by side
  • Periods with no evidence marked as unknown, never assumed to be time at home

It reads only photo places, capture times and counts. It does not look at what the photos show and does not use face recognition. Nothing leaves the NAS.

How I built it

The Skill is a Markdown-only package that follows the Uliya Skill Development Standard: a SKILL.md entry point and three reference files. The parent Skill only delegates to four registered experts:

  • photo-agent lists city albums and summarizes photos per place and month
  • file-agent lists travel papers in one folder the user names
  • document-agent extracts dates, routes and booking references
  • knowledge-agent saves the finished ledger

The merging rules (how sightings become stays, how papers match crossings, how days are counted) are written out as fixed rules in a reference file, so the local model follows them and does not improvise.

I used Claude Code to research the capability catalog and to help draft the Skill and the proposal. The package passes the official static checker from uliya-skill-kit 0.7.7 with 0 errors and 0 warnings.

Challenges I ran into

I do not own a NAS, so everything was designed from the public capability catalog. Nothing has run on a device yet.

A photo proves that a device was in a place, not a person. The Skill says so and asks the user to confirm the ledger.

Small local models can miscount days. Every count prints its two dates, and the Skill avoids rolling-window rules such as 90 days in any 180.

Photos without position data are invisible to this method, so the Skill reports them and never fills the gap with a guess.

Accomplishments that I'm proud of

  • The ledger never guesses. A border crossing stays a window between two photos until a ticket gives the date, and a period with no evidence is listed as unknown.
  • The photo steps are queries on place and capture time only. No image is opened and no face recognition is used, which keeps the run light on the local model and respectful of what is in the photos.
  • The package passes the official static checker with 0 errors and 0 warnings, with every expert and capability taken from the published catalog.

What I learned

Writing for an orchestration-only platform is mostly about boundaries: what each expert may read, what needs approval, and what to do when a result is empty. The honest answer "unknown" turned out to be the most important feature.

What's next for Where Was I

If selected as a finalist: test with my own travel photos and synthetic tickets on the assigned NAS, check how place albums are named for photos taken in different countries, and tune the instructions to the local model.

Built With

Share this project:

Updates

Submission history