프로젝트를 되살린 날의 기록. 내일 여기부터 읽고 이어서 하면 된다.
어제(8/18) 저장소를 다시 클론한 시점엔 앱이 아예 안 떴고, 대화도 안 됐다. 지금은 둘 다 된다.
미리보기 https://dev-take-6.the-moment.us — 로그인 없이 들어가서 크루와 실제로 대화가 된다.
| 항목 | 수치 |
|---|---|
| 크루 | 203개 (이미지 보유 100) |
| 상담 | 904건 |
| 메시지 | 3,626건 |
| 크루 기억 | 1,534건 (임베딩 전량 보존) |
| 내 크루 | 62건 |
| DB 테이블 | 38개 |
.env 에 있음, git 미추적)| 무엇 | 값/위치 | 상태 |
|---|---|---|
| Supabase 프로젝트 | tshbvqqvdycougdqrgza (team-ai) |
ACTIVE_HEALTHY |
| DB 직접 접속 | .env 의 DATABASE_URL |
psql 로 바로 붙는다 |
| LLM | Vercel AI Gateway (AI_GATEWAY_API_KEY) |
엣지 함수 시크릿 등록 완료 |
| 미리보기 계정 | p2j2dyffpf@privaterelay.appleid.com / TeamAiDevPreview2026 |
자동 로그인됨 |
| 미리보기 서빙 | 로컬 도커 teamai-web → 40025 → 터널 |
restart unless-stopped |
⚠️ 미리보기 URL 은 이 맥에서 도는 컨테이너에 물려 있다. 맥이 꺼지면 주소도 죽는다.
2f561a23 크루 203개 게이트웨이 최신세대 모델 재배정 + 대화 복구
cd522a0a Vercel AI Gateway 프로바이더 추가, 폴백 경로 교체
33a5654a 아바타 1.7MB→69KB, 큐레이티드 3인방 아바타 R2 에서 회수
80ebacd8 사용자 관계·기억 이관 + expert_id 잔재를 crew_id 로 통일
213fa429 구 카탈로그 experts 200건을 crews 로 이관
49f7cde0 복원된 DB 에 빠져 있던 테이블 10개 복구
93d58477 미리보기 자동 로그인
13aa56e2 키가 번들에 구워지던 것 차단 + 로그인 없이 확인용 우회
7dc9ef29 모바일 전용 초기화 실패로 웹 앱 전체가 죽던 것 차단
expert → crew 개명이 절반만 끝난 채 방치돼 있었다. 그게 층마다 다른 증상으로 터졌다.
| 층 | 증상 | 조치 |
|---|---|---|
| 테이블 | 크루 3개만 보임 (진짜 200개는 experts 에) |
데이터 이관, id 보존 |
| 컬럼 | 대화 목록 비어 있음 (consultations.expert_ids) |
crew_ids 로 개명 |
| 값 | 응답 저장 실패 (sender_type='crew' 거부) |
제약 교체 + 3,399건 이관 |
| 함수 | 대화 404 (coordinate-experts 만 배포됨) |
coordinate-crews 배포 |
→ 새 이름을 쓰기 전에 그 이름이 DB·제약·배포까지 다 갔는지 확인할 것.
저장소에 하드코딩돼 GitHub 에 커밋된 키 중 아직 살아있는 것.
git 히스토리에 남아 파일을 고쳐도 소용없다 — 무효화가 유일한 해결책.
KXD92Y2WLM — developer.apple.com → Keys.lib/AuthKey_KXD92Y2WLM.p8 가 평문 커밋돼 있다. 유효하면 revoke.재발급 후 반영:
cd ~/Projects/teamai
sed -i '' 's|^SUPABASE_SERVICE_KEY=.*|SUPABASE_SERVICE_KEY=새값|' .env
sed -i '' 's|^SUPABASE_ACCESS_TOKEN=.*|SUPABASE_ACCESS_TOKEN=새값|' .env
# 엣지 함수 시크릿도 같이
supabase secrets set SUPABASE_SERVICE_ROLE_KEY=새값 --project-ref tshbvqqvdycougdqrgza
※ OpenAI·FAL 키는 이미 죽어 있어(401 실측) 조치 불필요.
.env 가 웹 번들에 통째로 실리는 구조pubspec.yaml:86 이 .env 를 앱 자산으로 등록해서, 웹 빌드하면 .env 전체가 공개된다.
지금은 내가 서빙 단계에서 걸러 막아뒀지만, 누가 그냥 배포하면 service_role 키까지 나간다.
--dart-define 이나 서버 프록시로 전환. 앱이 실제로 읽는 건 4개뿐SUPABASE_URL, SUPABASE_ANON_KEY, FAL_API_KEY, KAKAO_NATIVE_APP_KEY)코드 한 줄 고칠 때마다 도커로 12분 빌드 + 터널 왕복. 이 상태로는 고도화가 불가능하다.
flutter run -d chrome 핫리로드(저장하면 1초)가 가능해진다.이관한 200개는 system_prompt 만 있고 leader_playbook/member_playbook/지식베이스가 없다.
목록엔 다 뜨지만 대화 깊이가 3개(토스합격왕·맛있으면0칼·아노센세)와 다르다.
knowledge/ 폴더에 12개 크루 지식베이스(2,220개 파일)가 있다 → DB 연결claude -p 로 로컬 배치하면 API 비용 0크루 203개 중 100개만 이미지 보유. 나머지는 로컬·Supabase·Cloudflare R2 어디에도 없다(전수 확인).
깨진 게 아니라 생성된 적이 없다. 대표 지시로 일단 보류.
scripts/generate_crew_images.ts. FAL 키 재발급 필요 + 비용 발생되돌릴 자리로 남겨둔 것들. 며칠 써보고 이상 없으면 삭제.
experts(200) · user_experts(62) · expert_user_memories(1534)coordinate-experts (v155)index.legacy.ts (5,234줄) 삭제 검토 — 현재 미사용fal.ts 프로바이더 — 키 만료 상태. 게이트웨이로 통일했으니 제거 검토# DB 붙기
cd ~/Projects/teamai
psql "$(grep '^DATABASE_URL=' .env | cut -d= -f2-)"
# 웹 빌드 (도커. 약 12분)
docker run --rm -v ~/Projects/teamai:/app -w /app ghcr.io/cirruslabs/flutter:stable \
bash -lc "git config --global --add safe.directory /app; flutter pub get; flutter build web --release"
# 배포본 갱신 (민감 키 걸러서)
cd ~/Projects/teamai/build && rm -rf web-public && cp -R web web-public && \
{ grep -E '^(SUPABASE_URL|SUPABASE_ANON_KEY)=' ../.env; \
printf 'DEV_SKIP_AUTH=true\nDEV_AUTOLOGIN_EMAIL=p2j2dyffpf@privaterelay.appleid.com\nDEV_AUTOLOGIN_PASSWORD=TeamAiDevPreview2026\n'; } \
> web-public/assets/.env && docker restart teamai-web
# 엣지 함수 배포
cd ~/Projects/teamai && SUPABASE_ACCESS_TOKEN=$(grep '^SUPABASE_ACCESS_TOKEN=' .env | cut -d= -f2-) \
supabase functions deploy coordinate-crews --project-ref tshbvqqvdycougdqrgza --no-verify-jwt
# 모델 갈아끼우기 (파일의 모델 문자열만 고치고 실행)
psql "$(grep '^DATABASE_URL=' .env | cut -d= -f2-)" -f scripts/assign_crew_models.sql
전부 Vercel AI Gateway 경유. 제공사를 섞어 같은 프롬프트를 실사용 비교하는 배치다.
"옛날 레거시 싼 것"(claude-haiku-4.5, gemini-2.5-flash-lite)은 대표 지시로 제외.
| 티어 | 모델 | 입력/출력 ($/1M) | 크루 수 |
|---|---|---|---|
| normal | xai/grok-4.1-fast-non-reasoning |
0.20 / 0.50 | 70 |
| rare | google/gemini-3.1-flash-lite |
0.25 / 1.50 | 81 |
| premium | openai/gpt-5.6-luna |
0.20 / 1.20 | 49 |
| 플래그십 | anthropic/claude-sonnet-5 |
2.00 / 10.00 | 3 |
네 모델 전부 한국어 캐릭터 응답 실측 확인(3~9초).
게이트웨이엔 모델 347종이 있어, 바꾸고 싶으면 문자열만 교체하면 된다.
| 파일 | 용도 |
|---|---|
scripts/assign_crew_models.sql |
크루별 LLM 모델 배정 |
scripts/migrate_experts_to_crews.sql |
구 카탈로그 200건 이관 |
scripts/migrate_user_crews_and_memories.sql |
관계·기억 이관 (임베딩 보존) |
scripts/restore_missing_tables.sql |
복원 DB 에 없던 테이블 10개 생성 |
scripts/fix_missing_crew_columns.sql |
crews 누락 컬럼 3개 |
scripts/optimize_crew_avatars.sh |
아바타 256px 축소 후 업로드 |
scripts/serve_web.py |
미리보기 정적 서버 (민감 키 필터링) |
scripts/nginx-web.conf |
캐시 금지 설정 |