From ecfa2d3985517b060a005528ca43003148d34cd2 Mon Sep 17 00:00:00 2001 From: ayoubl96 Date: Sat, 31 Jan 2026 13:49:56 +0100 Subject: [PATCH] update --- .DS_Store | Bin 0 -> 24580 bytes keys/59b094fe-d609-45fd-a843-34642be4fbe0.pem | 52 + README.md => playtomic-wrapper/README.md | 0 tools/.DS_Store | Bin 0 -> 6148 bytes tournme/.DS_Store | Bin 0 -> 18436 bytes tournme/collection/.DS_Store | Bin 0 -> 8196 bytes tournme/collection/PadelTour API/.DS_Store | Bin 0 -> 10244 bytes .../PadelTour API/Authentication/Login.bru | 30 + .../Authentication/Refresh Token.bru | 17 + .../PadelTour API/Authentication/folder.bru | 3 + .../Companies/Change Password.bru | 19 + .../Companies/Create Company Admin.bru | 20 + .../Companies/Get All Companies.bru | 11 + .../Companies/Get Company By Login.bru | 15 + .../Companies/Get Current Company.bru | 15 + .../Companies/Update Current Company.bru | 21 + .../PadelTour API/Companies/folder.bru | 11 + .../PadelTour API/Courts/Create Court.bru | 18 + .../PadelTour API/Courts/Delete Court.bru | 15 + .../PadelTour API/Courts/Get All Courts.bru | 15 + .../PadelTour API/Courts/Get Court By Id.bru | 15 + .../PadelTour API/Courts/Update Court.bru | 23 + .../PadelTour API/Courts/Upload Image.bru | 19 + .../Check reset token status.bru | 15 + .../Complete password reset.bru | 18 + .../Initiate password reset.bru | 17 + .../Password Reset/Verify reset code.bru | 18 + .../Players/Create Player From Playtomic.bru | 18 + .../PadelTour API/Players/Create Player.bru | 20 + .../Players/Delete Player Association.bru | 15 + .../Players/Get Player By Id.bru | 15 + .../PadelTour API/Players/Get Players.bru | 15 + .../Players/Get Playtomic Players.bru | 15 + .../Players/Get Tournament Id.bru | 15 + .../PadelTour API/Players/Update Player.bru | 30 + .../Initiate company registration.bru | 22 + .../Registration/Resend verification code.bru | 17 + .../Test Loops API connection.bru | 11 + ...Verify email and complete registration.bru | 18 + tournme/collection/PadelTour API/Root.bru | 11 + .../Add Couple To Group.bru | 22 + .../Assign Couples To Groups.bru | 19 + .../Auto Schedule Matches.bru | 21 + .../Calculate Stage Match Order.bru | 19 + .../Calculate Tournament Match Order.bru | 19 + .../Create Tournament Bracket.bru | 22 + .../Create Tournament Group.bru | 22 + .../Create Tournament Stage.bru | 25 + .../Delete Tournament Bracket.bru | 15 + .../Delete Tournament Group.bru | 15 + .../Delete Tournament Stage.bru | 15 + .../Generate Bracket Matches.bru | 15 + .../Generate Group Matches.bru | 15 + .../Generate Stage Matches.bru | 15 + .../Tournament Staging/Get Bracket By Id.bru | 15 + .../Get Bracket Matches.bru | 15 + .../Tournament Staging/Get Couple Stats.bru | 20 + .../Get Court Availability.bru | 19 + .../Tournament Staging/Get Group By Id.bru | 15 + .../Tournament Staging/Get Group Couples.bru | 15 + .../Tournament Staging/Get Group Matches.bru | 15 + .../Get Group Standings With Stats.bru | 15 + .../Tournament Staging/Get Match By Id.bru | 15 + .../Tournament Staging/Get Stage Brackets.bru | 15 + .../Tournament Staging/Get Stage By Id.bru | 15 + .../Tournament Staging/Get Stage Groups.bru | 15 + .../Tournament Staging/Get Stage Matches.bru | 15 + .../Get Tournament Match Order Info.bru | 15 + .../Get Tournament Matches.bru | 15 + .../Get Tournament Stages.bru | 15 + .../Get Tournament Standings.bru | 19 + .../Get Tournament Stats.bru | 19 + .../Initialize Missing Couple Stats.bru | 19 + .../Recalculate Tournament Stats.bru | 19 + .../Remove Couple From Group.bru | 16 + .../Tournament Staging/Schedule Match.bru | 23 + .../Tournament Staging/Unschedule Match.bru | 15 + .../Tournament Staging/Update Match.bru | 37 + .../Update Tournament Bracket.bru | 21 + .../Update Tournament Group.bru | 21 + .../Update Tournament Stage.bru | 24 + .../Tournaments/Add Court To Tournament.bru | 23 + .../Tournaments/Add Player To Tournament.bru | 22 + .../Tournaments/Create Tournament Couple.bru | 23 + .../Tournaments/Create Tournament.bru | 23 + .../Delete Player From Tournament.bru | 16 + .../Tournaments/Delete Tournament Couple.bru | 16 + .../Tournaments/Get All Tournaments.bru | 11 + .../Tournaments/Get Tournament By Id.bru | 15 + .../Tournaments/Get Tournament Couples.bru | 15 + .../Tournaments/Get Tournament Courts.bru | 15 + .../Tournaments/Get Tournament Players.bru | 15 + .../Remove Court From Tournament.bru | 16 + .../Tournaments/Update Tournament Couple.bru | 25 + .../Tournaments/Update Tournament Court.bru | 23 + .../Tournaments/Update Tournament.bru | 27 + tournme/collection/PadelTour API/bruno.json | 9 + .../collection/PadelTour API/collection.bru | 7 + .../PadelTour API/environments/Dev.bru | 7 + .../PadelTour API/environments/PROD.bru | 7 + tournme/docs/FEATURES.md | 65 + tournme/email/.DS_Store | Bin 0 -> 12292 bytes tournme/email/1_password_recovery/.DS_Store | Bin 0 -> 6148 bytes tournme/email/1_password_recovery/index.mjml | 199 +++ tournme/email/2_welcome_email/.DS_Store | Bin 0 -> 6148 bytes tournme/email/2_welcome_email/index.mjml | 201 +++ tournme/email/3_email_verification/.DS_Store | Bin 0 -> 6148 bytes tournme/email/3_email_verification/index.mjml | 184 +++ tournme/new/.DS_Store | Bin 0 -> 16388 bytes tournme/new/Design Tourn.me UI_UX/.DS_Store | Bin 0 -> 10244 bytes .../new/Design Tourn.me UI_UX/ATTRIBUTIONS.md | 3 + tournme/new/Design Tourn.me UI_UX/README.md | 11 + .../guidelines/Guidelines.md | 61 + tournme/new/Design Tourn.me UI_UX/index.html | 15 + .../new/Design Tourn.me UI_UX/package.json | 88 ++ .../Design Tourn.me UI_UX/postcss.config.mjs | 15 + .../new/Design Tourn.me UI_UX/src/.DS_Store | Bin 0 -> 10244 bytes .../Design Tourn.me UI_UX/src/app/.DS_Store | Bin 0 -> 8196 bytes .../new/Design Tourn.me UI_UX/src/app/App.tsx | 61 + .../src/app/components/.DS_Store | Bin 0 -> 6148 bytes .../src/app/components/DesignSummary.tsx | 337 +++++ .../src/app/components/DesignSystem.tsx | 1194 +++++++++++++++++ .../components/figma/ImageWithFallback.tsx | 27 + .../app/components/pages/DashboardPage.tsx | 328 +++++ .../src/app/components/pages/LandingPage.tsx | 257 ++++ .../src/app/components/pages/LoginPage.tsx | 70 + .../components/pages/PublicTournamentView.tsx | 291 ++++ .../src/app/components/pages/RegisterPage.tsx | 185 +++ .../components/pages/TournamentDetailPage.tsx | 473 +++++++ .../components/pages/TournamentListPage.tsx | 291 ++++ .../src/app/components/ui/accordion.tsx | 66 + .../src/app/components/ui/alert-dialog.tsx | 157 +++ .../src/app/components/ui/alert.tsx | 66 + .../src/app/components/ui/aspect-ratio.tsx | 11 + .../src/app/components/ui/avatar.tsx | 53 + .../src/app/components/ui/badge.tsx | 46 + .../src/app/components/ui/breadcrumb.tsx | 109 ++ .../src/app/components/ui/button.tsx | 58 + .../src/app/components/ui/calendar.tsx | 75 ++ .../src/app/components/ui/card.tsx | 92 ++ .../src/app/components/ui/carousel.tsx | 241 ++++ .../src/app/components/ui/chart.tsx | 353 +++++ .../src/app/components/ui/checkbox.tsx | 32 + .../src/app/components/ui/collapsible.tsx | 33 + .../src/app/components/ui/command.tsx | 177 +++ .../src/app/components/ui/context-menu.tsx | 252 ++++ .../src/app/components/ui/dialog.tsx | 135 ++ .../src/app/components/ui/drawer.tsx | 132 ++ .../src/app/components/ui/dropdown-menu.tsx | 257 ++++ .../src/app/components/ui/form.tsx | 168 +++ .../src/app/components/ui/hover-card.tsx | 44 + .../src/app/components/ui/input-otp.tsx | 77 ++ .../src/app/components/ui/input.tsx | 21 + .../src/app/components/ui/label.tsx | 24 + .../src/app/components/ui/menubar.tsx | 276 ++++ .../src/app/components/ui/navigation-menu.tsx | 168 +++ .../src/app/components/ui/pagination.tsx | 127 ++ .../src/app/components/ui/popover.tsx | 48 + .../src/app/components/ui/progress.tsx | 31 + .../src/app/components/ui/radio-group.tsx | 45 + .../src/app/components/ui/resizable.tsx | 56 + .../src/app/components/ui/scroll-area.tsx | 58 + .../src/app/components/ui/select.tsx | 189 +++ .../src/app/components/ui/separator.tsx | 28 + .../src/app/components/ui/sheet.tsx | 139 ++ .../src/app/components/ui/sidebar.tsx | 726 ++++++++++ .../src/app/components/ui/skeleton.tsx | 13 + .../src/app/components/ui/slider.tsx | 63 + .../src/app/components/ui/sonner.tsx | 25 + .../src/app/components/ui/switch.tsx | 31 + .../src/app/components/ui/table.tsx | 116 ++ .../src/app/components/ui/tabs.tsx | 66 + .../src/app/components/ui/textarea.tsx | 18 + .../src/app/components/ui/toggle-group.tsx | 73 + .../src/app/components/ui/toggle.tsx | 47 + .../src/app/components/ui/tooltip.tsx | 61 + .../src/app/components/ui/use-mobile.ts | 21 + .../src/app/components/ui/utils.ts | 6 + .../new/Design Tourn.me UI_UX/src/main.tsx | 7 + .../src/styles/fonts.css | 0 .../src/styles/index.css | 3 + .../src/styles/tailwind.css | 4 + .../src/styles/theme.css | 189 +++ .../new/Design Tourn.me UI_UX/vite.config.ts | 19 + tournme/new/api-collection/.DS_Store | Bin 0 -> 6148 bytes .../api-collection/Tourn.me - BBE/bruno.json | 9 + tournme/new/api-collection/openapi.json | 1 + .../new/api-collection/tournme-be/.DS_Store | Bin 0 -> 6148 bytes .../tournme-be/Authentication/Get Me.bru | 15 + .../tournme-be/Authentication/Login.bru | 18 + .../tournme-be/Authentication/Register.bru | 23 + .../tournme-be/Authentication/folder.bru | 7 + .../tournme-be/Courts/Create Court.bru | 23 + .../tournme-be/Courts/Delete Court.bru | 19 + .../tournme-be/Courts/Get Court.bru | 19 + .../tournme-be/Courts/List Courts.bru | 21 + .../tournme-be/Courts/Update Court.bru | 27 + .../tournme-be/Courts/folder.bru | 7 + .../tournme-be/Health Check.bru | 11 + .../new/api-collection/tournme-be/bruno.json | 9 + .../api-collection/tournme-be/collection.bru | 7 + .../tournme-be/environments/dev.bru | 4 + .../new/api-collection/tournme-be/test.bru | 19 + 203 files changed, 11592 insertions(+) create mode 100644 .DS_Store create mode 100644 keys/59b094fe-d609-45fd-a843-34642be4fbe0.pem rename README.md => playtomic-wrapper/README.md (100%) create mode 100644 tools/.DS_Store create mode 100644 tournme/.DS_Store create mode 100644 tournme/collection/.DS_Store create mode 100644 tournme/collection/PadelTour API/.DS_Store create mode 100644 tournme/collection/PadelTour API/Authentication/Login.bru create mode 100644 tournme/collection/PadelTour API/Authentication/Refresh Token.bru create mode 100644 tournme/collection/PadelTour API/Authentication/folder.bru create mode 100644 tournme/collection/PadelTour API/Companies/Change Password.bru create mode 100644 tournme/collection/PadelTour API/Companies/Create Company Admin.bru create mode 100644 tournme/collection/PadelTour API/Companies/Get All Companies.bru create mode 100644 tournme/collection/PadelTour API/Companies/Get Company By Login.bru create mode 100644 tournme/collection/PadelTour API/Companies/Get Current Company.bru create mode 100644 tournme/collection/PadelTour API/Companies/Update Current Company.bru create mode 100644 tournme/collection/PadelTour API/Companies/folder.bru create mode 100644 tournme/collection/PadelTour API/Courts/Create Court.bru create mode 100644 tournme/collection/PadelTour API/Courts/Delete Court.bru create mode 100644 tournme/collection/PadelTour API/Courts/Get All Courts.bru create mode 100644 tournme/collection/PadelTour API/Courts/Get Court By Id.bru create mode 100644 tournme/collection/PadelTour API/Courts/Update Court.bru create mode 100644 tournme/collection/PadelTour API/Courts/Upload Image.bru create mode 100644 tournme/collection/PadelTour API/Password Reset/Check reset token status.bru create mode 100644 tournme/collection/PadelTour API/Password Reset/Complete password reset.bru create mode 100644 tournme/collection/PadelTour API/Password Reset/Initiate password reset.bru create mode 100644 tournme/collection/PadelTour API/Password Reset/Verify reset code.bru create mode 100644 tournme/collection/PadelTour API/Players/Create Player From Playtomic.bru create mode 100644 tournme/collection/PadelTour API/Players/Create Player.bru create mode 100644 tournme/collection/PadelTour API/Players/Delete Player Association.bru create mode 100644 tournme/collection/PadelTour API/Players/Get Player By Id.bru create mode 100644 tournme/collection/PadelTour API/Players/Get Players.bru create mode 100644 tournme/collection/PadelTour API/Players/Get Playtomic Players.bru create mode 100644 tournme/collection/PadelTour API/Players/Get Tournament Id.bru create mode 100644 tournme/collection/PadelTour API/Players/Update Player.bru create mode 100644 tournme/collection/PadelTour API/Registration/Initiate company registration.bru create mode 100644 tournme/collection/PadelTour API/Registration/Resend verification code.bru create mode 100644 tournme/collection/PadelTour API/Registration/Test Loops API connection.bru create mode 100644 tournme/collection/PadelTour API/Registration/Verify email and complete registration.bru create mode 100644 tournme/collection/PadelTour API/Root.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Add Couple To Group.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Assign Couples To Groups.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Auto Schedule Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Calculate Stage Match Order.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Calculate Tournament Match Order.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Create Tournament Bracket.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Create Tournament Group.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Create Tournament Stage.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Bracket.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Group.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Stage.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Generate Bracket Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Generate Group Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Generate Stage Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Bracket By Id.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Bracket Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Couple Stats.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Court Availability.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Group By Id.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Group Couples.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Group Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Group Standings With Stats.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Match By Id.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Stage Brackets.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Stage By Id.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Stage Groups.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Stage Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Tournament Match Order Info.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Tournament Matches.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stages.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Tournament Standings.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stats.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Initialize Missing Couple Stats.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Recalculate Tournament Stats.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Remove Couple From Group.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Schedule Match.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Unschedule Match.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Update Match.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Update Tournament Bracket.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Update Tournament Group.bru create mode 100644 tournme/collection/PadelTour API/Tournament Staging/Update Tournament Stage.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Add Court To Tournament.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Add Player To Tournament.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Create Tournament Couple.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Create Tournament.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Delete Player From Tournament.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Delete Tournament Couple.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Get All Tournaments.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Get Tournament By Id.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Get Tournament Couples.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Get Tournament Courts.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Get Tournament Players.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Remove Court From Tournament.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Update Tournament Couple.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Update Tournament Court.bru create mode 100644 tournme/collection/PadelTour API/Tournaments/Update Tournament.bru create mode 100644 tournme/collection/PadelTour API/bruno.json create mode 100644 tournme/collection/PadelTour API/collection.bru create mode 100644 tournme/collection/PadelTour API/environments/Dev.bru create mode 100644 tournme/collection/PadelTour API/environments/PROD.bru create mode 100644 tournme/docs/FEATURES.md create mode 100644 tournme/email/.DS_Store create mode 100644 tournme/email/1_password_recovery/.DS_Store create mode 100644 tournme/email/1_password_recovery/index.mjml create mode 100644 tournme/email/2_welcome_email/.DS_Store create mode 100644 tournme/email/2_welcome_email/index.mjml create mode 100644 tournme/email/3_email_verification/.DS_Store create mode 100644 tournme/email/3_email_verification/index.mjml create mode 100644 tournme/new/.DS_Store create mode 100644 tournme/new/Design Tourn.me UI_UX/.DS_Store create mode 100644 tournme/new/Design Tourn.me UI_UX/ATTRIBUTIONS.md create mode 100644 tournme/new/Design Tourn.me UI_UX/README.md create mode 100644 tournme/new/Design Tourn.me UI_UX/guidelines/Guidelines.md create mode 100644 tournme/new/Design Tourn.me UI_UX/index.html create mode 100644 tournme/new/Design Tourn.me UI_UX/package.json create mode 100644 tournme/new/Design Tourn.me UI_UX/postcss.config.mjs create mode 100644 tournme/new/Design Tourn.me UI_UX/src/.DS_Store create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/.DS_Store create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/App.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/.DS_Store create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSummary.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSystem.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/figma/ImageWithFallback.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/DashboardPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LandingPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LoginPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/PublicTournamentView.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/RegisterPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentDetailPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentListPage.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/accordion.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert-dialog.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/aspect-ratio.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/avatar.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/badge.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/breadcrumb.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/button.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/calendar.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/card.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/carousel.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/chart.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/checkbox.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/collapsible.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/command.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/context-menu.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/dialog.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/drawer.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/dropdown-menu.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/form.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/hover-card.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/input-otp.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/input.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/label.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/menubar.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/navigation-menu.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/pagination.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/popover.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/progress.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/radio-group.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/resizable.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/scroll-area.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/select.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/separator.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/sheet.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/sidebar.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/skeleton.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/slider.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/sonner.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/switch.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/table.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/tabs.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/textarea.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/toggle-group.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/toggle.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/tooltip.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/use-mobile.ts create mode 100644 tournme/new/Design Tourn.me UI_UX/src/app/components/ui/utils.ts create mode 100644 tournme/new/Design Tourn.me UI_UX/src/main.tsx create mode 100644 tournme/new/Design Tourn.me UI_UX/src/styles/fonts.css create mode 100644 tournme/new/Design Tourn.me UI_UX/src/styles/index.css create mode 100644 tournme/new/Design Tourn.me UI_UX/src/styles/tailwind.css create mode 100644 tournme/new/Design Tourn.me UI_UX/src/styles/theme.css create mode 100644 tournme/new/Design Tourn.me UI_UX/vite.config.ts create mode 100644 tournme/new/api-collection/.DS_Store create mode 100644 tournme/new/api-collection/Tourn.me - BBE/bruno.json create mode 100644 tournme/new/api-collection/openapi.json create mode 100644 tournme/new/api-collection/tournme-be/.DS_Store create mode 100644 tournme/new/api-collection/tournme-be/Authentication/Get Me.bru create mode 100644 tournme/new/api-collection/tournme-be/Authentication/Login.bru create mode 100644 tournme/new/api-collection/tournme-be/Authentication/Register.bru create mode 100644 tournme/new/api-collection/tournme-be/Authentication/folder.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/Create Court.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/Delete Court.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/Get Court.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/List Courts.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/Update Court.bru create mode 100644 tournme/new/api-collection/tournme-be/Courts/folder.bru create mode 100644 tournme/new/api-collection/tournme-be/Health Check.bru create mode 100644 tournme/new/api-collection/tournme-be/bruno.json create mode 100644 tournme/new/api-collection/tournme-be/collection.bru create mode 100644 tournme/new/api-collection/tournme-be/environments/dev.bru create mode 100644 tournme/new/api-collection/tournme-be/test.bru diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e37d8171ae271ac6c6e01145afb3623da9b7c378 GIT binary patch literal 24580 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 z zJj$=-scOz2zX>CGx9aR#n#$vmyl3Dg3~Eyb2OfGlFIM!#4KY^=Y`q zb#Cgun|I?R_N`xE0g8b)bAoou#LOv%Gey>pnL)H;hOULS*fG3`WHxRAc-Kk>MfSQ?L*77tgR{9^Fy!A$$Z!1woL7VZv}> zj9?cWn9!RlOcQ1crNSbircZ>OzA9SZz{{XlwCKd0wU>sF@NTgI$o{kBWu)@FO%CI} zF`C3yAPpv=ycZ&oXFgP+#8<--SPm;t=2tO^UkB^Ki&7tAJH|G{d6>ff8dB6QRTJ4) zVIq4sTn{(EkKiYasCFmYJx1+5Pia5FC~LTfj2c{n^^diurcV-X^a+MeonYT}DFZfr z>>K9j_P4Lme<;e`Ne9!X?=*Q8`nK8=?Kx!U7Ua*s{j+)b`8{mK=^JHN-GyxQ4)Eb( z4xA!=xV>fZ^u4o#eqoB~0VK)BJ+o#|p%DaGXp%w;eb1~@r|lwzmv2K&Np(iI*r6#wZp_rC*L#62!xbSJ0(lzduADJkk;hn%1%yqV3b5!H8Wp!YP4NOOr({C zNwQPtM`(Lyi=9prZI@CG8HuSJ+YBTgwYCatqlvp}V>OND83M(N=m0HyPA4 zp*X$d6OdD<8BVjp#){I(kx@FihbWyK8KskrQ98L$Hb&{>6xp!Ny*#;+(pG!f<~{(U z)SYXdue#=obk}^P?wW7VU2`hk+%>->$~C_+$~D*6rhRtJ2kjFx1~AblKmNxxC4sIy z`0QW${J+ZR=l_-%o&n4*wBD>4ux8-Yn*oTgsIMr)acNK7F%OXfg>-za#TPy3b=&xv zb-_1!39V<30Y+TiYHO}uoyTI_Y4Vhnq0 zU#QOzLUPVy4Map zWdl)|IeKsk1!x#Txe(2U|B(SYyG@Aj#E#%4+&I5@GAiOs$LRkZ7g;(geg8_-*6QmU zkEE1a@-Xb{NmxeZc+`%DUug7E>nxu4qxe(Wn{*r7A9P+uY2F)}gf!`4$k)$lp6E$i zkMm??azpEop67KNJJYG(RQ{}~rY-;Vo2J@*`))S#*=ct)N$ zoWn2dEZtak+zOBMpfG`tUtF(>8|Y5Q5g>nDp7$@FpS@oloBVTZ(Z9KVMW3Xvx3X{*iZH9={K|xb2rP2T z3@`(?8CbK!2EG6LtLy*UNjzc(n1KhyfT(xEP8+x6-qwZ9(OaufzoC*)TxIcZ3U hjIs0-KSecyc10b;z+q((Ehzj)z|g=AGjOjA`~j+cbPxal literal 0 HcmV?d00001 diff --git a/tournme/.DS_Store b/tournme/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..380cf26777bf823b0133e467911b593f7be4e28e GIT binary patch literal 18436 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 B*W3UA literal 0 HcmV?d00001 diff --git a/tournme/collection/.DS_Store b/tournme/collection/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c4b0041ba76d2174912c0e9d09e02e3aacc7fee5 GIT binary patch literal 8196 zcmeHMU2GIp6h3EK;9d(dg;I*!)xiP*T4AC5|8Co*Sbi+9{RdrUcLq9PI#YILcTs|= zKKO?a@l}cXLZT1E7bBYJ6N!HT6D35W59*^a@db@9is#OqEtEoukthjsleuT^x#znx z_nYtB+q(q-Y%Lhe0O|mM(Iu=}Mb%A;=oiz@)TM z9Wf9wFrERCHq&4i=wN_3=KS75-i~a^8_wEpmZHvOhi%LA6N$^HR8&ryJcTh<#U4)& zx}~(Q`vtF6&+iqjF4wiQ<$FEbW0|FlTGQq_zHT{YJ^)yTNg?}sEyr+6t!}|Fya1b) z9gK6HQR|K#UA?kNTb4*PA8XQ%u3esJ(pEIDI(Ce+Sq)3q@5vmphaC4MIVlVm2Aa*- za-5nI%+Nl#ES+1EXE9#PYgbDdpzvq+Tm=3KildVRim#20r1o}2gEg1|nD zu)>#7X9#@fuy47J*JI{AvYeltIxGJ0g2u$kb(`9@ZtuJ_?f&U1=QC@1iw#I)mE2P`wsc{Mh5Ir@-!Nv)k-H|K#^OvYTplt<|+WUa#m%YRaB zU`#$Erp@I{eQ%#Z6WHk*Vnie8iN&<}jO`Wvw!BHTbo1Dv#RSm1Jeo}SnoE{)u6kXE zNDdOpn^!Qd8r`;@HSN%~W-Yn4_ZH=hL+8wmjQ7#^8=}d0(idxKWla6_3Gv_^y61Ne zo6hJfwX`!f;0@||v$I5EEF-ot7JMS|3&lZ_{7=~%kr0Z&DtFhg& zG*iDKjA}VWi{ww=KxP4JNG_II3Z~PLOvqM^G^4fH@a8}hY=U+efE+kbf|ub0oP^VG z2F}7c_!vHe&*2NW2w%hZ@Duz3SKv>$ihzjsVHHlr`!R;|a6T@;<+vU<;6~hxDcp&V zVJGg!9?al=)G>z^=FvkRi}*A?k1ybh_$t1Juj6Ta1JC07cn&|n^LPO-;+Oa%{)|`f zH~by1DxfGzg;J}`Ry1Y4vP8bSQckq~(YXXS%4RYXC7M?ZmlDOkS?a{Mv~PX%e@UHh zr;22$o-wm#)`JZTA6dR?{pL|gNd=ZgcfFVc{f<$6@WF#Tx>0*UR`L3HHwoN4axJZ7 znw67FogxyET@uj`@wstz5~YA_&f^Q>>SU6?Y%Yp7##M!~PBxds6I`vJoZu?U%W1N(_5Eo%1HsMNKjcafn={AM!xD`8a8>X?FRNIIBm_-9kJb*49ChhuIAmxtW zGx#hX#}jxGU%^v>hTp`uZ%}2&SXJVO6RUE_O{KyOj-7h0<;+L*pS0W#Vf;hH@Zfb@ z%;ezxCdiXwI`7!7bCBZ7nHE6qd{rTbtP|(|Ew}#t|IR-+8ZlxZV&JY}04r1JR4cvC zt=1cH*4F6SPnRenZbaGuLRD}aCmS5c$&UWRknS}K6_{jbN2DbWmH+&QfboAiNBe)Y L|C18$t^NOR6&rxG literal 0 HcmV?d00001 diff --git a/tournme/collection/PadelTour API/.DS_Store b/tournme/collection/PadelTour API/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e8c5bc75832540aa87cc0a0005b7413fcb7fadd4 GIT binary patch literal 10244 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 G|9=88-HQ(Z literal 0 HcmV?d00001 diff --git a/tournme/email/1_password_recovery/.DS_Store b/tournme/email/1_password_recovery/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + Reimposta la tua Password Tourn.me + Abbiamo ricevuto una richiesta per reimpostare la password per {DATA_VARIABLE:companyName}... + + + + + + + .code-text { + font-size: 32px !important; + font-weight: bold !important; + letter-spacing: 8px !important; + color: #f6b43c !important; + font-family: 'Courier New', monospace !important; + text-align: center !important; + } + .code-label { + font-size: 14px !important; + color: #666666 !important; + text-align: center !important; + margin-bottom: 10px !important; + } + .expiry-text { + color: #dc3545 !important; + font-weight: bold !important; + font-size: 14px !important; + text-align: center !important; + } + .step-item { + margin: 8px 0 !important; + padding-left: 20px !important; + position: relative !important; + } + .step-arrow { + color: #f6b43c !important; + font-weight: bold !important; + } + .warning-icon { + color: #856404 !important; + font-weight: bold !important; + } + @media only screen and (max-width: 600px) { + .code-text { + font-size: 24px !important; + letter-spacing: 4px !important; + } + } + + + + + + + + + + Richiesta di Reset Password + + + + + + + + Ciao {DATA_VARIABLE:companyName}, + + + Abbiamo ricevuto una richiesta per reimpostare la password del tuo account Tourn.me. Se non hai fatto questa richiesta, puoi ignorare tranquillamente questa email. + + + + + + + + + + + Il tuo codice di verifica a 6 cifre: + + + {DATA_VARIABLE:verificationCode} + + + ⏰ Scade tra {DATA_VARIABLE:expiryMinutes} minuti + + + + + + + + + + + Reimposta Password Subito + + + Clicca il pulsante sopra per il reset immediato, o usa il codice nella tua app + + + + + + + + + + + Prossimi passi + + + Apri la pagina di reset password + + + Inserisci il codice a 6 cifre: {DATA_VARIABLE:verificationCode} + + + Crea la tua nuova password + + + + + + + + + + + + + + 🔒 Avviso di Sicurezza: + + + • Questo codice scade tra {DATA_VARIABLE:expiryMinutes} minuti + + + • Usa questo codice solo se hai richiesto un reset password + + + • Non condividere mai questo codice con nessuno + + + • Se non hai fatto questa richiesta, contatta subito il supporto + + + + + + + + + + + + + + 💡 Hai problemi? + + + • Prova a copiare e incollare il codice se digitarlo non funziona + + + • Verifica che la tua connessione internet sia stabile + + + • Contatta il nostro team di supporto se i problemi persistono + + + + + + + + + + + + Questa email ti è stata inviata perché è stato richiesto un reset password per il tuo account Tourn.me. + + + © 2025 Tourn.me. Tutti i diritti riservati.
+ Questo è un messaggio automatico, non rispondere a questa email. +
+
+
+
+ diff --git a/tournme/email/2_welcome_email/.DS_Store b/tournme/email/2_welcome_email/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + Benvenuto in Tourn.me + Benvenuto {DATA_VARIABLE:companyName}! Il tuo account è stato creato con successo... + + + + + + + .info-label { + font-weight: bold !important; + color: #e5a332 !important; + font-size: 14px !important; + margin-bottom: 5px !important; + } + .info-value { + font-size: 16px !important; + color: #333333 !important; + font-family: 'Courier New', monospace !important; + background-color: #ffffff !important; + padding: 8px 12px !important; + border-radius: 4px !important; + border: 1px solid #e9ecef !important; + margin-bottom: 15px !important; + } + .step-arrow { + color: #f6b43c !important; + font-weight: bold !important; + } + .warning-icon { + color: #856404 !important; + font-weight: bold !important; + } + @media only screen and (max-width: 600px) { + .info-value { + font-size: 14px !important; + } + } + + + + + + + + + + Benvenuto in Tourn.me + + + + + + + + + Ciao {DATA_VARIABLE:companyName}, + + + Il tuo account Tourn.me è stato creato con successo! Ora puoi iniziare a organizzare e gestire i tuoi tornei in modo semplice e professionale. + + + + + + + + + + + + I tuoi dati di accesso + + + + Account ID: + + + {DATA_VARIABLE:login} + + + + Email: + + + {DATA_VARIABLE:email} + + + + + + + + + + + + Accedi Ora alla Piattaforma + + + Inizia subito a creare il tuo primo torneo + + + + + + + + + + + + Prossimi passi + + + Completa il tuo profilo aziendale + + + Crea il tuo primo torneo + + + Invita i partecipanti + + + Gestisci iscrizioni e risultati + + + + + + + + + + + + + + + 💡 Cosa puoi fare con Tourn.me + + + • Organizzare tornei di ogni tipo e dimensione + + + • Gestire classifiche e risultati in tempo reale + + + • E molto altro... + + + + + + + + + + + + + + + 🤝 Hai bisogno di aiuto? + + + • Il nostro team di supporto è qui per aiutarti + + + • Non esitare a contattarci per qualsiasi domanda + + + + + + + + + + + + + Grazie per aver scelto Tourn.me per organizzare i tuoi tornei. + + + © 2025 Tourn.me. Tutti i diritti riservati.
+ Questo è un messaggio automatico, non rispondere a questa email. +
+
+
+
+ diff --git a/tournme/email/3_email_verification/.DS_Store b/tournme/email/3_email_verification/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + Verifica il tuo indirizzo email - Tourn.me + Ciao {DATA_VARIABLE:companyName}, verifichiamo il tuo indirizzo email per completare la registrazione... + + + + + + + .code-text { + font-size: 32px !important; + font-weight: bold !important; + letter-spacing: 8px !important; + color: #f6b43c !important; + font-family: 'Courier New', monospace !important; + text-align: center !important; + } + .code-label { + font-size: 14px !important; + color: #666666 !important; + text-align: center !important; + margin-bottom: 10px !important; + } + .expiry-text { + color: #dc3545 !important; + font-weight: bold !important; + font-size: 14px !important; + text-align: center !important; + } + .step-arrow { + color: #f6b43c !important; + font-weight: bold !important; + } + .warning-icon { + color: #856404 !important; + font-weight: bold !important; + } + @media only screen and (max-width: 600px) { + .code-text { + font-size: 24px !important; + letter-spacing: 4px !important; + } + } + + + + + + + + + + Verifica il tuo indirizzo email + + + + + + + + + Ciao {DATA_VARIABLE:companyName}, + + + Per completare la registrazione del tuo account Tourn.me, abbiamo bisogno di verificare il tuo indirizzo email. Utilizza il codice qui sotto per confermare la tua email. + + + + + + + + + + + + Il tuo codice di verifica: + + + {DATA_VARIABLE:verificationCode} + + + ⏰ Scade tra {DATA_VARIABLE:expiryMinutes} minuti + + + + + + + + + + + + + + + Prossimi passi + + + Apri la pagina di verifica email + + + Inserisci il codice: {DATA_VARIABLE:verificationCode} + + + Completa la tua registrazione + + + + + + + + + + + + + + + 🔒 Informazioni importanti: + + + • Questo codice scade tra {DATA_VARIABLE:expiryMinutes} minuti + + + • Usa questo codice solo per verificare la tua email + + + • Non condividere questo codice con nessuno + + + • Se non hai richiesto questa verifica, ignora questa email + + + + + + + + + + + + + + + 💡 Hai problemi? + + + • Controlla la cartella spam se non ricevi l'email + + + • Prova a copiare e incollare il codice se digitarlo non funziona + + + • Verifica che la tua connessione internet sia stabile + + + • Se il codice è scaduto richiedilo nuovamente dalla pagina + + + + + + + + + + + + + Questa email ti è stata inviata per verificare il tuo indirizzo email durante la registrazione su Tourn.me. + + + © 2025 Tourn.me. Tutti i diritti riservati.
+ Questo è un messaggio automatico, non rispondere a questa email. +
+
+
+
+ diff --git a/tournme/new/.DS_Store b/tournme/new/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d31e92099feca28acc168aa2be3f9007d83d270e GIT binary patch literal 16388 zcmeI3du$v>8Nlb;JiKdfolRo5x$D`!#D%o!Ik|I^i=Cw9VmqX+)5i59wv&>}-t9J7 zy0`1z?wt!JVDV@RB}E`rpcat$3ur}E5QU2Vg9Lr>`~zB05ke?{L_r9o@(-dCe6zE= z*?ZW&1C-!q*V>)gnfYdSK7ZfN{AT6|Auv=@QiKc;LU=rBD2aG^n2rtK%i)iE=F)(Ec(^fk;EI?0`C7oo1s1@=iDUl-9wVM<$Cr+lxD9Pe= zwqPnFIo-^m6#rEF8<~GT{_+uwZ@{ya*u;~gQhg*x)L{9}Ck~r$(ei+$!z0u{sDV%e zp$0+?T#FiT`#?U>*I$cj2-_TLAk;t|4bbmH98Vf%+;EA7&Zh$}bofs5=@8yIFpeDH zq{ZDZo6P9Vd= z@EU3$)IhBUS~00EHP4?Qh`)Pb{`oaZ) z@9f=kXd-*RUNFp0&<0`?+|LWSj@|p$M=@5nZTh*(dTJjnDa)3#%EL?t>-Kv(_?4#v zp|wrCPMn%PIU~+xr7dM_?1_0>GY#vcTC_0CN}DWH%4ps+#)~S=pUIngsbE-HX>(rI z^Cexj)g!t-sl8vtv`tpNXzKd7X=${YxmjC%(587cS+l1svuF=Hm1QNVWT_J>)}@uz z5vXA z;x1F6wJFkbJS)GWI~qMrbB2p5UKLm1ojarAl!fmq$!@`06QVeEKbnVRxsOVw#OSmx z=Tu!%1ooW$X)!ueW_p&!+{A+&VssYmzkp4#+_c-@6^)*uk3BA1_KA7bz*l<3efBWs zowCl$MfJo2nx~t33{#zd9i~&Eql#vmUgj9KVvbgKL{XeJY>_r^ijGGoclW?0N4luv_cznKo|5t9Ja$QH~@oi5DvizjKe)J0jJ?CxHz|i>*dni0WQOhaueJPH_P6f^BnM$+Y&e6WQ^2zK&$M2T)1bJajau^ zjNU08Uo(#NdOLHa&g*Z8Q~w&c?TBxR%yvC<4LX5i`4#@+7=`0%RaW~dI^2!1F0se+ z$7(;FMwd|^ZI_r41c^8|vEkTJ9$iY}|5vvDI=MvtNd89NLR)W#t*{Mt zLJ|hxcDMuXh7)MrlQ0cuAPX|uIJIyC=HUUb-~(_0t$YbS43EMm;W79Wd>SqNNwjrp z>0g1T;A!|8d<(t}&%<}%d+>dD30{UDpzZ%0ehq(sKf#}?Ec&iWi-x~1XVC?7#Gl}v z-c$I9_*rLyyRP*IC%0EC8|>1zo^*Qlx^-4{>6Nb?-h~y ziA?5k<-U*ParIosKNVv(rkKRI`s|*Fr;>yJExWJS#vsEJa^|(wbfP!L^0VSqL=GR^ z>p*>jEH8EjS^hG`Gg|Q2!2t|`qJqcr5ufFGgn7pDk)BGHM_O=MKGG8jVvNV~k((LI z^ODR8-YWJnmZ$XKRGJj~BaDXxNpV?TJP`5VNRY-@;z6-9;scb&@{vrWii#+CIQ0%= zULBUl)a6+oTT#REk;pw0Ji>glEKes#e3Tb(V!W2+zf{5UZ@Mhs;k zZ}}|$kk9f@*0B7KR%Q9^RV;s&eHK?_`IQ~AF{U3|I}Ub*m|pDmnZDXzU8bj=>M_08 zdlQeY<1xK>^DTHg<}rP&Z#P=+a~{*j`u8Hl%O2Cm`T|TZ9y*K=Z+T2Fb_bX~HgXiJ zd1V!*Z^Gu6WBMVN>BoJhr}I{f=}n*MKj<_4#TusnY7NuBSjF^jR#|pEreD#rgKQt2 zTWC4l1KTf5m51F@F==@vim&p@08CegUHeOl&+R|L-RWYpKGqm0&-mz+sQM>qnyY&OZ zi5I-(yeqa>;Ks$pzSLlPA5J;+r_(EJ7r01UzQT5a$1t;Q^MYfC*4)rFx)Ig|#x2FbR{mA6V5Vpsqydt literal 0 HcmV?d00001 diff --git a/tournme/new/Design Tourn.me UI_UX/.DS_Store b/tournme/new/Design Tourn.me UI_UX/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e912cf8f27d682f705a75feff7da051e4e3e903c GIT binary patch literal 10244 zcmeHMZ)_Ar6rZ;(bhlmT7Fyu6(8W_hEYen?2x6}7A^$1#TKWg%*t=cZ4STy~ckhbU z>cvDOA~Bk1jQ`>{HAEstl;{@|MNp$36g3#*2h;>LCMNR5Xo7EM_MpACMiXMF*-3WZ z&igYv^V|34?aUHFpf#&E5~319M7$_fWUMAAR8FsPMF=G4fhxPYOUp^~jzP)t0tR0fFp$bCu3Z;bhwfebceM z9fs>6O)8Zhg0dm)*xOu#%DdB!mCe{*QmIO7Ryu2GzR_Y?3G*HUd6iz;bu4R}LNfuIx=%^?ZWGpEW72_ zHLZ7S+B*+deOc4LTU4SVE;mQIa~x+$*~FQvMddSm6{ejtF(mNy@yL*(g;x-bE#bG(cg;Mzv!t3x3d;}lE zC-5nJ1!v(q_#S?N3jz^9C>N@Q8exu5C#b?gAu6m8nuVCKLFf>=g&sa~p%8$5!At@o zXm~T>;$nHZU~v(SOcGe@)^FG-Z=N!Nb!H|DrRthFb5$B&E7!DKbVcsF1$P}C1kCft z#0&F$<{3p^dm01o>RNe0T_GNeTXfD11o12vByji>S zCiL24iolw3ZPU#X2BA_CG?zAG6L>>jeVc^gsFViH1u<+A)~KzGuf=XoDdOew^)uuw zIY)jaf1BXK{Xa?K z!EDB)?P-gSUYaMaCt;#4EDT|y#*dmXQUBXST?n!;HM8&2Ff~u`8G5Cs=D>$XC*$Gs z=VC!Jz9_wve#cA4B;2wWF~<~=X;F%$lBr!v`0!PF{=ate|Nm2alHuq>1VRM<76B-Y zC*rNBQrO2AYtyrK6|X&b(L(j|oH7%vs0!t?<9KY) diff --git a/tournme/new/Design Tourn.me UI_UX/index.html b/tournme/new/Design Tourn.me UI_UX/index.html new file mode 100644 index 0000000..43c2a7e --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/index.html @@ -0,0 +1,15 @@ + + + + + + + Design Tourn.me UI/UX + + + +
+ + + + \ No newline at end of file diff --git a/tournme/new/Design Tourn.me UI_UX/package.json b/tournme/new/Design Tourn.me UI_UX/package.json new file mode 100644 index 0000000..c404cfb --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/package.json @@ -0,0 +1,88 @@ +{ + "name": "@figma/my-make-file", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "dependencies": { + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", + "@mui/icons-material": "7.3.5", + "@mui/material": "7.3.5", + "@popperjs/core": "2.11.8", + "@radix-ui/react-accordion": "1.2.3", + "@radix-ui/react-alert-dialog": "1.1.6", + "@radix-ui/react-aspect-ratio": "1.1.2", + "@radix-ui/react-avatar": "1.1.3", + "@radix-ui/react-checkbox": "1.1.4", + "@radix-ui/react-collapsible": "1.1.3", + "@radix-ui/react-context-menu": "2.2.6", + "@radix-ui/react-dialog": "1.1.6", + "@radix-ui/react-dropdown-menu": "2.1.6", + "@radix-ui/react-hover-card": "1.1.6", + "@radix-ui/react-label": "2.1.2", + "@radix-ui/react-menubar": "1.1.6", + "@radix-ui/react-navigation-menu": "1.2.5", + "@radix-ui/react-popover": "1.1.6", + "@radix-ui/react-progress": "1.1.2", + "@radix-ui/react-radio-group": "1.2.3", + "@radix-ui/react-scroll-area": "1.2.3", + "@radix-ui/react-select": "2.1.6", + "@radix-ui/react-separator": "1.1.2", + "@radix-ui/react-slider": "1.2.3", + "@radix-ui/react-slot": "1.1.2", + "@radix-ui/react-switch": "1.1.3", + "@radix-ui/react-tabs": "1.1.3", + "@radix-ui/react-toggle-group": "1.1.2", + "@radix-ui/react-toggle": "1.1.2", + "@radix-ui/react-tooltip": "1.1.8", + "class-variance-authority": "0.7.1", + "clsx": "2.1.1", + "cmdk": "1.1.1", + "date-fns": "3.6.0", + "embla-carousel-react": "8.6.0", + "input-otp": "1.4.2", + "lucide-react": "0.487.0", + "motion": "12.23.24", + "next-themes": "0.4.6", + "react-day-picker": "8.10.1", + "react-dnd": "16.0.1", + "react-dnd-html5-backend": "16.0.1", + "react-hook-form": "7.55.0", + "react-popper": "2.3.0", + "react-resizable-panels": "2.1.7", + "react-responsive-masonry": "2.7.1", + "react-slick": "0.31.0", + "recharts": "2.15.2", + "sonner": "2.0.3", + "tailwind-merge": "3.2.0", + "tw-animate-css": "1.3.8", + "vaul": "1.1.2" + }, + "devDependencies": { + "@tailwindcss/vite": "4.1.12", + "@vitejs/plugin-react": "4.7.0", + "tailwindcss": "4.1.12", + "vite": "6.3.5" + }, + "peerDependencies": { + "react": "18.3.1", + "react-dom": "18.3.1" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + }, + "pnpm": { + "overrides": { + "vite": "6.3.5" + } + } +} \ No newline at end of file diff --git a/tournme/new/Design Tourn.me UI_UX/postcss.config.mjs b/tournme/new/Design Tourn.me UI_UX/postcss.config.mjs new file mode 100644 index 0000000..531dbec --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/postcss.config.mjs @@ -0,0 +1,15 @@ +/** + * PostCSS Configuration + * + * Tailwind CSS v4 (via @tailwindcss/vite) automatically sets up all required + * PostCSS plugins — you do NOT need to include `tailwindcss` or `autoprefixer` here. + * + * This file only exists for adding additional PostCSS plugins, if needed. + * For example: + * + * import postcssNested from 'postcss-nested' + * export default { plugins: [postcssNested()] } + * + * Otherwise, you can leave this file empty. + */ +export default {} diff --git a/tournme/new/Design Tourn.me UI_UX/src/.DS_Store b/tournme/new/Design Tourn.me UI_UX/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1f5856e4e15bc26c2541c7012452ba0bb72782c1 GIT binary patch literal 10244 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 literal 0 HcmV?d00001 diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/App.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/App.tsx new file mode 100644 index 0000000..761d13c --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/App.tsx @@ -0,0 +1,61 @@ +import { useState } from 'react'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/app/components/ui/tabs'; +import DesignSummary from '@/app/components/DesignSummary'; +import DesignSystem from '@/app/components/DesignSystem'; +import LandingPage from '@/app/components/pages/LandingPage'; +import LoginPage from '@/app/components/pages/LoginPage'; +import RegisterPage from '@/app/components/pages/RegisterPage'; +import DashboardPage from '@/app/components/pages/DashboardPage'; +import TournamentListPage from '@/app/components/pages/TournamentListPage'; +import TournamentDetailPage from '@/app/components/pages/TournamentDetailPage'; +import PublicTournamentView from '@/app/components/pages/PublicTournamentView'; + +export default function App() { + const [activeTab, setActiveTab] = useState('summary'); + + return ( +
+
+
+
+
+
+ T +
+
+

tourn.me

+

Design System & UI Mockups

+
+
+
+ + + + 📚 Overview + 🎨 Design System + Landing Page + Login + Register + Dashboard + Tournaments + Tournament Detail + 📺 Public View (TV) + + +
+
+ +
+ {activeTab === 'summary' && } + {activeTab === 'design-system' && } + {activeTab === 'landing' && } + {activeTab === 'login' && } + {activeTab === 'register' && } + {activeTab === 'dashboard' && } + {activeTab === 'tournaments' && } + {activeTab === 'tournament-detail' && } + {activeTab === 'public-view' && } +
+
+ ); +} \ No newline at end of file diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/.DS_Store b/tournme/new/Design Tourn.me UI_UX/src/app/components/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..adea774cd2c6e241f4b4e81c58a7d1534e3b6bd1 GIT binary patch literal 6148 zcmeHKK~BRk5L~B03W7tA9Q}np0LfH=2hb1DQYeucB@*h1i+KVE_!8nNynzd|YZKzM zh#RWVuCyL!y_-=cRyHOgGu|2(_$T85!J?87xWOm)u?N+V^ z_EQ0VcL#J!6|JbI!TZY})782u%f-4`AX+?>FQ*^RuV=%I~|l PnEnWe3_7R+f2zPIqatG1 literal 0 HcmV?d00001 diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSummary.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSummary.tsx new file mode 100644 index 0000000..7e05779 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSummary.tsx @@ -0,0 +1,337 @@ +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Badge } from '@/app/components/ui/badge'; +import { CheckCircle2 } from 'lucide-react'; + +export default function DesignSummary() { + return ( +
+
+
+ T +
+

tourn.me Design System

+

+ Complete UI/UX Design Reference for Padel Tournament Management Platform +

+
+ + + + 🎨 Design System Overview + + A comprehensive design system built with React, Tailwind CSS, and shadcn/ui + + + +
+

Brand Identity

+
+
+
+
+
Primary Color
+
#F3B331
+
+
+
+
+
+
Secondary Color
+
#111827
+
+
+
+
+ +
+

Design Philosophy

+
    +
  • + + Modern, minimal aesthetic inspired by Airbnb and Playtomic +
  • +
  • + + Sport-focused with emphasis on clarity and readability +
  • +
  • + + Responsive layouts optimized for desktop, tablet, and TV displays +
  • +
  • + + Dark mode support throughout the entire system +
  • +
+
+
+
+ + + + 📦 Components Included + All components with comprehensive examples + + +
+
+

Base Components

+
    +
  • • Typography (H1-H4, Body, Small)
  • +
  • • Buttons (Primary, Secondary, Outline, Ghost, Link)
  • +
  • • Form Elements (Input, Select, Switch, Checkbox)
  • +
  • • Badges & Status Indicators
  • +
  • • Avatars & User Elements
  • +
  • • Cards & Containers
  • +
  • • Icons (Lucide React)
  • +
+
+ +
+

Advanced Components

+
    +
  • • Tables (Players, Standings, Teams)
  • +
  • • Tournament Brackets
  • +
  • • Match Cards & Visualizations
  • +
  • • Modals & Dialogs
  • +
  • • Tooltips & Popovers
  • +
  • • Alerts & Notifications
  • +
  • • Navigation (Tabs, Sidebar, Header)
  • +
+
+
+
+
+ + + + 📱 Page Mockups + Complete page designs for all user flows + + +
+

+ Not Logged In +

+
+
+
Landing Page
+

+ Hero section, features grid, how it works, stats, CTA, and footer +

+
+
+
Login Page
+

+ Clean authentication form with password recovery link +

+
+
+
Registration Page
+

+ Two-column layout with benefits and registration form +

+
+
+
+ +
+

+ Admin Area +

+
+
+
Dashboard
+

+ Sidebar layout with stats cards, active tournaments, recent activity, and upcoming matches +

+
+
+
Tournament List
+

+ Search, filters, tabs (Active/Upcoming/Completed/Draft), and card grid layout +

+
+
+
Tournament Detail
+

+ Multi-tab interface with overview, match scheduling (drag & drop), bracket, and teams table +

+
+
+
+ +
+

+ Public Display +

+
+
+
Public Tournament View (TV Display)
+

+ Large format design with live matches, completed results, upcoming schedule, bracket preview, and QR code +

+
+
+
+
+
+ + + + 🎯 Key Features + + +
+
+
+ +
+
Status-Driven Design
+

+ Clear visual indicators for tournaments, matches, and teams (draft, in progress, completed, etc.) +

+
+
+
+ +
+
Tournament Brackets
+

+ Visual bracket displays for single/double elimination formats +

+
+
+
+ +
+
Match Management
+

+ Drag & drop scheduling with court assignments and score tracking +

+
+
+
+ +
+
+ +
+
Data Tables
+

+ Comprehensive tables for players, teams, and standings with sorting +

+
+
+
+ +
+
Dark Mode
+

+ Complete dark mode support with theme toggle +

+
+
+
+ +
+
TV Display Optimized
+

+ Large, readable public view perfect for center displays +

+
+
+
+
+
+
+ + + + 🛠️ Technology Stack + + +
+
+

Frontend

+
    +
  • • React 18
  • +
  • • Vite (build tool)
  • +
  • • Tailwind CSS v4
  • +
  • • shadcn/ui components
  • +
  • • Lucide React (icons)
  • +
  • • Radix UI primitives
  • +
+
+ +
+

Design Tokens

+
    +
  • • CSS Custom Properties
  • +
  • • Responsive spacing system
  • +
  • • Typography scale
  • +
  • • Color palette with semantic naming
  • +
  • • Border radius tokens
  • +
  • • Shadow utilities
  • +
+
+
+
+
+ + + + 📋 Usage Guide + + +
+

Exploring the Design System

+

+ Use the tabs at the top of the page to navigate through different sections: +

+
    +
  • Design System: View all components, colors, typography, and UI elements
  • +
  • Landing: Public-facing marketing page
  • +
  • Login/Register: Authentication flows
  • +
  • Dashboard: Admin home with sidebar navigation
  • +
  • Tournaments: Tournament management list view
  • +
  • Tournament Detail: Full tournament management interface
  • +
  • Public View: TV display for centers
  • +
+
+ +
+

For Figma Design

+

+ This interactive prototype serves as a complete reference for your Figma designs. + All components, spacing, colors, and layouts are production-ready and can be + directly translated to Figma. Use the dark mode toggle to see both theme variants. +

+
+ +
+

Component Reusability

+

+ Every component is built to be reusable and follows consistent patterns. + Status badges, cards, tables, and navigation elements maintain the same + visual language throughout the application. +

+
+
+
+ + + +
+
✨ Ready to Build
+

+ This design system provides everything you need to create a cohesive, + professional tournament management platform. All components are designed + to work together seamlessly. +

+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSystem.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSystem.tsx new file mode 100644 index 0000000..8b4b98f --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/DesignSystem.tsx @@ -0,0 +1,1194 @@ +import { useState } from 'react'; +import { Button } from '@/app/components/ui/button'; +import { Input } from '@/app/components/ui/input'; +import { Label } from '@/app/components/ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Badge } from '@/app/components/ui/badge'; +import { Avatar, AvatarFallback } from '@/app/components/ui/avatar'; +import { Switch } from '@/app/components/ui/switch'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/app/components/ui/select'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/app/components/ui/tabs'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/app/components/ui/table'; +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/app/components/ui/dialog'; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/app/components/ui/tooltip'; +import { Popover, PopoverContent, PopoverTrigger } from '@/app/components/ui/popover'; +import { Calendar, Trophy, Users, Home, Settings, LogOut, Plus, Search, Filter, MoreVertical, Play, CheckCircle2, Clock, AlertCircle, Bell, Moon, Sun, Menu, ChevronRight, Info, Edit, Trash2 } from 'lucide-react'; +import { Separator } from '@/app/components/ui/separator'; +import { Alert, AlertDescription, AlertTitle } from '@/app/components/ui/alert'; + +export default function DesignSystem() { + const [isDark, setIsDark] = useState(false); + + const toggleTheme = () => { + setIsDark(!isDark); + document.documentElement.classList.toggle('dark'); + }; + + return ( +
+ {/* Theme Toggle Section */} +
+
+

Design System Preview

+
+ Theme: + +
+
+
+ + {/* Brand Colors */} +
+

Brand Colors

+
+
+
+
Primary
+
#F3B331
+
+
+
+
Secondary
+
#111827
+
+
+
+
Accent
+
#FEF3E2
+
+
+
+
Muted
+
#F3F4F6
+
+
+
+ + + + {/* Typography */} +
+

Typography

+
+
+

Heading 1 - Tournament Management

+

2xl - Medium weight

+
+
+

Heading 2 - Section Title

+

xl - Medium weight

+
+
+

Heading 3 - Card Title

+

lg - Medium weight

+
+
+

Heading 4 - Label

+

base - Medium weight

+
+
+

Body text - This is regular body text used throughout the application.

+

base - Normal weight

+
+
+

Small text - Used for captions and secondary information

+

sm - Normal weight

+
+
+
+ + + + {/* Buttons */} +
+

Buttons

+
+
+

Primary Actions

+
+ + + + +
+
+ +
+

Secondary Actions

+
+ + + + +
+
+ +
+

With Icons

+
+ + + +
+
+ +
+

Status Buttons

+
+ + +
+
+
+
+ + + + {/* Form Elements */} +
+

Form Elements

+
+
+ + +
+ +
+ +
+ + +
+
+ +
+ + +
+ +
+ + +
+
+
+ + + + {/* Badges & Status */} +
+

Badges & Status Indicators

+
+
+

Tournament Status

+
+ Draft + Registration + In Progress + Completed + Cancelled +
+
+ +
+

Match Status

+
+ + + Pending + + + + Scheduled + + + + In Progress + + + + Completed + +
+
+ +
+

Team Status

+
+ Incomplete + Looking for Partner + Confirmed + Eliminated +
+
+
+
+ + + + {/* Tables */} +
+

Tables

+
+
+

Players Table

+ + + + + + # + Player Name + Email + Skill Level + Matches + Win Rate + Actions + + + + + 1 + +
+ + JD + + John Doe +
+
+ john.doe@email.com + + 7.5 + + 24 + + 75% + + +
+ + +
+
+
+ + 2 + +
+ + MS + + Mike Smith +
+
+ mike.smith@email.com + + 6.8 + + 18 + + 67% + + +
+ + +
+
+
+ + 3 + +
+ + AJ + + Alice Johnson +
+
+ alice.j@email.com + + 7.2 + + 31 + + 71% + + +
+ + +
+
+
+
+
+
+
+
+ +
+

Standings Table

+ + + + + + Pos + Team + Played + Won + Lost + Sets + Points + + + + + 1 + +
+ + A + + Team Alpha +
+
+ 6 + 5 + 1 + 10-4 + + 15 + +
+ + 2 + +
+ + D + + Team Delta +
+
+ 6 + 4 + 2 + 9-5 + + 12 + +
+ + 3 + +
+ + G + + Team Gamma +
+
+ 6 + 3 + 3 + 7-7 + + 9 + +
+
+
+
+
+
+
+
+ + + + {/* Bracket Visualizations */} +
+

Tournament Brackets

+
+
+

Single Elimination Bracket (8 Teams)

+ + +
+
+
+ {/* Quarter Finals */} +
+
Quarter Finals
+ {[ + { team: 'Team Alpha', seed: 1, winner: true }, + { team: 'Team Beta', seed: 8, winner: false }, + { team: 'Team Delta', seed: 4, winner: true }, + { team: 'Team Gamma', seed: 5, winner: false }, + { team: 'Team Epsilon', seed: 3, winner: false }, + { team: 'Team Zeta', seed: 6, winner: false }, + { team: 'Team Theta', seed: 2, winner: false }, + { team: 'Team Iota', seed: 7, winner: false } + ].map((team, i) => ( +
+ {team.team} + #{team.seed} +
+ ))} +
+ + {/* Semi Finals */} +
+
Semi Finals
+
+ Team Alpha +
+
+ Team Delta +
+
+ TBD +
+
+ TBD +
+
+ + {/* Finals */} +
+
+
Final
+
+ TBD +
+
+ TBD +
+
+
+ + {/* Champion */} +
+
+
Champion
+
+ +
Winner
+
TBD
+
+
+
+
+
+
+
+
+
+ +
+

Match-up Cards

+
+ {/* Winner Match */} + + +
+
+ Winner + Semi Final #1 +
+
+
+ + A + + Team Alpha +
+ 6-4, 6-3 +
+
+
+ + D + + Team Delta +
+ 4-6, 3-6 +
+
+
+
+ + {/* Upcoming Match */} + + +
+
+ + + Scheduled + + Semi Final #2 +
+
+
+ + E + + Team Epsilon +
+
+
+ vs +
+
+
+ + Z + + Team Zeta +
+
+
+
+
+
+
+
+
+ + + + {/* Modals & Overlays */} +
+

Modals, Tooltips & Popovers

+
+
+

Modal Dialog

+ + + + + + + Create New Tournament + + Fill in the details below to create a new tournament + + +
+
+ + +
+
+ + +
+
+ + + + +
+
+
+ +
+

Tooltips

+
+ + + + + + +

This is helpful tooltip information

+
+
+
+ + + + + + + +

Icon-only buttons should have tooltips

+
+
+
+ + + + +
+ + Tournament Status +
+
+ +
+

Tournament Progress

+

Quarter Finals - 4 of 8 matches complete

+
+
+
+
+
+
+ +
+

Popovers

+
+ + + + + +
+

Filter Tournaments

+
+ + +
+
+ + +
+ +
+
+
+ + + + + + +
+ + + + +
+
+
+
+
+ +
+

Alerts

+
+ + + Information + + You can now import players directly from Playtomic. Go to Players → Import. + + + + + + Success + + Tournament "Summer Championship" has been created successfully. + + + + + + Error + + Unable to save tournament. Please check your connection and try again. + + +
+
+
+
+ + + + {/* Header Examples */} +
+

Headers & Navigation

+
+
+

Public Header

+ + +
+
+
+ T +
+ tourn.me +
+ +
+ + +
+
+
+
+
+ +
+

Admin Header

+ + +
+
+ +
+
+ T +
+ My Padel Center +
+
+ +
+ + +
+ + JD + +
+
John Doe
+
Admin
+
+
+
+
+
+
+
+
+
+ + + + {/* Sidebar Examples */} +
+

Sidebars

+
+
+

Admin Sidebar

+
+ + +
+
+ T +
+
+ My Padel Center + Premium Plan +
+
+
+ + + + + + + +
+
+ Courts + 8 +
+
+ Players + 324 +
+
+
+
+ + + + Main content area + + +
+
+ +
+

Collapsible Sidebar

+
+ + + + + + + + + + + + + + Main content area with collapsed sidebar + + +
+
+
+
+ + + + {/* Cards */} +
+

Cards

+
+ + + Tournament Card + Summer Championship 2026 + + +
+
+ Format: + Single Elimination +
+
+ Teams: + 16 +
+
+ Status: + In Progress +
+
+
+
+ + + +
+
+ Match Card + Court 1 - Match #5 +
+ + + Completed + +
+
+ +
+
+
+ + JD + + Team Alpha +
+ 6-4, 6-3 +
+
+
+ + AB + + Team Beta +
+ 4-6, 3-6 +
+
+
+
+
+
+ + + + {/* Icons */} +
+

Icons

+
+

Navigation Icons

+
+
+
+ +
+ Home +
+
+
+ +
+ Tournaments +
+
+
+ +
+ Players +
+
+
+ +
+ Matches +
+
+
+ +
+ Settings +
+
+
+
+ + + + {/* Avatars */} +
+

Avatars & User Elements

+
+
+
+ + JD + +

Large

+
+
+ + AB + +

Default

+
+
+ + MK + +

Small

+
+
+
+
+ + + + {/* Tabs */} +
+

Tabs Navigation

+ + + Overview + Matches + Standings + Bracket + + + + +

Overview content would go here...

+
+
+
+ + + +

Matches content would go here...

+
+
+
+ + + +

Standings content would go here...

+
+
+
+ + + +

Bracket content would go here...

+
+
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/figma/ImageWithFallback.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/figma/ImageWithFallback.tsx new file mode 100644 index 0000000..0e26139 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/figma/ImageWithFallback.tsx @@ -0,0 +1,27 @@ +import React, { useState } from 'react' + +const ERROR_IMG_SRC = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==' + +export function ImageWithFallback(props: React.ImgHTMLAttributes) { + const [didError, setDidError] = useState(false) + + const handleError = () => { + setDidError(true) + } + + const { src, alt, style, className, ...rest } = props + + return didError ? ( +
+
+ Error loading image +
+
+ ) : ( + {alt} + ) +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/DashboardPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/DashboardPage.tsx new file mode 100644 index 0000000..6711c05 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/DashboardPage.tsx @@ -0,0 +1,328 @@ +import { Button } from '@/app/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Badge } from '@/app/components/ui/badge'; +import { Avatar, AvatarFallback } from '@/app/components/ui/avatar'; +import { Home, Trophy, Users, Calendar, Settings, Plus, TrendingUp, Clock, CheckCircle2, AlertCircle } from 'lucide-react'; + +export default function DashboardPage() { + return ( +
+ {/* Sidebar */} + + + {/* Main Content */} +
+ {/* Header */} +
+
+

Dashboard

+

Welcome back, John! Here's what's happening today.

+
+ +
+ + {/* Stats Cards */} +
+ + +
+
Active Tournaments
+ +
+
12
+
+ + +2 this week +
+
+
+ + + +
+
Matches Today
+ +
+
24
+
+ 8 completed +
+
+
+ + + +
+
Total Players
+ +
+
324
+
+ + +18 this month +
+
+
+ + + +
+
Court Usage
+ +
+
86%
+
+ This week average +
+
+
+
+ + {/* Active Tournaments */} +
+ + +
+ Active Tournaments + +
+
+ +
+
+
+

Summer Championship 2026

+

Single Elimination

+
+ + + In Progress + +
+
+ 16 teams + + Quarter Finals +
+
+ +
+
+
+

Weekend Mixed Doubles

+

Round Robin

+
+ + + Scheduled + +
+
+ 12 teams + + Starts Jan 30 +
+
+ +
+
+
+

Beginner's Cup

+

Groups + Knockout

+
+ + + In Progress + +
+
+ 20 teams + + Group Stage +
+
+
+
+ + {/* Recent Activity */} + + + Recent Activity + + +
+
+ +
+
+

Match completed

+

Team Alpha defeated Team Beta (6-4, 6-3)

+

5 minutes ago

+
+
+ +
+
+ +
+
+

Tournament started

+

Summer Championship 2026 is now in progress

+

2 hours ago

+
+
+ +
+
+ +
+
+

New players added

+

12 players imported from Playtomic

+

Yesterday

+
+
+ +
+
+ +
+
+

Schedule conflict

+

2 matches need court reassignment

+

2 days ago

+
+
+
+
+
+ + {/* Upcoming Matches */} + + +
+ Upcoming Matches + +
+
+ +
+ {[1, 2, 3, 4].map((i) => ( +
+
+
+
Court {i}
+
14:00
+
+
+
+ + A{i} + + Team Alpha {i} +
+
+ + B{i} + + Team Beta {i} +
+
+
+ Summer Championship +

Quarter Final

+
+
+ +
+ ))} +
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LandingPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LandingPage.tsx new file mode 100644 index 0000000..3e080bf --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LandingPage.tsx @@ -0,0 +1,257 @@ +import { Button } from '@/app/components/ui/button'; +import { Card, CardContent } from '@/app/components/ui/card'; +import { Trophy, Users, Calendar, Monitor, Zap, Shield } from 'lucide-react'; +import { ImageWithFallback } from '@/app/components/figma/ImageWithFallback'; + +export default function LandingPage() { + return ( +
+ {/* Hero Section */} +
+
+
+
+ + Tournament Management Made Simple +
+ +

+ Manage your padel tournaments with{' '} + tourn.me +

+ +

+ The lightweight tool for padel centers to organize tournaments, schedule matches, + and communicate with players effortlessly. +

+ +
+ + +
+ +
+
+
500+
+
Tournaments
+
+
+
+
50+
+
Padel Centers
+
+
+
+
10k+
+
Players
+
+
+
+ +
+
+ +
+
+
+ + {/* Features Grid */} +
+
+

Everything you need to run tournaments

+

+ From player management to live displays, we've got all your tournament needs covered +

+
+ +
+ + +
+ +
+

Multiple Formats

+

+ Support for Round Robin, Single/Double Elimination, and Groups + Knockout formats +

+
+
+ + + +
+ +
+

Player Management

+

+ Import from Playtomic or add manually. Players shared across all centers +

+
+
+ + + +
+ +
+

Easy Scheduling

+

+ Drag & drop match ordering with optional court assignments +

+
+
+ + + +
+ +
+

Public Display

+

+ Shareable links for TV displays with optional access codes +

+
+
+ + + +
+ +
+

Auto Progression

+

+ Winners automatically advance in knockout brackets +

+
+
+ + + +
+ +
+

Multi-tenant SaaS

+

+ Secure, isolated data for each padel center +

+
+
+
+
+ + {/* How It Works */} +
+
+
+

How it works

+

Get started in minutes

+
+ +
+
+
+ 1 +
+

Create Your Center

+

+ Sign up and set up your padel center profile in seconds +

+
+ +
+
+ 2 +
+

Import Players

+

+ Import from Playtomic or add players manually with their skill levels +

+
+ +
+
+ 3 +
+

Run Tournaments

+

+ Create tournaments, schedule matches, and share results on displays +

+
+
+
+
+ + {/* CTA Section */} +
+

Ready to simplify your tournaments?

+

+ Join padel centers around the world using tourn.me to manage their tournaments +

+
+ + +
+
+ + {/* Footer */} +
+
+
+
+
+ T +
+ tourn.me +
+

+ Tournament management made simple for padel centers +

+
+ +
+

Product

+ +
+ +
+

Company

+ +
+ +
+

Legal

+ +
+
+ +
+

© 2026 tourn.me. All rights reserved.

+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LoginPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LoginPage.tsx new file mode 100644 index 0000000..6da1682 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/LoginPage.tsx @@ -0,0 +1,70 @@ +import { Button } from '@/app/components/ui/button'; +import { Input } from '@/app/components/ui/input'; +import { Label } from '@/app/components/ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Separator } from '@/app/components/ui/separator'; +import { Trophy } from 'lucide-react'; + +export default function LoginPage() { + return ( +
+ + +
+
+ +
+
+ Welcome back + Sign in to your tourn.me account +
+ +
+
+ + +
+ +
+
+ + + Forgot password? + +
+ +
+ + +
+ +
+ + + OR + +
+ +
+ Don't have an account? + + Sign up + +
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/PublicTournamentView.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/PublicTournamentView.tsx new file mode 100644 index 0000000..a58b18e --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/PublicTournamentView.tsx @@ -0,0 +1,291 @@ +import { Card, CardContent, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Badge } from '@/app/components/ui/badge'; +import { Avatar, AvatarFallback } from '@/app/components/ui/avatar'; +import { Trophy, Calendar, Play, CheckCircle2, Clock } from 'lucide-react'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/app/components/ui/table'; + +export default function PublicTournamentView() { + return ( +
+
+ {/* Header */} +
+
+
+
+ +
+
+

Summer Championship 2026

+
+ Single Elimination + + 16 Teams + + Male / Advanced +
+
+
+
+ + Quarter Finals + +
+ {new Date().toLocaleDateString('en-US', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric' + })} +
+
+
+
+ +
+ {/* Left Column - Matches */} +
+
+

Live & Upcoming Matches

+ +
+ {/* Live Match */} +
+
+ + + LIVE - Court 2 + + Quarter Final #2 +
+ +
+ {/* Team 1 */} +
+
+ + D + +
+
Team Delta
+
P. Brown / L. Garcia
+
+
+
+
6
+
Set 1
+
+
+ + {/* Team 2 */} +
+
+ + G + +
+
Team Gamma
+
R. Wilson / S. Martinez
+
+
+
+
5
+
Set 1
+
+
+
+
+ + {/* Completed Match */} +
+
+ + + Completed - Court 1 + + Quarter Final #1 +
+ +
+
+
+ + A + +
+
Team Alpha
+
J. Doe / M. Smith
+
+
+
6-4, 6-3
+
+ +
+
+ + B + +
+
Team Beta
+
A. Johnson / K. Lee
+
+
+
4-6, 3-6
+
+
+
+ + {/* Upcoming Matches */} +
+

+ + Next Up +

+ +
+
+
+ 17:00 + + Team Epsilon vs Team Zeta +
+ Court 1 +
+ +
+
+ 17:00 + + Team Theta vs Team Iota +
+ Court 2 +
+
+
+
+
+
+ + {/* Right Column - Bracket & Standings */} +
+ {/* Bracket Preview */} +
+

Bracket

+
+
+
Semi Finals
+
+
+ TBD +
+
+ TBD +
+
+
+ +
+
Final
+
+ +
Champion
+
TBD
+
+
+
+
+ + {/* Top Performers */} +
+

Top Performers

+
+
+
+ 1 +
+ + A + +
+
Team Alpha
+
3 wins
+
+
+ +
+
+ 2 +
+ + D + +
+
Team Delta
+
3 wins
+
+
+ +
+
+ 3 +
+ + E + +
+
Team Epsilon
+
2 wins
+
+
+
+
+ + {/* QR Code / Access Info */} +
+
+
+
📱
+
+

Follow Live

+

Scan to view on your device

+
tourn.me/summer26
+
+
+
+
+ + {/* Footer Bar */} +
+
+
+
+ T +
+
+
My Padel Center
+
Powered by tourn.me
+
+
+ +
+
+
4
+
Matches Today
+
+
+
+
8
+
Teams Left
+
+
+
+
15:42
+
Current Time
+
+
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/RegisterPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/RegisterPage.tsx new file mode 100644 index 0000000..b4b8468 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/RegisterPage.tsx @@ -0,0 +1,185 @@ +import { Button } from '@/app/components/ui/button'; +import { Input } from '@/app/components/ui/input'; +import { Label } from '@/app/components/ui/label'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Separator } from '@/app/components/ui/separator'; +import { Trophy, CheckCircle2 } from 'lucide-react'; + +export default function RegisterPage() { + return ( +
+
+ {/* Left side - Benefits */} +
+
+

Start managing tournaments today

+

+ Join hundreds of padel centers using tourn.me +

+
+ +
+
+
+ +
+
+

Multiple tournament formats

+

+ Round Robin, Single/Double Elimination, Groups + Knockout +

+
+
+ +
+
+ +
+
+

Import from Playtomic

+

+ Sync your player database with one click +

+
+
+ +
+
+ +
+
+

Public TV displays

+

+ Share tournament brackets and matches on your screens +

+
+
+ +
+
+ +
+
+

Easy match scheduling

+

+ Drag & drop interface for quick organization +

+
+
+
+ +
+
+
+
500+
+
Tournaments
+
+
+
+
50+
+
Centers
+
+
+
+
10k+
+
Players
+
+
+
+
+ + {/* Right side - Form */} + + +
+
+ +
+
+ Create your account + Start your 14-day free trial. No credit card required. +
+ +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +

+ Must be at least 8 characters +

+
+ + + +

+ By signing up, you agree to our{' '} + Terms of Service + {' '}and{' '} + Privacy Policy +

+
+ +
+ + + OR + +
+ +
+ Already have an account? + + Sign in + +
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentDetailPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentDetailPage.tsx new file mode 100644 index 0000000..101d545 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentDetailPage.tsx @@ -0,0 +1,473 @@ +import { Button } from '@/app/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Badge } from '@/app/components/ui/badge'; +import { Avatar, AvatarFallback } from '@/app/components/ui/avatar'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/app/components/ui/tabs'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/app/components/ui/table'; +import { ArrowLeft, Edit, Share2, Trophy, Calendar, Users, Settings, GripVertical, Plus, Play, CheckCircle2, Clock } from 'lucide-react'; + +export default function TournamentDetailPage() { + return ( +
+ {/* Back Button & Header */} +
+ + +
+
+
+

Summer Championship 2026

+ + + In Progress + +
+
+
+ + Single Elimination +
+ +
+ + Started Jan 25, 2026 +
+ +
+ + 16 Teams +
+
+
+ +
+ + + +
+
+
+ + {/* Quick Stats */} +
+ + +
Total Matches
+
15
+
8 remaining
+
+
+ + +
Current Round
+
Quarter Finals
+
4 of 8 matches
+
+
+ + +
Matches Today
+
4
+
2 completed
+
+
+ + +
Public Views
+
2.4k
+
Last 24 hours
+
+
+
+ + {/* Tabs */} + + + Overview + Matches + Bracket + Teams + + + +
+ + + Tournament Information + + +
+ Format: + Single Elimination +
+
+ Category: + Male / Advanced +
+
+ Start Date: + Jan 25, 2026 +
+
+ End Date: + Jan 29, 2026 +
+
+ Scoring: + Best of 3 sets +
+
+ Access Code: + SUMMER26 +
+
+
+ + + + Recent Activity + + +
+
+ +
+
+

Match #7 completed

+

Team Alpha won 6-4, 6-3

+

5 minutes ago

+
+
+
+
+ +
+
+

Match #8 started

+

Team Delta vs Team Gamma

+

12 minutes ago

+
+
+
+
+
+
+ + +
+

Match Schedule

+
+ + +
+
+ + {/* Quarter Finals */} +
+
+

Quarter Finals

+ 4 matches +
+ +
+ {/* Match Card - Completed */} + + +
+ + +
+ {/* Team 1 */} +
+ + A1 + +
+
Team Alpha
+
J. Doe / M. Smith
+
+
+ + {/* Score */} +
+
6-4, 6-3
+ + + Completed + +
+ + {/* Team 2 */} +
+
+
Team Beta
+
A. Johnson / K. Lee
+
+ + B2 + +
+
+ +
+
Court 1
+
14:00
+ +
+
+
+
+ + {/* Match Card - In Progress */} + + +
+ + +
+
+ + D3 + +
+
Team Delta
+
P. Brown / L. Garcia
+
+
+ +
+
6-5
+
Set 1
+ + + In Progress + +
+ +
+
+
Team Gamma
+
R. Wilson / S. Martinez
+
+ + G4 + +
+
+ +
+
Court 2
+
15:30
+ +
+
+
+
+ + {/* Match Card - Pending */} + + +
+ + +
+
+ + E5 + +
+
Team Epsilon
+
T. Anderson / N. Taylor
+
+
+ +
+
vs
+ + + Scheduled + +
+ +
+
+
Team Zeta
+
H. Thomas / C. Moore
+
+ + Z6 + +
+
+ +
+
Court 1
+
17:00
+ +
+
+
+
+
+
+
+ + + + + Tournament Bracket - Single Elimination + 16 teams competing for the championship + + +
+
+ {/* Bracket visualization */} +
+ {/* Round of 16 */} +
+

Round of 16

+ {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => ( +
+ Team {i} +
+ ))} +
+ + {/* Quarter Finals */} +
+

Quarter Finals

+
+ Team Alpha +
+
+ Team Delta +
+
+ Team Epsilon +
+
+ Team Zeta +
+
+ + {/* Semi Finals */} +
+

Semi Finals

+
+ TBD +
+
+ TBD +
+
+ + {/* Final */} +
+
+

Final

+
+ +
Champion
+
TBD
+
+
+
+
+
+
+
+
+
+ + +
+

All Teams (16)

+ +
+ + + + + + + Seed + Team Name + Player 1 + Player 2 + Skill + Status + Actions + + + + + 1 + Team Alpha + John Doe + Mike Smith + 7.5 + + Active + + + + + + + 2 + Team Beta + Alice Johnson + Kate Lee + 7.2 + + Eliminated + + + + + + + 3 + Team Delta + Peter Brown + Luis Garcia + 6.8 + + Active + + + + + + +
+
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentListPage.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentListPage.tsx new file mode 100644 index 0000000..dac33f4 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/pages/TournamentListPage.tsx @@ -0,0 +1,291 @@ +import { Button } from '@/app/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/app/components/ui/card'; +import { Input } from '@/app/components/ui/input'; +import { Badge } from '@/app/components/ui/badge'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/app/components/ui/tabs'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/app/components/ui/select'; +import { Plus, Search, Filter, Trophy, Calendar, Users, MoreVertical, Play, CheckCircle2, Clock } from 'lucide-react'; +import { ImageWithFallback } from '@/app/components/figma/ImageWithFallback'; + +export default function TournamentListPage() { + return ( +
+ {/* Header */} +
+
+

Tournaments

+

Manage all your padel tournaments

+
+ +
+ + {/* Filters */} + + +
+
+
+ + +
+
+ + + +
+
+
+ + {/* Tabs */} + + + Active (12) + Upcoming (5) + Completed (48) + Drafts (3) + + + + {/* Tournament Cards Grid */} +
+ {/* Tournament Card 1 - In Progress */} + +
+ +
+ + + In Progress + +
+
+ +
+
+ Summer Championship 2026 + Started Jan 25, 2026 +
+ +
+
+ +
+
+ + Single Elimination +
+ Male +
+ +
+
+
16
+
Teams
+
+
+
12
+
Matches
+
+
+
QF
+
Round
+
+
+ + +
+
+ + {/* Tournament Card 2 - In Progress */} + +
+ +
+ + + In Progress + +
+
+ +
+
+ Weekend Mixed Doubles + Started Jan 27, 2026 +
+ +
+
+ +
+
+ + Round Robin +
+ Mixed +
+ +
+
+
12
+
Teams
+
+
+
45
+
Matches
+
+
+
R3
+
Round
+
+
+ + +
+
+ + {/* Tournament Card 3 - In Progress */} + +
+ +
+ + + In Progress + +
+
+ +
+
+ Beginner's Cup + Started Jan 28, 2026 +
+ +
+
+ +
+
+ + Groups + Knockout +
+ Male +
+ +
+
+
20
+
Teams
+
+
+
30
+
Matches
+
+
+
GS
+
Stage
+
+
+ + +
+
+
+ + {/* List View Option */} + + +
+ All Active Tournaments +
+ + +
+
+
+
+
+ + + + +

Upcoming tournaments view...

+
+
+
+ + + + +

Completed tournaments view...

+
+
+
+ + + + +

Draft tournaments view...

+
+
+
+
+
+ ); +} diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/accordion.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/accordion.tsx new file mode 100644 index 0000000..bd6b1e3 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/accordion.tsx @@ -0,0 +1,66 @@ +"use client"; + +import * as React from "react"; +import * as AccordionPrimitive from "@radix-ui/react-accordion"; +import { ChevronDownIcon } from "lucide-react"; + +import { cn } from "./utils"; + +function Accordion({ + ...props +}: React.ComponentProps) { + return ; +} + +function AccordionItem({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AccordionTrigger({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + + ); +} + +function AccordionContent({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + +
{children}
+
+ ); +} + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert-dialog.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert-dialog.tsx new file mode 100644 index 0000000..875b8df --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert-dialog.tsx @@ -0,0 +1,157 @@ +"use client"; + +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; + +import { cn } from "./utils"; +import { buttonVariants } from "./button"; + +function AlertDialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function AlertDialogTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogPortal({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + + + + ); +} + +function AlertDialogHeader({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDialogFooter({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogAction({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AlertDialogCancel({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +}; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert.tsx new file mode 100644 index 0000000..9c35976 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "./utils"; + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ); +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { Alert, AlertTitle, AlertDescription }; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/aspect-ratio.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/aspect-ratio.tsx new file mode 100644 index 0000000..c16d6bc --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/aspect-ratio.tsx @@ -0,0 +1,11 @@ +"use client"; + +import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"; + +function AspectRatio({ + ...props +}: React.ComponentProps) { + return ; +} + +export { AspectRatio }; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/avatar.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/avatar.tsx new file mode 100644 index 0000000..c990451 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client"; + +import * as React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; + +import { cn } from "./utils"; + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/badge.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/badge.tsx new file mode 100644 index 0000000..2ccc2c4 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "./utils"; + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span"; + + return ( + + ); +} + +export { Badge, badgeVariants }; diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/breadcrumb.tsx b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..8f84d7e --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/src/app/components/ui/breadcrumb.tsx @@ -0,0 +1,109 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { ChevronRight, MoreHorizontal } from "lucide-react"; + +import { cn } from "./utils"; + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return