The Problem That Cost Me Hours
Last summer, I returned from a trip with hundreds of photos. Great memories, messy metadata:
No GPS coordinates β My camera doesnβt have GPS
Wrong timestamps β Forgot to sync timezone after the flight
Chaotic filenames β DSC_0001.jpg through DSC_0389.jpg
I tried Lightroom. It took hours to manually geotag photos before I gave up.
There had to be a better way.
The Solution: GeoStamp
GeoStamp (geostamp.top) is a browser-based tool that batch-processes photo metadata:
π Auto-geotagging β Match photos to GPS logs (GPX/KML)
β° Timestamp sync β Fix timezone offsets in bulk
π·οΈ Smart renaming β Pattern-based batch rename ({location}{date}{###})
π Privacy-first β Everything happens in your browser
The kicker? 500 photos processed in under 60 seconds.
Technical Architecture
Why Browser-Based?
Most photo tools upload to servers. I didnβt want that β privacy matters, especially for client work.
Solution: Pure client-side processing using:
javascript
// Web Workers for non-blocking batch processing
const worker = new Worker('exif-worker.js');
worker.postMessage({ photos, gpsLog });
// EXIF parsing with exif-js + custom GPS parsers
const exifData = await exif.read(photoBuffer);
const gpsCoords = parseGPS(exifData.GPSLatitude);
Stack Overview
Layer Tech Why
Frontend Vanilla JS + Vite Zero bloat, fast load
EXIF Engine exif-js + custom parsers Full metadata control
Maps Leaflet + OpenStreetMap Free, no API keys
Processing Web Workers Parallel batch jobs
Export JSZip + FileSaver Client-side ZIP generation
The Tricky Part: GPS Log Matching
Matching thousands of photos to a GPX track isnβt trivial. The algorithm:
javascript
function matchPhotoToGPS(photoTimestamp, gpsTrack) {
// Find closest GPS point by timestamp
const closest = gpsTrack.reduce((best, point) => {
const diff = Math.abs(point.time - photoTimestamp);
return diff < best.diff ? { point, diff } : best;
}, { diff: Infinity });
return closest.point;
}
Edge cases handled:
Photos taken when GPS had no signal β interpolate
Timezone mismatches β auto-detect & adjust
Duplicate timestamps β sub-second precision matching
Open Core Model
I believe in open source for trust, SaaS for convenience.
Whatβs Open Source
The core geotagging engine is on GitHub:
π https://github.com/Ai01-8389/geostamp
bash
git clone https://github.com/Ai01-8389/geostamp.git
cd geostamp
npm install
npm run dev
Features in the open core:
Single photo geotagging
EXIF reading/writing
GPS log parsing (GPX/KML)
Basic timestamp adjustment
Whatβs in the SaaS (Pro)
The hosted version adds convenience layers:
Batch processing (500+ photos)
Drag-and-drop UI
Cloud storage (optional, encrypted)
Advanced patterns (custom naming templates)
Priority support
Pricing: $7.99/month β cheaper than one hour of manual work.
Whoβs It For?
Potential use cases Iβm targeting:
π· Real estate photographers β MLS compliance requires geotags
βοΈ Travel bloggers β Auto-generate location names from GPS
π° Journalists β Verify photo locations for editorial standards
π Insurance adjusters β Document damage with timestamps
π΅οΈ OSINT researchers β Bulk metadata analysis
Are you in one of these fields? Iβd love to hear your feedback.
Try It (Free Forever)
Single photos are free, unlimited.
Go to geostamp.top
Drop a photo
Add GPS coordinates or sync with a GPX file
Download β metadata embedded, no watermarks
No signup, no credit card, no server upload.
Current Status
This is my first indie project. Currently in beta, looking for early users and feedback.
If you try it, let me know:
What worked?
What was confusing?
What feature would make you pay $7.99/month?
Star the repo β if you want updates: https://github.com/Ai01-8389/geostamp
Questions?
Drop a comment below β I read every single one.
Indie hackers: Whatβs your take on the open core model? Too generous, or good for trust-building?
Built with β€οΈ by a first-time indie developer. Thanks for reading.
Top comments (0)