Vibe coded this game that I actually like playing 🤯
you can play it here: https://crosslines.live/
you can play it here: https://crosslines.live/
I've been building CrossLines (https://crosslines.live/), a free 2-player game: you take turns placing hex tiles carrying curved channels, and you win by connecting your two sides of the board. No signup, runs in the browser, you can send someone a link and play them live.
The rules took a weekend. Making the state readable took months. The challenges that stuck with me:
1. Showing ownership without labels. Two players, dozens of interweaving paths, and no room for legends or tooltips on a phone. The answer ended up being liquid: every channel is dry grey stone until it touches a player's edge of the board, then that player's colour flows in from that end, one tile per step. A channel that reaches both players' edges fills from both ends and turns purple where the two liquids meet. So the board explains itself: coloured means live, purple means contested, and the colour at each end tells you who is closer to owning it.
2. Landscape boards on portrait phones. A fair board needs roughly equal tile counts in both directions, which locks the shape to about 1.2:1 landscape. On a phone that means the board only ever fills the width. The fix: when it wins more space, the drawing rotates a quarter turn while the game underneath doesn't. That buys about 18% bigger tiles and 37% more board. The side effect nobody warns you about: you can no longer write "connect north to south" anywhere, because north might be drawn sideways. Every goal label had to become "left and right", relative to whatever is on screen.
3. Crossings. Paths cross on a single tile constantly, and a flat X is unreadable. Instead of computing intersections, every line is drawn twice: first a fat stroke in the tile's background colour, then the line itself. Each new line erases a gap in whatever it crosses, so every crossing reads as a bridge, for free. One brutal detail: round line caps spill a few pixels past the tile edge and erase the neighbouring tile's path exactly where the two are supposed to join. Butt caps only.
4. Network latency you can feel. Online, the server confirms a move in roughly 800ms, which feels broken if you wait for it. But most of a move is already certain the moment you tap: which tile, which cell, which rotation. So that part lands under your finger in ~15ms, and the only genuine unknown (the replacement tile you draw) shows as an empty pending slot until the server fills it. The one thing deliberately not predicted is the result. "You won. Actually, no" is far worse than a short wait.
5. Hover states that quietly break accessibility. The text-only buttons hover by washing a bit of the accent colour behind accent-coloured text. That 4% wash moves the background toward the ink and drops contrast from 4.61:1 to 4.38:1, under WCAG AA, but only while hovered, so no audit tool ever catches it. Now the ink deepens in step with the wash, and a test composites the alpha and fails the build if any state pair dips below AA in either theme.
Would love critique on readability, especially from anyone landing on it cold: https://crosslines.live/. And I'm curious how others handle state that has to be legible without labels. What's your go-to?
Game Title: CrossLines
Playable Link: https://cross-game-xi.vercel.app
Platform: Browser (desktop and mobile, no install)
Description:
CrossLines is a 2-player abstract strategy game about connecting your two sides of a hex board before your opponent connects theirs.
Players alternate placing hexagonal tiles that carry curved channels across their faces. Channels continue across tiles wherever their edges meet, so every tile you place extends, redirects, or dead-ends a path. One player is Lava and wins by completing a channel from the left side of the board to the right. The other is Water and wins going top to bottom. You are always doing two things at once: routing your own connection and steering your opponent's away from theirs.
The board reads itself through colour. A channel stays dry stone until it touches a rim, then its colour runs in from that rim one tile at a time, so anything coloured is live for whoever owns that end. A path that reaches both players' rims fills from both directions and turns purple where the two liquids meet, which means a purple path is one you are both relying on, and the colour at each end tells you who is closer to it.
There is also a bomb, drawn from the same bag as everything else, which blows any placed tile back off the board. It costs you a hand slot and your turn.
Create a game, send someone the link, and you both play in real time. No signup, no install, a few minutes per game.
Free to Play Status:
[x] Free to play
[ ] Demo/Key available
[ ] Paid (Allowed only on Tuesdays with [TT] in the title)
Involvement: I designed and built the whole thing solo: the rules, the tile set, the engine, the interface and the multiplayer backend.
Indie dev here. Giving away 200 free lifetime unlocks for Frida over the next 48 hours.
Built it because every recipe app wanted a subscription just to do the basics - save a recipe, scale it, cook from it. Frida is one purchase.
No subscription, no account required, no ads, no cloud lock-in (you can back up with iCloud).
What's in it:
Works fully offline on iPhone. iCloud sync keeps your recipes on every device if you want it, but nothing lives on our servers.
How to claim: comment the last thing you cooked (or the dish you always burn - total beginners very welcome) and I'll send you a coupon (download it only after you get it please)
The ask: if you try it and like it, an App Store rating helps a small indie app more than anything else right now. If you don't, tell me why - I really want the feedback.
App Store: https://apps.apple.com/us/app/frida-host-like-a-chef/id6754215016
Game Title: Herbert
Playable Link: https://runnerapp.pro/herbert?l=en
Description: A runner game with a lot of funny obstacles and challenges.
Free to Play Status:
Involvement: Indie dev
Vibe coded using Claude, took me a few days, and the goal is mostly to have fun.
Just went live on Product Hunt. Solo dev, this is my launch.
Smart Runner builds an adaptive 5K-to-marathon plan from one race result and rebuilds it after every run. VDOT pace zones, ATL/CTL/TSB load tracking, methodology drawn from Pfitzinger, Daniels and Canova. Native Apple Watch app with live pace, HR zones and per-segment intervals.
Two opinions baked in that most running apps don't share:
It's at 4.9 stars on the App Store. I'd genuinely love feedback from this crowd, especially on the Watch experience and the adaptive plan logic. Ask me anything, the training math included.
PH link: https://www.producthunt.com/products/smart-runner?utm_source=reddit&utm_medium=launch
Happy to check out and support what the rest of you are launching today, drop yours below.
every running calculator i've used takes your race time and spits out a "fitness score." but running a 1:35 half in 26C heat with hills is way harder than running 1:35 in cool flat conditions, and they all treat them the same.
so i built one that actually adjusts for the day. you put in your race time, then optionally add temperature, humidity, elevation gain, altitude. it shows two scores side by side: what your race actually was, and what it would've been on a perfect cool flat day. plus a breakdown of where the adjustment came from (heat made it 2.7% harder, hills 1.4%, etc).
(quick context if you haven't run into this stuff before, VDOT is basically a number that estimates your current fitness from a race time, the higher the better. coaches use it to figure out your training paces. the issue is the standard formula assumes ideal conditions, which almost no race actually has.)
the part i had fun with: it auto-fills weather from your location, and if you put in a past date it pulls the actual conditions from that day. so you can drop in a race from 6 months ago and get the real weather, not guess.
https://runnerapp.pro/tools/vdot-calculator
couple things that surprised me while building it: heat hurts slower runners more than faster ones, which is the opposite of what i'd assumed the standard "downhill = free speed" rule overstates it, your quads give out before you can actually cash in the gradient
if anyone wants to poke at it, mostly curious whether the conditions section makes sense or feels overwhelming. trying to keep it useful for people chasing PRs without scaring off folks who just ran their first 10k.
Hey,
A month or so in the store, most downloads came from reddit posts - converted around 20 users overall. would love to get any creative idea on how how can I promote it for free, Thanks.
Link here: https://apps.apple.com/ca/app/smart-runner-training-plans/id6760949120
Indie dev here. Giving away 100 free lifetime access for Smart Runner over the next 24 hours.
Built it after my first marathon, tired of paying $120/year for Runna just to access decent features. Handles training plans from 5K to marathon.
One purchase, no subscription, no account, no ads, no cloud (you can backup using iCloud).
What's in it:
Works on iPhone alone. Apple Watch makes it noticeably better but isn't required.
How to claim: comment your current weekly mileage (km or miles, 0 is totally fine! - starters very welcome)
The ask: if you try it and like it, an App Store rating helps a small indie app more than anything else right now. If you don't, tell me why - I genuinely want the feedback.
App Store: https://apps.apple.com/us/app/smart-runner-app/id6760949120
29.99$ for life or 14.99$ for a year
Get it here -> Smart Runner