In October I was running about ten hackathons and dozens of open-source pull requests at the same time. All of it lived in one Markdown file, TRACKER.md, which grew to more than 1,300 lines. Every PR opened, every review, every deadline and every "don't ping this maintainer again" went in there, typed by hand.
Typing it broke my flow every single time. Skipping it meant I missed follow-ups.
So for the No Hands: The Wispr Challenge (WeMakeDevs x Wispr Flow) I set one rule: no keyboard for 15 days. Every prompt, every update, every message and every one of my #NoHandsChallenge posts was spoken through Wispr Flow. And I built the tool I actually needed: ShipLog.
How I got here
Graph Hacks with WeMakeDevs and FalkorDB had just ended (I built DawaiGraph there), and I was asking myself: what next? Then the No Hands challenge showed up. It's my fifth WeMakeDevs hackathon, after Cognee, Agents of Signals, Graph Hacks and Mergetober.
The funny part: I was already building without typing. For about three months before this, I'd been working by voice: the mic on my Android phone, an AI assistant on the phone, and my laptop driven from there. I had seen Wispr Flow ads and thought, just another speech-to-text app.
How many words did I speak before Flow? Lakhs, probably. I never counted. Flow is the first thing that counted them.
What changed with Flow was context. I ramble, and it gives back clean, formatted points. A spoken list arrives as bullet points. Numbers come out as digits. It once heard "WeMakeDevs" as "Vmac dose"; one Dictionary entry fixed it forever. Talking stopped being a workaround and started being faster than typing.
So the question became: if I already talk through all my work, why am I still typing my tracker?
What ShipLog does
You talk, the way people really talk: long, messy, correcting yourself. ShipLog reads it like speech, shows you what it understood, and saves nothing until you say yes.
- It reads speech, not text. "Tuesday, no wait, Wednesday" becomes Wednesday. "I think it's due Friday" is marked unsure. "This is really urgent" becomes a priority. "PR two one eight six seven" becomes PR #21867.
- No quote, no item. Every saved item keeps the exact words it came from. If ShipLog can't point at your words, it doesn't save it.
- Talk to edit. "The Kestra one is done." "Push the video to Thursday." It shows the change, I confirm.
- Today. Overdue items, this week's deadlines, and my GitHub and GitLab pull requests with live status. A merge closes its item; failing checks and requested changes show up. Deadlines go to my calendar.
- Ask. I can ask about my own work. It answers only from my saved words, with the quote, and if it's not in my log it says so instead of guessing.
- Flow tab. It lists the names Flow misheard and gives me the words to add to Flow's Dictionary, plus ready Snippets.
- Write. Stand-up, weekly report and a post, each citing which items it used. It never sends anything for me. I copy, I decide.
- Telegram. On my phone I talk to a ShipLog bot with the Flow keyboard, see what it understood, and tap Save.
Live link (no sign-up, opens a demo copy): https://shiplog-1037019152152.asia-south1.run.app
Code: https://github.com/Ankith-m1006/shiplog
2-minute demo: https://youtu.be/fVCo67z4U1s
The rule, in numbers
| Days without typing | 16 Oct to 30 Oct |
| Words dictated through Flow | 101,000 (by 27 Oct) |
| My speaking speed | 97 words per minute |
| My first day | 5,047 words |
| Biggest day | ~23,000 words (22 Oct) |
| ShipLog commits | 28, all on their real dates |
| Tests | 73 passing |
| #NoHandsChallenge posts | 33 so far |
At 97 wpm, the 23,000-word day was about four hours of talking. Typing the same at a typical 40 wpm would have been close to ten.
The build, day by day (from the git log)
19 Oct, day 1. Capture an update, review what was understood, save it. The first rule went in on day one: every item keeps a quote of my exact words.
20 Oct, day 2. Live GitHub status for my PRs. Follow-up drafts that obey my own rules: if I said "don't ping this person again", the draft to that person is blocked. Fuzz tests found two real crashes: an empty update returned a 500, and two first loads at the same moment raced each other. Both fixed.
22 Oct. Ask answers only from the saved log, and every answer is backed by a quote that code checks is really there. If the quote isn't in my log, the answer is refused. Then a cleaner look, a phone end-to-end test, deployment on Cloud Run, and read-only "Connect GitHub".
23 Oct, the big one. This is when ShipLog started reading updates like speech: self-corrections, take-backs ("scratch that"), hedges, urgency and spoken numbers. It also reads by itself when Flow finishes typing, so I never press a button. Same day: talk to edit, the Flow tab, "needs you" (merges close items, GitLab merge requests, calendar subscribe), and the stand-up/report/post writer.
25 Oct. The Telegram bot, so I can capture away from the laptop with the Flow phone keyboard. I also found that my own owner workspace had never opened since launch: my key failed a format check meant for browser keys. Fixed.
27 Oct. Testing the bot for the demo, the first reply took about 30 seconds (a cold start plus the read), and the chat looked dead. Now it shows "typing..." while it reads.
What talking changed
These are things I only learned because I couldn't type.
Spoken updates correct themselves. Nobody types "Tuesday, no wait, Wednesday". Everybody says it. A text parser keeps both dates. ShipLog had to treat the correction as part of the sentence, and that one change made the whole thing usable.
One breath carries many asks. A single spoken message from me often carried several tasks, a deadline and a change of plan at once. "Today we'll finish all the submissions except Qloo, Qloo we'll do tomorrow" is one sentence and three log changes.
Voice breaks on names, not words. Flow almost never got normal words wrong. It got names wrong: "ShipLog" became "Shiplock", "FalkorDB" became "Falter DB", "PR" became "peer", and it once typed its own name as "Whisperflow". That's why the Flow tab exists: it collects the names that came out wrong so I can teach them to the Dictionary once.
Saying no is easier out loud. I dropped a whole hackathon with one spoken line. Typed, I would have written a paragraph justifying it. Same for "do not open another PR": stopping is easier to say than to type.
Short questions get asked more. One morning I just said "did we miss any post?" It caught a PR that had been merged at midnight and that my morning checks had skipped. Typed, that question feels like effort. Said out loud, it's free, so I ask it more often.
Flow fixes itself mid-sentence too. It sometimes got a word wrong and then right four words later, like "the rising, like grading rice". The parser has to be patient in the same way.
What didn't work
- New names stay wrong until you add them to the Dictionary. Every new project costs a few corrections.
- Spoken numbers can be ambiguous. A PR number said fast in the middle of a sentence can come out as a different number. ShipLog keeps the quote next to every item, so a wrong number is easy to spot before I save.
- Phone and desktop word counts lagged behind each other on day 2.
- Telegram can't show the rich review screen, so the bot shows a short list and a Save button instead.
Try it
- Live (no sign-up): https://shiplog-1037019152152.asia-south1.run.app
- Code: https://github.com/Ankith-m1006/shiplog
- Demo video: https://youtu.be/fVCo67z4U1s
Talk to it the way you'd talk to a friend about your week. Correct yourself. See what it keeps.
Thanks to WeMakeDevs and Wispr Flow for the challenge. #NoHandsChallenge
How this was made: my prompts, updates and posts were dictated through Wispr Flow. ShipLog's code was written with an AI coding assistant from those spoken prompts, and I reviewed and tested it. ShipLog itself uses Gemini to read updates.




Top comments (0)