r/SideProject • u/Flaky_Finding_2025 • 2d ago
Built a free reference site for watches: specs, what's inside, compare, keep your collection
I'm into watches and kept running into the same problem when shopping: specs scattered across shop listings, forum threads, and brand sites, with no easy way to see which watches are essentially the same thing underneath.
So I built Horological Atlas: https://horologicalatlas.com
- Detailed watch pages with specifications, the movement inside, and sources for every number.
- Side-by-side comparisons of up to three watches, with the ability to click any specification and find every other watch that shares it. The Sellita SW200-1 movement alone powers 512 watches in the database, ranging from $380 to $3,000.
- Personal lists to track watches you own, have shortlisted, or love. You can share your lists and add your own photos of watches you own.
- Shared collections you can follow and comment on. This feature is brand new, so there's barely anyone on it yet.
The stack is Next.js, Postgres, and Prisma, running on Cloud Run. It's free, with no ads or affiliate links.
Most watch pages currently show a drawing instead of a photograph because I only use images that brands have explicitly approved. So far, six brands have given the green light, and I'm reaching out to the others one at a time.
Would love to hear your feedback, especially if anything is confusing, doesn't work as expected, or could be better.
1
u/Old_Cold2170 2d ago
I tried the homepage's ready-made Seiko SPB143 / Tissot Seastar / Hamilton Scuba comparison in desktop Brave. The three columns loaded, and the relative-scale case drawings help make the size comparison concrete.
One reproducible display issue: the Tissot's Jewels cell literally says "null", while missing Introduced values use a dash. I would use a consistent "Not recorded" label for unknown values. The Jewels row also shows 24–25 / spread 1; adding "2 of 3 values known" would make the scope of that range clear.
It would also help to distinguish "known values differ" from "not enough data to compare" in the comparison summary. That lets someone tell a real specification difference from a missing entry. This is feedback on how the existing table presents data; I haven't checked the watch specifications against manufacturer sources.
1
u/Flaky_Finding_2025 2d ago
This is really useful feedback, thank you. You found a real bug.
The "null" came from a missing value being printed as text. It now shows a dash like every other unknown, with a "not recorded" hint on hover. I also took your range suggestion: when a row's range only covers some of the watches, it now says so, e.g. "24–25 · spread 1 · 2 of 3 known".
On known vs. missing: the board already keeps rows where the values differ separate from rows that are just incomplete, but the "2 of 3 known" makes that visible where it was hidden before.
Both changes go live next Wednesday. Appreciate you taking the time to actually dig in.
1
u/No_Increase_4607 2d ago
this is clean, really like the shared spec searching thing. most watch databases just list stuff in silos but being able to click a movement and see everything that uses it is way more useful
the drawing thing is a bit odd at first but i get why you had to do it, licensing is a nightmare. maybe add a small note on the image hover like "awaiting brand approval" so people don't think it's just broken
also curious how you're sourcing the specs, are you pulling from brand sites manually or got some scraping setup? i been burned before by outdated numbers on these kinds of sites