尚未检测到更新。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