Claude Code로 AI 코칭 웹앱 "마이로드맵" 완성하기

한줄 요약

Claude Code와 함께 Next.js 14 + Supabase + Claude API를 활용해 엄마들을 위한 AI 기반 자기성장 서비스 "마이로드맵"을 2시간 만에 완성했습니다.

이런 분들께 도움돼요

  • 비개발자로서 AI와 협업해 웹앱을 만들어보고 싶은 분

  • Next.js + Supabase 스택으로 풀스택 앱을 구축해보고 싶은 분

  • AI 코칭/챗봇 서비스를 직접 만들어보고 싶은 분

  • 바이브코딩으로 실제 서비스를 만드는 과정이 궁금한 분

소개: 시도하고자 했던 것과 그 이유

배경

엄마들(30~50대)을 위한 AI 기반 자기성장 서비스가 필요했습니다. 육아와 커리어 사이에서 방황하는 분들이 많은데, 시간과 비용 문제로 전문 코칭을 받기 어려운 상황이었습니다.

해결하고 싶었던 문제

  1. 개인화된 코칭의 부재: 일반적인 자기계발 앱은 한국어 지원도 부족하고, 미국 거주 한인 엄마들의 특수한 상황을 이해하지 못함

  2. 지속성의 어려움: 한 번 시작하고 끝나는 게 아니라, 매일 체크인하며 성장을 추적할 수 있는 시스템 필요

  3. 맞춤형 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. 점진적 구현의 중요성

한 번에 모든 것을 요청하는 것보다, 단계별로 구현하고 확인하는 것이 효과적입니다:

  1. 스키마 설계 → 확인

  2. 타입 정의 → 확인

  3. API 구현 → 확인

  4. 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

도움 받은 리소스


)

1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요