diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e37d817 Binary files /dev/null and b/.DS_Store differ diff --git a/keys/59b094fe-d609-45fd-a843-34642be4fbe0.pem b/keys/59b094fe-d609-45fd-a843-34642be4fbe0.pem new file mode 100644 index 0000000..cf2ab1d --- /dev/null +++ b/keys/59b094fe-d609-45fd-a843-34642be4fbe0.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC2Vn/aGSsxvk6C +eHnjFGxKQ4YqcportFvIZ4UIWju5zUE4cPjD8voaAab/2pF0AvppeS3svP6LPwOp ++EOV/8ZNitlnmpoCZUX2RDbSqaP+InNZpRPaDfRGy9oiHVQUsKrg23Mn8565ajJT +fUjbWAycCNqiQxk683Iv4BelSS5Ew1cVjafYJgkM8Apj7SkfAwmFgO7EfQD4vCIa +L1IYoDTTRlo/pVpNXlxm9xIGZFtevZBm9wA1biwy9hQYB7pZgjmvvVU9eX6Bxa1k +9f2fnScmDFeiWf/YwoIx9jSYCiRxmq/7RitmDhoK51EepC9APH5j36E2bZTQJYJq +0Q6Xgp1pM2gLPapc0c63osaqaeOOdk6ydkHdg8UwvijbtNo2Y4J58P31nf5/UTka +n5vIu3/1AidfMPwWWxZmtG2HzgHHq0SayHMKNGrjZwdZVuApns3Z5kNlvX24Lu5M +loXGIqaUcrxDAD3thdO2WjwVk/mJBDuZEyzzafmxsk/+G3fTKT3UfykBB8csv1tE +3XfZjBuUKF05CQ+KhAQWoyiCP7i44ii2C9ced7iZgnspctcPGgrfhl66c/RVFIED +vl+Ed8Aq4P6IheJLbmQI0ZViVofXrjkhydg/MWoQxhFQslxAzdp1r1G1R7uGXymg +FBGpU1HhzoLMxDDK6qB8K7lOHGfeBQIDAQABAoICAAsx8AAJD/dDsvhQKboNtMEx +uIwX2AVoIBAdSWeEFF5J27MTPjYLT6j6Tv5iG6oezX2QvIdOt0yY96jShS7+TEOe +8c6dos6tpYg2rSyg0JPRTUaRjx14dXYSg0Sy8XwJUmrwR/eJyqxueJAnUhDXLOo4 +bowMSJrilZeagt+M4oCQUC/flncvJqeBTKU3Md4lYDFIaeCG63qNVB6wpxhVLC+I +oBCzHoJyxIObfQmgoceFJgrCwZcf05DkpCkxi3lLBWJ+SNYeBOyc1KxgbUw4G7Sg +714Yq0+4tluw8Fu6/uMGvb7uX2QqgeJt5c1W0U8SJ8Rw15B+Ik2BVneOeTHhcB6j +IJ0idhniUPLK1Dr99eOJfVzxDNbtSePTklEtlZm1YIGPsostvaHdffrfaWaOV5l4 +OVTDA4SS6PWyCshbIPG20LGjXL0wKmkoce7+LBuMo1eNQ54oCuiwbbwvqsXbiFsd +U0TUAza4jaXh4TjoG6RY14MXaRVkV4Is88ZTHdxl04qHFCL0ovP3GDiofKOeEHLL +hKz0/Y7B3+ifnoSthpJCU/FFZMaP9GTTjqBShmJJJZac9vCzhvYMCHz8z1V6ZQuk +d9bvSpwzkJCX493A0TmIIZqsUExaHIG2J/cQoDJWwTcSN/DhRYg7qbvM1VHDeuqS +5MosmH18p9UveSCfCIiFAoIBAQD/AvMLa7Kic9Qi3X23GZ7lmzUpbC2ZmhXNkcrU ++t5u4IAnUkDNgr3TiPrXLtU/krNPeERkB23aw0gKPTHatNQAE3etLOSXKpU6fkS6 +cysN4cFYVuCZ8QOYCO7hIWnQIyFmXogNN0FEUuBOfIxo/GleIOkTptm58ceY+4Wr +62AqawUt/hcQfC7ysT8mzmh+IgCBQr29IqpYZzXtzuQ0PPAZf71GudMKNefbDsoP +vRIvL1E7nn8vTFVzO359VF22oFUsIEsSnIuDbHaNqFRNyyPy9gdl8I1yZrA0mjJ4 +A66JFhCXyfD4kKK98OO2z03rqkTrkFm5JwD5zyl1J4F2JN1bAoIBAQC3C29qn7Ql +obFD/Z8G1x/rPaXWwSbQp7T2o0JNSjwDtcdV8wipftjyV2Zgt8wk68EhWNxAYqkV +tkrk8dJI+saQThTdTuREs/LV4JIAjz2OByyBdL65pCXdc1r/hr8YIjHUxlbxpjBW +CtDo7Yj0v5Xgq58UazA1P3LRTQjZwlrQTq8IxmpRT3Uf9U1erhEOU7Y9TyfIaZb6 +ap+QitqsXcgKHRs+gE4d9gcz2GJRGkRoKWfUV3ScvhbtsqFHibbcjNDjtrfcwqU5 +UAvHYHle9VQStSALiWPzADuc5kny+/dafY6fMioNR8eFqbX0D1U1TLUC2WQUjUoD +ndaHsuOoUDAfAoIBAE/LgXeyZHw22EtsmTjhGHpqPZFPm1k0ANyJYTmRomZ5c0Ba +mZJ09acqdqs8qVeyNM+KJ4RRWsuYTYN+sInqCWhYrxsOMB0pIvbhqenZvcAjQxe8 +X51r8B7ztKPXi7+oLnxU2ieggZi6ghutF1aGnQXqMGSI0hpAEJ/LHIG2Lio3wLAq +kNcEtMAWPFeNQN8vDo9j7fEv1rPA3/wgwAGki9C+yuBFp0bLpVhDYXDZTcZb/QQ1 +zUBkl1xuYl8fNg++Tch39mXFfFZMazBaWr7Y8M/GsnvwcKI6haqAEYjCRiv5LooA +k5mD0Ji0ttxuM8ipR9WaHqk0Djcc3rEdAoKQeH8CggEAWA7AQuMhnxjyVmsknf3P +9TNrHK0/JxIHFL/lnZkg1ggVJVwNxrynUa6KKe1B4GEqQAinrLHJ9hAEZ6+OIl3C +OJnXn7/cQNDw+cNXeb1vN2xsFLs9JcG6FZbxKAyC0fFhV6MzIH16s2nwpp3fTR79 +01+83+3Q+0zSx63vnBLL7Xps6iPJ8ePvzLgNyIak3eeXvFbgJKHnaADzUm36VQGo +wnTOLns7GV7KiD6Izct9LT7+HEEWcHFiRmew/uFZfzCfLW0xdpqNMc04XWoj+XK8 +R2OrTuGBm9140DpZSPO+Q2IzwpI3eLwXWE4UopzduQ515jD+3IQ8HxFHq3B75PTu +sQKCAQEAl1PgIczPSKJ323sDc6vhav4yBttlTOzn7Y8f7IGUjW6U/kKbuAM2qJCZ +C2TpWxhkBt6oTT3w49sj1DmgYicnnvqA17AaZS64m0/TwkW2YlJrNjBPGmnIA4Lx +LZPh2byPnvss3l5xSjWnX+MVWksT8o0NK/TiZK7wakLOBuxA5NzxmMPk1UHU7DbO +VEs5Nfu02gu/cD5pMYcUd4nHa04EqgcOKlrboK7vuxODfO2WITBIMR8utME3X+aB +bCh67/z+1/plvvtKS3WW4WUR+ZV1e9c+U/PYM7/m6lYOOtzyV79NxfJkS6RY0Pqy +YUHjDHYjcOFDTDsqWBnlZJqAxhWs+g== +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/README.md b/playtomic-wrapper/README.md similarity index 100% rename from README.md rename to playtomic-wrapper/README.md diff --git a/tools/.DS_Store b/tools/.DS_Store new file mode 100644 index 0000000..675071d Binary files /dev/null and b/tools/.DS_Store differ diff --git a/tournme/.DS_Store b/tournme/.DS_Store new file mode 100644 index 0000000..380cf26 Binary files /dev/null and b/tournme/.DS_Store differ diff --git a/tournme/collection/.DS_Store b/tournme/collection/.DS_Store new file mode 100644 index 0000000..c4b0041 Binary files /dev/null and b/tournme/collection/.DS_Store differ diff --git a/tournme/collection/PadelTour API/.DS_Store b/tournme/collection/PadelTour API/.DS_Store new file mode 100644 index 0000000..e8c5bc7 Binary files /dev/null and b/tournme/collection/PadelTour API/.DS_Store differ diff --git a/tournme/collection/PadelTour API/Authentication/Login.bru b/tournme/collection/PadelTour API/Authentication/Login.bru new file mode 100644 index 0000000..cc0fb79 --- /dev/null +++ b/tournme/collection/PadelTour API/Authentication/Login.bru @@ -0,0 +1,30 @@ +meta { + name: Login + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/login + body: formUrlEncoded + auth: inherit +} + +body:form-urlencoded { + grant_type: + username: {{username}} + password: {{password}} + scope: + client_id: + client_secret: +} + +script:post-response { + function onResponse(res) { + let data = res.getBody(); + bru.setEnvVar("access_token", data.access_token); + bru.setEnvVar("refresh_token", data.refresh_token); + } + + onResponse(res); +} diff --git a/tournme/collection/PadelTour API/Authentication/Refresh Token.bru b/tournme/collection/PadelTour API/Authentication/Refresh Token.bru new file mode 100644 index 0000000..718fd01 --- /dev/null +++ b/tournme/collection/PadelTour API/Authentication/Refresh Token.bru @@ -0,0 +1,17 @@ +meta { + name: Refresh Token + type: http + seq: 2 +} + +post { + url: {{baseUrl}}/api/v1/refresh + body: json + auth: inherit +} + +body:json { + { + "refresh_token": "{{refresh_token}}" + } +} diff --git a/tournme/collection/PadelTour API/Authentication/folder.bru b/tournme/collection/PadelTour API/Authentication/folder.bru new file mode 100644 index 0000000..d668e65 --- /dev/null +++ b/tournme/collection/PadelTour API/Authentication/folder.bru @@ -0,0 +1,3 @@ +meta { + name: Authentication +} diff --git a/tournme/collection/PadelTour API/Companies/Change Password.bru b/tournme/collection/PadelTour API/Companies/Change Password.bru new file mode 100644 index 0000000..977e2c8 --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Change Password.bru @@ -0,0 +1,19 @@ +meta { + name: Change Password + type: http + seq: 4 +} + +post { + url: {{baseUrl}}/api/v1/companies/me/change-password + body: json + auth: inherit +} + +body:json { + { + "current_password": "", + "new_password": "", + "confirm_password": "" + } +} diff --git a/tournme/collection/PadelTour API/Companies/Create Company Admin.bru b/tournme/collection/PadelTour API/Companies/Create Company Admin.bru new file mode 100644 index 0000000..e0fc11c --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Create Company Admin.bru @@ -0,0 +1,20 @@ +meta { + name: Create Company Admin + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/companies/admin/create + body: json + auth: inherit +} + +body:json { + { + "name": "", + "email": "", + "phone_number": "", + "address": "" + } +} diff --git a/tournme/collection/PadelTour API/Companies/Get All Companies.bru b/tournme/collection/PadelTour API/Companies/Get All Companies.bru new file mode 100644 index 0000000..d741057 --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Get All Companies.bru @@ -0,0 +1,11 @@ +meta { + name: Get All Companies + type: http + seq: 5 +} + +get { + url: {{baseUrl}}/api/v1/companies + body: none + auth: inherit +} diff --git a/tournme/collection/PadelTour API/Companies/Get Company By Login.bru b/tournme/collection/PadelTour API/Companies/Get Company By Login.bru new file mode 100644 index 0000000..06bbf5a --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Get Company By Login.bru @@ -0,0 +1,15 @@ +meta { + name: Get Company By Login + type: http + seq: 6 +} + +get { + url: {{baseUrl}}/api/v1/companies/:login + body: none + auth: inherit +} + +params:path { + login: +} diff --git a/tournme/collection/PadelTour API/Companies/Get Current Company.bru b/tournme/collection/PadelTour API/Companies/Get Current Company.bru new file mode 100644 index 0000000..b150f9f --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Get Current Company.bru @@ -0,0 +1,15 @@ +meta { + name: Get Current Company + type: http + seq: 2 +} + +get { + url: {{baseUrl}}/api/v1/companies/me + body: none + auth: bearer +} + +auth:bearer { + token: {{access_token}} +} diff --git a/tournme/collection/PadelTour API/Companies/Update Current Company.bru b/tournme/collection/PadelTour API/Companies/Update Current Company.bru new file mode 100644 index 0000000..0f6b81d --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/Update Current Company.bru @@ -0,0 +1,21 @@ +meta { + name: Update Current Company + type: http + seq: 3 +} + +patch { + url: {{baseUrl}}/api/v1/companies/me + body: json + auth: inherit +} + +body:json { + { + "name": "", + "email": "", + "phone_number": "", + "address": "", + "vat_number": "" + } +} diff --git a/tournme/collection/PadelTour API/Companies/folder.bru b/tournme/collection/PadelTour API/Companies/folder.bru new file mode 100644 index 0000000..a88c158 --- /dev/null +++ b/tournme/collection/PadelTour API/Companies/folder.bru @@ -0,0 +1,11 @@ +meta { + name: Companies +} + +auth { + mode: bearer +} + +auth:bearer { + token: {{access_token}} +} diff --git a/tournme/collection/PadelTour API/Courts/Create Court.bru b/tournme/collection/PadelTour API/Courts/Create Court.bru new file mode 100644 index 0000000..05c59ab --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Create Court.bru @@ -0,0 +1,18 @@ +meta { + name: Create Court + type: http + seq: 3 +} + +post { + url: {{baseUrl}}/api/v1/courts/ + body: json + auth: inherit +} + +body:json { + { + "name": "CAMPO BELLISSIMO", + "images": ["https://ddlgzcxdeqadinmzpgqu.supabase.co/storage/v1/object/public/padelcourt_dev/34847922/courts/19cdc929-7dcd-4a63-b016-66db8fdabd4a.jpeg?"] + } +} diff --git a/tournme/collection/PadelTour API/Courts/Delete Court.bru b/tournme/collection/PadelTour API/Courts/Delete Court.bru new file mode 100644 index 0000000..5b83abf --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Delete Court.bru @@ -0,0 +1,15 @@ +meta { + name: Delete Court + type: http + seq: 6 +} + +delete { + url: {{baseUrl}}/api/v1/courts/:id + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Courts/Get All Courts.bru b/tournme/collection/PadelTour API/Courts/Get All Courts.bru new file mode 100644 index 0000000..97a6d34 --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Get All Courts.bru @@ -0,0 +1,15 @@ +meta { + name: Get All Courts + type: http + seq: 2 +} + +get { + url: {{baseUrl}}/api/v1/courts/ + body: none + auth: inherit +} + +settings { + encodeUrl: false +} diff --git a/tournme/collection/PadelTour API/Courts/Get Court By Id.bru b/tournme/collection/PadelTour API/Courts/Get Court By Id.bru new file mode 100644 index 0000000..db680ed --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Get Court By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Court By Id + type: http + seq: 4 +} + +get { + url: {{baseUrl}}/api/v1/courts/:id + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Courts/Update Court.bru b/tournme/collection/PadelTour API/Courts/Update Court.bru new file mode 100644 index 0000000..5adf2ca --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Update Court.bru @@ -0,0 +1,23 @@ +meta { + name: Update Court + type: http + seq: 5 +} + +put { + url: {{baseUrl}}/api/v1/courts/:id + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "id": 0, + "name": "", + "images": "" + } +} diff --git a/tournme/collection/PadelTour API/Courts/Upload Image.bru b/tournme/collection/PadelTour API/Courts/Upload Image.bru new file mode 100644 index 0000000..554c6ce --- /dev/null +++ b/tournme/collection/PadelTour API/Courts/Upload Image.bru @@ -0,0 +1,19 @@ +meta { + name: Upload Image + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/courts/upload_image/ + body: multipartForm + auth: inherit +} + +params:query { + ~folder: +} + +body:multipart-form { + files: @file(/Users/ayoublefhim/Downloads/images.jpeg) +} diff --git a/tournme/collection/PadelTour API/Password Reset/Check reset token status.bru b/tournme/collection/PadelTour API/Password Reset/Check reset token status.bru new file mode 100644 index 0000000..5fced6c --- /dev/null +++ b/tournme/collection/PadelTour API/Password Reset/Check reset token status.bru @@ -0,0 +1,15 @@ +meta { + name: Check reset token status + type: http + seq: 4 +} + +get { + url: {{baseUrl}}/api/v1/password-reset/status/:token + body: none + auth: inherit +} + +params:path { + token: +} diff --git a/tournme/collection/PadelTour API/Password Reset/Complete password reset.bru b/tournme/collection/PadelTour API/Password Reset/Complete password reset.bru new file mode 100644 index 0000000..477f201 --- /dev/null +++ b/tournme/collection/PadelTour API/Password Reset/Complete password reset.bru @@ -0,0 +1,18 @@ +meta { + name: Complete password reset + type: http + seq: 3 +} + +post { + url: {{baseUrl}}/api/v1/password-reset/complete + body: json + auth: inherit +} + +body:json { + { + "token": "", + "new_password": "" + } +} diff --git a/tournme/collection/PadelTour API/Password Reset/Initiate password reset.bru b/tournme/collection/PadelTour API/Password Reset/Initiate password reset.bru new file mode 100644 index 0000000..3df9737 --- /dev/null +++ b/tournme/collection/PadelTour API/Password Reset/Initiate password reset.bru @@ -0,0 +1,17 @@ +meta { + name: Initiate password reset + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/password-reset/initiate + body: json + auth: inherit +} + +body:json { + { + "email": "" + } +} diff --git a/tournme/collection/PadelTour API/Password Reset/Verify reset code.bru b/tournme/collection/PadelTour API/Password Reset/Verify reset code.bru new file mode 100644 index 0000000..6e07c19 --- /dev/null +++ b/tournme/collection/PadelTour API/Password Reset/Verify reset code.bru @@ -0,0 +1,18 @@ +meta { + name: Verify reset code + type: http + seq: 2 +} + +post { + url: {{baseUrl}}/api/v1/password-reset/verify + body: json + auth: inherit +} + +body:json { + { + "email": "", + "code": "" + } +} diff --git a/tournme/collection/PadelTour API/Players/Create Player From Playtomic.bru b/tournme/collection/PadelTour API/Players/Create Player From Playtomic.bru new file mode 100644 index 0000000..bdbe915 --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Create Player From Playtomic.bru @@ -0,0 +1,18 @@ +meta { + name: Create Player From Playtomic + type: http + seq: 3 +} + +post { + url: {{baseUrl}}/api/v1/players/from-playtomic/ + body: json + auth: inherit +} + +body:json { + { + "playtomic_id": 0, + "gender": 0 + } +} diff --git a/tournme/collection/PadelTour API/Players/Create Player.bru b/tournme/collection/PadelTour API/Players/Create Player.bru new file mode 100644 index 0000000..f064f4d --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Create Player.bru @@ -0,0 +1,20 @@ +meta { + name: Create Player + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/players/ + body: json + auth: inherit +} + +body:json { + { + "name": "", + "gender": "", + "surname": "", + "nickname": "" + } +} diff --git a/tournme/collection/PadelTour API/Players/Delete Player Association.bru b/tournme/collection/PadelTour API/Players/Delete Player Association.bru new file mode 100644 index 0000000..e53ed53 --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Delete Player Association.bru @@ -0,0 +1,15 @@ +meta { + name: Delete Player Association + type: http + seq: 8 +} + +delete { + url: {{baseUrl}}/api/v1/players/:id + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Players/Get Player By Id.bru b/tournme/collection/PadelTour API/Players/Get Player By Id.bru new file mode 100644 index 0000000..9ad0dce --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Get Player By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Player By Id + type: http + seq: 6 +} + +get { + url: {{baseUrl}}/api/v1/players/:id + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Players/Get Players.bru b/tournme/collection/PadelTour API/Players/Get Players.bru new file mode 100644 index 0000000..0828964 --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Get Players.bru @@ -0,0 +1,15 @@ +meta { + name: Get Players + type: http + seq: 2 +} + +get { + url: {{baseUrl}}/api/v1/players/ + body: none + auth: inherit +} + +params:query { + ~search: +} diff --git a/tournme/collection/PadelTour API/Players/Get Playtomic Players.bru b/tournme/collection/PadelTour API/Players/Get Playtomic Players.bru new file mode 100644 index 0000000..b1e238e --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Get Playtomic Players.bru @@ -0,0 +1,15 @@ +meta { + name: Get Playtomic Players + type: http + seq: 4 +} + +get { + url: {{baseUrl}}/api/v1/players/playtomic-player/ + body: none + auth: inherit +} + +params:query { + ~name: +} diff --git a/tournme/collection/PadelTour API/Players/Get Tournament Id.bru b/tournme/collection/PadelTour API/Players/Get Tournament Id.bru new file mode 100644 index 0000000..8d83dfc --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Get Tournament Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Id + type: http + seq: 5 +} + +get { + url: {{baseUrl}}/api/v1/players/tournament-id/ + body: none + auth: inherit +} + +params:query { + ~url: +} diff --git a/tournme/collection/PadelTour API/Players/Update Player.bru b/tournme/collection/PadelTour API/Players/Update Player.bru new file mode 100644 index 0000000..7934247 --- /dev/null +++ b/tournme/collection/PadelTour API/Players/Update Player.bru @@ -0,0 +1,30 @@ +meta { + name: Update Player + type: http + seq: 7 +} + +put { + url: {{baseUrl}}/api/v1/players/:id + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "name": "", + "gender": "", + "surname": "", + "nickname": "", + "id": 0, + "number": "", + "email": "", + "picture": "", + "playtomic_id": "", + "level": "" + } +} diff --git a/tournme/collection/PadelTour API/Registration/Initiate company registration.bru b/tournme/collection/PadelTour API/Registration/Initiate company registration.bru new file mode 100644 index 0000000..cad437c --- /dev/null +++ b/tournme/collection/PadelTour API/Registration/Initiate company registration.bru @@ -0,0 +1,22 @@ +meta { + name: Initiate company registration + type: http + seq: 2 +} + +post { + url: {{baseUrl}}/api/v1/register/initiate + body: json + auth: inherit +} + +body:json { + { + "email": "", + "password": "", + "name": "", + "address": "", + "phone_number": "", + "vat_number": "" + } +} diff --git a/tournme/collection/PadelTour API/Registration/Resend verification code.bru b/tournme/collection/PadelTour API/Registration/Resend verification code.bru new file mode 100644 index 0000000..971c58e --- /dev/null +++ b/tournme/collection/PadelTour API/Registration/Resend verification code.bru @@ -0,0 +1,17 @@ +meta { + name: Resend verification code + type: http + seq: 4 +} + +post { + url: {{baseUrl}}/api/v1/register/resend + body: json + auth: inherit +} + +body:json { + { + "email": "" + } +} diff --git a/tournme/collection/PadelTour API/Registration/Test Loops API connection.bru b/tournme/collection/PadelTour API/Registration/Test Loops API connection.bru new file mode 100644 index 0000000..1bb7617 --- /dev/null +++ b/tournme/collection/PadelTour API/Registration/Test Loops API connection.bru @@ -0,0 +1,11 @@ +meta { + name: Test Loops API connection + type: http + seq: 1 +} + +get { + url: {{baseUrl}}/api/v1/register/test-loops + body: none + auth: inherit +} diff --git a/tournme/collection/PadelTour API/Registration/Verify email and complete registration.bru b/tournme/collection/PadelTour API/Registration/Verify email and complete registration.bru new file mode 100644 index 0000000..67c7e6d --- /dev/null +++ b/tournme/collection/PadelTour API/Registration/Verify email and complete registration.bru @@ -0,0 +1,18 @@ +meta { + name: Verify email and complete registration + type: http + seq: 3 +} + +post { + url: {{baseUrl}}/api/v1/register/verify + body: json + auth: inherit +} + +body:json { + { + "email": "", + "code": "" + } +} diff --git a/tournme/collection/PadelTour API/Root.bru b/tournme/collection/PadelTour API/Root.bru new file mode 100644 index 0000000..e022904 --- /dev/null +++ b/tournme/collection/PadelTour API/Root.bru @@ -0,0 +1,11 @@ +meta { + name: Root + type: http + seq: 1 +} + +get { + url: {{baseUrl}}/ + body: none + auth: inherit +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Add Couple To Group.bru b/tournme/collection/PadelTour API/Tournament Staging/Add Couple To Group.bru new file mode 100644 index 0000000..27a2932 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Add Couple To Group.bru @@ -0,0 +1,22 @@ +meta { + name: Add Couple To Group + type: http + seq: 11 +} + +post { + url: {{baseUrl}}/api/v1/staging/group/:group_id/couple + body: json + auth: inherit +} + +params:path { + group_id: +} + +body:json { + { + "group_id": 0, + "couple_id": 0 + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Assign Couples To Groups.bru b/tournme/collection/PadelTour API/Tournament Staging/Assign Couples To Groups.bru new file mode 100644 index 0000000..80c307c --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Assign Couples To Groups.bru @@ -0,0 +1,19 @@ +meta { + name: Assign Couples To Groups + type: http + seq: 14 +} + +post { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/assign-couples + body: none + auth: inherit +} + +params:query { + ~method: +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Auto Schedule Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Auto Schedule Matches.bru new file mode 100644 index 0000000..8d0ae68 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Auto Schedule Matches.bru @@ -0,0 +1,21 @@ +meta { + name: Auto Schedule Matches + type: http + seq: 35 +} + +post { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/auto-schedule + body: none + auth: inherit +} + +params:query { + ~start_date: + ~end_date: + ~order_only: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Calculate Stage Match Order.bru b/tournme/collection/PadelTour API/Tournament Staging/Calculate Stage Match Order.bru new file mode 100644 index 0000000..b69a706 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Calculate Stage Match Order.bru @@ -0,0 +1,19 @@ +meta { + name: Calculate Stage Match Order + type: http + seq: 29 +} + +post { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/calculate-match-order + body: none + auth: inherit +} + +params:query { + ~strategy: +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Calculate Tournament Match Order.bru b/tournme/collection/PadelTour API/Tournament Staging/Calculate Tournament Match Order.bru new file mode 100644 index 0000000..8dba14e --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Calculate Tournament Match Order.bru @@ -0,0 +1,19 @@ +meta { + name: Calculate Tournament Match Order + type: http + seq: 28 +} + +post { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/calculate-match-order + body: none + auth: inherit +} + +params:query { + ~strategy: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Bracket.bru b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Bracket.bru new file mode 100644 index 0000000..db40686 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Bracket.bru @@ -0,0 +1,22 @@ +meta { + name: Create Tournament Bracket + type: http + seq: 16 +} + +post { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/bracket + body: json + auth: inherit +} + +params:path { + stage_id: +} + +body:json { + { + "stage_id": 0, + "bracket_type": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Group.bru b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Group.bru new file mode 100644 index 0000000..ad723fe --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Group.bru @@ -0,0 +1,22 @@ +meta { + name: Create Tournament Group + type: http + seq: 6 +} + +post { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/group + body: json + auth: inherit +} + +params:path { + stage_id: +} + +body:json { + { + "stage_id": 0, + "name": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Stage.bru b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Stage.bru new file mode 100644 index 0000000..be44048 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Create Tournament Stage.bru @@ -0,0 +1,25 @@ +meta { + name: Create Tournament Stage + type: http + seq: 1 +} + +post { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/stage + body: json + auth: inherit +} + +params:path { + tournament_id: +} + +body:json { + { + "tournament_id": 0, + "name": "", + "stage_type": "", + "order": 0, + "config": {} + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Bracket.bru b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Bracket.bru new file mode 100644 index 0000000..9b935bf --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Bracket.bru @@ -0,0 +1,15 @@ +meta { + name: Delete Tournament Bracket + type: http + seq: 20 +} + +delete { + url: {{baseUrl}}/api/v1/staging/bracket/:bracket_id + body: none + auth: inherit +} + +params:path { + bracket_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Group.bru b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Group.bru new file mode 100644 index 0000000..c2b5bd2 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Group.bru @@ -0,0 +1,15 @@ +meta { + name: Delete Tournament Group + type: http + seq: 10 +} + +delete { + url: {{baseUrl}}/api/v1/staging/group/:group_id + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Stage.bru b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Stage.bru new file mode 100644 index 0000000..7078156 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Delete Tournament Stage.bru @@ -0,0 +1,15 @@ +meta { + name: Delete Tournament Stage + type: http + seq: 5 +} + +delete { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id + body: none + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Generate Bracket Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Generate Bracket Matches.bru new file mode 100644 index 0000000..722799d --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Generate Bracket Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Generate Bracket Matches + type: http + seq: 36 +} + +post { + url: {{baseUrl}}/api/v1/staging/bracket/:bracket_id/generate-matches + body: json + auth: inherit +} + +params:path { + bracket_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Generate Group Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Generate Group Matches.bru new file mode 100644 index 0000000..401d4eb --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Generate Group Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Generate Group Matches + type: http + seq: 31 +} + +post { + url: {{baseUrl}}/api/v1/staging/group/:group_id/generate-matches + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Generate Stage Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Generate Stage Matches.bru new file mode 100644 index 0000000..012b917 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Generate Stage Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Generate Stage Matches + type: http + seq: 21 +} + +post { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/generate-matches + body: json + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Bracket By Id.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Bracket By Id.bru new file mode 100644 index 0000000..84e681f --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Bracket By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Bracket By Id + type: http + seq: 18 +} + +get { + url: {{baseUrl}}/api/v1/staging/bracket/:bracket_id + body: none + auth: inherit +} + +params:path { + bracket_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Bracket Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Bracket Matches.bru new file mode 100644 index 0000000..7df3985 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Bracket Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Get Bracket Matches + type: http + seq: 25 +} + +get { + url: {{baseUrl}}/api/v1/staging/bracket/:bracket_id/matches + body: none + auth: inherit +} + +params:path { + bracket_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Couple Stats.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Couple Stats.bru new file mode 100644 index 0000000..fc818b9 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Couple Stats.bru @@ -0,0 +1,20 @@ +meta { + name: Get Couple Stats + type: http + seq: 38 +} + +get { + url: {{baseUrl}}/api/v1/staging/couple/:couple_id/tournament/:tournament_id/stats + body: none + auth: inherit +} + +params:query { + ~group_id: +} + +params:path { + couple_id: + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Court Availability.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Court Availability.bru new file mode 100644 index 0000000..662462b --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Court Availability.bru @@ -0,0 +1,19 @@ +meta { + name: Get Court Availability + type: http + seq: 34 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/court-availability + body: none + auth: inherit +} + +params:query { + date: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Group By Id.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Group By Id.bru new file mode 100644 index 0000000..917ee5e --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Group By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Group By Id + type: http + seq: 8 +} + +get { + url: {{baseUrl}}/api/v1/staging/group/:group_id + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Group Couples.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Group Couples.bru new file mode 100644 index 0000000..39bc2d9 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Group Couples.bru @@ -0,0 +1,15 @@ +meta { + name: Get Group Couples + type: http + seq: 12 +} + +get { + url: {{baseUrl}}/api/v1/staging/group/:group_id/couple + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Group Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Group Matches.bru new file mode 100644 index 0000000..f5ab16f --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Group Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Get Group Matches + type: http + seq: 24 +} + +get { + url: {{baseUrl}}/api/v1/staging/group/:group_id/matches + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Group Standings With Stats.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Group Standings With Stats.bru new file mode 100644 index 0000000..7817fa6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Group Standings With Stats.bru @@ -0,0 +1,15 @@ +meta { + name: Get Group Standings With Stats + type: http + seq: 15 +} + +get { + url: {{baseUrl}}/api/v1/staging/group/:group_id/standings + body: none + auth: inherit +} + +params:path { + group_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Match By Id.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Match By Id.bru new file mode 100644 index 0000000..0111966 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Match By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Match By Id + type: http + seq: 26 +} + +get { + url: {{baseUrl}}/api/v1/staging/match/:match_id + body: none + auth: inherit +} + +params:path { + match_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Stage Brackets.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Brackets.bru new file mode 100644 index 0000000..c40387f --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Brackets.bru @@ -0,0 +1,15 @@ +meta { + name: Get Stage Brackets + type: http + seq: 17 +} + +get { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/bracket + body: none + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Stage By Id.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Stage By Id.bru new file mode 100644 index 0000000..382eb43 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Stage By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Stage By Id + type: http + seq: 3 +} + +get { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id + body: none + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Stage Groups.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Groups.bru new file mode 100644 index 0000000..146c20c --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Groups.bru @@ -0,0 +1,15 @@ +meta { + name: Get Stage Groups + type: http + seq: 7 +} + +get { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/group + body: none + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Stage Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Matches.bru new file mode 100644 index 0000000..8353472 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Stage Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Get Stage Matches + type: http + seq: 22 +} + +get { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id/matches + body: none + auth: inherit +} + +params:path { + stage_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Match Order Info.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Match Order Info.bru new file mode 100644 index 0000000..4627289 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Match Order Info.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Match Order Info + type: http + seq: 30 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/{{tournamentId}}/match-order-info + body: none + auth: bearer +} + +auth:bearer { + token: {{access_token}} +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Matches.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Matches.bru new file mode 100644 index 0000000..aab2c68 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Matches.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Matches + type: http + seq: 23 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/matches + body: none + auth: inherit +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stages.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stages.bru new file mode 100644 index 0000000..cd8542d --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stages.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Stages + type: http + seq: 2 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/stage + body: none + auth: inherit +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Standings.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Standings.bru new file mode 100644 index 0000000..1e201a4 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Standings.bru @@ -0,0 +1,19 @@ +meta { + name: Get Tournament Standings + type: http + seq: 41 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/standings + body: none + auth: inherit +} + +params:query { + ~group_id: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stats.bru b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stats.bru new file mode 100644 index 0000000..1fc267a --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Get Tournament Stats.bru @@ -0,0 +1,19 @@ +meta { + name: Get Tournament Stats + type: http + seq: 37 +} + +get { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/stats + body: none + auth: inherit +} + +params:query { + ~group_id: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Initialize Missing Couple Stats.bru b/tournme/collection/PadelTour API/Tournament Staging/Initialize Missing Couple Stats.bru new file mode 100644 index 0000000..dce9e48 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Initialize Missing Couple Stats.bru @@ -0,0 +1,19 @@ +meta { + name: Initialize Missing Couple Stats + type: http + seq: 40 +} + +post { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/stats/initialize + body: none + auth: inherit +} + +params:query { + ~group_id: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Recalculate Tournament Stats.bru b/tournme/collection/PadelTour API/Tournament Staging/Recalculate Tournament Stats.bru new file mode 100644 index 0000000..ac081c6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Recalculate Tournament Stats.bru @@ -0,0 +1,19 @@ +meta { + name: Recalculate Tournament Stats + type: http + seq: 39 +} + +post { + url: {{baseUrl}}/api/v1/staging/tournament/:tournament_id/stats/recalculate + body: none + auth: inherit +} + +params:query { + ~group_id: +} + +params:path { + tournament_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Remove Couple From Group.bru b/tournme/collection/PadelTour API/Tournament Staging/Remove Couple From Group.bru new file mode 100644 index 0000000..c9be33f --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Remove Couple From Group.bru @@ -0,0 +1,16 @@ +meta { + name: Remove Couple From Group + type: http + seq: 13 +} + +delete { + url: {{baseUrl}}/api/v1/staging/group/:group_id/couple/:couple_id + body: none + auth: inherit +} + +params:path { + group_id: + couple_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Schedule Match.bru b/tournme/collection/PadelTour API/Tournament Staging/Schedule Match.bru new file mode 100644 index 0000000..832ffd2 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Schedule Match.bru @@ -0,0 +1,23 @@ +meta { + name: Schedule Match + type: http + seq: 32 +} + +post { + url: {{baseUrl}}/api/v1/staging/match/:match_id/schedule + body: none + auth: inherit +} + +params:query { + court_id: + start_time: + ~end_time: + ~is_time_limited: + ~time_limit_minutes: +} + +params:path { + match_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Unschedule Match.bru b/tournme/collection/PadelTour API/Tournament Staging/Unschedule Match.bru new file mode 100644 index 0000000..c3902d9 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Unschedule Match.bru @@ -0,0 +1,15 @@ +meta { + name: Unschedule Match + type: http + seq: 33 +} + +delete { + url: {{baseUrl}}/api/v1/staging/match/:match_id/schedule + body: none + auth: inherit +} + +params:path { + match_id: +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Update Match.bru b/tournme/collection/PadelTour API/Tournament Staging/Update Match.bru new file mode 100644 index 0000000..9875d3e --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Update Match.bru @@ -0,0 +1,37 @@ +meta { + name: Update Match + type: http + seq: 27 +} + +put { + url: {{baseUrl}}/api/v1/staging/match/:match_id + body: json + auth: inherit +} + +params:path { + match_id: +} + +body:json { + { + "winner_couple_id": "", + "games": "", + "stage_id": "", + "group_id": "", + "bracket_id": "", + "court_id": "", + "scheduled_start": "", + "scheduled_end": "", + "is_time_limited": "", + "time_limit_minutes": "", + "match_result_status": "", + "display_order": "", + "order_in_stage": "", + "order_in_group": "", + "bracket_position": "", + "round_number": "", + "priority_score": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Bracket.bru b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Bracket.bru new file mode 100644 index 0000000..5e7bf7d --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Bracket.bru @@ -0,0 +1,21 @@ +meta { + name: Update Tournament Bracket + type: http + seq: 19 +} + +put { + url: {{baseUrl}}/api/v1/staging/bracket/:bracket_id + body: json + auth: inherit +} + +params:path { + bracket_id: +} + +body:json { + { + "bracket_type": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Group.bru b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Group.bru new file mode 100644 index 0000000..00c9c60 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Group.bru @@ -0,0 +1,21 @@ +meta { + name: Update Tournament Group + type: http + seq: 9 +} + +put { + url: {{baseUrl}}/api/v1/staging/group/:group_id + body: json + auth: inherit +} + +params:path { + group_id: +} + +body:json { + { + "name": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Stage.bru b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Stage.bru new file mode 100644 index 0000000..82e5ef4 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournament Staging/Update Tournament Stage.bru @@ -0,0 +1,24 @@ +meta { + name: Update Tournament Stage + type: http + seq: 4 +} + +put { + url: {{baseUrl}}/api/v1/staging/stage/:stage_id + body: json + auth: inherit +} + +params:path { + stage_id: +} + +body:json { + { + "name": "", + "stage_type": "", + "order": "", + "config": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Add Court To Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Add Court To Tournament.bru new file mode 100644 index 0000000..cc37f92 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Add Court To Tournament.bru @@ -0,0 +1,23 @@ +meta { + name: Add Court To Tournament + type: http + seq: 12 +} + +post { + url: {{baseUrl}}/api/v1/tournaments/:id/court + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "court_id": 0, + "availability_start": "", + "availability_end": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Add Player To Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Add Player To Tournament.bru new file mode 100644 index 0000000..6d26ac6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Add Player To Tournament.bru @@ -0,0 +1,22 @@ +meta { + name: Add Player To Tournament + type: http + seq: 5 +} + +post { + url: {{baseUrl}}/api/v1/tournaments/:id/player + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "tournament_id": 0, + "player_id": 0 + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Create Tournament Couple.bru b/tournme/collection/PadelTour API/Tournaments/Create Tournament Couple.bru new file mode 100644 index 0000000..c666bc6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Create Tournament Couple.bru @@ -0,0 +1,23 @@ +meta { + name: Create Tournament Couple + type: http + seq: 8 +} + +post { + url: {{baseUrl}}/api/v1/tournaments/:id/couple + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "first_player_id": 0, + "second_player_id": 0, + "name": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Create Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Create Tournament.bru new file mode 100644 index 0000000..dece1f6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Create Tournament.bru @@ -0,0 +1,23 @@ +meta { + name: Create Tournament + type: http + seq: 2 +} + +post { + url: {{baseUrl}}/api/v1/tournaments/ + body: json + auth: inherit +} + +body:json { + { + "name": "", + "description": "", + "images": "", + "start_date": "", + "end_date": "", + "players_number": 0, + "full_description": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Delete Player From Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Delete Player From Tournament.bru new file mode 100644 index 0000000..a9d64a9 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Delete Player From Tournament.bru @@ -0,0 +1,16 @@ +meta { + name: Delete Player From Tournament + type: http + seq: 7 +} + +delete { + url: {{baseUrl}}/api/v1/tournaments/:tournament_id/player/:player_id + body: none + auth: inherit +} + +params:path { + tournament_id: + player_id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Delete Tournament Couple.bru b/tournme/collection/PadelTour API/Tournaments/Delete Tournament Couple.bru new file mode 100644 index 0000000..034a56e --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Delete Tournament Couple.bru @@ -0,0 +1,16 @@ +meta { + name: Delete Tournament Couple + type: http + seq: 11 +} + +delete { + url: {{baseUrl}}/api/v1/tournaments/:tournament_id/couple/:couple_id + body: none + auth: inherit +} + +params:path { + tournament_id: + couple_id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Get All Tournaments.bru b/tournme/collection/PadelTour API/Tournaments/Get All Tournaments.bru new file mode 100644 index 0000000..361dcf8 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Get All Tournaments.bru @@ -0,0 +1,11 @@ +meta { + name: Get All Tournaments + type: http + seq: 1 +} + +get { + url: {{baseUrl}}/api/v1/tournaments/ + body: none + auth: inherit +} diff --git a/tournme/collection/PadelTour API/Tournaments/Get Tournament By Id.bru b/tournme/collection/PadelTour API/Tournaments/Get Tournament By Id.bru new file mode 100644 index 0000000..18794c0 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Get Tournament By Id.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament By Id + type: http + seq: 3 +} + +get { + url: {{baseUrl}}/api/v1/tournaments/:id + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Get Tournament Couples.bru b/tournme/collection/PadelTour API/Tournaments/Get Tournament Couples.bru new file mode 100644 index 0000000..4ac1108 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Get Tournament Couples.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Couples + type: http + seq: 9 +} + +get { + url: {{baseUrl}}/api/v1/tournaments/:id/couple + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Get Tournament Courts.bru b/tournme/collection/PadelTour API/Tournaments/Get Tournament Courts.bru new file mode 100644 index 0000000..90b52c6 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Get Tournament Courts.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Courts + type: http + seq: 13 +} + +get { + url: {{baseUrl}}/api/v1/tournaments/:id/court + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Get Tournament Players.bru b/tournme/collection/PadelTour API/Tournaments/Get Tournament Players.bru new file mode 100644 index 0000000..d4f7c48 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Get Tournament Players.bru @@ -0,0 +1,15 @@ +meta { + name: Get Tournament Players + type: http + seq: 6 +} + +get { + url: {{baseUrl}}/api/v1/tournaments/:id/player + body: none + auth: inherit +} + +params:path { + id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Remove Court From Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Remove Court From Tournament.bru new file mode 100644 index 0000000..f735af7 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Remove Court From Tournament.bru @@ -0,0 +1,16 @@ +meta { + name: Remove Court From Tournament + type: http + seq: 15 +} + +delete { + url: {{baseUrl}}/api/v1/tournaments/:tournament_id/court/:court_id + body: none + auth: inherit +} + +params:path { + tournament_id: + court_id: +} diff --git a/tournme/collection/PadelTour API/Tournaments/Update Tournament Couple.bru b/tournme/collection/PadelTour API/Tournaments/Update Tournament Couple.bru new file mode 100644 index 0000000..259f7ef --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Update Tournament Couple.bru @@ -0,0 +1,25 @@ +meta { + name: Update Tournament Couple + type: http + seq: 10 +} + +put { + url: {{baseUrl}}/api/v1/tournaments/:tournament_id/couple/:couple_id + body: json + auth: inherit +} + +params:path { + tournament_id: + couple_id: +} + +body:json { + { + "tournament_id": "", + "first_player_id": "", + "second_player_id": "", + "name": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Update Tournament Court.bru b/tournme/collection/PadelTour API/Tournaments/Update Tournament Court.bru new file mode 100644 index 0000000..34bf260 --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Update Tournament Court.bru @@ -0,0 +1,23 @@ +meta { + name: Update Tournament Court + type: http + seq: 14 +} + +put { + url: {{baseUrl}}/api/v1/tournaments/:tournament_id/court/:court_id + body: json + auth: inherit +} + +params:path { + tournament_id: + court_id: +} + +body:json { + { + "availability_start": "", + "availability_end": "" + } +} diff --git a/tournme/collection/PadelTour API/Tournaments/Update Tournament.bru b/tournme/collection/PadelTour API/Tournaments/Update Tournament.bru new file mode 100644 index 0000000..010206f --- /dev/null +++ b/tournme/collection/PadelTour API/Tournaments/Update Tournament.bru @@ -0,0 +1,27 @@ +meta { + name: Update Tournament + type: http + seq: 4 +} + +put { + url: {{baseUrl}}/api/v1/tournaments/:id + body: json + auth: inherit +} + +params:path { + id: +} + +body:json { + { + "name": "", + "description": "", + "images": "", + "start_date": "", + "end_date": "", + "players_number": "", + "full_description": "" + } +} diff --git a/tournme/collection/PadelTour API/bruno.json b/tournme/collection/PadelTour API/bruno.json new file mode 100644 index 0000000..a4e2d08 --- /dev/null +++ b/tournme/collection/PadelTour API/bruno.json @@ -0,0 +1,9 @@ +{ + "version": "1", + "name": "PadelTour API", + "type": "collection", + "ignore": [ + "node_modules", + ".git" + ] +} \ No newline at end of file diff --git a/tournme/collection/PadelTour API/collection.bru b/tournme/collection/PadelTour API/collection.bru new file mode 100644 index 0000000..c15274c --- /dev/null +++ b/tournme/collection/PadelTour API/collection.bru @@ -0,0 +1,7 @@ +auth { + mode: bearer +} + +auth:bearer { + token: {{access_token}} +} diff --git a/tournme/collection/PadelTour API/environments/Dev.bru b/tournme/collection/PadelTour API/environments/Dev.bru new file mode 100644 index 0000000..cd4b1d6 --- /dev/null +++ b/tournme/collection/PadelTour API/environments/Dev.bru @@ -0,0 +1,7 @@ +vars { + baseUrl: http://localhost:8000 + username: test@test.it + password: Pass123! + access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE3NTM4MjY5ODR9.kG1cISeoVJOTwZzPDWJdi1UMTVXiTGsB7HFn9DqItdI + tournamentId: 1 +} diff --git a/tournme/collection/PadelTour API/environments/PROD.bru b/tournme/collection/PadelTour API/environments/PROD.bru new file mode 100644 index 0000000..cd4ecb7 --- /dev/null +++ b/tournme/collection/PadelTour API/environments/PROD.bru @@ -0,0 +1,7 @@ +vars { + baseUrl: https://api.tourn.me + username: 02421217 +} +vars:secret [ + password +] diff --git a/tournme/docs/FEATURES.md b/tournme/docs/FEATURES.md new file mode 100644 index 0000000..0de83f0 --- /dev/null +++ b/tournme/docs/FEATURES.md @@ -0,0 +1,65 @@ + +# Project Features + +This document outlines the main features of the Tourn.me application, a comprehensive platform for managing padel tournaments. The project is divided into a frontend application (`app.tourn.me`) and a backend service (`padeltour`). + +## Backend Features (padeltour) + +The backend is built with Python and FastAPI, providing a robust API for the frontend. + +### Core APIs + +- **Authentication**: Handles user login, token refresh, and other authentication-related tasks. +- **Companies**: Manages company information, including admin creation and password changes. +- **Courts**: Provides endpoints for creating, retrieving, updating, and deleting court information. +- **Dashboard**: Offers endpoints to fetch data for the main dashboard, including statistics and overviews. +- **Password Reset**: Manages the password reset process, including token validation and password updates. +- **Players**: Handles player management, including creation, deletion, and association with tournaments. +- **Registration**: Manages the company registration process, including email verification. +- **Tournaments**: Provides comprehensive management of tournaments, from creation to player and court assignments. +- **Tournament Staging**: Manages the different stages of a tournament, including: + - **Brackets**: Handles the creation and management of tournament brackets. + - **Groups**: Manages player groups within a tournament. + - **Matches**: Provides endpoints for match management and scheduling. + - **Scheduling**: Automates the scheduling of matches. + - **Stages**: Manages the different stages of a tournament (e.g., group stage, knockout stage). + - **Stats**: Provides statistics for tournaments. + +## Frontend Features (app.tourn.me) + +The frontend is a Next.js application that provides a user-friendly interface for managing tournaments. + +### Main Sections + +- **Dashboard**: The main landing page after login, providing an overview of key metrics. + - **Overview**: Displays statistics related to sales, user activity, and more. + - **Courts**: Allows for the management of padel courts. + - **Players**: A section for managing players, including creation and viewing. + - **Products**: Manages products or services offered. + - **Profile**: Allows users to manage their company profile and settings. + - **Tournament**: The core section for managing tournaments. + +### Tournament Management + +- **Tournament Creation**: A step-by-step process to create new tournaments. +- **Tournament Overview**: A view of all ongoing and past tournaments. +- **Tournament Details**: A detailed view of a specific tournament, including: + - Player management + - Court assignments + - Match scheduling + - Bracket visualization + +### User Authentication + +- **Sign In/Register**: Standard user authentication pages. +- **Forgot/Reset Password**: A complete flow for password recovery. + +### Other Features + +- **Email Service**: Integrated email notifications for events like registration and password recovery. +- **Internationalization (i18n)**: The application supports multiple languages. +- **Real-time Updates**: The application is set up for real-time data fetching and updates. +- **API Documentation**: The project includes a `collection` folder with API requests for easier testing and integration. +- **Monitoring**: The `grafana` folder suggests that the application is set up for monitoring with Grafana dashboards. +- **Database Migrations**: Uses `alembic` for handling database schema migrations. +- **Containerization**: Both the frontend and backend applications are containerized using Docker. diff --git a/tournme/email/.DS_Store b/tournme/email/.DS_Store new file mode 100644 index 0000000..706bd11 Binary files /dev/null and b/tournme/email/.DS_Store differ diff --git a/tournme/email/1_password_recovery/.DS_Store b/tournme/email/1_password_recovery/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/tournme/email/1_password_recovery/.DS_Store differ diff --git a/tournme/email/1_password_recovery/index.mjml b/tournme/email/1_password_recovery/index.mjml new file mode 100644 index 0000000..174a208 --- /dev/null +++ b/tournme/email/1_password_recovery/index.mjml @@ -0,0 +1,199 @@ + + + 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 0000000..5008ddf Binary files /dev/null and b/tournme/email/2_welcome_email/.DS_Store differ diff --git a/tournme/email/2_welcome_email/index.mjml b/tournme/email/2_welcome_email/index.mjml new file mode 100644 index 0000000..c647e31 --- /dev/null +++ b/tournme/email/2_welcome_email/index.mjml @@ -0,0 +1,201 @@ + + + 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 0000000..5008ddf Binary files /dev/null and b/tournme/email/3_email_verification/.DS_Store differ diff --git a/tournme/email/3_email_verification/index.mjml b/tournme/email/3_email_verification/index.mjml new file mode 100644 index 0000000..ae14e06 --- /dev/null +++ b/tournme/email/3_email_verification/index.mjml @@ -0,0 +1,184 @@ + + + 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 0000000..d31e920 Binary files /dev/null and b/tournme/new/.DS_Store differ 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 0000000..e912cf8 Binary files /dev/null and b/tournme/new/Design Tourn.me UI_UX/.DS_Store differ diff --git a/tournme/new/Design Tourn.me UI_UX/ATTRIBUTIONS.md b/tournme/new/Design Tourn.me UI_UX/ATTRIBUTIONS.md new file mode 100644 index 0000000..9b7cd4e --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/ATTRIBUTIONS.md @@ -0,0 +1,3 @@ +This Figma Make file includes components from [shadcn/ui](https://ui.shadcn.com/) used under [MIT license](https://github.com/shadcn-ui/ui/blob/main/LICENSE.md). + +This Figma Make file includes photos from [Unsplash](https://unsplash.com) used under [license](https://unsplash.com/license). \ No newline at end of file diff --git a/tournme/new/Design Tourn.me UI_UX/README.md b/tournme/new/Design Tourn.me UI_UX/README.md new file mode 100644 index 0000000..9e4d2ed --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/README.md @@ -0,0 +1,11 @@ + + # Design Tourn.me UI/UX + + This is a code bundle for Design Tourn.me UI/UX. The original project is available at https://www.figma.com/design/0YZtNSkuWzMP2azviWvECA/Design-Tourn.me-UI-UX. + + ## Running the code + + Run `npm i` to install the dependencies. + + Run `npm run dev` to start the development server. + \ No newline at end of file diff --git a/tournme/new/Design Tourn.me UI_UX/guidelines/Guidelines.md b/tournme/new/Design Tourn.me UI_UX/guidelines/Guidelines.md new file mode 100644 index 0000000..110f117 --- /dev/null +++ b/tournme/new/Design Tourn.me UI_UX/guidelines/Guidelines.md @@ -0,0 +1,61 @@ +**Add your own guidelines here** + 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 0000000..1f5856e Binary files /dev/null and b/tournme/new/Design Tourn.me UI_UX/src/.DS_Store differ diff --git a/tournme/new/Design Tourn.me UI_UX/src/app/.DS_Store b/tournme/new/Design Tourn.me UI_UX/src/app/.DS_Store new file mode 100644 index 0000000..220f075 Binary files /dev/null and b/tournme/new/Design Tourn.me UI_UX/src/app/.DS_Store differ 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 0000000..adea774 Binary files /dev/null and b/tournme/new/Design Tourn.me UI_UX/src/app/components/.DS_Store differ 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