Hugo

Hugo

@hiro3641.bsky.social

👨‍💻 Builder / INFJ / Building apps in public: - Try https://kachika.app to learn languages through daily life. - Use https://cococut.app to shoot a few seconds of your day.

17 followers7 following177 posts

Translating App Store metadata into Japanese with English action verbs gave zero organic clicks. English users search for actions like 'scan text', but Japanese searchers use compound nouns like '単語帳' and '看板翻訳'. ASO needs local intent. #aso #indiedev #buildinpublic

Default video thumbnails often land on motion blur in fast clips. To solve this, I'm filtering candidate frames by Laplacian variance to pick the sharpest frame automatically. Much more reliable than picking fixed default timestamps for cover stills. #flutter #iosdev #buildinpublic

Polished concept mockups in App Store screenshots converted 30% worse than raw UI captures for my utility apps. People searching for a specific tool want to see the actual buttons and workflow before downloading, not brand illustrations. #aso #indiedev #buildinpublic

App Store Custom Product Pages for specific search terms lifted conversion by 22%. Users searching for CRT scanlines converted faster when the first screenshot matched that exact effect instead of a generic UI preview. Aligning visual intent pays off. #aso #indiedev #buildinpublic

Procedural glitch noise in half-precision (fp16) caused ugly gradient banding in dark scenes. Moving only the coordinate accumulator math to fp32 while keeping color passes in fp16 smoothed everything out and kept rendering locked at 60fps. #glitchart #iosdev #buildinpublic

Night glare and neon signs washed out Kanji strokes in Kachika's camera OCR. Applying adaptive thresholding on localized 32x32 windows instead of a global pass recovered 85% of dropped characters. Street text needs local contrast math. #ai #iosdev #buildinpublic

Vertical typography on Apple Watch broke when line spacing used fixed point heights across displays. In Jizhi, switching to em-relative glyph bounding boxes kept characters aligned from 40mm to Ultra screens. Layouts need relative geometry. #swiftui #iosdev #buildinpublic

The hardest part of a daily video habit isn't tapping record. It's the urge to rewatch and judge yesterday's clip. In CocoCut (https://cococut.app), opening straight to a clean viewfinder without past previews stopped self-conscious retakes. #buildinpublic #indiedev #iosdev

Decoding full cards on the main thread dropped scrolling in RepostCard from 60fps to 35fps. Moving to CGImageSourceCreateThumbnailAtIndex on a background queue kept UI frames locked at 60fps. Never decompress images on the main thread. #iosdev #flutter #buildinpublic

Translating my app title into French and German cut search impressions by 40%. Creators in those regions still searched for creative tools in English. Reverting the title to English while localizing keywords brought traffic back in 3 days. #aso #indiedev #buildinpublic

Recording a one-second video shouldn't hijack a user's headphones and kill their background podcast. Configuring the AVAudioSession to mix with others lets CocoCut grab quick clips while leaving background audio completely uninterrupted. #iosdev #flutter #buildinpublic

A 0-100 slider made Yan’s glitch effects hard to reproduce. Tiny changes could turn a clean tear into muddy noise. Snapping displacement to a small set of tested steps made the useful looks easier to find again. #glitchart #indiedev #iosdev

Mixed CJK and Latin titles looked centered on canvas but shifted during high-res export. In RepostCard, measuring ascent and descent for each font kept both scripts aligned and stopped glyphs from clipping. #iosdev #typography #buildinpublic

Background sync on mobile kept colliding with fast UI writes and locking SQLite. WAL mode plus a busy timeout handled the contention without adding another retry layer to the app. #flutter #indiedev #buildinpublic

An incoming call during mobile video recording easily corrupts the active file buffer. Listening for audio interruptions and flushing uncommitted frames to disk immediately saves the partial take before the OS tears down the audio unit. #flutter #iosdev #buildinpublic

Applying color grading before chromatic aberration in Yan left glitch edges looking muddy. Splitting RGB channels first, then grading each pass in linear color space kept the high-contrast fringing crisp. Pipeline order matters as much as shader math. #glitchart #iosdev #buildinpublic

Stitching variable-frame-rate clips on mobile caused progressive audio drift during long video exports. Thermal throttling fluctuates phone frame rates between 24 and 30fps. Re-sampling against the audio clock fixed the sync. #flutter #iosdev #buildinpublic

Offering a lifetime tier at 2.5x the annual price helps convert hesitant users early on. For utility apps used intermittently, an upfront purchase removes subscription churn anxiety and brings in reliable upfront runway. #indiedev #buildinpublic #pricing

Exporting 4K glitch images in Yan froze the UI for 800ms while Core Image rebuilt Metal pipeline states. Reusing a singleton CIContext and locking the color space dropped the export stall to 120ms. Mobile GPUs hate cold context recreation. #glitchart #iosdev #indiedev

