OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
딥테일 프리다이빙 교육 일정·예약·로그북
Translation pending
Sports & fitnessTypeScript · PLpgSQLGitHub @deeptailfreedivingOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗교육생이 일정을 확인하고 수업을 신청하며, 수강 진행도와 로그북을 관리하는 웹앱(PWA)입니다. 휴대폰 브라우저에서 "홈 화면에 추가"하면 앱처럼 쓸 수 있습니다.
/admin, 화면은 아직 없음)src/lib/business.ts)https://<앱 주소>/api/notion/webhook (이벤트: page.properties_updated)vercel.json cron)| 영역 | 사용 기술 |
|---|---|
| 화면 + 서버 | Next.js 14 (App Router) + TypeScript |
| 디자인 | Tailwind CSS, Pretendard 글꼴 (SIL Open Font License) |
| DB | PostgreSQL + Drizzle ORM |
| 로그인 | NextAuth (이메일·비밀번호, 카카오 로그인은 추후 추가) |
처음 계획은 Prisma였지만 Drizzle로 바꿨습니다. 기능은 같고, 별도 엔진 파일을 내려받지 않아도 돼서 설치와 배포(Vercel)가 더 단순합니다.
DATABASE_URL이 자동으로 들어감vercel-build)| 환경변수 | 내용 |
|---|---|
NEXTAUTH_SECRET | 임의의 긴 문자열 (openssl rand -base64 32) |
SEED_ADMIN_EMAIL | 대표 관리자 로그인 이메일 |
SEED_ADMIN_PASSWORD | 대표 관리자 비밀번호 |
SEED_DEMO | 1이면 [예시] 일정과 테스트 교육생 계정 생성 (테스트 기간에만) |
NOTION_TOKEN | 노션 연결(Integration) 키 — 강습영상 연동 |
NEXT_PUBLIC_VAPID_PUBLIC_KEY · VAPID_PRIVATE_KEY | 웹 푸시 알림 키 (npx web-push generate-vapid-keys) |
VAPID_SUBJECT | mailto:대표 이메일 |
CRON_SECRET | 매일 피드백 점검 작업 보호용 임의 문자열 |
테스트 교육생 계정(SEED_DEMO=1): [email protected] / demo1234 — AIDA 2 수강 중, 2회차 완료라 자율연습 참여 가능
필요한 것: Node.js 20 이상, PostgreSQL
deeptail 데이터베이스 만들기cp .env.example .env
# .env 파일의 DATABASE_URL을 내 DB 주소로 바꾸고
# NEXTAUTH_SECRET은 `openssl rand -base64 32` 결과로 바꾸기
npm install
npm run db:migrate
npm run db:seed
npm run dev
브라우저에서 http://localhost:3000 접속[email protected] / 비밀번호 changeme1234.env에 SEED_ADMIN_EMAIL, SEED_ADMIN_PASSWORD를 지정하고 시드를 다시 실행하세요.src/
app/
(tabs)/ 하단 탭이 있는 화면들
page.tsx 홈
schedule/ 일정안내 및 예약
courses/ 교육과정
my/ 마이페이지 (로그인 필요)
notices/ 공지사항 목록·상세
gallery/ reviews/ materials/
(auth)/ 로그인 · 회원가입
api/auth/ NextAuth
components/ 하단 탭, 아이콘, 폼 요소
db/
schema.ts DB 구조 (회원, 과정, 횟수권, 장소, 일정, 신청, 공지, 로그북)
course-data.ts 교육과정 안내문 내용 (과정·회차·혜택 수정은 여기서)
seed.ts 기본 데이터 (관리자, 장소 7곳, 과정 5개, 유료트레이닝 4종, 장비대여료, 공지 예시)
lib/auth.ts 로그인 설정
middleware.ts 로그인·권한 필요한 경로 지정
drizzle/ DB 마이그레이션 파일
enrollments): 과정별 총 횟수·사용 횟수·담당강사·결제 상태registrations):
training_options): 1:1/1:2 × 5m/딥스, 1인 요금schedules): 생성 시 관리자 이름·연락처 자동 입력public/manifest.webmanifest의 icons)