직접 만든 것들

글로만 배우지 않고, 직접 만들어보는 것들을 여기에 기록합니다.

FEATURED

Cassette Music Player

MP3·유튜브를 카세트에 담아 링크 하나로 선물하는 뮤직 플레이어

출시 완료2025.05

1980년대 카세트 테이프 경험을 안드로이드 폰에 옮긴 음악 플레이어입니다. v2.0.0에서 앱을 처음부터 다시 만들면서 프리미엄 카세트 데크 느낌의 다크 테마로 디자인을 새로 하고, 셸 색상 7가지로 테이프를 꾸밀 수 있게 했습니다. 휴대폰 속 MP3 파일뿐 아니라 YouTube 링크도 테이프에 담을 수 있고, Side A/B 각 30분이라는 진짜 카세트의 물리적 한계는 그대로 지킵니다 — 30:00에 도달하면 곡이 잘리고 반대 면으로 넘어갑니다. FF 버튼을 꾹 눌러야 다음 곡으로 넘어가는 조작감과 트랙 사이 테이프 노이즈로, 스킵 없이 앨범처럼 끝까지 듣는 경험에 집중했습니다. 가장 공들인 기능은 링크 공유입니다 — 완성한 테이프를 링크 하나로 보내면 받는 사람은 앱 설치 없이 웹에서 트랙리스트를 미리 보고, 앱이 있다면 바로 가져올 수 있습니다. 테이프마다 재생 위치를 따로 기억해 여러 테이프를 갈아 끼워도 듣던 곳부터 이어지고, 화면을 꺼도 잠금화면에서 로컬 곡을 조작할 수 있습니다. 한국어·영어를 지원합니다.

React NativeTypeScriptExpo SDK 54expo-routerexpo-avreact-native-reanimatedreact-native-svgAsyncStorage
인트로 — 새로워진 다크 테마
플레이어 — Side A 재생
테이프 편집 — Side A/B, 30분 제한
테이프 컬렉션 — 셸 색상 커스터마이즈
링크 공유 — 웹 미리보기 + 바로 가져오기
웹 미리보기 — 앱 없이도 트랙 목록 확인
FEATURED

RepoNote

Obsidian 저장소와 자동 동기화되는 모바일 메모장

비공개 테스트중2026.07

모바일에서 Obsidian과 Git을 연결하는 게 너무 복잡하고, 충돌이 나면 폰의 작은 화면에서 병합 마커를 보며 해결해야 하는 게 고통스러워서 직접 만든 메모 앱입니다. 발상을 뒤집었습니다 — 폰에 저장소를 클론하는 대신 Git CLI 없이 GitHub Contents API만 사용해서, 열고 쓰고 닫으면 알아서 커밋됩니다. 입력은 항상 로컬 DB에 먼저 저장되고(600ms debounce) 입력이 멈추면 5초 뒤 자동으로 GitHub에 반영되므로, 오프라인이나 API 실패에도 글이 유실되지 않습니다. 충돌은 파일을 읽을 때의 SHA와 업로드 직전 서버 SHA를 비교해 감지하고, 덮어쓰는 대신 두 버전을 비교해 고르는 화면을 띄웁니다. 사실 이 앱은 같은 작업지시서로 React Native에서 먼저 만들었는데 빌드·상태 관리 에러가 너무 많아 중단하고, Flutter로 처음부터 다시 만들어 완성했습니다 — 스펙 문서를 잘 써두면 프레임워크를 갈아타도 손해가 크지 않다는 걸 배웠습니다. 한국어/영어를 지원하고 Riverpod Provider 오버라이드로 가짜 API를 주입하는 스토어 스크린샷용 데모 모드도 만들었습니다.

FlutterDartRiverpodgo_routerdiodriftGitHub REST API
파일 트리 — 폴더 접기/펼치기
편집 — 자동 저장·자동 커밋
미리보기 — 체크리스트 렌더링
GitHub 연결 — 최소 권한 토큰
FEATURED

매치다

채용공고 URL 붙여넣기 → AI 매칭 → 커버레터 자동 생성

상용화 준비중2026.04 ~

