접속 주소: https://teamai-web.pages.dev
Flutter 앱을 버리고 웹 제품으로 전면 전환했습니다. 화면 일곱 개와 기능 전부가 살아 있습니다.
| 화면 | 주소 | 로그인 |
|---|---|---|
| 시작 화면 | 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.
앱스토어를 포기하기로 확정된 순간(대표 결정), 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 가 깨져 모델 필드 하나
추가하는 것도 막혀 있던 문제가 통째로 사라졌습니다.
Supabase 하나입니다. Vercel 도 Cloudflare 도 아닙니다.
브라우저 ──anon 키──▶ Supabase (RLS 가 본인 것만 열어 줌)
└─invoke───▶ Edge Function ──OpenAI 키(서버)──▶ OpenAI
coordinate-crews 함수만 부르고,anon 키는 공개돼도 되는 값입니다. 진짜 방어선은 RLS 이고, 확인했습니다 —consultations·messages·user_crews·user_profiles 전부 본인 것만.검증은 임시 계정으로 했고, 확인 뒤 계정과 데이터를 전량 삭제했습니다.
대표 데이터는 건드리지 않았습니다.
| 기능 | 확인한 것 |
|---|---|
| 로그인 | Google · Apple OAuth. 서버 없이 브라우저가 코드를 세션으로 교환 |
| 온보딩 | 관심사 "배움" → "배움이라면, 이 셋입니다" + 얼굴 셋 + "입시내비으로 시작" |
| 영입 / 친구 사귀기 | 크루 상세 → 영입 → 방이 열림 |
| 대화 | 말 걸기 → 중고차형님이 자기 성격대로 답함 |
| 실시간 | 크루 답이 흘러 들어오며 채워짐 |
| 크레딧 | 500 → 498. Edge Function 과금까지 동작 |
| 홈 | 방 2 · 크루 2, 얼굴·제목 정상 |
| 대화 목록 / 내 크루 / 팀 / 나 | 전부 정상 |
"왔어요. 무사고라고 해도 성능점검기록부와 보험 이력을 꼭 확인해야 해요."
— 중고차형님, 웹에서 실제로 받은 답
값을 눈대중으로 옮기지 않고 시안 CSS 를 그대로 이식했습니다.
site/app/globals.css 에 원본 파일 경로를 주석으로 박아 뒀습니다.
| 화면 | 시안 |
|---|---|
| 시작 | 5장면 롤링 · 글자는 뒤 사람은 앞 |
| 마켓 | r4 · 어두운 바탕에 얼굴 격자, 카테고리는 껍데기 없는 활자 한 줄 |
| 크루 상세 | r4 · 이름이 화면 (이름 62px) |
| 홈 | r7 · 무엇을 이어서 할까요 |
| 무대 | r4 · 지휘대 (지금 말하는 크루가 상단에 섬) |
| 온보딩 | r4 · 셋 중 하나 |
| 네비 | r7 · 아이콘 되돌린 안 |
실제로 로그인해 눌러 보지 않았으면 전부 놓쳤을 것들입니다.
upsert 가 UPDATE 권한까지 요구하는데user_crews 에 UPDATE 정책이 없어 RLS 가 막았습니다(42501).consultations 에 crew_id 가 없습니다. crew_ids 배열입니다(1:N·1:Team 구조).setRooms 호출을 제가 지웠습니다.Flutter 쪽에서 넘어온 사고도 같이 잡았습니다 — 마켓 탭·온보딩 관심사·프로필 수정
세 화면의 카테고리가 전부 옛 이름이라 동행 42명이 갈 길이 없었고, 프로필 수정은
영어 이름이라 온보딩이 저장한 값과 아예 안 맞았습니다. 셋 다 데이터에서 뽑도록 고쳤습니다.
| 무엇 | 왜 |
|---|---|
| 팀 만들기·편집 | 크루를 고르는 화면이 필요합니다. 버튼만 먼저 살리면 눌러도 아무 일이 없는 조용한 실패가 됩니다 |
| 결제 | 스토어를 포기했으니 국내 PG 를 붙여야 합니다. 크레딧 차감은 이미 돕니다 |
| 알림·보안·라운지 | Flutter 에도 화면만 있고 하는 일이 없었습니다 |
| 1:N / 1:Team 대화 | 배선은 돼 있으나(모드 전달) 여러 크루를 한 방에 넣는 화면이 아직 없습니다 |
| Flutter 앱 폐기 | teamai-4v7.pages.dev 는 아직 살려 뒀습니다. 대표 확인 후 내립니다 |
?agent=1 로 이상한 곳을 짚어 주시면 그대로 고칩니다커밋 031cb925 기준 · 전 경로 외부 200 확인 완료