On my small apps, having almost no budget pushed user conversations ahead of tools and ads. Cash can make spending feel like progress. Early on, a tight budget has been a useful filter for me. #indiedev #buildinpublic

Standard OCR models struggle with Japanese street signs because they assume horizontal text flow. In Kachika, switching to contour bounding boxes lets learners tap individual Kanji characters without breaking the layout. #buildinpublic #ai #indiedev

When rendering CRT scanlines in a mobile shader, calculating lines by logical pixels creates moiré patterns on high-density screens. In Yan, locking the scanline grid to physical device pixels kept the lines crisp at 60fps across different displays. https://yan.yichenlab.com #glitchart #indiedev

Updating keyword metadata in the App Store often causes a 48-hour dip in search impressions while Apple recalculates ranking. The first time it happened, I panicked and reverted my subtitle. Now I wait four days before touching keyword fields again. #indiedev #aso #buildinpublic

Allocating fresh pixel buffers for every glitch frame in Yan quickly triggered iOS low-memory warnings. Switching to a reusable texture pool dropped memory churn to zero and kept frames locked at 60fps. Reusing buffers beats memory allocation on mobile GPUs. #glitchart #iosdev #buildinpublic

I used to treat every edge case as proof that a feature needed more code. Now I ask what user promise created the edge case in the first place. Sometimes the cleanest fix is changing the promise, not adding another branch.

Agent skills are the first time plain text has felt like software to me. You write a workflow in markdown, add constraints, and the model follows it without a compile step. The instructions aren't documentation. They're part of the program.

When I study an app I like, I skip the feature list. I look at what they refused to add. CocoCut has no timeline. Yan does not try to be Lightroom. The extra buttons are usually there so the product looks finished. #indiedev #buildinpublic

Built an approval queue for my own posts. Nothing goes out that I haven't approved word for word, and a request that times out never gets retried. Hardest rule to accept: if you can't tell whether it sent, stop. A duplicate costs more than a missed slot. #buildinpublic #indiedev

When an agent needs a feed, the tempting move is to scrape or hook a private API. That code is clever until the session dies. A dedicated inbox plus a CLI pull on a timer looks dumb. It also survives the weekend. I keep choosing the dumb pipe. #ai #buildinpublic

Tap record in Flutter on Android and you wait half a second. Official plugin binds VideoCapture at start, then tears it down. We left it bound. Pixel 8 Pro: 436-511ms to 33-60ms. CocoCut captures 1s. If the shutter waits, the moment is gone. https://cococut.app #indiedev #flutter

One philosopher's name beats a 1,000-word prompt. Instead of endless instructions, anchor your agent to a clear thinker: Popper for refutation, Wittgenstein for concept auditing. Good framing compresses context instantly. #ai #promptengineering #buildinpublic

Daily vlogging is exhausting: hours of filming, tedious cutting, and timeline fatigue. I built CocoCut (https://cococut.app) — a 1s video diary. Capture 1s when something catches your eye. It auto-stitches your moments into a story with zero editing. #buildinpublic #indiedev #vlog

Plain text flashcards fight how our brains store memory. Dual coding shows that words paired with photos create two retrieval paths (verbal + visual), doubling retention. I built Kachika to turn daily photos into instant vocab cards: https://kachika.app #buildinpublic #indiedev #learnjapanese

I got tired of memorizing flat vocabulary lists that never stick. So I built Kachika (https://kachika.app) — an AI visual dictionary. Snap a photo of anything to get native vocabulary cards with furigana, nuances, and natural context sentences. #buildinpublic #indiedev #learnjapanese

Don't assume you know what you're thinking until you've written it down completely. Most "prompt engineering" failures are actually thinking failures. Clarify the problem in plain text first. The AI execution part becomes trivial once the diagnosis is sharp. #buildinpublic #ai #clarity

Most anxiety in building comes from using vague terms. "No traction" or "bad growth" aren't real bottlenecks — they're fuzzy labels. Break broad complaints down to specific, atomic actions. Clarity dissolves anxiety. #indiedev #buildinpublic #mindset

When analyzing successful projects, ignore 80% of the social media hype. Don't focus on what creators preach. Look at what they actually ship, iterate, and retain. Observe actions, filter the noise. #indiedev #productgrowth #buildinpublic

Stop asking AI to solve vague problems right away. Use AI as a diagnostic partner first. Locate the actual bottleneck before writing code or copy. Better diagnosis beats faster execution every time. #buildinpublic #ai #indiehackers

Procrastination in building isn't time management. It's an ego protection strategy — delaying the launch so you don't face feedback. Are you fixing a bottleneck, or avoiding judgment? #indiedev #buildinpublic #mindset

Unwilling to share = afraid to share = incapable of sharing. True building in public requires vulnerability. If you are hiding your work, ask yourself which of the three it really is. #indiedev #buildinpublic