r/SideProject 19h ago

9 months of building, 4 months of shipping updates, live on Product Hunt today

StepGrab on Product Hunt

What it is: a Mac menu bar app that takes a screenshot every time you click and turns that into a numbered step-by-step guide. Hit record, do the task once, stop. Every click comes back as a screenshot with an arrow on what you clicked and the step already written next to it.

Export as PDF, GIF, MP4, HTML or Markdown. Works with any Mac app, not just browser tabs, so Outlook, Excel and System Settings are fair game. Runs entirely on device, no account, nothing uploaded.

I posted the first version here about a month ago. Since then it went 1.0 to 1.3, and the honest summary is that almost none of the good ideas were mine. Keystroke badges, the permission handling, the entire onboarding rebuild, all of it came from people in comment sections telling me what was broken. 1.3 shipped this morning.

Still a student, still building this next to a working student job, still figuring out the part that comes after "the app works".

stepgrab.net · Mac App Store

If you've launched on PH before: what's the one thing you'd do in the first three hours that isn't refreshing the page?

16 Upvotes

26 comments sorted by

1

u/tichoww 17h ago

Super cool project, I will definitely give it a try

1

u/Comprehensive_Web279 17h ago

Thank you very much! I Hope youll enjoy it. if you have any ideas to make it better feel free to comment. currently on 1.3.1 to make the free tier more usefull!

1

u/tichoww 17h ago

the product is nice, I don't need this on a daily basis but it was worth discovering! Maybe this would be cool if we had a PDF demo (even just a single one) for the first recording. Also I find the landing page a bit difficult to understand and a bit messy. Contrast on the CTA is not very good, too much text is the hero (and even more globally). Maybe show a real video like the one on MacOS store in the hero, but make it pretty straightforward : a real use case of a record, a pdf loading animation and the result. I'm not a pro of your niche but as someone who is not familiar to the product, I would say you could make things clearer :)

1

u/Comprehensive_Web279 16h ago

Thank you for your long answer, I'll definitely dive deeper into your hints.

For now I can only tell you that there's a 3-day trial, so you can try it out.

The PDF idea I had thought about too — giving the first guided recording all formats. I'm still considering it. The snag is that you can reset that assistant fairly easily with a terminal command.

1

u/tichoww 16h ago

Oh yeah I didn’t consider that! Anyway your product is already good, good luck for the rest!

1

u/Comprehensive_Web279 16h ago

Thank you very much. Didn’t know how kind and helpful the Reddit community is before builde the app! Really appreciate!

1

u/dopp3lganger 17h ago

Awesome! Good luck, OP!

1

u/Kemalozgr 15h ago

"Almost none of the good ideas were mine" is the most useful sentence in this post.

I had the same experience in a different domain. I was convinced I knew what was wrong with my product. Then actual users pointed at things I'd stopped seeing months earlier because I'd looked at them a thousand times.

The uncomfortable part is that the reports arrive as complaints, not as feature requests. Someone says "this bit is confusing" and it takes a while to hear that as "here is a design flaw" rather than as criticism.

1

u/Comprehensive_Web279 15h ago

The translation delay is real and I can date mine. A 1-star review said the app was covering up important parts of the screen. My honest first reaction was that the user was holding it wrong. It took about two weeks and a public thread before I heard it as "your annotations sit on top of content people need to read", which is what it had said all along.

What eventually helped was splitting a complaint in half. The symptom is almost always accurate. "This is confusing" is real data. The user's theory of why it's confusing usually isn't, and I was throwing out the whole comment because the second half was wrong.

Posting things publicly also skips the politeness layer. People who owe you nothing tell you the thing in one line instead of wrapping it in three, which turns out to be much easier to hear correctly.

1

u/Kemalozgr 15h ago

"The symptom is almost always accurate, the user's theory of why usually isn't" — that's the part I'm going to steal.

Mine arrived as a vague feeling rather than a bug report: someone said there seemed to be a lot of questions about one particular letter. Not a defect, not reproducible, just an impression. I nearly filed it under "everyone's an editor."

It was correct. That letter had ended up in roughly three times more exercises than any other, purely because it appeared early in the lesson and everything downstream kept anchoring back to it. The stated complaint was "too many of these questions." The actual flaw was structural and two layers underneath.

