DEV Community

hiyoyo profile picture

hiyoyo

Indie macOS developer. Building utilities for Android + Mac users. Rust / Tauri / React — @hiyokoko 7 apps shipped. Writing about all of it.

Location Japan Joined Joined on  Personal website https://hiyokoko.gumroad.com/ twitter website
AI Overlay UI in Tauri — Designing the "Ask AI" Button That Doesn't Annoy Users

AI Overlay UI in Tauri — Designing the "Ask AI" Button That Doesn't Annoy Users

Comments
2 min read

Want to connect with hiyoyo?

Create an account to connect with hiyoyo. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
"You Got This Error Last Week" — Building an AI That Remembers Your Past Errors

"You Got This Error Last Week" — Building an AI That Remembers Your Past Errors

Comments 3
2 min read
Detecting Dangerous Terminal Commands Before Sending Them to an AI — My Safety Layer

Detecting Dangerous Terminal Commands Before Sending Them to an AI — My Safety Layer

Comments
2 min read
Offline-First Architecture in a Tauri App — What It Actually Means

Offline-First Architecture in a Tauri App — What It Actually Means

Comments
2 min read
How I Price My Indie Mac Apps — The Thinking Behind $7, $39, and $50

How I Price My Indie Mac Apps — The Thinking Behind $7, $39, and $50

Comments
2 min read
What I Learned Building HiyokoBar — A Menubar App That Does One Thing Per Click

What I Learned Building HiyokoBar — A Menubar App That Does One Thing Per Click

Comments
2 min read
Bates Numbering in Rust — Automating Legal Document Stamping

Bates Numbering in Rust — Automating Legal Document Stamping

Comments
2 min read
PDF Redaction in Rust — Why "Delete the Text" Isn't Enough

PDF Redaction in Rust — Why "Delete the Text" Isn't Enough

1
Comments
2 min read
Selling Mac Apps on Gumroad — What Works, What Doesn't, Honest Numbers

Selling Mac Apps on Gumroad — What Works, What Doesn't, Honest Numbers

1
Comments
2 min read
Rust Async Patterns in Tauri — Keeping the UI Responsive While Rust Does Heavy Work

Rust Async Patterns in Tauri — Keeping the UI Responsive While Rust Does Heavy Work

Comments
2 min read
Rust Error Handling Patterns I Actually Use in Production

Rust Error Handling Patterns I Actually Use in Production

Comments
2 min read
Combining Virtual Scroll With AI — Keeping 50,000 Log Lines Fast While Adding Gemini

Combining Virtual Scroll With AI — Keeping 50,000 Log Lines Fast While Adding Gemini

Comments
2 min read
AI Button UX — Where to Put It, How to Label It, What to Show While Waiting

AI Button UX — Where to Put It, How to Label It, What to Show While Waiting

Comments
2 min read
Localizing Gemini Prompts — Getting AI Responses in the User's Language

Localizing Gemini Prompts — Getting AI Responses in the User's Language

Comments
2 min read
Caching AI Responses in a Desktop App — Don't Pay Twice for the Same Question

Caching AI Responses in a Desktop App — Don't Pay Twice for the Same Question

1
Comments
2 min read
Streaming Gemini API Responses in Rust + Tauri — Real-Time Token Display

Streaming Gemini API Responses in Rust + Tauri — Real-Time Token Display

1
Comments
2 min read
Building AI-Powered Apps for Free in 2026 — The Complete Guide

Building AI-Powered Apps for Free in 2026 — The Complete Guide

Comments
2 min read
Local LLM vs Gemini API — Cost, Quality, Privacy Compared (2026)

Local LLM vs Gemini API — Cost, Quality, Privacy Compared (2026)

Comments
2 min read
Tauri v2 Cheatsheet — Commands, Events, Permissions, and State in One Place

Tauri v2 Cheatsheet — Commands, Events, Permissions, and State in One Place

1
Comments
2 min read
Gemini vs Claude vs GPT-4 for Code Debugging — Practical Comparison (2026)

