BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
마랑가에서 축구·크리켓·배드민턴·피클볼 코트를 실시간 확인하고 즉시 예약
Book football and box cricket turfs and badminton and pickleball courts in Mangalore. See live slot availability and prices and book in seconds. Kodialbail, Kankanady, Ullal and more.
스포츠·피트니스TypeScript · CSSGitHub @devcnisham온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Turf booking platform: public booking site, partner dashboard and admin console. Next.js + Supabase.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Turf booking platform: public booking site, partner (turf owner) dashboard and admin console. Next.js App Router with a Supabase Postgres backend.
Stack: Next.js 16 (App Router), React 19, Supabase Postgres, Clerk, Vercel. Tests: Vitest, SQL tests on Postgres, Playwright.
Needs Node 20.9+.
npm install
npm run dev # http://localhost:3000
That's all: with no .env.local the app stores data in .data/db.json (starting with the launch turfs) and uses a built-in dev login secret. To open /admin or /partner locally, set ADMIN_EMAIL/ADMIN_PASSWORD and PARTNER_EMAIL/PARTNER_PASSWORD in .env.local. npm run dev first runs a quick check and tells you if anything is missing.
npm run dev:lan, then open http://<your-computer-IP>:3000 on the same Wi-Fi..env.example to .env.local, fill in NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SECRET_KEY, and run supabase/migrations/20261006000000_oyun_store.sql in the Supabase SQL editor. If the tables are missing, dev falls back to the local file and prints how to fix it.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY together (the publishable key alone turns Clerk on, and server auth then fails without the secret). With no publishable key players use a device name-and-phone fallback..data/.npm install, delete .next/, restart.| Command | What it does |
|---|---|
npm run dev / npm run dev:lan | Dev server (LAN variant for testing on a phone) |
npm run typecheck / npm run lint | Type-check and lint (CI allows zero warnings) |
npm test | Unit tests (Vitest) |
npm run test:sql | Database function and race tests (needs Postgres) |
npm run test:e2e | Playwright end-to-end tests |
npm run build | Production build |
CI runs these on every pull request, plus npm audit. Dependabot opens dependency updates weekly (TypeScript and ESLint majors are skipped until the toolchain supports them).
Add every variable from .env.example in the Vercel project settings, apply the migration to the Supabase project once, then deploy.
See docs/GO-LIVE.md for the steps to take the site live, and docs/LAUNCH-SEO.md for Search Console, analytics, error alerts and the backlink plan.
src/modules/shared/database/store.ts is the only module that talks to storage. Pages call await getDb(); server actions call await mutate(db => ...), which reloads the latest data, runs the change and writes only the rows that changed in one transaction (apply_changes). If another write landed in between, it retries on fresh data. Postgres enforces one live booking per turf slot, so two people can never book the same hour.
All tables have row-level security on with no policies: only the server, using the secret key, can read or write them.