한줄 요약
Claude Code와 함께 Next.js 14 + Supabase + Claude API를 활용해 엄마들을 위한 AI 기반 자기성장 서비스 "마이로드맵"을 2시간 만에 완성했습니다.
이런 분들께 도움돼요
비개발자로서 AI와 협업해 웹앱을 만들어보고 싶은 분
Next.js + Supabase 스택으로 풀스택 앱을 구축해보고 싶은 분
AI 코칭/챗봇 서비스를 직접 만들어보고 싶은 분
바이브코딩으로 실제 서비스를 만드는 과정이 궁금한 분
소개: 시도하고자 했던 것과 그 이유
배경
엄마들(30~50대)을 위한 AI 기반 자기성장 서비스가 필요했습니다. 육아와 커리어 사이에서 방황하는 분들이 많은데, 시간과 비용 문제로 전문 코칭을 받기 어려운 상황이었습니다.
해결하고 싶었던 문제
개인화된 코칭의 부재: 일반적인 자기계발 앱은 한국어 지원도 부족하고, 미국 거주 한인 엄마들의 특수한 상황을 이해하지 못함
지속성의 어려움: 한 번 시작하고 끝나는 게 아니라, 매일 체크인하며 성장을 추적할 수 있는 시스템 필요
맞춤형 AI 코치: 친구같은, 코치같은, 멘토같은 다양한 스타일의 AI 코치 선택 가능
목표했던 기능
기능
설명
5단계 온보딩
라이프 휠 진단, 집중 영역 선택, 90일 목표 설정
AI 코치 설정
친구/코치/멘토 스타일 선택
데일리 체크인
감정 기록, 어제의 성과, 오늘의 의도
AI 채팅
스트리밍 응답, 개인화된 코칭
90일 로드맵
마일스톤 설정 및 진행률 추적
진행 방법: 어떤 도구를 사용했고, 어떻게 활용했나요?
사용한 도구
도구명: Claude Code (CLI) + VS Code
모델: Claude Opus 4.5 (Max 플랜)
핵심 기능: Task (병렬 작업), Read, Write, Edit, Bash
기술 스택
프론트엔드: Next.js 14 (App Router) + TypeScript + Tailwind CSS v4
백엔드: Supabase (Auth + Database + RLS)
AI: Claude API (@anthropic-ai/sdk) with Streaming
상태관리: Zustand with persist
폼 검증: react-hook-form + zod
1단계: 프로젝트 초기 설정
이렇게 요청했어요:
마이로드맵이라는 AI 기반 자기성장 서비스를 만들고 싶어.
타겟: 미국 거주 한인 엄마들 (30~50대)
스택: Next.js 14, TypeScript, Tailwind CSS, Supabase, Claude API
Claude가 해준 것:
Next.js 14 프로젝트 생성 (App Router)
Tailwind CSS v4 설정 (커스텀 테마)
TypeScript 타입 정의
폴더 구조 설계
2단계: Supabase 스키마 설계
이렇게 요청했어요:
Supabase 데이터베이스 스키마를 설계해줘.
사용자 프로필, 체크인, 목표, 마일스톤, 채팅 메시지가 필요해.
생성된 테이블:
-- 사용자 프로필
CREATE TABLE profiles (
id UUID REFERENCES auth.users PRIMARY KEY,
nickname TEXT,
age_group TEXT,
years_in_us TEXT,
life_wheel JSONB,
focus_areas TEXT[],
goals JSONB,
coach_style TEXT DEFAULT 'friend',
onboarding_completed BOOLEAN DEFAULT false
);
-- 데일리 체크인
CREATE TABLE check_ins (
id UUID PRIMARY KEY,
user_id UUID REFERENCES profiles(id),
emotion TEXT NOT NULL,
emotion_note TEXT,
yesterday_win TEXT,
today_intention TEXT,
ai_response TEXT
);
-- 목표 & 마일스톤
CREATE TABLE goals (...);
CREATE TABLE milestones (...);
-- RLS 정책 (사용자는 자신의 데이터만 접근)
3단계: 5단계 온보딩 플로우 구현
구현한 온보딩 단계:
Step
내용
핵심 컴포넌트
1
기본 정보
닉네임, 연령대, 미국 거주 기간
2
라이프 휠
8개 영역 1-10점 슬라이더
3
집중 영역
3개까지 선택 가능
4
90일 목표
주요 목표, 부가 목표, 동기
5
AI 코치 설정
친구/코치/멘토 스타일 선택
라이프 휠 8개 영역:
const LIFE_WHEEL_AREAS = [
{ id: 'health', label: '건강', emoji: '💪' },
{ id: 'career', label: '커리어/일', emoji: '💼' },
{ id: 'finance', label: '재정', emoji: '💰' },
{ id: 'relationships', label: '관계', emoji: '👥' },
{ id: 'family', label: '가족', emoji: '👨👩👧' },
{ id: 'personalGrowth', label: '자기계발', emoji: '📚' },
{ id: 'funRecreation', label: '여가/취미', emoji: '🎨' },
{ id: 'environment', label: '환경/생활', emoji: '🏠' },
];
4단계: AI 코치 시스템 프롬프트 설계
이렇게 요청했어요:
AI 코치 시스템 프롬프트를 설계해줘.
친구/코치/멘토 3가지 스타일이 있고,
사용자의 라이프 휠, 집중 영역, 목표, 최근 체크인을 참고해야 해.
생성된 시스템 프롬프트 구조:
export function buildSystemPrompt({
nickname,
coachStyle,
language,
focusAreas,
goals,
lifeWheel,
recentCheckIns,
}: UserContext): string {
const stylePrompt = COACH_STYLE_PROMPTS[coachStyle];
return `당신은 "${nickname}"님의 AI 코치입니다.
## 코칭 스타일
${stylePrompt}
## 사용자 정보
- 집중 영역: ${focusAreas.join(', ')}
- 주요 목표: ${goals.primary}
- 라이프 휠: ${formatLifeWheel(lifeWheel)}
## 최근 체크인
${formatRecentCheckIns(recentCheckIns)}
## 지침
- 항상 한국어로 대화하세요
- 미국 거주 한인 엄마의 상황을 이해하고 공감하세요
- 90일 목표 달성을 위한 실질적인 조언을 제공하세요`;
}
5단계: Claude API 스트리밍 구현
핵심 코드 (src/lib/claude/client.ts):
export async function streamChat(
messages: Message[],
systemPrompt: string
): Promise<ReadableStream> {
const client = getClaudeClient();
const stream = await client.messages.stream({
model: 'claude-sonnet-4-20250514',
max_tokens: 2048,
system: systemPrompt,
messages: messages,
});
// SSE 형식으로 ReadableStream 반환
return new ReadableStream({
async start(controller) {
for await (const event of stream) {
if (event.type === 'content_block_delta') {
const text = event.delta?.text || '';
controller.enqueue(`data: ${JSON.stringify({ text })}\n\n`);
}
}
controller.enqueue('data: [DONE]\n\n');
controller.close();
},
});
}
인상 깊었던 순간
Claude Code가 TypeScript 에러를 실시간으로 잡아주는 순간이 가장 인상적이었습니다.
빌드를 돌릴 때마다 에러가 발생했는데, Claude Code가 에러 메시지를 읽고 즉시 수정안을 제시했습니다:
❌ Property 'id' does not exist on type COACH_STYLE_OPTIONS
✅ id와 key 속성을 모두 가진 객체로 수정
❌ useSearchParams without Suspense boundary
✅ LoginForm을 Suspense로 감싸기
❌ Parameter 'c' implicitly has 'any' type
✅ 명시적 타입 (c: { created_at?: string }) 추가
10개 이상의 TypeScript 에러를 자동으로 수정하여 빌드가 성공할 때까지 반복 작업해주었습니다.
결과와 배운 점
Before vs After
항목
Before
After
웹앱
아이디어만 있음
완전한 풀스택 앱 완성
데이터베이스
없음
6개 테이블 + RLS 정책
AI 통합
개념만 알고 있음
스트리밍 챗봇 구현
인증 시스템
없음
이메일 + Google OAuth
온보딩
없음
5단계 완전한 플로우
작업 시간
수주 예상
2시간 완료
결과물
1. 완전한 인증 시스템
이메일/비밀번호 로그인
Google OAuth 연동
세션 관리 및 자동 리다이렉트
2. 5단계 온보딩 플로우
기본 정보 수집
라이프 휠 진단 (8개 영역)
집중 영역 선택 (최대 3개)
90일 목표 설정
AI 코치 스타일 선택
3. 데일리 체크인 시스템
감정 선택 (9가지 이모지)
어제의 성과 기록
오늘의 의도 설정
AI 피드백 제공
4. AI 코칭 채팅
실시간 스트리밍 응답
개인화된 시스템 프롬프트
3가지 코칭 스타일
5. 대시보드
환영 메시지 + 빠른 액션
최근 체크인 요약
목표 진행률 표시
배운 점
1. Claude Code는 풀스택 개발의 게임 체인저
비개발자도 명확한 요구사항만 전달하면 완전한 웹앱을 만들 수 있습니다. 특히 TypeScript 에러 수정, 데이터베이스 스키마 설계, API 구현까지 모두 도와줍니다.
2. 점진적 구현의 중요성
한 번에 모든 것을 요청하는 것보 다, 단계별로 구현하고 확인하는 것이 효과적입니다:
스키마 설계 → 확인
타입 정의 → 확인
API 구현 → 확인
UI 구현 → 확인
3. 에러 메시지는 좋은 선생님
빌드 에러가 발생할 때 당황하지 말고 Claude Code에게 에러 메시지를 보여주면 대부분 해결됩니다.
다른 업무에 적용한다면?
1. 비슷한 AI 서비스 구축
이번에 만든 구조를 재사용하면 다른 AI 서비스도 빠르게 만들 수 있습니다:
AI 일기장: 감정 분석 + 맞춤 피드백
AI 학습 코치: 학습 목표 + 진도 관리
AI 건강 코치: 운동/식단 + 동기부여
2. Claude API 스트리밍 패턴 재사용
스트리밍 구현 패턴은 다른 프로젝트에도 그대로 적용 가능:
// 1. client.messages.stream() 호출
// 2. ReadableStream으로 변환
// 3. SSE 형식으로 전송
// 4. 프론트엔드에서 EventSource로 수신
3. 온보딩 플로우 템플릿화
5단계 온보딩 구조를 템플릿으로 만들어 다른 앱에 적용:
Step 1: 기본 정보 수집
Step 2: 현재 상태 진단
Step 3: 관심 영역 선택
Step 4: 목표 설정
Step 5: 설정 커스터마이징
재사용 가능한 프롬프트
1. 풀스택 웹앱 시작 프롬프트
[서비스명]이라는 [서비스 유형]을 만들고 싶어.
타겟: [타겟 사용자]
핵심 기능:
- [기능 1]
- [기능 2]
- [기능 3]
스택: Next.js 14 (App Router), TypeScript, Tailwind CSS, Supabase, Claude API
먼저 프로젝트 구조와 데이터베이스 스키마를 설계해줘.
2. Supabase 스키마 요청 프롬프트
다음 기능에 필요한 Supabase 데이터베이스 스키마를 설계해줘.
필요한 테이블:
- [테이블 1]: [용도]
- [테이블 2]: [용도]
- [테이블 3]: [용도]
요구사항:
- RLS(Row Level Security) 정책 포함
- 적절한 인덱스 추가
- created_at, updated_at 자동 관리
3. AI 시스템 프롬프트 설계 요청
[역할명] AI의 시스템 프롬프트를 설계해줘.
사용자 컨텍스트:
- [정보 1]
- [정보 2]
- [정보 3]
코칭 스타일: [스타일 1] / [스타일 2] / [스타일 3]
지침:
- [언어 설정]
- [톤앤매너]
- [핵심 기능]
4. TypeScript 에러 수정 요청
빌드 에러가 발생했어. 에러 메시지:
[에러 메시지 복사]
이 에러를 수정해줘. 에러가 발생한 파일들을 모두 확인하고,
빌드가 성공할 때까지 수정해줘.
5. 스트리밍 API 구현 요청
Claude API를 사용한 스트리밍 채팅 API를 구현해줘.
요구사항:
- Next.js API Route (App Router)
- SSE(Server-Sent Events) 형식
- 사용자 인증 확인
- 개인화된 시스템 프롬프트 적용
- 에러 핸들링
프로젝트 구조
src/
├── app/
│ ├── (auth)/
│ │ ├── login/page.tsx
│ │ └── signup/page.tsx
│ ├── (dashboard)/
│ │ ├── dashboard/page.tsx
│ │ ├── chat/page.tsx
│ │ ├── checkin/page.tsx
│ │ └── roadmap/page.tsx
│ ├── onboarding/
│ │ ├── step1/page.tsx
│ │ ├── step2/page.tsx
│ │ ├── step3/page.tsx
│ │ ├── step4/page.tsx
│ │ └── step5/page.tsx
│ └── api/
│ └── chat/route.ts
├── components/
│ ├── ui/
│ ├── dashboard/
│ ├── chat/
│ ├── checkin/
│ └── roadmap/
├── lib/
│ ├─ ─ supabase/
│ └── claude/
├── stores/
│ └── userStore.ts
├── types/
│ └── index.ts
└── constants/
└── index.ts
도움 받은 리소스
Supabase 공식 문서 - Auth, Database, RLS 설정
Anthropic Claude API 문서 - 스트리밍 구현
Next.js 14 App Router 문서 - 라우팅 및 서버 컴포넌트
Zustand 문서 - 상태 관리
)