줄자로 물고기 길이를 재고, 그 기록으로 순위·대회·이야기를 나누는 낚시 플랫폼입니다.
웹에서 랭킹과 커뮤니티를 보고, 자랑 기록을 올립니다. 공식 랭킹에 들어가는 줄자 인증 촬영은 모바일 앱의 카메라 가이드로 합니다. 웹의 /upload는 그 안내만 보여 줍니다.
짧은 둘러보기: 랭킹, 대회, 커뮤니티, 자랑 기록 폼
- 이메일 회원가입과 JWT 로그인. 카카오·구글 로그인은 아직 없습니다.
- 주간·어종별·지역별 랭킹. 공식 점수는
길이(cm) × 어종 희귀도입니다. 같은 점수면 먼저 올린 기록이 앞섭니다. - 인증 등급 S/A/B. S와 A는 랭킹에 들어가고, B는 빠집니다.
- 무료 대회 목록, 상세, 참가. 유료 결제와 에스크로는 없습니다.
- 커뮤니티 글, 댓글, 태그, 신고.
- 어종 사전, 낚시 정보(매듭·금지·안전), 날씨, 출조 지도.
- 자랑 기록은 웹에서도 올릴 수 있고, 추천으로 순위가 정해집니다.
- 관리자 화면에서 검수, 신고, 대회, 어종을 다룹니다.
| 등급 | 조건 | 랭킹 |
|---|---|---|
| S | 줄자 인식, 촬영 규칙 통과, 어종 신뢰도 충분 | 반영 |
| A | 줄자와 규칙은 통과, 어종 신뢰도가 낮음 | 반영 |
| B | 줄자를 못 읽거나 규칙 위반 | 제외 |
시드 데이터로 띄운 로컬 웹을 찍었습니다. 더 많은 화면과 촬영 조건은 docs/assets에 있습니다.
| 홈 | 주간 랭킹 |
|---|---|
![]() |
![]() |
| 대회 | 커뮤니티 |
|---|---|
![]() |
![]() |
| 자랑 기록 | 출조 지도 |
|---|---|
![]() |
![]() |
공식 인증 촬영 화면은 웹에 없습니다. 웹 /upload는 앱 전용 안내입니다.
flowchart LR
subgraph clients [클라이언트]
Web["Next.js 웹 :3000"]
Mobile["Expo 모바일"]
end
API["NestJS API :4000"]
DB[("PostgreSQL")]
AI["FastAPI :8000"]
Vision["YOLO · CLIP · OpenCV"]
Web --> API
Mobile --> API
API --> DB
API --> AI
AI --> Vision
사진은 지금 로컬 uploads/에 저장하고, AI 분석은 API가 동기 HTTP로 호출합니다. Redis는 Docker Compose에 있지만 큐로 쓰지 않습니다. S3와 BullMQ는 의존성만 있고 동작에는 쓰이지 않습니다.
| 영역 | 하는 일 |
|---|---|
fishing/apps/web |
화면. 랭킹, 대회, 커뮤니티, 사전, 날씨, 출조, 관리자 |
fishing/apps/mobile |
같은 API를 쓰는 Expo 앱. 카메라 인증 업로드 |
fishing/apps/api |
인증, 기록, 랭킹, 업로드, AI 호출 |
fishing/ai |
어종 분류와 줄자 길이 |
fishing/packages/shared |
공통 타입과 상수 |
FishRank/
├── docs/assets/ 화면 캡처
├── TEAM.md
├── CONTRIBUTING.md
└── fishing/
├── apps/web
├── apps/api
├── apps/mobile
├── ai
├── packages/shared
├── docs/ 설계·실행·정책 문서
└── docker-compose.yml
| 영역 | 사용 |
|---|---|
| 웹 | Next.js 16, React 19, TypeScript, Tailwind CSS 4, TanStack Query, Zustand |
| API | NestJS 11, Prisma, PostgreSQL, JWT |
| 모바일 | Expo 54, expo-router, expo-camera |
| AI | Python 3.12, FastAPI, YOLOv8, CLIP, OpenCV |
| 로컬 | Node.js 20+, npm workspaces, Docker Compose의 PostgreSQL·Redis |
git clone https://github.com/FishRank-TEAM/FishRank.git
cd FishRank/fishing
npm install
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env
cp ai/.env.example ai/.env
npm run db:up
npm exec --prefix apps/api prisma migrate deploy
npm run db:seed
npm run dev # 웹 :3000, API :4000
npm run ai # AI :8000. Python 3.12가 없으면 안내 후 종료
npm run mobile # Expo. 선택| 주소 | 무엇 |
|---|---|
| http://localhost:3000 | 웹 |
| http://localhost:4000/health | API 상태 |
| http://localhost:4000/api/docs | Swagger. 운영(NODE_ENV=production)에서는 열리지 않음 |
| http://localhost:8000/health | AI 상태 |
JWT_SECRET은 16자 이상이어야 API가 켜집니다. 운영에서는 AI_SERVER_SECRET도 기본값이면 기동이 거절됩니다. 명령과 트러블슈팅은 로컬 개발 가이드에 있습니다.
기준은 저장소의 서비스 개요이고, 지금 코드와 맞게 고친 상태입니다.
| 단계 | 내용 | 상태 |
|---|---|---|
| MVP | 이메일 로그인, 랭킹, 무료 대회, 커뮤니티, 사전, 날씨, 낚시 정보, 관리자 | 구현됨 |
| 모바일 | Expo 앱과 카메라 인증 업로드 | 구현됨. 스토어 출시는 아직 |
| AI | 분류와 줄자 측정 연동 | 동작. 정확도 개선 중 |
| 다음 | 소셜 로그인, 팔로우, AR 교차검증, 푸시, 유료 대회, S3, 작업 큐 | 아직 없음 |
공개된 GitHub 멤버와 커밋 작성자만 TEAM.md에 적었습니다. 역할과 소개는 비어 있습니다.
CONTRIBUTING.md에 실행, 커밋, PR 전에 돌릴 명령을 적었습니다. 버그와 기능 제안은 이슈 템플릿을 쓰면 됩니다.
| 문서 | 내용 |
|---|---|
| 문서 인덱스 | 설계 문서 목록 |
| 서비스 소개 | 무엇을 하는 서비스인지 |
| API 명세 | 엔드포인트 |
| 측정·인증 | 촬영 규칙과 등급 |
| AI 서버 | FastAPI 파이프라인 |
LICENSE 파일은 없습니다. npm 패키지는 private이고, API 패키지 라이선스 칸은 UNLICENSED입니다. 공개 라이선스를 정하기 전에는 모든 권리를 보유합니다.
(팀에서 작성: 공개할 라이선스가 있으면 LICENSE 파일을 추가)






