diff --git a/backend/.gitignore b/backend/.gitignore
new file mode 100644
index 0000000..485dee6
--- /dev/null
+++ b/backend/.gitignore
@@ -0,0 +1 @@
+.idea
diff --git a/backend/api.go b/backend/api.go
new file mode 100644
index 0000000..80b4438
--- /dev/null
+++ b/backend/api.go
@@ -0,0 +1,15 @@
+package main
+
+import "net/http"
+
+type ApiHandler struct {
+}
+
+func NewApiHandler() *ApiHandler {
+ // TODO
+ return &ApiHandler{}
+}
+
+func (api *ApiHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ // TODO
+}
diff --git a/backend/backend.iml b/backend/backend.iml
new file mode 100644
index 0000000..eacc75a
--- /dev/null
+++ b/backend/backend.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/go.mod b/backend/go.mod
new file mode 100644
index 0000000..b5e093e
--- /dev/null
+++ b/backend/go.mod
@@ -0,0 +1,3 @@
+module backend
+
+go 1.25
diff --git a/backend/main.go b/backend/main.go
new file mode 100644
index 0000000..74a9a23
--- /dev/null
+++ b/backend/main.go
@@ -0,0 +1,32 @@
+package main
+
+import (
+ "log"
+ "net/http"
+ "os"
+)
+
+func main() {
+ port := os.Getenv("PORT")
+ if port == "" {
+ port = "8080"
+ }
+
+ staticFolder := os.Getenv("STATIC_FOLDER")
+ if staticFolder == "" {
+ staticFolder = "static"
+ }
+
+ fsHandler := http.FileServer(http.Dir(staticFolder))
+ apiHandler := NewApiHandler()
+
+ mux := http.NewServeMux()
+ mux.Handle("/", fsHandler)
+ mux.Handle("/api/", apiHandler)
+
+ log.Println("Listening on port", port)
+ err := http.ListenAndServe(":"+port, mux)
+ if err != nil {
+ log.Fatalln(err.Error())
+ }
+}
diff --git a/shell.nix b/shell.nix
index 40eb577..5f83469 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,5 +1,8 @@
{ pkgs ? import {} }:
pkgs.mkShell {
- nativeBuildInputs = with pkgs.buildPackages; [ nodejs ];
+ nativeBuildInputs = with pkgs.buildPackages; [
+ go
+ nodejs
+ ];
}