diff --git a/src/Http/Handlers/GetMatchView.php b/src/Http/Handlers/GetMatchView.php
new file mode 100644
index 0000000..31f8521
--- /dev/null
+++ b/src/Http/Handlers/GetMatchView.php
@@ -0,0 +1,24 @@
+ $params */
+ public function handle(Request $request, array $params): Response
+ {
+ $csrf = $request->cookies['__csrf'] ?? '';
+
+ ob_start();
+ require_once __DIR__ . '/../../Views/layout.php';
+ require __DIR__ . '/../../Views/match.php';
+ $body = (string) ob_get_clean();
+
+ return Response::html(200, $body);
+ }
+}
diff --git a/src/Views/match.php b/src/Views/match.php
new file mode 100644
index 0000000..dcd7859
--- /dev/null
+++ b/src/Views/match.php
@@ -0,0 +1,43 @@
+ Escape::attr($v);
+ ?>
+
+
+
+
+
+
+
+
+
+ handle($request, []);
+
+ self::assertSame(200, $response->status);
+ self::assertStringContainsString('text/html', $response->headers['Content-Type'] ?? '');
+ self::assertSame('nosniff', $response->headers['X-Content-Type-Options']);
+ self::assertStringContainsString('default-src', $response->headers['Content-Security-Policy']);
+
+ self::assertStringContainsString('id="bf-match-header"', $response->body);
+ self::assertStringContainsString('id="bf-end-turn"', $response->body);
+ self::assertStringContainsString('id="bf-grid"', $response->body);
+ self::assertStringContainsString('id="bf-panel"', $response->body);
+ self::assertStringContainsString('id="bf-action-move"', $response->body);
+ self::assertStringContainsString('id="bf-action-attack"', $response->body);
+ self::assertStringContainsString('id="bf-action-ability"', $response->body);
+ self::assertStringContainsString('id="bf-selected-unit"', $response->body);
+ self::assertStringContainsString('id="bf-log"', $response->body);
+ self::assertStringContainsString('id="bf-result"', $response->body);
+ self::assertStringContainsString('id="bf-winner"', $response->body);
+ self::assertStringContainsString('id="bf-return-home"', $response->body);
+ self::assertStringContainsString('src="/js/match.js"', $response->body);
+ self::assertStringContainsString('name="csrf-token"', $response->body);
+ }
+}