All Posts
Thoughts, learnings, and snippets from the journey back to dev.
Koreans say 'better than expected' more than expected
A quiet observation about why Koreans soften every compliment with "better than I thought"
Google Play Production Approved
Google Play production approved
앱 개념어를 바꿨다 — Folder에서 Chain으로, 전면 리네이밍 작업기
ChainPlay 앱에서 Folder 개념을 Chain으로 전면 리네이밍하면서 겪은 과정과 TypeScript 타입 주도 리팩토링 방법
Google Play Console - Registering for production after private testing
A summary of what you need to fill out to apply for production access after completing 14 days of private testing.
구글 플레이 비공개 테스트, 자주 업데이트할수록 승인이 빨라진다
Tilt 게임 버전업을 하면서 느낀 것 — 비공개 테스트 중에는 업데이트 빈도가 심사 통과에 직접 영향을 준다
Android 빌드 파일 정리하는 법 — 디스크 수 GB를 한 방에
안드로이드 프로젝트 빌드 파일이 디스크를 잡아먹을 때, 안전하게 정리하는 방법 총정리
Next.js 다국어 블로그 SEO — Google이 /ko를 무시하는 이유와 두 가지 해결법
Google Search Console 중복 페이지 오류의 원인인 x-default hreflang 누락과 isFallback noindex 처리 방법
Supabase Free Usage Restrictions
Found out the hard way that Supabase free plan only allows 2 active projects
How to Create and Use Agents
Using AI agents on the blog
[INFO] Blockchain & AI Hackathon utilizing mobile IDs
Applying for a blockchain & AI hackathon that uses mobile digital IDs
Next.js + next-intl, /ko/ 리디렉션 오류와 proxy.ts 충돌 삽질기
Google Search Console 리디렉션 오류를 잡으려다 빌드 에러까지 만난 과정과 proxy.ts 구조 이해
Ollama Review (How it feels to use each model)
Review of each model - DeepSeek, EXAONE, QWEN comparison
Installing Ollama and getting started with local AI
A guide to installing Ollama and selecting a model for local AI
블로그 포스트 목록에서 "1분 읽기" 지운 이유
읽기 시간 표시가 초기 블로그에서 오히려 역효과가 나는 이유와 Next.js 컴포넌트에서 제거하는 방법
Google이 내 블로그 예시 코드를 링크로 크롤링한 날
Search Console 404 오류를 추적했더니 포스트 본문의 코드 예시 파일명을 Google이 실제 URL로 인식한 것이었다 — next.config.ts redirects로 해결
Next.js 다국어 블로그에서 canonical 빠뜨리면 생기는 일
Google Search Console에서 "중복 페이지, Google에서 사용자와 다른 표준을 선택함" 오류가 뜬 이유와 next-intl 환경에서 canonical 설정하는 방법
Next.js 페이지 이동할 때마다 스크롤 애니메이션이 생기는 이유
뒤로 가기 버튼과 scroll-behavior smooth가 얽혀서 만든 스크롤 점프 버그 두 개를 연속으로 잡은 과정
GitHub에 AAB 올렸다가 용량 경고 받은 후 — 빌드 파일 로컬 버전관리로 전환하기
Android 릴리즈 빌드 파일(AAB/APK)을 GitHub에 올리면 안 되는 이유와, 로컬 폴더로 버전 관리하는 방법
React Native(Expo) 앱에 한/영 다국어 지원 추가하기 — locale 감지 삽질기
expo-localization부터 NativeModules, Intl API까지 세 가지 방법을 직접 써보고 최종 해답을 찾은 과정
50 screenshots blew up my blog - debugging GitHub API limit exceedance
The story of how committing 50 images at once caused a Vercel build to spin 50 times and hit the GitHub API request limit.
Google Play Store App Registration A-Z - The whole process with screenshots
A hands-on, screenshot-filled guide to the entire Google Play Console process, from creating an app to passing a private test.
개인정보처리방침의 어린이 조항과 Play Store 전체 이용가는 별개다
개인정보처리방침에 "13세 미만 어린이 대상 아님" 문구를 넣으면 13세 이상 등급을 줘야 하는 게 아닌지 헷갈렸던 경험 정리
[Essay] Something Is Starting to Click
Seven weeks of building with AI — and somewhere along the way, I fell into AI engineering without meaning to
Getting an Expo app to the Play Store - From building AAB to creating store assets
A walkthrough of the build, asset creation, and bug fixing process we went through to get our React Native (Expo) game app to the Google Play Store for the first time.
One apostrophe broke my Vercel build — the YAML frontmatter trap
When local builds were fine but only Vercel failed, the culprit was a single line of YAML title with English abbreviations.
Google AdSense Rejected Me — The Reality of a Tool-Only Site
After being rejected for "low value content," I expanded content and reapplied to AdSense on a WiFi QR code generator site
I Built a WiFi QR Code Generator — My First Completed Side Project with AI
A WiFi QR code generator I made because sharing passwords to guests was annoying — React + i18n + print support
Your own playlist app without YouTube Premium - Build it yourself with React Native (Expo)
Building a YouTube playlist app from scratch with Expo SDK 54 + TypeScript — what broke and how I fixed it
How to Install Android Apps Directly - From APK to USB Debugging
How to install Android apps without Google Play and how to install them directly with ADB USB debugging.
Why GitHub Actions Commits Don't Show on Your Contribution Graph — Fix with KST Timezone
The timezone issue where GitHub Actions auto-commits don't appear on the contribution graph. One line — TZ=Asia/Seoul — fixes it.
React Native YouTube App — Android WebView Playback, Custom Button, and Keyboard Bugs
From Android WebView security policies, KeyboardAvoidingView pitfalls, and autoplay timing bugs - here are the issues and solutions we encountered while improving the YT Player app.
Launching a React Native app on the Play Store - from build to intro copywriting
A recap of our first launch, including automating AAB builds, resolving versionCode errors, writing store intro copy, and analyzing Play Console recommended actions.
Claude Code, why longer conversations get slower and how to use /clear
Claude Code gives a practical overview of why piling on context gets slower and more expensive, and how to fix it with /clear.
Why Google Ignored My Blog - 2 Next.js SEO Bug Fixes
How I discovered a missing index in Google Search Console and fixed the canonical tag and footer 404 links.
Obsidian Git Mobile Settings - Synchronizing GitHub on Android
How to clone a GitHub repo with the Obsidian Git plugin on Android and set up automatic synchronization.
The story of setting up the Obsidian Git plugin and encountering an xcrun error
How to resolve the xcrun error I encountered while connecting Obsidian to GitHub and setting up the Git plugin.
Data isolation bugs exposed by creating multi-user apps with Supabase service role
4 data isolation pitfalls and solutions when using only the service role client without RLS.
Why Is Android Background Playback So Hard — Doze, WakeLock, and Foreground Service
How I fixed a bug where track transitions stopped working when the screen turned off in a cassette music player app, using Foreground Service + PARTIAL_WAKE_LOCK
[JobRadar Part 7] Google OAuth "Database error" — Down the Supabase Trigger Rabbit Hole
Google login kept failing with "Database error saving new user" — I dug all the way to creating a new Supabase project before finding the fix was one line in a trigger function
[JobRadar Part 6] Cover Letters Done Right, UX Polish, and Adding Login
Cover letter save/download/AI review, memo and status management, direct JD input, and Supabase Auth — everything built in one day
How to run a blog with Claude Code - automate from creation to scheduled distribution
The complete workflow of running a blog with Claude Code, from post creation, translation, registration, and scheduled distribution.
[Claude Console] Buy Credits button is disabled - Causes and solutions for not checking out
In the Claude Console, the Buy button would not activate even after all payment information was entered. The cause was a bug that reset the city selection when switching languages.
JobRadar Part 5: Dropping the Automation Fantasy and Building a Practical Pipeline
After giving up on Playwright auto-scraping, I built an on-demand pipeline — URL paste → JD scraping → AI matching → cover letter generation — over two days.
JobRadar Part 4: Why I Ditched Playwright for cheerio — The Day-4 Pivot
After three days fighting Playwright, I gave up. On day 4, I completely changed direction — from auto-collection to URL-based on-demand scraping, using cheerio + JSON-LD.
How to Email Claude Support — Bypassing the AI Chatbot
When Claude support only gives you AI responses, here's the step-by-step process to create a real email ticket and reach an actual person.
Building a Claude Code Custom Agent — A Practical Guide with blog-auto-draft
How to create Claude Code custom agents to automate repetitive tasks. A step-by-step walkthrough using blog-auto-draft as a real example, from file structure to invocation.
[Claude Console] Payment Broken. DO NOT Delete Your Organization!!!
Claude Console organization deletion accidentally deleted the account — a cautionary tale
JobRadar Part 3: Deploying Playwright to Vercel Blew Up — The @sparticuz/chromium Journey
Why a scraper that ran fine locally kept exploding on Vercel. From @sparticuz/chromium adoption to ETXTBSY, 60-second timeouts, and everything in between.
Connecting Gemini to Claude Code via MCP — Using Two AIs Without Token Anxiety
A step-by-step guide to connecting Gemini as an MCP tool inside Claude Code, so you can delegate token-heavy tasks to Gemini without leaving your workflow.
[JobRadar Part 2] Supabase Schema + Playwright Scraper — Debugging Notes
JobRadar part 2. From Supabase multi-user schema design to Indeed and Seek Playwright scraper implementation. Glassdoor blocks, ETXTBSY, missing modules — all the pain points documented.
Claude Code Hooks — Automate Tasks When Claude Finishes
Auto-format on save, response completion alerts, approval request notifications — a step-by-step guide to automating repetitive tasks with Claude Code Hooks.
[JobRadar Part 1] Project Setup — I Built an AI Tool to Help Me Find a Job
From automated job scraping to AI matching — JobRadar side project part 1. A step-by-step walkthrough of the initial Next.js + Supabase + Vercel setup.
I Built an App — Now How Do I Publish It? Google Play Console from Start to Finish
A step-by-step walkthrough of publishing an app on Google Play Console for the first time — from developer account registration to AAB upload and review submission.
[App Launch] How to Gather 12 Testers — Why You Should Use Google Groups
How to efficiently recruit 12 testers for a Google Play test track. Why Google Groups beats manual email registration, and the exact order of steps that actually works.
DeepL API Integration — Adding Translation to a Next.js App
A step-by-step guide to adding translation functionality to a Next.js app using the DeepL API Free plan. From getting an API key to building a server-side route.
Scheduled Blog Post Publishing with GitHub Actions
How to set up a GitHub Actions workflow that automatically publishes blog posts on a specified date — based on a real implementation experience.
How to Register a Google Play Developer Account (2026 Guide)
A complete step-by-step guide to creating a Google Play Console developer account and completing identity verification as of 2026.
Comparing 3 translation APIs - MyMemory vs DeepL vs Claude, what should I use?
I'm comparing and contrasting my experience with MyMemory, DeepL, and Claude APIs while adding translation functionality to my blog admin.
Changing Page Title and Meta Tags per Page in React SPA — react-helmet-async
How to dynamically control title and meta tags per page in a React SPA using react-helmet-async for better SEO.
Wireless ADB Debugging — Install APKs Without a Cable
How to set up wireless ADB debugging between a MacBook and an Android device. Install APKs over Wi-Fi with a single command — no USB cable needed.
[Claude Code] How to Create and Use Skills - Your Own Slash Commands
Learn how to create and use Skills to automate repetitive tasks in Claude Code with hands-on examples.
Getting Your Site on Google — Next.js SEO Setup Guide
How to add robots.txt, sitemap.xml, Open Graph, and JSON-LD to a Next.js App Router blog to get it indexed on Google — based on a real implementation.
[App] Developing Cassette Player App_02
Cassette Tape Player App Development Journal 02
[App] Developing Cassette Player App_01
Cassette tape player app development journal 01
What is a good platform for beginners to Replit vs Claude Code?
Reviews comparing Replit and ClaudeCode.
Data inbreeding
When the data produced by AI-dependent humans stops growing, what happens to AI?
I Go to the Library to Look at Covers
Book titles reflect what an era cares about — and I think I've been going to the library just to browse them
[Claude Code] Claude Code Study Guidelines to Learn Efficiently and Quickly
Claude Code The direction to study and the basic study sequence
[AI] Stitch review
Reviews using Design AI in Stitch
[AI_StartDevelopment04] Maintain Session
If the network changes while working, the session is sometimes broken.: (
I was a legacy developer.
[Start AI Development_000] Opinion on AI Development (Guidelines)
Comments and Thoughts on AI Development
[AI development start_003] Create multilingual features
How to create multilingual features
[AI Start_001] Claude Code Start
start creating this blog with ai clod code
[AI Start Development_002] Add Image
Add image embedding feature
Starting Over at 40
Why I built this site — and why I'm returning to development after a decade away