diff --git a/.gitignore b/.gitignore
index 4cfac023511141804267bbbfa49d89e8b2442369..811fe806880cef8cc196c8c646d879f25ec82504 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,4 +46,6 @@ __sapper__/
 # Frontend specific
 frontend/dist
 
-*.bak
\ No newline at end of file
+*.bak
+*_templ.go
+*.out.css
\ No newline at end of file
diff --git a/Taskfile.yml b/Taskfile.yml
index 3003ef94300fb5a62a33c407b7037afa2a8b422e..324e543069f580916221770d54a2175d42a1c716 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -380,6 +380,7 @@ tasks:
               vars:
                   BUILD_FLAGS: "{{.BUILD_FLAGS}}"
         cmds:
+            - templ generate
             - bun run build
 
     generate:bindings:
@@ -434,6 +435,7 @@ tasks:
     dev:
         summary: Runs the application in development mode
         cmds:
+            - task: build:frontend
             - wails3 dev -config ./build/devmode.config.yaml -port {{.VITE_PORT}}
 
     dev:reload:
diff --git a/app.go b/app.go
index 7c40c982a3c4aa8716dcbfb3e232a8577be070f8..f4c485fdab5fc4ab1f35b661af301180289e9a81 100644
--- a/app.go
+++ b/app.go
@@ -1,18 +1,18 @@
 package main
 
 import (
-	"net/http"
-
+	"github.com/a-h/templ"
 	"github.com/go-chi/chi/v5"
 	"github.com/go-chi/chi/v5/middleware"
 )
 
-func NewChiRouter() {
+func NewChiRouter() *chi.Mux {
 	r := chi.NewRouter()
+
 	r.Use(middleware.Logger)
 	r.Use(middleware.Recoverer)
 
-	r.Get("/", func(w http.ResponseWriter, r *http.Request) {
-		w.Write([]byte("hello world"))
-	})
+	r.Get("/test", templ.Handler(Hello()).ServeHTTP)
+
+	return r
 }
diff --git a/frontend/index.html b/frontend/index.html
index 826aaeb74402c9793685cb53a23c49cf425cd11b..503128f9de92570170d518c39f77c2c1b097ba5d 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -1,14 +1,18 @@
-<!DOCTYPE html>
-<html lang="en">
+<html
+    class="font-[Inter,_Avenir,_Helvetica,_Arial,_sans-serif] text-[16px] leading-[24px] font-normal [color-scheme:light_dark] text-[rgba(255,_255,_255,_0.87)] bg-[#242424] antialiased"
+    lang="en">
 
 <head>
-  <meta charset="UTF-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-  <title>AstroProject</title>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <script src="https://unpkg.com/htmx.org"></script>
+    <link rel="stylesheet" href="/index.css" />
+    <title>Wails</title>
 </head>
 
-<body>
-  <div id="app"></div>
+<body class="m-0 flex place-items-center min-w-[320px] min-h-screen">
+    <!-- On load, get /test and replace the content of the div with the response -->
+    <div id="me" hx-get="/test" hx-trigger="load" hx-target="#me" hx-swap="outerHTML"></div>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/frontend/src/Util.ts b/frontend/src/Util.ts
deleted file mode 100644
index 1b01e9799c69d4cf9c95c142ea9d16f8f782ff42..0000000000000000000000000000000000000000
--- a/frontend/src/Util.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import type { Nation } from "../bindings/changeme/astro/services/models";
-
-export function randomColor(brightness: number): string {
-  function randomChannel(brightness: number): string {
-    var r = 255-brightness;
-    var n = 0|((Math.random() * r) + brightness);
-    var s = n.toString(16);
-    return (s.length==1) ? '0'+s : s;
-  }
-  return '#' + randomChannel(brightness) + randomChannel(brightness) + randomChannel(brightness);
-}
-
-export const rightBrighness = 240;
-
-export function getNationFlag(nation: Nation | null): string {
-
-  if (!nation) {
-    return "https://flagsapi.com/FR/flat/64.png";
-  }
-
-  console.log(`"${nation.nation_code}"`);
-
-  return `https://flagsapi.com/${nation.nation_code}/flat/64.png`
-}
-
-export function getNationFlatAlt(nation: Nation | null): string {
-  if (!nation) {
-    return "FR";
-  }
-
-  return nation.nation_code;
-}
\ No newline at end of file
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
deleted file mode 100644
index 4078e7476a2eaf5705d327b5c9d459c234c01652..0000000000000000000000000000000000000000
--- a/frontend/src/vite-env.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-/// <reference types="svelte" />
-/// <reference types="vite/client" />
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index 831b210d3008bd83fe869bd595224adde21511fe..5992aa9cf621b1a39377aaae00f88867a3f19d9d 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -1,6 +1,6 @@
 /** @type {import('tailwindcss').Config} */
 module.exports = {
-    content: ["./index.html"],
+    content: [ "./index.html"],
     theme: {
         extend: {},
     },
diff --git a/go.mod b/go.mod
index a12230a62fd98dc040456a57b7c0f09ef080fa16..5285e3c590ac2b0facdfc29dabeb70b8e28357cb 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,7 @@ module changeme
 go 1.22.4
 
 require (
+	github.com/a-h/templ v0.2.747
 	github.com/go-chi/chi/v5 v5.1.0
 	github.com/go-faker/faker/v4 v4.4.2
 	github.com/wailsapp/wails/v3 v3.0.0-alpha.0
diff --git a/go.sum b/go.sum
index a3ab6b981dc1c4ff0554de365a4e26c5d95464a6..e0d83362ed4d9d7d1ec582b83aee131dd5c383d5 100644
--- a/go.sum
+++ b/go.sum
@@ -5,6 +5,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc
 github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
 github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
 github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
+github.com/a-h/templ v0.2.747 h1:D0dQ2lxC3W7Dxl6fxQ/1zZHBQslSkTSvl5FxP/CfdKg=
+github.com/a-h/templ v0.2.747/go.mod h1:69ObQIbrcuwPCU32ohNaWce3Cb7qM5GMiqN1K+2yop4=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
diff --git a/hello.templ b/hello.templ
new file mode 100644
index 0000000000000000000000000000000000000000..5962d4e11def7d5a216b7bf66ee7a75694419ecd
--- /dev/null
+++ b/hello.templ
@@ -0,0 +1,5 @@
+package main
+
+templ Hello() {
+	<div>Hello</div>
+}
diff --git a/main.go b/main.go
index b13218a3f6651f0e96496d998b7f1567b898663b..1b567575adf730922bd08a7d10879672be0d865b 100644
--- a/main.go
+++ b/main.go
@@ -3,6 +3,7 @@ package main
 import (
 	"embed"
 	"log"
+	"net/http"
 
 	"github.com/wailsapp/wails/v3/pkg/application"
 
@@ -13,7 +14,7 @@ var assets embed.FS
 
 func main() {
 
-	NewChiRouter()
+	r := NewChiRouter()
 
 	session := services.Session{}
 
@@ -29,6 +30,10 @@ func main() {
 		},
 		Assets: application.AssetOptions{
 			Handler: application.AssetFileServerFS(assets),
+			Middleware: func(next http.Handler) http.Handler {
+				r.NotFound(next.ServeHTTP)
+				return r
+			},
 		},
 		Mac: application.MacOptions{
 			ApplicationShouldTerminateAfterLastWindowClosed: true,