수유·유축·성장 기록부터 아이 방 카메라 AI 모니터링까지, 조산아 육아에 실제로 필요한 것들을 한 앱에 담은 개인용 PWA.

DAILY SIA · 가족 초대 화면
// the brief
이른둥이 육아는 기록할 것이 유난히 많다. 수유·유축 간격과 모유 재고, 하루 단위 성장 추이, 예방접종·발달 체크, NICU 시기의 처방까지. 종이와 여러 메모 앱에 흩어지면 어딘가에서 반드시 하나를 놓치게 된다.
시판 육아 앱은 대개 만삭아 기준이라 조산아 특유의 맥락(모유강화제 처방 반영이나 성장 추적)이나 우리 가족의 실제 루틴을 담지 못했다. 그래서 필요한 것만, 우리 상황에 맞춰 직접 만들기로 했다.
// approach
Next.js로 만든 PWA를 Cloudflare Pages에 올려 폰에서 앱처럼 쓰도록 했다. 주 사용처가 한 손에 아이를 안은 상태의 휴대폰이라, 화면은 모바일 우선으로 설계하고 기록은 몇 번의 탭으로 끝나게 다듬었다.
개발은 AI 도구를 엮어 빠르게 진행했다. 코드 생성과 리팩터의 속도는 AI에서 얻되, 무엇을 남기고 어떤 흐름으로 묶을지, 어디까지 신뢰할지는 사람이 판단하고 마감했다. 그것이 1인 스튜디오가 이만한 범위를 감당하는 방식이다.
기록 앱으로 시작해, 집의 카메라를 붙여 '기록 + 안전망'으로 확장했다. 손으로 남기는 수유·유축·성장 기록과, 실시간 모니터링이라는 성격이 전혀 다른 기능을 한 앱 안에서 자연스럽게 오가도록 묶는 것이 설계의 핵심이었다.
AI로 빠르게 짓되, 무엇을 남기고 어디까지 믿을지는 사람이 정했다.
// key decisions
Tapo 카메라는 집 안 네트워크에서만 접근하도록 두고, 집의 맥이 RTSP를 저지연 WebRTC로 다시 뿌린다. 밖에서 볼 때도 공개 서버가 아니라 Tailscale 사설망만 지난다. 아이 방 영상이라 지연과 프라이버시 어느 쪽도 타협할 수 없어 엣지 처리를 택했다.
라이브뷰가 되는 것과, 문제가 생겼을 때 알림이 오는 것은 다른 문제다. 엣지가 죽거나 네트워크가 끊기면 그 사실 자체를 critical 푸시로 알리고, watchdog 프로세스가 파이프라인을 상시 감시한다. 감시가 아니라 '놓쳤을 때 알려주는' 보조 알림으로 설계했다.
가족의 건강 데이터라, 로그인은 WebAuthn 패스키로 두고 서버는 CSP 보안헤더·로그인 rate limit·import 검증·XSS 가드로 감쌌다. 편의 기능이 아니라, 남에게 새면 안 되는 데이터라는 전제에서 출발한 결정이다.
세 결정을 관통하는 원칙은 하나다. 가족의 영상과 건강 기록을 남의 서버에 최소한으로만 둔다. 그래서 무거워 보이는 엣지 처리·패스키·사설망을 개인 프로젝트에도 그대로 적용했다.
// edge pipeline
집의 맥 한 대가 카메라에 붙는 유일한 장치다. launchd로 상시 세 프로세스가 돈다. 영상을 재발행하는 go2rtc, 파이프라인 생존을 감시하는 watchdog, 소리를 분석하는 audio. Tapo C260의 RTSP를 저지연 WebRTC로 바꿔 폰의 모니터 화면에 띄우고, 집 밖에서는 Tailscale 사설망으로만 닿는다. 울음은 YAMNet 음향 모델로 감지하고, 엣지가 끊기면 그 사실을 critical 푸시로 알린다. 스냅샷과 밤 요약도 여기서 만든다. 다만 이것은 보조 알림이지 보호자의 직접 확인을 대체하는 감시 장치가 아니라는 선을, 코드와 앱 안내 모두에 분명히 적어 두었다.
// result
daily-sia.pages.dev에서 라이브로 돌아가며, 코드 변경은 빌드부터 배포까지 자동으로 이어진다. 수유·유축·모유 재고, 성장과 예방접종·발달, 그리고 아이 방 모니터링까지 흩어져 있던 것들을 한 곳에서 처리한다. 데모가 아니라 한 가족이 매일 쓰는 앱으로, 실사용 속에서 계속 다듬어지고 있다.
// 이런 걸 만들어 드립니다.