This is a submission for the DEV Weekend Challenge: Community
The Community
I watched my sister sort her wedding photos the hard way.
Open photo in the photo viewer. Like it? Drag it to a folder in another window. Don't like it? Open next. Drag again. Repeat 800 times. The constant window-switching, the hovering over folders, the accidental drops — it was exhausting just to watch.
This is how most people do it. Not just wedding photographers — event shooters, travel photographers, content creators, online influencers, even people who just came back from a trip and want to pick their best shots. Anyone who has ever needed to sort a folder of photos has done some version of this painful process.
There are professional tools for this, but they're expensive, require accounts, or upload your photos to a server. Nobody wants their personal or client photos going anywhere they didn't choose.
PhotoSo solves exactly this — one screen, photos never leave your machine, no account needed, can work offline, works for anyone technical or not.
What I Built
PhotoSo — a photo sorter app that runs in the browser using the File System Access API. Pick three folders (source, accepted, rejected), sort with click or keyboard controls, navigate freely with ← →. Files move on disk in real time.
- Change any decision by navigating back — files move to the correct folder automatically
- Four states: Pending, Decide Later, Accepted, Rejected
- Filter timeline by state for a focused second-pass review
- Session resume — reopen with the same folders, picks up where you left off
- Works offline, installable as a desktop PWA
- Desktop only (Chrome / Edge) — File System Access API not supported on all mobiles yet
Demo
App URL:: https://photoso.pages.dev/
Code
Github Repo URL :: https://github.com/salswa/photoso
How I Built It
When I decided to build a photo sorter app, two things were non-negotiable: no friction to use and no compromise on privacy. No login, no uploading photos to a server — people should be able to open the app and just use it. And they should never have to wonder where their photos are going. Wedding memories, client shoots — that's personal. So everything stays on the user's device, nothing goes out, and it works offline too if needed.
That single constraint shaped the entire stack. The whole app is vanilla JavaScript with ES modules.
The core of PhotoSo is the File System Access API, a browser API that lets web apps read and write directly to folders on your machine. It's what makes this feel like a native app.
Session state is just a single sorted array — each entry tracks a photo's name, current state, and which folder it lives in. Navigation is a pointer moving through that array. The same model handles session resume: scan all three folders on startup, merge into one timeline, done. No database. No local storage. The folders are the source of truth.
Finally, used service worker and manifest to build — installable as a desktop app and fully offline-capable. The service worker uses a network-first strategy: when online it fetches fresh files and silently updates the cache; when offline it falls back to what's cached. You always get the latest version on refresh, and it still works with no connection.
Language --> Vanilla JavaScript (ES Modules)
UI --> HTML + CSS, no framework
File Access --> File System Access API
Offline --> PWA + Service Worker (network-first)
Hosting --> Cloudflare Pages
What Next
Two things I'm working on next:
Thumbnail View : a scrollable strip at the bottom of the triage screen showing all photos in the timeline with color-coded state indicators. Click any thumbnail to jump directly to that photo.
Mobile friendly UI on supported devices.
Thanks for reading! If you've ever lost an afternoon to sorting photos the painful way, give PhotoSo a try — it's free, just open and sort. Would love to hear what you think.


Top comments (0)