diff --git a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Player.java b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Player.java
index ca124371f0686e555a38a8f95342f88c11dd070b..5044850dbe214ab08fd5f4d334664842e096353b 100644
--- a/sth-backend/src/main/java/hdm/mi/sthbackend/model/Player.java
+++ b/sth-backend/src/main/java/hdm/mi/sthbackend/model/Player.java
@@ -12,8 +12,10 @@ import java.util.UUID;
 @Document("Player")
 @AllArgsConstructor
 public class Player {
+
     @Id
     private final UUID playerId;
     @Setter
     private String name;
+
 }
diff --git a/sth-frontend/.env b/sth-frontend/.env
new file mode 100644
index 0000000000000000000000000000000000000000..a97bd7733774a0d552408b194bada84ba0847ac6
--- /dev/null
+++ b/sth-frontend/.env
@@ -0,0 +1,2 @@
+# .env
+
diff --git a/sth-frontend/.env.developement b/sth-frontend/.env.developement
new file mode 100644
index 0000000000000000000000000000000000000000..3533d50c62f1f8c09861795dea1e6cd8398ea56e
--- /dev/null
+++ b/sth-frontend/.env.developement
@@ -0,0 +1 @@
+VITE_BASE_URL=http://localhost:8080
\ No newline at end of file
diff --git a/sth-frontend/.env.production b/sth-frontend/.env.production
new file mode 100644
index 0000000000000000000000000000000000000000..3533d50c62f1f8c09861795dea1e6cd8398ea56e
--- /dev/null
+++ b/sth-frontend/.env.production
@@ -0,0 +1 @@
+VITE_BASE_URL=http://localhost:8080
\ No newline at end of file
diff --git a/sth-frontend/package-lock.json b/sth-frontend/package-lock.json
index b67f2562ea56e35e5bd0e55519ae382fdbc825ce..9afe47756c44a61ab7f633f417b44e21cb01ff31 100644
--- a/sth-frontend/package-lock.json
+++ b/sth-frontend/package-lock.json
@@ -15,6 +15,7 @@
         "react": "^18.2.0",
         "react-dom": "^18.2.0",
         "react-router-dom": "^6.20.1",
+        "tailwind-merge": "^2.2.0",
         "web-vitals": "^2.1.4"
       },
       "devDependencies": {
@@ -331,9 +332,9 @@
       }
     },
     "node_modules/@babel/runtime": {
-      "version": "7.23.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
-      "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+      "version": "7.23.8",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+      "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
       },
@@ -3916,6 +3917,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/tailwind-merge": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.0.tgz",
+      "integrity": "sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.23.5"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/dcastil"
+      }
+    },
     "node_modules/tailwindcss": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz",
@@ -4458,9 +4471,9 @@
       }
     },
     "@babel/runtime": {
-      "version": "7.23.2",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
-      "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+      "version": "7.23.8",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+      "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
       "requires": {
         "regenerator-runtime": "^0.14.0"
       }
@@ -6849,6 +6862,14 @@
       "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
       "dev": true
     },
+    "tailwind-merge": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.0.tgz",
+      "integrity": "sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==",
+      "requires": {
+        "@babel/runtime": "^7.23.5"
+      }
+    },
     "tailwindcss": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz",