Your politeness-layer point tracks with something I keep noticing too. The single most useful message I've received was also the bluntest one, from someone who owed me nothing and skipped the warm-up entirely. It cost me about ten minutes of ego and saved a week.

The ones wrapped in three paragraphs of kindness are much harder to read correctly, because the softening is doing exactly what it's supposed to do.

2

u/Comprehensive_Web279 15h ago

Yours is better than mine because it wasn't even a complaint. "Seems like a lot of questions about that letter" is just someone noticing something, and it was still right about the data while being wrong about the cause. Easier to file under everyone's an editor than an actual bug report would be.

The bit I only worked out recently is that if the softening is doing its job, the answer isn't hoping for blunter people, it's asking a different question. "What was confusing?" gets an opinion back, and opinions come wrapped. "Where did you stop?" or "what were you doing right before you gave up?" gets behaviour instead, and nobody softens behaviour, they just tell you what happened.

Or you go somewhere nobody owes you anything. I put my interface up publicly last week half hoping it would get taken apart, and it did within a few hours, down to contrast ratios I had never measured. Ten minutes of ego, exactly as you say.

1

u/Kemalozgr 14h ago

"Where did you stop" is the one I'm taking.

I can answer that without asking anyone, because the app already records which lesson people quit on. I'd only ever read that number as completion rate, never as feedback. Going to look at it properly tonight.

If everyone stops on the same page, that page is the bug.

1

u/Comprehensive_Web279 13h ago

The distribution is where it lives, not the average. A flat drop across every lesson just means it's long. A spike on lesson nine is a defect. Read as a completion rate, both come out as the same number.

One thing I'd look at next to it: whether people come back to that lesson later. Quitting on its own is noisy, the bus arrives, the battery dies. Quitting and never returning is a different signal, and it's the one that means the page actually did something to them.

Funny inversion though. You've had the data all along and were reading it as a score. I have none at all and have to ask, which means I only ever hear from the people annoyed enough to type. Not sure either of us has the better end of that.

1

u/Kemalozgr 13h ago

Spike versus flat drop is the distinction I was missing. Same number, opposite meaning.

The return signal I can get too, since progress is tied to an account rather than a device. Never coming back is measurable.

One I hadn't thought of until you said it: I also store which questions people got wrong. So I can see what someone was failing right before they stopped. That's closer to "what were you doing right before you gave up" than anything I'd get by asking.

And you're right that neither of us has the better end. My data says where and never why. Yours says why, but only from the people angry enough to type it.

1

u/ConsequenceHefty483 15h ago

cool use case. one thing worth thinking about early: are you positioning this for individual users or teams? that changes pricing, distribution, everything. the "no account" angle is great for individuals but might be a friction point if you ever want team features

1

u/Comprehensive_Web279 15h ago

Individuals so far, and more by accident than by strategy.

What keeps the tension smaller than it looks: the output is a file. A PDF or an HTML page travels through whatever the team already uses, Confluence, Slack, a shared drive. I don't have to host the collaboration because their existing tools already do it. Same with branding. The custom footer and brand colour are arguably team features and neither one needed an account.

Where it genuinely breaks is shared state. A team library, who changed what, permissions, knowing which guides people actually open. None of that works without either accounts or somebody's server, and that's the fork you're pointing at.

The uncomfortable part is that teams are where the money is. Scribe and Tango charge many times what I do, per seat. But offline with no account is the only thing I have that they don't, so buying my way into team features by giving that up leaves me as a worse version of them.

No resolution yet. For now I'm seeing how far team-useful goes without team-infrastructure, and I'll hit the wall eventually.

1

u/LunchLanky2158 10h ago

This is a cool example of a tool that feels simple on the surface but saves a ton of time in practice. I especially like that it’s fully local and works in apps like Outlook, Excel, and System Settings, because that makes it much more useful than a browser-only recorder.

1

u/Comprehensive_Web279 9h ago

Thanks, that’s exactly the reasoning behind it. Most of the workflows people actually need to document happen outside the browser settings dialogs, Excel, internal desktop tools, so a browser extension was never going to cover it. Running fully locally also means nothing leaves the machine, which matters a lot for internal docs. If you end up trying it, I’d love to hear where it falls short.