1. 서비스 개요
서비스명: 온핏(on-fit)
목표:
누구나 쉽게 동네에서 함께 운동할 사람을 찾고,
실력/취향/시간대에 맞게 즉시 모임을 개설하거나 참여할 수 있는 운동 커뮤니티 플랫폼.
2. 주요 대상
- 20~40대 직장인 및 대학생 중심의 근거리 운동 참여자
- 운동을 꾸준히 하고 싶지만 함께할 사람이 없는 사람
- 실력·연령·지역 기준으로 필터링된 매칭을 원하는 이용자
3. 주요 기능
🏠 메인 페이지
- 모집글 리스트: 운동 종목, 지역, 날짜, 인원, 실력 기준 표시
- 필터링: 종목 / 지역 / 날짜 / 실력 / 모집 상태(모집중/마감)
- 추천 모임: 팔로우 유저 또는 동일 지역 인기 모임
📄 상세 페이지
- 모집글 상세 정보 (종목, 시간, 장소, 필요 장비, 인원, 레벨 등)
- 참여 버튼 → 클릭 시 채팅방 자동 생성
- 작성자 프로필 보기 / 팔로우 / 신고 기능
👤 마이 페이지
- 내가 참여한 번개 모임 기록
- 내가 작성한 게시글 / 받은 뱃지 목록
- 누적 참여 횟수, 취소 횟수, 노쇼 여부 표시
🧍 프로필 페이지 (또는 모달)
- 프로필 이미지, 닉네임, 연령, 대표 종목, 실력 등
- 팔로우 / 팔로워 목록
- 최근 활동 기록 (참여 모임, 후기 등)
✏️ 게시글 생성 페이지
- 종목 선택, 날짜/시간, 장소, 모집 인원, 실력 기준 선택
- 소개글 입력 후 등록 시 메인 리스트 자동 반영
📅 달력 페이지
- 날짜별 예정된 번개 현황 한눈에 보기
- 참여 중 / 주최 중 / 팔로우 중인 모임 강조 표시
4. 인증 및 사용자 시스템
🔑 카카오 OAUTH 로그인
- 카카오 계정 기반 간편 가입 및 연령 인증 자동 처리
📍 동네 설정
- GPS 기반 자동 탐지 또는 직접 설정
- 내 동네 기준으로 게시글 우선 노출
🔔 팔로우 및 알림
- 특정 사용자를 팔로우하면 새 글 등록 시 푸시 알림
5. 커뮤니티 및 제재 시스템
🧩 뱃지 시스템
| 조건 | 뱃지명 | 설명 |
|---|
| 3회 참여 | 브론즈 뱃지 | 첫 꾸준한 활동 인정 |
| 10회 참여 | 실버 뱃지 | 중급 참여자 |
| 50회 참여 | 골드 뱃지 | 지역 핵심 유저 |
| 100회 참여 | 플래티넘 뱃지 | 헌신적인 커뮤니티 멤버 |
🚫 노쇼 제재
- 사전 취소 없이 미참여 시 누적 관리
- 누적 3회 이상 시 일정 기간 참여 제한 (1주~1달)
⚠️ 신고 기능
- 부적절한 언행, 허위 모집, 상업적 이용 등 신고 가능
- 관리자 검토 후 경고 / 정지 처리
6. 채팅 시스템
- 게시글 참여 시 자동 그룹 채팅방 생성
- 주최자 권한: 강퇴 / 공지 / 인원 관리 가능
- 채팅방 내 일정 리마인더, 위치 공유 기능
7. 실력 기준 체계
🔹 기술 중심 종목
| 종목 | 브론즈 | 실버 | 골드 | 플래티넘 | 다이아 |
|---|
| 배드민턴 | 왕초심 | 초심 | 중급 | 상급 | 마스터 |
| 탁구 | 입문 | 초급 | 중급 | 상급 | 고수 |
| 테니스 | 왕초심 | 초심 | 중급 | 상급 | 마스터 |
| 런닝 | 8분/km 이상 | 7분대 | 6분대 | 5분대 | 4분대 이하 |
🔸 연차 중심 종목
| 종목 | 브론즈 | 실버 | 골드 | 플래티넘 | 다이아 |
|---|
| 풋살 / 축구 / 농구 / 배구 | 1년 미만 | 1~2년 | 3~5년 | 5~8년 | 8년 이상 |
| 클라이밍 | 3개월 미만 | 3~6개월 | 1년 | 2년 이상 | 3년 이상 |
8. 추가 고려 사항
- 후기 및 평점 시스템 (모임 종료 후 자동 노출)
- AI 추천 (나의 운동/지역/시간대 기반)
- 다크모드 및 접근성 고려 UI
9. 기술 스택
🖥️ Frontend
- Framework: Next.js (App Router)
- Library: React 19
- Styling: TailwindCSS
- State: Zustand
- Build: Vite (개발 환경)
- Deployment: AWS Amplify 또는 S3 + CloudFront → 정적 빌드 후 CDN 배포, Server Action 필요 시 Lambda 연동
⚙️ Backend
- Runtime: Next.js Route Handlers + Node.js 18+
- Language: TypeScript
- Database: PostgreSQL + PostGIS (위치 검색)
- ORM: Prisma
- Cache/Queue: Upstash Redis (또는 AWS ElastiCache Redis)
- File Storage: AWS S3 (Presigned URL 업로드)
- Scheduler: AWS EventBridge + Lambda (리마인더·제재 처리)
- Deployment: AWS ECS(Fargate) 또는 EC2
🔐 Auth
- Auth.js (NextAuth) + Kakao OAuth
- Session: Prisma Adapter 또는 JWT 기반
💬 Realtime / Chat
- Service: Pusher Channels (관리형 WebSocket)
- Alternative: Ably 또는 Socket.IO + Redis Adapter
🔔 Push Notification
- Technology: Web Push API + FCM
- Use Cases:
- 번개 모임 리마인더
- 팔로우 유저 새 글 알림
- 노쇼 누적 경고
🗺️ Location & Matching
- Engine: PostGIS
- Core Queries: ST_DWithin, ST_Distance
🧠 Additional Services
- Rate Limit: Upstash Ratelimit
- Badge Trigger: Redis Queue 기반
- Report / Restriction: 자동 제재 + 관리자 검토
📋 10. 프로젝트 관리 (JIRA)
🎯 이슈 유형 규칙
| 구분 | 설명 |
|---|
| Epic | 기능의 큰 주제 단위 (예: “회원 시스템”, “모임 기능”) |
| Task | 실제 개발 단위 업무 (UI, API, 로직, 컴포넌트 등) |
| Bug | 기능 오류, 예외, UI 깨짐 등 수정 필요 항목 |
⚠️ Story는 사용하지 않음.
Epic → Task 구조로 바로 연결하여 관리 효율을 높인다.
즉, 각 Epic 하위에 Task / Bug / feat / fix / style 등의 작업을 직접 연결.
🏷️ 라벨 규칙 (커밋 Prefix와 동일)
| 라벨 | 의미 |
|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
style | 스타일/UI 수정 (기능 변화 없음) |
refactor | 코드 리팩터링 |
chore | 환경설정, 패키지, 배포 관련 |
JIRA 라벨 = 커밋 Prefix
예: feat 이슈 → feat: 커밋 메시지로 통일
🔢 이슈 키 규칙
🧭 브랜치 전략
| 브랜치 | 역할 |
|---|
main | 실제 배포용 (Production) |
dev | 통합 개발 브랜치 |
feature/* | 기능 단위 작업 (JIRA 이슈 기준) |
Merge 순서: feature/* → team(optional) → dev → main
필요 시 rebase --autosquash로 커밋 정리 후 머지