PRIME FC Mini League
PRIME FC Mini 4-a-side League 2026 — fixtures, results and live table.
Translation pending
Create, animate, and share tactical patterns of play for soccer.
Sports & fitnessTypeScript · PLpgSQLGitHub @stefsantyOnlineOwner 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
Interactive soccer play builder and animator
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗An interactive web tool to create, animate, and share tactical soccer patterns of play — an animated whiteboard for coaches. Drag players on an SVG pitch, draw passes and runs, add step-by-step narration, preview the animation at 60fps, then save and share a link.
requestAnimationFrame loop.npm install
cp .env.local.example .env.local # fill in your Supabase project values
npm run dev # http://localhost:3000
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Your Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Your Supabase anon (public) key |
The app works without a database — the editor runs and a banner reads "Database not configured — plays won't be saved." Saving is disabled until you configure Supabase:
supabase/migrations/001_initial.sql, then supabase/migrations/002_mvp_open_access.sql (MVP has no auth, so 002 opens read/write to the anon key; tighten it when sign-in lands)..env.local (locally) and the Vercel project's Environment Variables (then redeploy — NEXT_PUBLIC_* values are inlined at build time):
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYAPI: GET/POST /api/plays, GET/PUT/DELETE /api/plays/:id (503 when the database isn't configured).
npm run dev # dev server
npm run build # production build
npm run typecheck # tsc --noEmit
npm run test # vitest run
npm run test:watch # vitest watch mode
npm run lint # eslint
src/
app/ # App Router pages
page.tsx # home
library/ # browse public plays
play/[id]/ # public play viewer
editor/ # play editor (auth required), editor/[id] edits existing
api/plays/ # REST API: list/create + get/update/delete
components/
editor/ # PitchEditor, StepSequencer, NarrativePanel, toolbars…
viewer/ # AnimatedPitch (animation engine), PlayControls, StepNarrative
library/ # PlayCard, PlayGrid, PlayFilters
layout/ # Header, AuthButton
ui/ # shadcn/ui components
lib/
engine/ # physics (trapezoid easing, tweens), simulator, pitch coords
store/ # Zustand stores (editorStore, playStore)
supabase/ # browser/server clients + session middleware
types/ # Play data model + editor types
api/ # typed client helpers for /api/plays
middleware.ts # Supabase auth middleware (gates /editor)
supabase/
migrations/ # SQL migrations
Pitch coordinates are in meters: x = 0..68, y = 0..105 (y=0 is our goal line). The reference half-pitch view maps x=16..68, y=22..105 onto a 580×890 SVG viewBox at 10px/m via the X() / Y() helpers in src/lib/engine/pitch.ts.