취업 준비 중 매일 반복되는 공고 검색과 커버레터 작성을 자동화하기 위해 만든 개인 툴입니다. 채용공고 URL을 붙여넣으면 JD를 자동으로 스크래핑하고, AI가 내 프로필과 매칭 점수를 매깁니다. 관심 있는 공고는 지원 상태(관심있음 → 지원완료 → 면접 → 합격)로 관리하고, 버튼 하나로 영문·한국어 커버레터를 생성해 TXT·DOCX·PDF로 내보낼 수 있습니다. Seek, Indeed, LinkedIn, Glassdoor URL을 지원합니다. 공고별 맞춤 이력서 생성에는 임베딩·벡터DB 없이 동작하는 경량 RAG를 적용했습니다 — 과거에 비슷한 공고에 써뒀던 맞춤 이력서 중 이번 JD와 키워드가 많이 겹치는 상위 3건만 골라 '표현·강조 참고 자료'로 프롬프트에 주입하고, 사실은 반드시 원본 이력서에서만 가져오도록 역할을 분리해 세대를 거치며 과장이 누적되는 문제를 막았습니다. 처음엔 'JobRadar'라는 이름으로 시작했지만, 브랜딩 작업을 거치며 '세상의 모든 직업을 매칭해준다'는 뜻의 매치다(match + da)로 이름을 바꿨습니다.

Next.jsTypeScriptSupabaseVercelCheerioClaude APIRAG
AI 공고 매칭
이력서 영문 번역
지원 현황 추적

더 만든 것들

대표 작업 외에도 직접 출시하거나 운영한 프로젝트입니다.

YouTube 링크 영상 편집기

링크 붙여넣기 → 구간 선택 → 하나의 MP4

로컬 사용 중2026.07
Next.jsTypeScriptTailwind CSSzustanddnd-kitFastAPI

대화형 학습 플랫폼

코드 실행부터 쿠버네티스 배포까지, 브라우저 안의 실습실

로컬 운영 중2026.07
Next.jsTypeScriptMonaco EditorXterm.jsFastAPIPyTorch

노가리

뉴스는 기사로, 반응은 노가리로 — 투표로 여는 익명 이슈 커뮤니티

운영 중2026.07
Next.jsTypeScriptReactSupabasePostgreSQLpg_cron

블로그 자동 발행 SaaS

주제만 등록하면 AI가 초안을 쓰고, 클라우드가 알아서 발행

상업화 준비 중2026.07 ~
Next.jsTypeScriptPlaywright@sparticuz/chromiumUpstash RedisAuth.js

문서 위변조 검증 블록체인

처방전 파일의 해시만 온체인에 기록해 위변조를 검증하는 스마트 계약

Sepolia 테스트넷 배포2026.07
SolidityHardhatOpenZeppelinEthereumEthers.jsExpress

KidsPlay

결제 팝업도 광고도 없는, 아이가 혼자 못 빠져나가는 웹 놀이터

운영 중2026.07
Next.jsTypeScriptReactFullscreen APIWeb Speech APIPWA

마작 조이

족보도 역도 없이, 짝만 맞추면 이기는 심플 마작

비공개 테스트중2026.07
FlutterDartdart:io SocketsProvideraudioplayers

Football Dice

주사위와 카드로 승부하는 미식축구 보드게임

비공개 테스트중2026.07
FlutterDartdart:io Socketsshared_preferencesaudioplayers

TILT — The Maze Puzzle

기울여서 탈출, 시각장애인도 음성만으로 완전히 플레이 가능

출시 완료2026.05
React NativeTypeScriptExpoSupabaseexpo-sensorsexpo-speech

ChainPlay

알고리즘이 아닌, 내가 만든 순서대로 자동 재생

출시 완료2026.05
React NativeTypeScriptExpo SDK 54react-native-youtube-iframeAsyncStorageIntl API

back to dev

40대 PM이 다시 개발자로 돌아오는 기록

운영 중2026.04 ~
Next.jsTypeScriptVercelGitHub APIGitHub Actionsnext-intl

Village — 픽셀 마을 방명록

이스터에그를 찾아야 나무를 심고, 댓글도 남길 수 있는 방명록

운영 중2026.07
Next.jsTypeScriptReactGitHub REST API

// 계속 추가 중입니다.