@mikeymykey.bsky.social
Melbourne dev building an app that turns recipe photos into smart grocery lists. Looking for beta testers! www.opabinia.com.au mikechiao.substack.com
5/5
Next I will watch which searches actually bring people in and keep talking to real home cooks. If the new wording does not land, I will adjust again. Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au #buildinpublic #homecooking
4/5
I also shifted the copy toward small wins like saving time, avoiding duplicate onions, and knowing which dinners are actually ready to cook. The app is still early and I am still learning what really helps home cooks.
3/5
So today I rewrote the app name, short line, and description so they literally say recipe to grocery list. No buzzwords, just the quiet job the app does. It feels almost too simple, which usually means I am closer to the real message.
2/5
A friendโs feedback hit hard. They rarely cook from recipes, so my whole pitch bounced off. It reminded me not to chase everyone who shops, but to speak to people who save recipes and get stuck turning them into a usable list.
1/5
Opabinia Dev Log #31
Today was less about code and more about clarity. My store page read like a generic grocery list app, even though the real magic is turning recipes into a grocery list you can actually cook from. #buildinpublic #homecooking
5/5
The big vision is exciting, but the daily work is in the details. I'm just chipping away at it. Slowly tweaking, slowly improving. Trying to make it a little bit better than it was yesterday.
Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au
4/5
The "Magic Moment" needed to feel smart. I wired up a simple JS array to sync the subtitles with the flickering images. The text changes from "Video Recipe" to "Handwritten Note" in real-time. It guides the eye and reinforces the scanner's versatility.
3/5
Navigation felt static. I added a 'scrollspy' script. Now, as you scroll down, the nav link highlights to show exactly where you are in the story. It helps users orient themselves and makes the site feel alive, not just like a static digital poster.
2/5
Itโs amazing what one HTML attribute can do. Adding loading="lazy" to the YouTube iframes cut the initial page load weight significantly. I was crushing mobile data plans before. Now the page flies. Simple change, big impact.
Opabinia Dev Log #30
1/5
Small tweaks took my landing page from 'Prototype' to 'Product'.
* Lazy loading YouTube embeds (Performance) โก๏ธ
* Mobile hamburger menu (Accessibility) ๐
* Scrollspy navigation (User Orientation) ๐งญ
* Dynamic subtitles (Delight) โจ
#buildinpublic
5/5
Tech is cool. Dinner is better. Prioritizing the payoff was a shift for my dev brain, but necessary. The page now focuses on the why, not just the how.
Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au
4/5
I also swapped the copy. "Cognitive Load" is now "Juggling Messy Notes." Itโs not dumbing it down. Itโs speaking the user's language. My mum doesn't care about UX terms. She cares about getting dinner on the table.
3/5
Why? You have to sell the destination before the plane ticket. Showing the payoff (the meal) earlier earns me the right to explain the tech (the scanner) later. Emotional connection first, technical features second.
2/5
The biggest fix? The layout. I had the real food photos buried at the bottom. Users had to scroll past technical diagrams just to see the result. I moved the "From the Kitchen" section to the top. The food is the hero now.
Opabinia Dev Log #29
1/5
If my mum can't understand the landing page in 5 seconds, I've failed. Feedback said the name "Opabinia" is clever but obscure. It didn't evoke food or ease. I realized I was designing for techies, not home cooks. #buildinpublic #homecooking
5/5
UX is often less about pixels and more about narrative logic. If the storytelling doesn't respect the user's actual workflow, the design fails. Just have to keep on tweaking.
Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au
4/5
It creates a clear mental model. Input (Messy Inspiration) -> Processing (Opabinia) -> Output (Actionable List). The logic holds up. It visualizes exactly how the app enables the final result without overpromising on the cooking part.
3/5
But where does the meal fit? I used the page flow to bridge the gap. The "Magic Moment" ends with the perfect list. The very next section is "Shop Confidently," featuring real food photos. The narrative: The app handles the list, so you are enabled to cook the meal.
2/5
I had to separate the "Enabling" from the "Result." The fix was a visual hierarchy. Panel 1 (The Problem) flickers through messy inputs. Panels 2 & 3 (The Enabler) sit static in phone frames. The eye flows from the chaotic input to the stable, organised tool.
Opabinia Dev Log #28
1/5
How do you visualize the invisible? I tried a flow: Mess -> Scan -> List -> Meal. But it flawed. It implied the app cooked dinner. Opabinia is the Recipe Enabler, not the chef. The UX had to make that distinction clear. #buildinpublic #homecooking
5/5
The lesson? Don't sell the drill, sell the hole. Or in my case, don't sell the parsing engine, sell the delicious meal. The code matters, but the story connects. Still learning to wear the marketer hat.
Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au
4/5
The layout changed too. I was hiding the best food photos at the very bottom. Now, the flow is clearer: Messy Input -> Smart List -> Delicious Meal. I learned I need to earn the right to explain the tech by showing the emotional payoff first.
3/5
I audited the landing page. The jargon had to go. "Translation Friction" became "The Tedium of Typing Lists." "Cognitive Load" became "Juggling Messy Notes." It finally feels less like a tool for robots and more like a helper for humans.
2/5
It's the classic "Developer Brain" trap. I spent weeks building complex parsing algorithms and merging logic. Naturally, I wanted to show off the how. But users don't care about my parsing latency. They care about getting dinner on the table without the stress.
Opabinia Dev Log #27
1/5
I got roasted. Constructively, at least. I thought I was selling a smart app to fix "cognitive load." A sharp user pointed out I was writing a UX thesis, not selling the joy of cooking. They were right. #buildinpublic #homecooking
My rice cooker called me an idiot.
I tried a "lazy" one-pot Hainan chicken rice, ignored the "max fill" line. The result was a tragic mix of both raw AND overcooked mushy rice.
open.substack.com/pub/mikechia...
Building Opabinia. ๐ opabinia.com.au
#cookingfail #homecooking
5/5
The ghost is (hopefully) busted! Your grocery list should now correctly clear out after a trip, and you won't be bothered about duplicates from the past.
Building Opabinia, one bug at a time. ๐๐ฆ opabinia.com.au
4/5
The fix was to teach the app what "deleted" really means. I had to go into the core database logic and add the proper filter to make sure it only loads active, non-deleted items.
It's humbling how one tiny, missed filter can create such a confusing experience. Always learning.
3/5
It turned out to be a deep data-layer bug. The app was correctly marking the old items as "deleted" in the local database, but it wasn't filtering them out when loading the list!
It was like inviting a ghost to the party.