diff --git a/src/routes.php b/src/routes.php
index 3ca485d..25b5b87 100644
--- a/src/routes.php
+++ b/src/routes.php
@@ -13,3 +13,38 @@ $app->get('/', function (Request $request, Response $response, $args) {
'server_dir' => $config->get('server_directory'),
]);
})->setName('index');
+
+// create GET route - this page allows a user to create a new server instance
+$app->get('/create', function (Request $request, Response $response, $args) {
+ $view = Twig::fromRequest($request);
+ return $view->render($response, 'create.twig');
+})->setName('create');
+
+// create POST route - processes the new server creation
+$app->post('/create', function (Request $request, Response $response, $args) {
+ // set up the POST parameters and grab our config
+ $params = (array)$request->getParsedBody();
+ $config = $this->get('config');
+
+ // create our server directory
+ $serverDir = join('/', array($config->get('server_directory'), $params['serverName']));
+ mkdir($serverDir);
+
+ // grab the server JAR file
+ $serverJarUrl = "https://piston-data.mojang.com/v1/objects/f69c284232d7c7580bd89a5a4931c3581eae1378/server.jar";
+ $serverJarName = "server_" . $params['serverVersion'] . ".jar";
+ $serverJarPath = join('/', array($serverDir, $serverJarName));
+ file_put_contents($serverJarPath, file_get_contents($serverJarUrl));
+
+ // create the start.sh shell script
+ $scriptFilePath = join('/', array($serverDir, 'start.sh'));
+ $scriptFile = fopen($scriptFilePath, 'w');
+ $scriptContent = "#!/bin/sh\n\ncd " . $serverDir . "\njava -Xmx2048M -Xms2048M -jar server_1.19.2.jar nogui";
+ fwrite($scriptFile, $scriptContent);
+ fclose($scriptFile);
+ chmod($scriptFilePath, 0755);
+
+ return $response
+ ->withHeader('Location', '/')
+ ->withStatus(302);
+});
diff --git a/views/create.twig b/views/create.twig
new file mode 100644
index 0000000..b581dd5
--- /dev/null
+++ b/views/create.twig
@@ -0,0 +1,40 @@
+{% extends 'layout.twig' %}
+
+{% block content %}
+
+
+Create new server
+