Gemini vs Claude vs GPT-4 for Code Debugging — Practical Comparison (2026)

Comments
2 min read
IPC in Tauri — Tauri Commands vs Custom IPC, What to Use When

IPC in Tauri — Tauri Commands vs Custom IPC, What to Use When

1
Comments 1
2 min read
My Actual AI Stack for Building Apps in 2026 — All Free

My Actual AI Stack for Building Apps in 2026 — All Free

3
Comments 6
2 min read
Gemini API Cheatsheet 2026 — Free Tier Limits, Models, and Endpoints in One Place

Gemini API Cheatsheet 2026 — Free Tier Limits, Models, and Endpoints in One Place

2
Comments
2 min read
Building a Developer Tool on Gemini's Free Tier — What's Actually Possible

Building a Developer Tool on Gemini's Free Tier — What's Actually Possible

Comments
2 min read
Gemini API vs Local LLM for Developer Tools — When to Use Which

Gemini API vs Local LLM for Developer Tools — When to Use Which

Comments
2 min read
Storing a Gemini API Key Securely in a Tauri App — Don't Hardcode It

Storing a Gemini API Key Securely in a Tauri App — Don't Hardcode It

Comments
2 min read
I Upgraded to Gemini's Thinking Model for Log Diagnosis. Here's What Changed.

I Upgraded to Gemini's Thinking Model for Log Diagnosis. Here's What Changed.

2
Comments
2 min read
Handling Gemini API Errors Gracefully — 429, 503, and the Free Tier Reality

Handling Gemini API Errors Gracefully — 429, 503, and the Free Tier Reality

Comments
2 min read
Prompt Engineering for Log Diagnosis — What Actually Works With Gemini

Prompt Engineering for Log Diagnosis — What Actually Works With Gemini

Comments
2 min read
Designing an AI Diagnosis Overlay — Why I Replaced the Fixed Panel With ESC-to-Close

Designing an AI Diagnosis Overlay — Why I Replaced the Fixed Panel With ESC-to-Close

Comments
2 min read
How Many Log Lines Should You Send to Gemini? The Context Window Problem.

How Many Log Lines Should You Send to Gemini? The Context Window Problem.

Comments
2 min read
Before You Send Logs to Gemini — Strip the PII First

Before You Send Logs to Gemini — Strip the PII First

Comments
2 min read
I Added Gemini AI to My Android Logcat Viewer. One Click Diagnoses the Error.

I Added Gemini AI to My Android Logcat Viewer. One Click Diagnoses the Error.

Comments
2 min read
Using SQLite to Track Sync State in Rust — Simple, Reliable, Zero Dependencies

Using SQLite to Track Sync State in Rust — Simple, Reliable, Zero Dependencies

1
Comments
2 min read
Building a Universal Binary (Intel + Apple Silicon) with Tauri — It's Easier Than You Think

Building a Universal Binary (Intel + Apple Silicon) with Tauri — It's Easier Than You Think

1
Comments
2 min read
Global Keyboard Shortcuts in Tauri v2 — The Right Way and the Wrong Way

Global Keyboard Shortcuts in Tauri v2 — The Right Way and the Wrong Way

Comments
2 min read
Menubar Apps Are Underrated. Here's Why I Keep Building Them.

Menubar Apps Are Underrated. Here's Why I Keep Building Them.

Comments
2 min read
Building a Menubar App with Tauri v2 — What Nobody Tells You

Building a Menubar App with Tauri v2 — What Nobody Tells You

Comments
2 min read
I Test Everything on an 8-Year-Old MacBook Air. Here's What That Forces You to Get Right.

I Test Everything on an 8-Year-Old MacBook Air. Here's What That Forces You to Get Right.

Comments
2 min read
I've Shipped 7 Mac Apps as a Solo Developer. Here's What Actually Moves the Needle.

I've Shipped 7 Mac Apps as a Solo Developer. Here's What Actually Moves the Needle.

