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.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
A modern platform to organize and manage amateur 7-a-side football leagues. It lets teams register, schedules matches automatically, shows results and stats, and includes tools for league admins. Built as a real-world style project to practice and showcase web development skills.
翻訳待ち
Loading the full README.
Read the full README ↗Aalto Football is a web app for pick-up football in Bergen, Norway. Hosts create matches (pitch, time, format, level and spots) and players find them and join. Think Playtomic, but for 5-, 7-, 9- and 11-a-side football.
The site is in English by default, with Norwegian (bokmål) available through the language switcher. It can be installed on a phone's home screen as a PWA.
Status: in development. Players can sign up, find matches, join or leave (with a waitlist), and hosts can create, edit, cancel and share matches. Online payments are disabled for now (see Roadmap).
/privacy, /terms)/admin, admins only): community stats, website traffic (Vercel Web Analytics), choose who else is admin, manage the pitchesapps/websupabase/.
├─ apps/web/ # Next.js app (deployed to Vercel)
│ ├─ public/ # Hero image, PWA icons, service worker (sw.js)
│ └─ src/
│ ├─ app/[lang]/ # Localised routes: /en/… and /nb/…
│ ├─ app/manifest.ts # PWA manifest
│ ├─ components/ # Header, Footer, MatchCard, LanguageSwitcher…
│ ├─ i18n/ # Language config and dictionaries (en, nb)
│ ├─ lib/supabase/ # Supabase clients and database types
│ └─ proxy.ts # Redirects / to /en or /nb (cookie, then browser language)
├─ supabase/
│ ├─ migrations/ # Schema, RLS policies, join/leave functions
│ ├─ seed.sql # Bergen sample data (users, pitches, matches)
│ └─ tests/ # Local Supabase stub + RLS tests
└─ docs/ # Brand guide
Requirements: Node.js 20+ and, for a local database, Docker.
git clone https://github.com/agustinsoares/futbol-7.git
cd futbol-7
# Local Supabase (Postgres + Auth + API) with the migrations and Bergen seed data
npx supabase start # prints the local API URL and publishable key
cd apps/web
cp ../../.env.example .env.local # paste the local URL and publishable key
npm install
npm run dev # http://localhost:3000
Seed users get a random password. To log in locally, set one:
psql postgresql://postgres:[email protected]:54322/postgres \
-c "update auth.users set encrypted_password = extensions.crypt('local-pass-123', extensions.gen_salt('bf')) where email like '%@aaltofootball.test'"
Without Supabase variables the site still runs and shows sample matches.
Useful commands (from apps/web):
npm run lint # ESLint
npm run typecheck # TypeScript
npm run format # Prettier
npm test # unit tests (Vitest)
npm run build # production build
npm run test:e2e # end-to-end tests (Playwright) against a running app + local Supabase
CI runs all of the above, plus the migrations against Postgres and the end-to-end suite against a local Supabase.
Project: yqtxllyhmmwgvvirlput (organisation Aalto Football). Migrations and sample data are already applied.
To set up a new project:
supabase/migrations/ in order (SQL editor or supabase db push).supabase/seed.sql for Bergen sample data. It creates [email protected] (admin),
[email protected] (regular user) and 20 more players, 7 pitches and 12 matches.
Users get a random password: set one from Authentication → Users to log in with them.apps/web/.env.production (public values) and in .env.local for development.Security model:
This is the beginning of the README. Read the rest at the original. Read the full README ↗