Mini-LMS는 로컬 PC(N100 등)에서 콘텐츠를 관리하고, Cloudflare Edge(Workers)에서 서비스를 구동하여 운영 비용과 트래픽 비용을 극소화한 경량 강의팔이 플랫폼입니다.
- Local-First Sync: 로컬 마크다운(MD) 파일과 정적 에셋을 간단하게 동기화하여 콘텐츠 관리.
- Zero Infrastructure: 전용 서버 없이 Cloudflare Workers, D1, R2만으로 구동.
- Advanced Video Experience: Cloudflare Stream을 통한 쾌적하고 보안이 강화된 비디오 호스팅.
- Toss Payments Integrated: 한국 수강생을 위한 토스페이먼츠 연동 및 수강권 자동 부여.
- SEO Optimized: 동적 메타 태그, Open Graph 지원 및 파비콘 자동 연동.
- Learning Progress Tracking: 수강생별 학습 진행률(Progress) 자동 추적 및 DB 연동.
- Rich Content Experience: KaTeX 수식 렌더링, 코드 복사, 반응형/다크모드 완벽 대응.
- Frontend & Backend: Hono (RPC-like architecture with JSX/TSX)
- Storage: Cloudflare D1 (Database) & R2 (Assets Storage)
- Video Hosting: Cloudflare Stream (Secure Video Delivery)
- Authentication: Google OAuth 2.0 & JWT Cookies
- Styling: Vanilla CSS (Custom Design System with Design Tokens)
- Sync Utility: Python (YAML Frontmatter parsing & R2 Asset uploading)
- Wrangler CLI 설치
- Cloudflare 계정 및 D1/R2 버킷 생성
루트 디렉토리에 다음 두 파일을 생성하고 본인의 환경에 맞춰 설정합니다.
GOOGLE_CLIENT_ID: Google Cloud Console에서 발급받은 OAuth 클라이언트 IDGOOGLE_CLIENT_SECRET: Google OAuth 클라이언트 보안 비밀번호JWT_SECRET: 세션 암호화에 사용할 랜덤 문자열TOSS_SECRET_KEY: 토스페이먼츠 내 상점 관리에서 발급받은 시크릿 키 (테스트용 가능)STREAM_JWK_KEY: Cloudflare Stream의 Signed URL 생성을 위한 JWK 키 (비공개 영상 보안용)
WORKERS_API_BASE: Workers가 실행 중인 주소 (로컬 개발 시http://localhost:8787)CONTENT_DIR: 마크다운 콘텐츠가 위치한 경로 (기본값:../content)ADMIN_JWT_TOKEN: 관리자 권한이 포함된 유효한 JWT 토큰 (Sync API 인증용)D1_DATABASE_ID: Cloudflare D1 데이터베이스 ID (Wrangler 설정용)R2_BUCKET_NAME: 서빙에 사용할 R2 버킷 이름
cd app
npm install
npm run dev로컬의 content/ 폴더 내 마크다운 파일을 서버로 업로드합니다.
cd sync
./.venv/bin/python3 sync.py/app: Cloudflare Workers 서비스 소스 코드 (Hono 기반)/content: 강좌 및 디지털 상품 마크다운/에셋 저장소/schema: 데이터베이스 스키마 및 마이그레이션 SQL/sync: 로컬 콘텐츠와 클라우드를 연결하는 동기화 스크립트
MIT License. Created by [gitsam].