TechAPI 기반 전면 재구축. 계획서는 docs/REBUILD_PLAN.md, 디자인은 docs/DESIGN_BRIEF.md.
기반 작업 (완료)
재구축
출시 전
재작성할 때 같이 고칠 것
Gemini 이미지 전달 — v1은 base64 문자열을 텍스트 프롬프트에 이어붙였다 (Scan.dart:79). 모델이 이미지로 인식하지 않는다.
Content.multi([
TextPart('Identify the phone model in this image.'),
InlineDataPart('image/jpeg', bytes),
])
모델 ID — gemini-flash-experimental은 유효하지 않다. Scan.dart:46, ChatAI.dart:95.
개발자 권한 — LoginPage.dart:20에 관리자 이메일이 평문. 클라이언트 검사라 우회 가능. Custom Claims로.
차트 라이브러리 — fl_chart는 미사용, 실제로 쓰는 건 syncfusion_flutter_charts(Phone.dart). 화면 새로 쓸 때 정리. syncfusion은 상용 라이선스 문제 있음.
데이터 소스
api.techapi.dev는 미배포(DNS 미해결). GitHub Pages 정적 덤프를 쓴다. 실제 엔드포인트를 replay해 만들어져서 REST와 스키마가 같고, URL 조립만 다르다.
REST /v1/smartphones/galaxy-s25
덤프 /v1/smartphones/galaxy-s25/index.json
배포되면 TechApiSource 구현만 바꾸면 된다.
TechAPI 기반 전면 재구축. 계획서는
docs/REBUILD_PLAN.md, 디자인은docs/DESIGN_BRIEF.md.기반 작업 (완료)
gh workflow run flutter-ci.yml --ref <branch>재구축
#3ce0b0, Space Grotesk / JetBrains Mono, radius 4px)을 ThemeData로. 레이더 차트 쓰지 말 것, 미터 + 그룹 막대로source_urls노출은 CC-BY-SA 4.0상 의무출시 전
google-services.json실제 파일로 교체 — 지금oauth_client가 비어 Google 로그인 안 됨ios/Runner/GoogleService-Info.plist없음applicationId(com.example.techpicks는 스토어 업로드 거부됨)재작성할 때 같이 고칠 것
Gemini 이미지 전달 — v1은 base64 문자열을 텍스트 프롬프트에 이어붙였다 (
Scan.dart:79). 모델이 이미지로 인식하지 않는다.모델 ID —
gemini-flash-experimental은 유효하지 않다.Scan.dart:46,ChatAI.dart:95.개발자 권한 —
LoginPage.dart:20에 관리자 이메일이 평문. 클라이언트 검사라 우회 가능. Custom Claims로.차트 라이브러리 —
fl_chart는 미사용, 실제로 쓰는 건syncfusion_flutter_charts(Phone.dart). 화면 새로 쓸 때 정리. syncfusion은 상용 라이선스 문제 있음.데이터 소스
api.techapi.dev는 미배포(DNS 미해결). GitHub Pages 정적 덤프를 쓴다. 실제 엔드포인트를 replay해 만들어져서 REST와 스키마가 같고, URL 조립만 다르다.배포되면
TechApiSource구현만 바꾸면 된다.