diff --git a/404.html b/404.html index 0872a925..47fd29ae 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Bracket - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/runtime~main.09ab2ee6.js b/assets/js/runtime~main.61ff4dd0.js similarity index 55% rename from assets/js/runtime~main.09ab2ee6.js rename to assets/js/runtime~main.61ff4dd0.js index bded0980..ef80873b 100644 --- a/assets/js/runtime~main.09ab2ee6.js +++ b/assets/js/runtime~main.61ff4dd0.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,o,a,n={},f={};function i(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=n,i.c=f,e=[],i.O=(t,r,o,a)=>{if(!r){var n=1/0;for(u=0;u=a)&&Object.keys(i.O).every((e=>i.O[e](r[c])))?r.splice(c--,1):(f=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,o,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var a=Object.create(null);i.r(a);var n={};t=t||[null,r({}),r([]),r(r)];for(var f=2&o&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,i.d(a,n),a},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"assets/js/"+({53:"935f2afb",94:"bf6dd32c",152:"54f44165",195:"c4f5d8e4",389:"aa772da0",436:"009f1e98",514:"1be78505",671:"0e384e19",794:"e88453fb",817:"14eb3368",918:"17896441"}[e]||e)+"."+{53:"c9e8d3bf",94:"4d6b032a",152:"f1e53ac0",195:"ebf6f254",389:"85974226",436:"4d6b81d3",514:"e4d1af46",671:"a8b391df",794:"e2f46da5",817:"a6446dee",918:"21b2e013",972:"d5cc17b1"}[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},a="docs:",i.l=(e,t,r,n)=>{if(o[e])o[e].push(t);else{var f,c;if(void 0!==r)for(var d=document.getElementsByTagName("script"),u=0;u{f.onerror=f.onload=null,clearTimeout(b);var a=o[e];if(delete o[e],f.parentNode&&f.parentNode.removeChild(f),a&&a.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),c&&document.head.appendChild(f)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/bracket/",i.gca=function(e){return e={17896441:"918","935f2afb":"53",bf6dd32c:"94","54f44165":"152",c4f5d8e4:"195",aa772da0:"389","009f1e98":"436","1be78505":"514","0e384e19":"671",e88453fb:"794","14eb3368":"817"}[e]||e,i.p+i.u(e)},(()=>{var e={303:0,532:0};i.f.j=(t,r)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var a=new Promise(((r,a)=>o=e[t]=[r,a]));r.push(o[2]=a);var n=i.p+i.u(t),f=new Error;i.l(n,(r=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+a+": "+n+")",f.name="ChunkLoadError",f.type=a,f.request=n,o[1](f)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var o,a,n=r[0],f=r[1],c=r[2],d=0;if(n.some((t=>0!==e[t]))){for(o in f)i.o(f,o)&&(i.m[o]=f[o]);if(c)var u=c(i)}for(t&&t(r);d{"use strict";var e,t,r,o,n,a={},f={};function i(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,i.c=f,e=[],i.O=(t,r,o,n)=>{if(!r){var a=1/0;for(d=0;d=n)&&Object.keys(i.O).every((e=>i.O[e](r[c])))?r.splice(c--,1):(f=!1,n0&&e[d-1][2]>n;d--)e[d]=e[d-1];e[d]=[r,o,n]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var n=Object.create(null);i.r(n);var a={};t=t||[null,r({}),r([]),r(r)];for(var f=2&o&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>a[t]=()=>e[t]));return a.default=()=>e,i.d(n,a),n},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"assets/js/"+({53:"935f2afb",94:"bf6dd32c",152:"54f44165",195:"c4f5d8e4",389:"aa772da0",436:"009f1e98",514:"1be78505",671:"0e384e19",794:"e88453fb",817:"14eb3368",918:"17896441"}[e]||e)+"."+{53:"c9e8d3bf",94:"4d6b032a",152:"f1e53ac0",195:"ebf6f254",389:"85974226",436:"4d6b81d3",514:"e4d1af46",671:"a8b391df",794:"e2f46da5",817:"a6446dee",918:"21b2e013",972:"d5cc17b1"}[e]+".js",i.miniCssF=e=>{},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},n="docs:",i.l=(e,t,r,a)=>{if(o[e])o[e].push(t);else{var f,c;if(void 0!==r)for(var u=document.getElementsByTagName("script"),d=0;d{f.onerror=f.onload=null,clearTimeout(b);var n=o[e];if(delete o[e],f.parentNode&&f.parentNode.removeChild(f),n&&n.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),c&&document.head.appendChild(f)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/bracket/",i.gca=function(e){return e={17896441:"918","935f2afb":"53",bf6dd32c:"94","54f44165":"152",c4f5d8e4:"195",aa772da0:"389","009f1e98":"436","1be78505":"514","0e384e19":"671",e88453fb:"794","14eb3368":"817"}[e]||e,i.p+i.u(e)},(()=>{var e={303:0,532:0};i.f.j=(t,r)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var n=new Promise(((r,n)=>o=e[t]=[r,n]));r.push(o[2]=n);var a=i.p+i.u(t),f=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var n=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+n+": "+a+")",f.name="ChunkLoadError",f.type=n,f.request=a,o[1](f)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var o,n,a=r[0],f=r[1],c=r[2],u=0;if(a.some((t=>0!==e[t]))){for(o in f)i.o(f,o)&&(i.m[o]=f[o]);if(c)var d=c(i)}for(t&&t(r);u Getting Started | Bracket - + - + \ No newline at end of file diff --git a/docs/getting-started/configuration/index.html b/docs/getting-started/configuration/index.html index 8d70ff6e..4c53ebaa 100644 --- a/docs/getting-started/configuration/index.html +++ b/docs/getting-started/configuration/index.html @@ -4,13 +4,13 @@ Configuration | Bracket - +

Configuration

Copy ci.env to prod.env and fill in the values:

  • PG_DSN: The URL of the PostgreSQL database
  • JWT_SECRET: Create a random secret using openssl rand -hex 32
  • CORS_ORIGINS and CORS_ORIGIN_REGEX: Specify allowed frontend domain names for CORS (see the FastAPI docs)
  • ADMIN_EMAIL and ADMIN_PASSWORD: The credentials of the admin user, which is created when initializing the database
  • SENTRY_DSN: The Sentry DSN for monitoring and error tracking

Example configuration file

This is an example of how the config file should look like:

PG_DSN='postgresql://bracket_ci:bracket_ci@localhost:5532/bracket_ci'
JWT_SECRET='60eed5c5dc7a919b8595a23d6c42ddd8274e4feea651dc028d9bee495bbb9acd'
CORS_ORIGINS='https://bracket.mydomain.com'
CORS_ORIGIN_REGEX='https://.*\.vercel\.app'
ADMIN_EMAIL='admin@example.com'
ADMIN_PASSWORD='some unused password'
SENTRY_DSN='my sentry dsn'
- + \ No newline at end of file diff --git a/docs/getting-started/installation/index.html b/docs/getting-started/installation/index.html index f7f7e2ec..c391d744 100644 --- a/docs/getting-started/installation/index.html +++ b/docs/getting-started/installation/index.html @@ -4,13 +4,13 @@ Installation | Bracket - +

Installation

Database

First create a bracket cluster:

sudo pg_createcluster -u postgres -p 5532 13 bracket
pg_ctlcluster 13 bracket start

Subsequently, create a new bracket_dev database:

sudo -Hu postgres psql  -p 5532
CREATE USER bracket_dev WITH PASSWORD 'bracket_dev';
CREATE DATABASE bracket_dev OWNER bracket_dev;

You can do the same but replace the user and database name with:

  • bracket_ci: for running tests
  • bracket_prod: for a production database

The database URL can be specified per environment in the .env files (see config).

Running the frontend and backend

The following starts the frontend and backend for local development:

Frontend

cd frontend
yarn
npm run dev

Backend

cd backend
pipenv install -d
pipenv shell
./run.sh
- + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index b8373324..198ebf17 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -4,7 +4,7 @@ Introduction | Bracket - + @@ -12,7 +12,7 @@

Introduction

Bracket is a tournament system meant to be easy to use. Bracket is written in async Python (with FastAPI) and Next.js as frontend using the Mantine library.

- + \ No newline at end of file diff --git a/index.html b/index.html index f317d556..58fcc1bd 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,13 @@ Bracket - +

Bracket

Tournament system

Self-hosted

Bracket is fully open source and you are free to host it yourself.

Flexible

Bracket supports multiple tournament types (ladder and swiss), teams can be added/changed during the tournament and new matches can be scheduled while the last round has not yet finished.

Easy to use

The UI is meant to be easy to use while providing maximum flexibility.

- + \ No newline at end of file