尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Granite는 국내 자연 볼더링 스팟을 모바일 웹에서 탐색하고 운영하기 위한 서비스입니다. Area부터 Route까지 이어지는 콘텐츠 계층을 정리하고, Route 단위로 베타 기록을 연결하며, 운영자가 콘텐츠와 이미지, 베타 검수 흐름을 관리할 수 있게 합니다. 상세한 제품 요구사항과 아키텍처 기준은 docs/에 있습니다. 이 README는 로컬 실행, 저장소 구조, 주요 운영 기준을 빠르게 파악하기 위한 진입 문서입니다. Granite는 다음 단계로 개발됩니다. 1. Phase 1: Public UI Baseline 2. Phase 2: D1 Migration & Data Layer 3. Phase 3: Admin Operations 4. Phase 4: Public/Admin UX Refinement 5. Phase 5: Beta / Instagram 6. Phase 6: Login / Favorites / Claims 현재 릴리스 경계는 docs/ROADMAP.md와 진행 중인 PR을 함께 확인하세요. Phase별 구현 계획은 docs/plans/에 정리되어 있습니다. 의존성을 설치합니다. Next.js 개발 서버를 실행합니다.檢視完整 README ↗
Granite는 국내 자연 볼더링 스팟을 모바일 웹에서 탐색하고 운영하기 위한 서비스입니다. Area부터 Route까지 이어지는 콘텐츠 계층을 정리하고, Route 단위로 베타 기록을 연결하며, 운영자가 콘텐츠와 이미지, 베타 검수 흐름을 관리할 수 있게 합니다.
상세한 제품 요구사항과 아키텍처 기준은 docs/에 있습니다. 이 README는 로컬 실행, 저장소 구조, 주요 운영 기준을 빠르게 파악하기 위한 진입 문서입니다.
Granite는 다음 단계로 개발됩니다.
현재 릴리스 경계는 docs/ROADMAP.md와 진행 중인 PR을 함께 확인하세요. Phase별 구현 계획은 docs/plans/에 정리되어 있습니다.
| 영역 | 기술 |
|---|---|
| 프레임워크 | Next.js App Router, React, Server Actions |
| 언어 | TypeScript strict |
| 스타일 | Tailwind CSS |
| 데이터베이스 | Cloudflare D1 HTTP API |
| 오브젝트 스토리지 | Cloudflare R2 S3-compatible SDK |
| 이미지 제공 | Cloudflare CDN, Image Resizing |
| 지도 | Kakao Map JavaScript SDK |
| 웹앱 배포 | Vercel Functions, Node runtime, 서울 리전 |
| Worker 배포 | Cloudflare Workers |
| 테스트 | Vitest |
의존성을 설치합니다.
pnpm install
Next.js 개발 서버를 실행합니다.
pnpm dev
검증 명령입니다.
pnpm typecheck
pnpm test
pnpm build
운영과 배포에 자주 쓰는 명령입니다.
pnpm wrangler d1 migrations apply granite --local
pnpm vercel deploy
pnpm vercel deploy --prod
pnpm wrangler deploy
로컬 웹앱 개발에는 .env.local을 사용합니다. 기본 키 목록은 .env.example을 기준으로 합니다.
| 키 | 용도 |
|---|---|
NEXT_PUBLIC_KAKAO_MAP_KEY | Kakao Map JavaScript SDK 키 |
CDN_BASE_URL | 공개 CDN 베이스 URL. 기본값은 https://cdn.granite.kr |
ADMIN_JWT_SECRET | 관리자 세션 서명 키 |
CLOUDFLARE_ACCOUNT_ID | Cloudflare API 연동용 account ID |
D1_HTTP_URL | Cloudflare D1 HTTP API endpoint |
D1_API_TOKEN | D1 HTTP 접근용 Cloudflare API token |
D1_DATABASE_ID | Cloudflare D1 database ID |
R2_BUCKET_NAME | 웹앱에서 사용하는 R2 bucket 이름 |
R2_ACCESS_KEY_ID | R2 S3-compatible access key |
R2_SECRET_ACCESS_KEY | R2 S3-compatible secret key |
Phase 5와 Phase 6 기능에는 Meta/OAuth provider secret이 추가됩니다. production 값은 저장소에 두지 말고 Vercel Environment Variables 또는 Cloudflare secret으로 관리하세요.
app/ Next.js App Router routes, layouts, route handlers
components/ public, admin, auth, beta, map, layout, UI components
lib/ Server Actions, auth/session, DB, R2, validation, domain logic
migrations/ rollforward-only D1 SQL migrations
workers/ Cloudflare Worker code, Instagram webhook handling
public/ static assets
scripts/ 운영/개발 보조 스크립트
docs/ PRD, architecture, roadmap, decisions, implementation plans
"use client"를 사용합니다.lib/db/ 내부에 둡니다. 컴포넌트에서 직접 query를 작성하지 않습니다.migrations/에 새 rollforward migration으로 추가합니다.배포 절차와 release gate는 docs/deployment.md, docs/admin-operations.md, docs/phase5-launch-checklist.md를 확인하세요.
docs/PRD.mddocs/ARCHITECTURE.mddocs/DATA_MODEL.mddocs/ROADMAP.mddocs/deployment.mddocs/admin-operations.mddocs/decisions/README.mddocs/specs/2026-05-13-granite-design.md