DownVid
1000개 이상의 사이트를 지원하고, 인터페이스가 간결하며 macOS·Windows·Linux에서 모두 사용 가능
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A small, web-based React app for managing Christian song sheets.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗GraceChords is a worship songbook platform for churches and worship teams. It manages a ChordPro song catalog with fast search, key transposition, setlist and songbook building, PDF/PPTX export, a full-screen worship mode, and daily Bible readings.
New here? Jump to the app you're working on: web or mobile. This root README is the map; each app's README is the manual.
This is an npm-workspaces monorepo. Platform-agnostic logic is factored into shared packages so the web and native apps can consume the same parser, transposition, RBAC, and Supabase wiring.
GraceChords/
├── apps/
│ ├── web/ @gracechords/web — React + Vite SPA (production site)
│ ├── mobile/ @gracechords/mobile — Expo / React Native app (iOS + Android)
│ └── studio/ macOS SwiftUI app (not an npm workspace)
├── packages/
│ ├── core/ @gracechords/core — shared, DOM-free logic (ChordPro parser,
│ │ transposition, RBAC, setlist codec, Supabase factory)
│ └── tokens/ @gracechords/tokens — design tokens (web CSS + native TS map + generated Swift)
├── workers/ Cloudflare Workers (PPTX upload, sitemap rebuild, Telegram bot, session cleanup)
└── supabase/ SQL migrations (songs, users, posts, setlists, …)
| Workspace | Package | What it is |
|---|---|---|
apps/web | @gracechords/web | The production single-page app: full song catalog, setlists, worship mode, admin/editor portals, Daily Word, posts. Deployed to Cloudflare Pages. |
apps/mobile | @gracechords/mobile | Native iOS and Android client (Expo SDK 55, Expo Router v7). A themed five-tab shell (Home · Songs · Setlists · Daily Word · Utilities) with a real chord-chart Song Viewer, Performer mode, the setlist builder (with import), a song editor, live sessions, the Daily Word landing + reader (M'Cheyne reading, devotionals, private journal reflections, an opt-in reading streak, offline Bible downloads), musician utilities (tuner, metronome, pitch pipe, songbook, capo, key reference), Setlist Stats, and native Google/Apple auth. |
apps/studio | — | Native macOS SwiftUI companion app for song creation and content management. Not an npm workspace; reuses packages/core through JavaScriptCore. |
packages/core | @gracechords/core | Pure TypeScript/JS shared by both apps — ChordPro parser (not the renderer), transposition, chord placement, song metadata/sort, the setlist codec, the role hierarchy, and the Supabase client factory. Consumed as source, no build step. |
packages/tokens | @gracechords/tokens | The single home for design tokens. Web imports tokens.css; native imports the typed map from @gracechords/tokens/native; apps/studio uses a committed Swift mirror generated from it (npm run tokens:swift). |
workers/* | — | Cloudflare Workers deployed independently: authenticated PPTX upload/delete, weekly sitemap rebuild, the @gracechords_bot Telegram bot, and live-session cleanup. |
Use Node.js 20 LTS (20.19+, Vite 7's minimum). Install all workspaces from the repo root:
npm ci
Then run the app you want:
npm run dev # web dev server → http://localhost:5173
npm test # web test suite (Vitest)
npm run build # production web build → apps/web/dist/
The root package.json delegates these scripts to @gracechords/web. For the
full web setup (environment variables, Supabase, deployment) see
apps/web/README.md. For the mobile app (Expo, simulator,
env) see apps/mobile/README.md.
| Service | Role |
|---|---|
| Supabase | Auth + Postgres — song catalog, users/roles, posts, starred songs, setlists, live sessions, reflections. Row-level security on every table. |
| Cloudflare Pages | Hosts the web SPA. Builds from the apps/web root directory to apps/web/dist/ on every push to main. |
| Cloudflare Pages Functions | Server-side code at apps/web/functions/: same-origin R2 proxies (bible/, pptx/) that avoid CORS, plus api/ endpoints (export, Telegram, bot, crash reports). |
Cloudflare R2 (gracechords-bible) | Stores PPTX slide decks (pptx/) and Bible chapter JSON (bible/). |
| Cloudflare Workers | gracechords-pptx-upload (authenticated PPTX writes), gracechords-sitemap-rebuild (weekly cron), gracechords-telegram-bot, gracechords-session-cleanup (15-min cron). |
| Cloudinary | Browser-side image hosting for song/post cover images. |
| Resend | Transactional email (server-side only). |
Full details live in the wiki's Cloudflare Infrastructure
page and in apps/web/AGENTS.md.
GraceChords uses four roles: user → editor → admin → owner.
The hierarchy is defined once in packages/core/src/rbac/roles.js and enforced
via hasMinRole(). See Roles & Access for the
permission matrix and the admin/editor portals.
Current focus and planned work:
apps/mobile/RELEASING.md); next up is offline song/setlist persistence.has_stems / stem_slug / gracetracks_url) across web and mobile.@gracechords/core as the mobile app needs it, keeping web and native in lockstep.AGENTS.md is the root guide.
It routes to per-app docs — apps/web/AGENTS.md and
apps/mobile/AGENTS.md — for platform-specific rules.CODE_OF_CONDUCT.md.SECURITY.md.MONOREPO_MIGRATION.md (historical record of the workspaces cutover and Cloudflare settings).Licensed under the terms in LICENSE. See NOTICE for
attribution.