diff --git a/sth-frontend/package.json b/sth-frontend/package.json
index ae412db2840a642d56867df9daf6068f41554698..2681dc3f8c9a60384d704c22b657cd6fa68750ce 100644
--- a/sth-frontend/package.json
+++ b/sth-frontend/package.json
@@ -10,6 +10,7 @@
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "react-router-dom": "^6.20.1",
+    "tailwind-merge": "^2.2.0",
     "web-vitals": "^2.1.4"
   },
   "scripts": {
diff --git a/sth-frontend/src/App.jsx b/sth-frontend/src/App.jsx
index 44798e3def41b80c43e008ad69853579271fb8af..cd877e1cf671d69ec4559b8cf0d918cb366386b7 100644
--- a/sth-frontend/src/App.jsx
+++ b/sth-frontend/src/App.jsx
@@ -1,6 +1,7 @@
 import Navbar from "./layouts/Navbar";
 import {Outlet} from "react-router-dom";
 import "./index.css"
+import Button from "./components/Button";
 
 function App() {
   return (
@@ -9,7 +10,7 @@ function App() {
           <div className={'p-6'}>
               <Outlet />
           </div>
-
+          <Button className={'bg-blue-500'}>Hello</Button>
       </>
   );
 }
diff --git a/sth-frontend/src/components/Button.jsx b/sth-frontend/src/components/Button.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..42ec094c97360120c88dc1fb53f115095b940d74
--- /dev/null
+++ b/sth-frontend/src/components/Button.jsx
@@ -0,0 +1,7 @@
+import {twMerge} from "tailwind-merge";
+
+export default function Button({children, className, ...props}) {
+    return (
+        <button {...props} className={twMerge('bg-red-400', className)}>{children}</button>
+    )
+}
\ No newline at end of file
diff --git a/sth-frontend/src/components/TournamentForm.jsx b/sth-frontend/src/components/TournamentForm.jsx
index d66c5cc1b6a24d456d38cf3c455b05fb82bbd3f7..71962aa13563dfbbe010f64ce4fa5035236d9b74 100644
--- a/sth-frontend/src/components/TournamentForm.jsx
+++ b/sth-frontend/src/components/TournamentForm.jsx
@@ -1,18 +1,73 @@
+import {useRef, useState} from "react";
+import Button from "./Button";
+import {createTournament} from "../features/tournament/services";
 
 
-export default function TournamentForm(){
+export default function TournamentForm({setIsOpen}) {
+
+    const [tournamentName, setTournamentName] = useState('')
+    const [teamName, setTeamName] = useState('')
+    const [teamNames, setTeamNames] = useState([])
+
+
+    const handleOnChange = (event, set) => {
+        set(event.target.value);
+
+    }
+
+    const handleOnKeyDown = (event) => {
+        if (event.key === 'Enter') {
+            event.preventDefault()
+            setTeamNames([...teamNames, teamName])
+            setTeamName('');
+        }
+    }
+    const handleRemoveTeam = (index) => {
+        setTeamNames(teamNames.filter((teamName, i) => i !== index))
+    }
+
+
+    const handleSubmit = async (event) => {
+        event.preventDefault()
+        const tournament = {
+            name: tournamentName,
+            teams: teamNames
+        }
+        try {
+            await createTournament(tournament)
+            setIsOpen(false);
+            setTournamentName('')
+            setTeamName('')
+            setTeamNames([])
+        } catch (e) {
+
+        }
+
+    }
 
     return (
-        <form className={'flex flex-col'}>
-            <label htmlFor='tName'>Tournament Name</label>
-            <input type='text' id='tName'/>
-            <label htmlFor='teamCount'>Player Count</label>
-            <input type='number' id='teamCount'/>
-            <label htmlFor='tournamentType'>Tournament Type</label>
-            <select id='tournamentType'>
-                <option value='bracketing'>Bracketing</option>
-            </select>
-            <input type='submit'/>
-        </form>
+        <div className={'w-[40vw]'}>
+            <button className={'absolute top-0 right-0 m-1'}
+                    onClick={() => setIsOpen(false)}>❌
+            </button>
+            <form className={'flex flex-col'} onSubmit={handleSubmit}>
+                <label htmlFor='tournamentName'>Tournament Name</label>
+                <input type='text' id='tournamentName' value={tournamentName}
+                       onChange={(event) => handleOnChange(event, setTournamentName)}/>
+                <label htmlFor='teamNames'>Team Name</label>
+                <input type='text' id='teamNames' value={teamName}
+                       onChange={(event) => handleOnChange(event, setTeamName)}
+                       onKeyDown={handleOnKeyDown}/>
+                <input className={'bg-green-700'} type='submit'/>
+                <ul>
+                    {teamNames.map((teamName, index) => <li key={index}>
+                        <div>
+                            {teamName}
+                            <Button onClick={() => handleRemoveTeam(index)}>Remove</Button>
+                        </div>
+                    </li>)}
+                </ul>
+            </form>
+        </div>
     )
-}
\ No newline at end of file
+}
diff --git a/sth-frontend/src/features/tournament/components/BracketingRound.jsx b/sth-frontend/src/features/tournament/components/BracketingRound.jsx
index b20d07cadd565f0074a5a9d2bd94be21d671cabc..ccac084577b284d3cedc9c74d79285cd480be367 100644
--- a/sth-frontend/src/features/tournament/components/BracketingRound.jsx
+++ b/sth-frontend/src/features/tournament/components/BracketingRound.jsx
@@ -4,8 +4,7 @@ export default function BracketingRound({matchesNum}) {
     const matches = [];
 
     for (let i = 0; i < matchesNum; i++) {
-        matches.push(<Match style={i + 1} key={i} />)
-
+        matches.push(<Match style={i + 1} key={i}/>);
     }
 
     return(
diff --git a/sth-frontend/src/features/tournament/services/index.js b/sth-frontend/src/features/tournament/services/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3706bcd0216f974284d94425e2c8d1364c877e31
--- /dev/null
+++ b/sth-frontend/src/features/tournament/services/index.js
@@ -0,0 +1,2 @@
+
+export { createTournament } from './tournamentService';
\ No newline at end of file
diff --git a/sth-frontend/src/features/tournament/services/tournamentService.js b/sth-frontend/src/features/tournament/services/tournamentService.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd02f1168aed0fc127f5d6b2b45691ff3a771301
--- /dev/null
+++ b/sth-frontend/src/features/tournament/services/tournamentService.js
@@ -0,0 +1,28 @@
+async function createTournament(tournament) {
+
+    const baseURL = import.meta.env.BASE_URL;
+    const url = `${baseURL}/api/v1/tournaments/`;
+    const options = {
+        method: 'POST',
+        headers: {
+            'Content-Type': 'application/json',
+
+        },
+        body: JSON.stringify(tournament),
+        mode: 'cors',
+        credentials: 'include'
+    };
+
+    try {
+        console.log('fetching');
+        const response = await fetch(url, options);
+
+        if (!response.ok) {
+            throw new HttpResponseError('Bad fetch', response);
+        }
+    } catch (error) {
+        throw error;
+    }
+}
+
+export { createTournament };
diff --git a/sth-frontend/src/layouts/Navbar.jsx b/sth-frontend/src/layouts/Navbar.jsx
index 71f7374ef12a4a440bbe2c002dca00983f8f809e..dc6654418a7a0e84533d3d74fc5181a5322834a4 100644
--- a/sth-frontend/src/layouts/Navbar.jsx
+++ b/sth-frontend/src/layouts/Navbar.jsx
@@ -6,16 +6,14 @@ import TournamentForm from "../components/TournamentForm";
 export default function Navbar() {
     const [isOpen, setIsOpen] = useState(false)
 
+    if (true) {
+
+    }
 
     return (
             <nav className="flex items-center justify-end h-14 bg-gray-100 fixed w-full top-0 left-0 z-10 hover:shadow duration-100">
                 <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>
-                    <div className={'w-[40vw]'}>
-                        <button className={'absolute top-0 right-0 m-1'}
-                                onClick={() => setIsOpen(false)}>❌
-                        </button>
-                        <TournamentForm />
-                    </div>
+                    <TournamentForm setIsOpen={setIsOpen}/>
                 </Modal>
                 <div className={'mr-12'}>
                     <ul className="flex justify-evenly items-center w-full h-full text-gray-400">
@@ -32,5 +30,5 @@ export default function Navbar() {
                     </ul>
                 </div>
             </nav>
-    )
+    );
 }
\ No newline at end of file
diff --git a/sth-frontend/src/utils/errors/httpResponseError.js b/sth-frontend/src/utils/errors/httpResponseError.js
new file mode 100644
index 0000000000000000000000000000000000000000..16ab9b11dc4836504b7c83f8b7a50b360db6a87a
--- /dev/null
+++ b/sth-frontend/src/utils/errors/httpResponseError.js
@@ -0,0 +1,7 @@
+
+class HttpResponseError extends Error {
+  constructor(message, response) {
+    super(message);
+    this.response = response;
+  }
+}
\ No newline at end of file