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.
Three padel courts on Jl. Kemang Raya. Book and pay in about 60 seconds, as a guest.
Translation pending
Sports & fitnessTypeScript · CSSGitHub @yosrendOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Padel court booking website. Pick a day and time, see live courts, hold one for 15 min, pay a deposit or in full, get a QR ticket and check in at the venue. Unpaid holds free themselves and go to the waitlist. The front desk runs tonight from one dashboard, the owner tracks revenue, court use, prices and staff.
Taken from the repository README
Loading the full README.
Read the full README ↗Book a padel court in 60 seconds, without a WhatsApp chat.
A booking web app for a three-court padel venue in Kemang, South Jakarta. Players book and pay. The front desk and the owner run the day from one dashboard.
Features · Screens · How it works · Quick start · Docs
Padelion is a booking web app for a three-court padel venue in Kemang, South Jakarta. Players see live availability, hold a court for 15 minutes, pay a deposit or the full amount and get a ticket with a check-in QR. The front desk and the owner run the day from one dashboard.
Most padel venues in Jakarta still take bookings over WhatsApp. A player asks what is free, waits for a reply, sends a transfer screenshot and waits again. Unpaid holds block prime slots, rain on the outdoor court means a round of calls, and the desk chases balances by hand.
Players (no account)
Front desk
Owner
Automatic
| Book your court | Held for you, 15 minutes |
|---|---|
| Your ticket | Check-in at the venue |
| Owner, this week | Payments to check |
|---|---|
| Booking detail | Prices and staff |
More in the screen gallery.
flowchart LR
P[Player] -->|pick a time| H[Hold 15 min]
H -->|pay deposit or full| T[Ticket + QR]
H -->|time runs out| X[Released]
X -->|next in line| W[Waitlist offer]
T -->|scan at the venue| C[Checked in]
T -.->|balance, reschedule| T
D[Front desk] -->|timeline, payments, rain mode| DB[(Supabase)]
O[Owner] -->|week, prices, staff| DB
H --- DB
J[pg_cron every minute] -->|release holds, offers, reminders| DB
stateDiagram-v2
[*] --> hold: create_hold
hold --> deposit_paid: pay 50%
hold --> paid: pay in full
hold --> expired: 15 min pass
deposit_paid --> paid: pay balance
deposit_paid --> cancelled
paid --> played: checked in
paid --> no_show
expired --> [*]
played --> [*]
| Layer | Choice |
|---|---|
| App | TanStack Start, TanStack Router and Query, React 19, TypeScript, Vite |
| Data | Supabase: Postgres, row level security, Auth, Realtime, pg_cron |
| Styling | A custom CSS design system in src/design-system/padelion (no Tailwind) |
| Motion and 3D | GSAP ScrollTrigger, three.js with React Three Fiber and drei |
| Other | qrcode, jsQR, canvas-confetti, Recharts, date-fns, zod, Heroicons |
| Hosting | Vercel through the Nitro plugin (any host that runs TanStack Start works) |
src/
routes/ pages (player) and _staff/ (desk, owner)
components/ landing, player, staff
design-system/ Padelion tokens and base components
integrations/ Supabase clients and types
lib/ booking helpers, queries, formatting
supabase/migrations/ schema, RPCs, policies, scheduled jobs
docs/ product, architecture, database, design
bun install
cp .env.example .env # fill in your Supabase project
bun run dev
Then apply the database migrations in supabase/migrations to your Supabase project. Full steps in docs/setup-and-deployment.md.
bun run lint # ESLint
bun run typecheck # TypeScript
bun run test # unit tests for pricing, peak hours, overlaps and phone numbers
bun run build # production build
All four run on every push through GitHub Actions.
| Role | Password | |
|---|---|---|
| Front desk (Dewi) | [email protected] | Padelion2026 |
| Owner (Hendra Wijaya) | [email protected] | Padelion2026 |
These accounts are created by the app on first sign-in and only reach demo data. Change them before running a real venue. Open /demo for a five step tour.
| Doc | What is inside |
|---|---|
| Screens | Every page, player and venue |
| Product | Problem, users, flows, booking rules, scope |
| Architecture | How the app, database and jobs fit together |
| Routes | Every page, who uses it and what it does |
| Database | Tables, functions, access rules and scheduled jobs |
| Design system | Tokens, type, components, motion and copy rules |
| Setup and deployment | Local setup, environment, Supabase and hosting |
| Roadmap | Done and next |
This is a working demo. Payments use a sandbox and WhatsApp messages are written to a notifications table instead of being sent. See the roadmap for the production steps.
Designed and built by Yosep Rendi, product designer at Morae Studio.
MIT © 2026 Yosep Rendi