CURRENT-STATE MOCKUP · v4f-styled · shipped functionality only
Maps to:/login · apps/web/src/pages/LoginPage.tsx.
Real flow: email + password → JWT. Forgot-password link → /reset-password.
Register link → /register. Rate limit: 10 / 15min / IP per auth/spec.md FR-005.
Not shown: marketing landing page (no spec, would be Phase D).
Status today:/ renders a stub <Placeholder title="Dashboard" />
in apps/web/src/routes.tsx:65. There is no Home page yet. This screen shows what could
realistically go here using only data already exposed by shipped endpoints —
no new contracts, no new module. If even this is too speculative, leave the route as a no-op redirect to /matches.
⬡ TIPPLATFORMA
EN ⌄
Welcome back, Martin
2 groups · 1 tournament active
Active tournaments
Ice Hockey
MS Hockey 2026
May 9–25 · 18/40 played
Team BackendFriday Crew
Your rank: 3rd in Team Backend · 31 pts
Football
UEFA Euro 2026
Starts June 12 · 0/51
Team Backend
Tipping opens June 1
Quick links
Maps to:/matches · MatchesPage.tsx + MatchCard.tsx.
Real data: GET /api/v1/groups/:gid/matches returns MatchWithPrediction[].
Per-page <select> for active group (today: persisted in localStorage as
tipplatforma_active_group_id). "See all group tips" reveal is implemented —
PredictionReveal.tsx calls GET /api/v1/groups/:gid/matches/:mid/predictions and
follows predictions/spec.md FR-008/009/010 (own always; others only after deadline).
Not shown: status tabs (All/Open/Live/Finished/Postponed — flat list today), open-matches notice banner.
⬡ TIPPLATFORMA
EN ⌄
Matches
Group: Team Backend · MS Hockey 2026
14 May · 18:00 · R5Upcoming
Slovakia
vs
Finland
Closes in 2h 14mNot predicted
14 May · 20:15 · R5Upcoming
Canada
vs
Sweden
Closes in 4h 28m · You picked: SWE 2:3Predicted
14 May · 14:00 · R5● LIVE
Russia
1 : 2
USA
🔒 Tipping closed · Your tip: RUS 2:1Predicted
12 May · 14:00 · R4Finished
Czech Rep.
3 : 1
Germany
Your tip: CZE 2:1 · scored +2Predicted
Group predictions · 12 members
Martin K. (you)CZE · 2:1+2
Peter S.CZE · 3:1+7
Jana M.CZE · 2:0+2
Tomáš R.GER · 1:20
+ 8 more
Maps to:/leaderboard · LeaderboardPage.tsx.
Real data: GET /api/v1/groups/:gid/leaderboard?rounds=A,B.
Round filter is shipped (D7 · leaderboard-per-round) — the wireframe v4f's
"Phase 2 disabled" annotation is stale. Live updates via useRealtime on
prediction_scores INSERT (debounced 500ms).
Finished-tournament CTA appears for any group whose tournament status is finished →
deep-link to /tournament/:t/group/:g/summary.
Not shown: sortable column headers, position-change arrows (↑/↓), inline expandable player history.
Maps to:/my-tips · MyTipsPage.tsx.
Real data: GET /api/v1/groups/:gid/players/:uid/scores →
{ match_id, home_team, away_team, scheduled_at, result_version, points_awarded, breakdown, own_prediction_answers }.
Today: desktop renders a flat table; mobile renders cards. Breakdown chips per component
via <ScoreBreakdown>. Not shown: grouped-by-round headers, summary stats strip
(tips/pts/acc/rank), expand-row to show group tips inline (the "see group tips" data exists in
PredictionReveal already — it just isn't reused on this page yet).
⬡ TIPPLATFORMA
EN ⌄
My Tips
Team Backend · MS Hockey 2026
Match
Date
Prediction
Pts
Breakdown
Slovakia vs Finland
14 May · 18:00
—
pending
—
Canada vs Sweden
14 May · 20:15
SWE, 2:3
pending
—
Russia vs USA
14 May · 14:00
RUS, 2:1
pending
—
Czech Rep. vs Germany
12 May · 14:00
CZE, 2:1
2
winner +2exact_score 0
Slovakia vs Latvia
12 May · 11:00
SVK, 4:2
7
winner +2exact_score +5
Finland vs USA
11 May · 19:00
FIN, 2:1
0
winner 0exact_score 0
Maps to:/profile · ProfilePage.tsx.
Editable: display_name, avatar_url (URL field, no upload yet).
Read-only: email, role. Locale switcher (SK/EN) wired to i18next per D8 i18n module.
Push prompt is shipped — EnablePushPrompt.tsx per D8 push-notifications.
Sign-out button → POST /auth/logout.
Not shown: avatar upload (URL only today), notification preferences toggles
(out-of-scope per notifications/spec.md), in-app change-password, my-groups inline list,
delete-account / danger zone (out-of-scope per admin-user-management/spec.md Non-Goals).
⬡ TIPPLATFORMA
EN ⌄
Profile
Manage your display name, avatar, language and push.
Identity
MK
Martin K.
martin.k@company.com
PLAYER
URL only today — direct upload would need a sub-spec.
Language
Interface language
SK / EN — applies to UI and email templates per D8
Enable push notificationsGet a push when a match you predicted is finalised. One toggle per device.
Maps to:/my-groups · GroupsPage.tsx.
Real data: GET /api/v1/groups → list with role: 'admin' | 'member' and member count.
Toggle inline create form via CreateGroupForm. Click → /group/:id.
Public join-by-code lives at /groups/join/:code.
⬡ TIPPLATFORMA
EN ⌄
My Groups
Closed groups you belong to.
Team Backend
12 members · MS Hockey 2026
Admin
Friday Crew
7 members · MS Hockey 2026
Member
Maps to:/group/:id · GroupManagePage.tsx.
Real data: GET /api/v1/groups/:id + /members. Members table with last-admin
protection. Right rail: InvitePanel (code + URL + copy + regenerate — no email-direct
send form yet, FR-004 gap) and ExportButton (CSV).
Bottom: PredictionCoverage shows predicted/total per match (not a member×match matrix yet —
composable client-side from existing data per FR-007).
Email-direct send form (FR-004) is specced but not built yet.
Export
Download CSV of group standings + per-match points.
Maps to:/admin · AdminDashboard.tsx.
Real data: two cards only — active tournaments (GET /tournaments?status=active) and
missing results (GET /admin/matches/missing-results, polled every 60s).
Not shown: live-now / tips-today / users-count / groups-count cards (no aggregation endpoints yet),
Live & next-up table, Pending scores table, Quick-actions card, Recent-activity feed
(admin-action subset would be feasible against existing admin_audit_log; system-wide events need a new module).
Maps to:/admin/tournaments · TournamentsPage.tsx.
Real data: GET /tournaments. CRUD via inline form (name, sport, start/end dates,
optional status). Click Schedule → /admin/tournaments/:id/matches.
Status enum: draft / active / finished / archived.
Not shown: sport / status filter chips, sortable columns, matches/groups/tips counts (no aggregation today),
bulk CSV import, delete (specced as Phase 3 in fe-admin/spec.md).
⬡ TIPPLATFORMA
EN ⌄
Tournaments
3 tournaments · 1 active
3 tournaments
Name
Sport
Dates
Status
Actions
MS Hockey 2026
Ice Hockey
2026-05-09 – 2026-05-25
Active
UEFA Euro 2026
Football
2026-06-12 – 2026-07-12
Draft
NBA Finals 2025
Basketball
2025-06-01 – 2025-06-20
Archived
Maps to:/admin/tournaments/:id/matches · MatchSchedulePage.tsx.
Real data: GET /tournaments/:id/matches. Inline create form (home, away, scheduled_at,
duration, template, optional round). Per-row status select + MatchResultForm with
scores + winner-derived + finalize (no outcome capture today; would land via extra_data.outcome JSONB).
Not shown: bulk CSV import, status-filter chips, "Live" sub-tab with period breakdown
(Phase D — needs live-score-entry module).
Maps to:/admin/templates · TemplatesPage.tsx + TemplateBuilder.tsx.
Real data: GET /scoring-templates. Each template has components (winner, exact_score,
advancing_team) with point values + required + sort_order. in_use flag prevents delete
when bound to an active tournament.
⬡ TIPPLATFORMA
EN ⌄
Scoring templates
Define how points are awarded per tournament
Hockey Standard 2026 In use
Used by: MS Hockey 2026
Match Winner winner
Correct winning team · required
2
pts
Exact Score exact_score
Both scores correct
5
pts
Advancing Team advancing_team
KO rounds only
4
pts
Football Standard
Used by: UEFA Euro 2026 (draft)
winner 2 · exact_score 5 · advancing_team 3
Maps to:/admin/users · UsersListPage.tsx.
Fully shipped under D7 (admin-user-management, 9/9). The wireframe v4f's
"Phase 2 read-only" annotation is stale.
Real data: GET /admin/users (paginated, searchable, filterable by role / active).
Actions: promote / demote / deactivate / activate (with last-admin + self-action protection).
All writes audit-logged in admin_audit_log · readable via GET /admin/audit-log.
Click row → /admin/users/:id.
⬡ TIPPLATFORMA
EN ⌄
Users
Search, role change, deactivate · all changes audited
AllPlayerSystem adminAllActiveInactive42 users
Name
Email
Role
Active
Joined
Actions
Martin K.
martin.k@company.com
Player
Active
2026-03-12
admin
admin@tipplatforma.com
System admin
Active
2026-01-01
Last admin · cannot demote
Jana M.
jana.m@company.com
Player
Inactive
2026-03-04
Maps to:/tournament/:tournamentId/group/:groupId/summary · TournamentSummaryPage.tsx.
Shipped under D8 tournament-summary (8/8).
Lazy-loaded chunk (framer-motion stays out of the main bundle). Triggered when a tournament's last match
has result_version = 1, is_final = true. Per-group permalink, animated top-3 reveal.