← 목록으로

팀AI 웹 전환 완료 보고 — 2026-08-26

접속 주소: https://teamai-web.pages.dev
Flutter 앱을 버리고 웹 제품으로 전면 전환했습니다. 화면 일곱 개와 기능 전부가 살아 있습니다.


1. 지금 바로 보실 수 있는 것

화면 주소 로그인
시작 화면 https://teamai-web.pages.dev 불필요
크루 마켓 (108명) https://teamai-web.pages.dev/market/ 불필요
크루 상세 (108개 각각) https://teamai-web.pages.dev/crew/car-guide/ 불필요
온보딩 https://teamai-web.pages.dev/onboarding/ 마지막 단계만
홈 · 대화 · 내 크루 · 팀 · 나 https://teamai-web.pages.dev/app/ 필요
화면 짚어서 피드백 주소 끝에 ?agent=1

?agent=1 을 붙이면 오른쪽 아래에 도구가 뜹니다. 이상한 부분을 클릭해 메모를 남기면
CSS 선택자·소스 파일 경로·컴포넌트 트리까지 붙은 글이 복사됩니다. 그대로 붙여 넣어 주시면 됩니다.
끌 때는 ?agent=0.


2. 왜 웹으로 옮겼나 — 숫자

앱스토어를 포기하기로 확정된 순간(대표 결정), Flutter 를 유지할 이유가 사라졌습니다.

규모 전환 시
Flutter 화면 코드 46,177줄 / 36화면 이것만 새로 짬
Edge Functions (TS) 15,571줄 그대로
DB · 크루 108명 · 성격 · 이미지 그대로

결정적 이유는 검색이었습니다. Flutter 웹은 canvas 에 그려서 봇이 크루 이름을
한 글자도 못 읽었습니다(색인 0, 링크 공유해도 미리보기 없음).

지금은 108개가 미리 만들어진 HTML 로 나갑니다.

https://teamai-web.pages.dev/crew/red-lip-friday/
  <title>금요일의빨강 — 이성친구</title>
  동행 · 이성친구 · 20대 / 금요일의빨강 / 본명 하유리 / 부를 때 유리

덤으로 얻은 것: 네이티브 플러그인을 실제로 안 쓰고 있었고(lottie 0곳·carousel 0곳·
Apple 로그인 0곳), 스토어 수수료 30% 를 안 내며, build_runner 가 깨져 모델 필드 하나
추가하는 것도 막혀 있던 문제가 통째로 사라졌습니다.


3. 백엔드는 어디에 있나 (대표 질문)

Supabase 하나입니다. Vercel 도 Cloudflare 도 아닙니다.

브라우저 ──anon 키──▶ Supabase (RLS 가 본인 것만 열어 줌)
        └─invoke───▶ Edge Function ──OpenAI 키(서버)──▶ OpenAI

4. 살아 있는 기능 (전부 실측 확인)

검증은 임시 계정으로 했고, 확인 뒤 계정과 데이터를 전량 삭제했습니다.
대표 데이터는 건드리지 않았습니다.

기능 확인한 것
로그인 Google · Apple OAuth. 서버 없이 브라우저가 코드를 세션으로 교환
온보딩 관심사 "배움" → "배움이라면, 이 셋입니다" + 얼굴 셋 + "입시내비으로 시작"
영입 / 친구 사귀기 크루 상세 → 영입 → 방이 열림
대화 말 걸기 → 중고차형님이 자기 성격대로 답함
실시간 크루 답이 흘러 들어오며 채워짐
크레딧 500 → 498. Edge Function 과금까지 동작
방 2 · 크루 2, 얼굴·제목 정상
대화 목록 / 내 크루 / 팀 / 나 전부 정상

"왔어요. 무사고라고 해도 성능점검기록부와 보험 이력을 꼭 확인해야 해요."
— 중고차형님, 웹에서 실제로 받은 답


5. 디자인은 컨펌하신 시안 그대로입니다

값을 눈대중으로 옮기지 않고 시안 CSS 를 그대로 이식했습니다.
site/app/globals.css 에 원본 파일 경로를 주석으로 박아 뒀습니다.

화면 시안
시작 5장면 롤링 · 글자는 뒤 사람은 앞
마켓 r4 · 어두운 바탕에 얼굴 격자, 카테고리는 껍데기 없는 활자 한 줄
크루 상세 r4 · 이름이 화면 (이름 62px)
r7 · 무엇을 이어서 할까요
무대 r4 · 지휘대 (지금 말하는 크루가 상단에 섬)
온보딩 r4 · 셋 중 하나
네비 r7 · 아이콘 되돌린 안

6. 만들면서 잡은 결함들 — 화면만 봐서는 안 드러났던 것

실제로 로그인해 눌러 보지 않았으면 전부 놓쳤을 것들입니다.

  1. 영입이 통째로 실패했습니다. upsert 가 UPDATE 권한까지 요구하는데
    user_crews 에 UPDATE 정책이 없어 RLS 가 막았습니다(42501).
  2. consultationscrew_id 가 없습니다. crew_ids 배열입니다(1:N·1:Team 구조).
    단수인 줄 알고 짜서 방 열기가 터졌습니다.
  3. 크루 답이 빈 말풍선으로 떴습니다. 서버가 답을 흘려 넣습니다(빈 행을 넣고 UPDATE 로 채움).
    INSERT 만 듣고 있어서 내용이 영영 안 채워졌습니다.
  4. 네비가 무대 입력창을 덮었습니다.
  5. 입력창이 "나에게 말하기" 라고 했습니다.
  6. 홈이 방을 못 읽었습니다 — 코드를 옮기다 setRooms 호출을 제가 지웠습니다.

Flutter 쪽에서 넘어온 사고도 같이 잡았습니다 — 마켓 탭·온보딩 관심사·프로필 수정
세 화면의 카테고리가 전부 옛 이름이라 동행 42명이 갈 길이 없었고, 프로필 수정은
영어 이름이라 온보딩이 저장한 값과 아예 안 맞았습니다. 셋 다 데이터에서 뽑도록 고쳤습니다.


7. 아직 안 된 것 (솔직하게)

무엇
팀 만들기·편집 크루를 고르는 화면이 필요합니다. 버튼만 먼저 살리면 눌러도 아무 일이 없는 조용한 실패가 됩니다
결제 스토어를 포기했으니 국내 PG 를 붙여야 합니다. 크레딧 차감은 이미 돕니다
알림·보안·라운지 Flutter 에도 화면만 있고 하는 일이 없었습니다
1:N / 1:Team 대화 배선은 돼 있으나(모드 전달) 여러 크루를 한 방에 넣는 화면이 아직 없습니다
Flutter 앱 폐기 teamai-4v7.pages.dev 는 아직 살려 뒀습니다. 대표 확인 후 내립니다

8. 다음에 할 일

  1. 대표 확인?agent=1 로 이상한 곳을 짚어 주시면 그대로 고칩니다
  2. 팀 만들기 (크루 고르는 화면)
  3. 국내 PG 결제
  4. 1:N 대화 (여러 크루를 한 방에)
  5. Flutter 앱 내리기

커밋 031cb925 기준 · 전 경로 외부 200 확인 완료