2
Comments
2 min read
What "Offline-First" Actually Means When You're Building a Privacy Tool

What "Offline-First" Actually Means When You're Building a Privacy Tool

Comments
2 min read
PDF Is Still the Hardest File Format to Work With. Here's Why.

PDF Is Still the Hardest File Format to Work With. Here's Why.

Comments
2 min read
Tauri v2 vs Electron After 6 Months of Real Development — My Honest Take

Tauri v2 vs Electron After 6 Months of Real Development — My Honest Take

9
Comments 2
2 min read
Why I Built a Native Mac App Instead of a Web App — and What I'd Do Differently

Why I Built a Native Mac App Instead of a Web App — and What I'd Do Differently

Comments
2 min read
Building PDF Stamp Placement Without a Framework — Click to Place, Drag to Move

Building PDF Stamp Placement Without a Framework — Click to Place, Drag to Move

Comments
2 min read
Repairing a Broken PDF in Rust — Rebuilding the XREF Table From Scratch

Repairing a Broken PDF in Rust — Rebuilding the XREF Table From Scratch

Comments
2 min read
Watching a Folder in Rust with notify-rs — Hot Folder for PDF Automation

Watching a Folder in Rust with notify-rs — Hot Folder for PDF Automation

Comments
2 min read
Renaming 200 PDFs by Their Content — Without an LLM

Renaming 200 PDFs by Their Content — Without an LLM

Comments
2 min read
Pixel Diff vs Structural Diff for PDFs — Two Very Different Problems

Pixel Diff vs Structural Diff for PDFs — Two Very Different Problems

Comments
2 min read
Implementing Bates Numbering in Rust — Stamping Every Page of a Legal Document

Implementing Bates Numbering in Rust — Stamping Every Page of a Legal Document

Comments
2 min read
Most PDF Redaction Is Broken. Here's What "Real" Redaction Actually Requires.

Most PDF Redaction Is Broken. Here's What "Real" Redaction Actually Requires.

Comments
2 min read
IPC Pipe vs Unix Socket for a Resident Daemon in Tauri — What I Learned

IPC Pipe vs Unix Socket for a Resident Daemon in Tauri — What I Learned

1
Comments
2 min read
Why I Use Argon2id Instead of bcrypt for PDF Encryption Keys

Why I Use Argon2id Instead of bcrypt for PDF Encryption Keys

Comments
2 min read
lopdf vs pdfium in Rust — Why I Chose the Smaller One

lopdf vs pdfium in Rust — Why I Chose the Smaller One

Comments 4
2 min read
The Tauri Sandbox Permissions That Blocked Me for Two Days

The Tauri Sandbox Permissions That Blocked Me for Two Days

Comments
1 min read
I Built a Security Scanner That Audits PDFs Before You Send Them. Here's How. [Devlog #10]

I Built a Security Scanner That Audits PDFs Before You Send Them. Here's How. [Devlog #10]

Comments
1 min read
Opening a PDF Without Leaving a Single Trace on macOS [Devlog #9]

Opening a PDF Without Leaving a Single Trace on macOS [Devlog #9]

Comments
1 min read
The Page Order Math Behind Saddle-Stitch Booklets Is Weirder Than You Think. So I Automated It. [Devlog #8]

The Page Order Math Behind Saddle-Stitch Booklets Is Weirder Than You Think. So I Automated It. [Devlog #8]

Comments
2 min read
Every Swift Call Cost Me 50ms. I Killed That Cost Entirely With a Resident Daemon. [Devlog #7]

Every Swift Call Cost Me 50ms. I Killed That Cost Entirely With a Resident Daemon. [Devlog #7]

Comments
2 min read
Your "Deleted" PDF Metadata Isn't Gone. Here's How I Actually Remove It — and Hide a Tracer Inside. [Devlog #6]

Your "Deleted" PDF Metadata Isn't Gone. Here's How I Actually Remove It — and Hide a Tracer Inside. [Devlog #6]

Comments
2 min read
loading...