diff --git a/.drone.yml b/.drone.yml
index d1e4c52..5afa652 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -1,21 +1,26 @@
 kind: pipeline
+type: docker
+name: example pipeline
 
 steps:
-- name: deploy
-  image: drillster/drone-rsync
-  settings:
-    user: 
-      from_secret: user
-    hosts:
-      - samtherapy.net
-    port:
-      from_secret: port
-    key:
-      from_secret: rsync_key
-    recursive: true
-    source:
-    target:
-      from_secret: target
-    args:
-      from_secret: args
-    secrets: [ args, user, port, rsync_key, target ]
+  - name: Build site
+    image: denoland/deno:alpine
+    commands:
+      - deno task build
+
+  - name: Deploy to Deno Deploy (prod)
+    image: git.froth.zone/sam/drone-deno-deploy
+    environment:
+      DENO_DEPLOY_TOKEN:
+        from_secret: DENO_DEPLOY_TOKEN
+    settings:
+      project: samme-blog
+      entrypoint: server.ts
+      production: true
+    depends_on:
+      - "Build site"
+    when:
+      branch:
+      - master
+      event:
+      - push
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..64d3d6a
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: https://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b4b6374
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,88 @@
+# Lume generated site
+dist/
+
+# DS Store
+.DS_Store
+._.DS_Store
+**/.DS_Store
+**/._.DS_Store
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# FuseBox cache
+.fusebox/
+
+# Snyk
+.dccache
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..360a1ea
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "src/_includes/styles/external/pico"]
+	path = src/_includes/styles/external/pico
+	url = https://github.com/picocss/pico
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..c1dddc0
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,13 @@
+{
+	"deno.enable": true,
+	"deno.lint": true,
+	"deno.unstable": true,
+	"deno.config": "./deno.json",
+	"[typescript]": {
+		"editor.defaultFormatter": "denoland.vscode-deno"
+	},
+	"deno.suggest.imports.hosts": {
+		"https://deno.land": true,
+		"https://esm.sh": true
+	}
+}
diff --git a/404.html b/404.html
deleted file mode 100644
index 4c69ed8..0000000
--- a/404.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <title>The Abyss</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <link rel="shortcut icon" href="favicon.png" />
-    <link rel="stylesheet" href="style.css" />
-  </head>
-
-  <body>
-    <div align="center">
-      <h1>404</h1>
-      <em>
-        You may ask yourself:
-        <strong> well, how did I get here? </strong>
-      </em>
-      <br />
-      <small>
-        <small> By a bad link, probably </small>
-      </small>
-      <br />
-      <br />
-      <a href="https://samtherapy.net">Go back home</a>
-    </div>
-  </body>
-</html>
diff --git a/PGP.asc b/PGP.asc
deleted file mode 100644
index 4e258a9..0000000
--- a/PGP.asc
+++ /dev/null
@@ -1,35 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-xsDNBGCfNEIBDADbW1ulzxmX4D5eUswJk86tHI7xeopuH8mfITgvggv3fD8QjDPvlcxaLTZ6dqNw
-ryYR585KK+ONBdbi+5aDtdeyBkhdW0Qky+F0Zfr1lLkn3XaNzJuEYYosnvVH52QnYq7Wi6Azku14
-Z1b0+8ZPgT4/VoxC+t2fleo1tdlveBwzGN0yj/XuSWBrcvbykGYZotz265zzny10WCMFK9XVSP/N
-cecHia1+OwsT1DWr1d1j5FyZV6RWVqwhn12j8fNeXi3s5k9jZsLsYTwwdlC1tc9yLwu5ZufQ2FFq
-d6vfJ0tJ8l++n62Tst6FAyKJ9ZiPGDV8dfSvUByGPZNbnkG/1poiAqtHJJEgPICiOueaDex1ecI6
-px7orbU7gCpxVAkJ+p59NG68mdvuwf2eCRbE4uWV5ws8LB2o6F1AuryAk1K/R1t51aad4nMz0fIe
-QbiWUpw+yczT+4h9V5+5VxbOGCipZmcRJJWkjkphIK/z3bJId7J6zuPI3cUqBhxl5diCLI8AEQEA
-Ac0gU2FtIFRoZXJhcHkgPHNhbUBzYW10aGVyYXB5Lm5ldD7CwQkEEwEIADMWIQQx7EN7RY4ptC92
-RAlNiwfBjzGsvQUCYNChHgIbAwULCQgHAgYVCAkKCwIFFgIDAQAACgkQTYsHwY8xrL0+ogwAsGnS
-0B5ZSKJpQQ/JgH004PDpPALGHdxhtWABiFVuFxuungJP547aWM55p2XwJnHGthUlgjOYYMEDTIhT
-L5rUb5l8FDJPujEic1tIOgFKgWmcwduw1M7KSCMM0baHfZ62T/LhQEfcUnLiL/Go/AMWTgfPQsII
-j1h8GW5vtZ1tvcKbgzXx3mMROK5kBhjXXFXO5mOZiwO7MxRQTsCwyBoP2R5LZD9iCSOD8qgE3+6W
-m68PGklwEPILuziMT3XxcCIeJjOlko/eV03fuSfsN57UjO4Lb8nAzgt26M4rCTl90YKMq9CN9tNG
-nKVHGalOhoAvheVyTYkdhNrvkNiqHMcyO74Dx+0w+GFqYOFF422BGCmwvMUCIPz4a+ESN3M68/yk
-N+Aesiqzgzjy5Bzvxw28WmX2sc68wD8xCdu70fbH1uJwARBTSTUMizfgUbO+G/NEYsEhURi1zZ8k
-8TU0wAf9TL8SfTgL23mVjGJY/vH9Xu3vvvyYbsl817NHgBen8XLmzsDNBGCfNEMBDACgI60ZIzm3
-1UJNUf51dN6MZm2e9v72WopGhhEAHfvwcOw9sAtcX3KR1HGJpp3djJinHWDiX+nxNaE/R6v+gdBI
-MqOc6s7WG1/d38duxcz2oHNyuYYGOMm6QOTbuXw35Sn1QivyXj6T6CCIk2BPX4SlLLgUvL+hggGB
-r3PaGGjczZadJAOmRuddIHb6dtpY/lokDV8q8xmF+A5RaLFpmjQlXfLeeahsHvPDtXJEtSWTaBni
-iJiVPcRxKlL5pmkqoyO0dqZVAZ9R9PxfaTuc0RBy3rmXuiuOX+w4hTLAAbx9GMNJhHBpuL4IRL4n
-50LTAqHjw9rrZtkVtupvzXESM+q1dE2F2ivEWiNNaOkd7jxBhBCWPl8rOtMZ8FAl18vyIR+PF5GI
-OJZZOLyzPPMf7Hj9gw1JT08es2BHSofqpv9KU+OhjpJMs4PC2PuOsZdgNVTeukziSJHwhlhSHV0c
-sKz1LfJYVcemolkuZw2jMSBdUGpyc/l4bU5fWCkqhc+S+r8AEQEAAcLBAAQYAQgAIBYhBDHsQ3tF
-jim0L3ZECU2LB8GPMay9BQJg0KEfAhsMABQJEE2LB8GPMay9CRBNiwfBjzGsva/wC/4zjTQuukN8
-tEvdWR0ZgaZ026X/Wv8pyXINEoEs5WudokXbxJpTgCX/xYcieYbhKtP6NnFEfQs7yH2WZwvruLDv
-qVKqFs3nXGkl3nVPr1HPGFpZg+SyHxHooBr2rBiQpVjpv+HHyqfjyB4CSQGrLrOLOC0QyDVtn9xJ
-MrjicV5uHNH1bE1mDf9Xti7M6yG9rH3+pjmckswPkHBqt9ocvomrUY9JcUxQ3w82+lDYS42gqecY
-k1kGUZ7n7MrRbDGotzbGMQvQ0tpYLo8Szuz1cxpyAGPBWxKdp/B3AvidCtl9YwNLsU9QSLuLH2SQ
-+Z7fUfePSg3aIr4W7emI/5EiBTBDTiI81/78qJmloYYJGdztss2wm6GT4UBSEV+0gpXg6U7hDOxl
-hs3TgNfQj/aZfVcQvqw7A5sh3rySH3imXH4WJZD4BPika7DJuQI8G2IUhgyZ6vKeZlsucJdFLWy3
-8V6RZYY4x0NnqOU9QbWyMKX5CeQiC1W5+QzDvjNs8eaTOH8=
-=5zaJ
------END PGP PUBLIC KEY BLOCK-----
diff --git a/_config.ts b/_config.ts
new file mode 100644
index 0000000..405bc12
--- /dev/null
+++ b/_config.ts
@@ -0,0 +1,30 @@
+import lume from "lume/mod.ts";
+import attributes from "lume/plugins/attributes.ts";
+import codeHighlight from "lume/plugins/code_highlight.ts";
+import date from "lume/plugins/date.ts";
+import jsx_preact from "lume/plugins/jsx_preact.ts";
+// import lightningcss from "lume/plugins/lightningcss.ts";
+import sass from "lume/plugins/sass.ts";
+import svgo from "lume/plugins/svgo.ts";
+
+const site = lume({
+  src: "./src",
+  dest: "./dist",
+});
+
+site
+  .copy("img")
+  .copy(".well-known")
+  .use(attributes())
+  .use(date())
+  .use(jsx_preact())
+  // .use(mdx())
+  .use(sass())
+  .use(codeHighlight())
+  // .use(lightningcss())
+  .use(svgo())
+  .remoteFile(
+    "_includes/styles/external/nord.min.css",
+    "https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.6.0/build/styles/nord.min.css",
+  );
+export default site;
diff --git a/deno.json b/deno.json
new file mode 100644
index 0000000..bace24a
--- /dev/null
+++ b/deno.json
@@ -0,0 +1,12 @@
+{
+  "importMap": "import_map.json",
+  "tasks": {
+    "lume": "deno eval \"import 'lume/task.ts'\" --",
+    "build": "deno task lume",
+    "serve": "deno task lume -s"
+  },
+  "compilerOptions": {
+    "jsx": "react-jsx",
+    "jsxImportSource": "preact"
+  }
+}
diff --git a/import_map.json b/import_map.json
new file mode 100644
index 0000000..d98143e
--- /dev/null
+++ b/import_map.json
@@ -0,0 +1,7 @@
+{
+  "imports": {
+    "lume/": "https://deno.land/x/lume@v1.12.0/",
+    "preact/jsx-runtime": "https://deno.land/x/lume@v1.12.0/deps/preact_runtime.ts",
+    "preact": "https://deno.land/x/lume@v1.12.0/deps/preact.ts"
+  }
+}
diff --git a/index.html b/index.html
deleted file mode 100644
index f80b892..0000000
--- a/index.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-  <title>Plain HTML is good</title>
-  <meta charset="utf-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
-  <link rel="shortcut icon" href="favicon.png" />
-  <link rel="stylesheet" href="style.css" />
-</head>
-
-<body>
-  
-    <span id="header">
-      <h1>Just somebody on the internet</h1>
-      <h2>Just a person on the internet too much.</h2>
-      <br />
-      <br />
-    </span>
-    <div id="grid">
-    <div class="top">
-      <div class="left">
-        <iframe allowfullscreen sandbox="allow-top-navigation allow-scripts" width="400" height="600"
-          src="https://fedifeed.com/api/v1/feed?user=sam&instance=https%3A%2F%2Ffroth.zone&instance_type=&theme=pleroma&size=95&header=true&replies=false&boosts=false"></iframe>
-      </div>
-      <div class="right">
-        <table id="hosting">
-          <tr>
-            <th>Things I host</th>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://froth.zone">Pleroma</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://git.froth.zone">Gitea</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://blog.froth.zone">Writefreely</a>
-            </td>
-          </tr>
-
-          <tr>
-            <td>
-              <a href="https://mk.froth.zone">Misskey</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://funkwhale.samtherapy.net">Funkwhale</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://tube.froth.zone">Peertube</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://poopchan.org">Poopchan</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://cy.tube.froth.zone">Cytube</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://invidious.samtherapy.net">Invidious</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://nitter.bird.froth.zone">Nitter</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://bibliogram.froth.zone">Bibliogram</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://teddit.froth.zone">Teddit</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://scribe.froth.zone">Scribe</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://f.ruina.exposed">linx-server</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://fedifeed.com/">Fedifeed</a>
-              <br />(left)
-            </td>
-          </tr>
-        </table>
-        <br /><br />
-        <table id="comms">
-          <tr>
-            <th>Find me if you want to</th>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://froth.zone/users/sam">Shitpost</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://mk.froth.zone/@samme">Misskey alt</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://git.froth.zone/Sam">Code</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://blog.froth.zone/sam/">Blog</a>
-            </td>
-          </tr>
-          <tr>
-            <td>
-              <a href="https://pixelfed.froth.zone/sam/">Images, possibly</a>
-            </td>
-          </tr>
-        </table>
-      </div>
-    </div>
-    <div class="bottom">
-      <div class="left">
-        <br />
-        <br />
-        <details>
-          <summary>Contact details</summary>
-          <br />
-          Maybe my
-          <a href="/PGP.asc">PGP key</a>
-          if you want to shoot me an email?<br />
-          <small>
-            The fingerprint is 31EC 437B 458E 29B4 2F76 4409 4D8B 07C1 8F31
-            ACBD
-            <br /><br />
-            <small>
-              the email is sam @ this website
-              <br />
-              or on XMPP, same address
-              <br />
-              or on Matrix, @samme:schizo.cafe
-            </small>
-          </small>
-        </details>
-      </div>
-      <div class="right">
-        <br />
-        <br />
-        <em>
-          cool people's secrtion
-          <div id="frens">
-            <a href="https://8777.ch/">8777.ch</a>
-            |
-            <a href="https://coy.neocities.org/~coy/">coy.neocities.org</a>
-            |
-            <a href="https://grumbulon.xyz/">grumbulon.xyz</a>
-            |
-            <a href="https://nekobit.net/">nekobit.net</a>
-            |
-            <a href="https://newblue.life/">newblue.life</a>
-            |
-            <a href="https://the.waifuism.life">the.waifuism.life</a>
-          </div>
-        </em>
-      </div>
-    </div>
-  </div>
-  </footer>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/serve.ts b/serve.ts
new file mode 100644
index 0000000..5f66367
--- /dev/null
+++ b/serve.ts
@@ -0,0 +1,24 @@
+import { Application, Router } from "https://deno.land/x/oak@v11.1.0/mod.ts";
+
+const app = new Application();
+
+// First we try to serve static files from the dist folder. If that fails, we
+// fall through to the router below.
+app.use(async (ctx, next) => {
+	try {
+		await ctx.send({
+			root: `${Deno.cwd()}/dist`,
+			index: "index.html",
+		});
+	} catch {
+		next();
+	}
+});
+
+const router = new Router();
+
+// After creating the router, we can add it to the app.
+app.use(router.routes());
+app.use(router.allowedMethods());
+
+await app.listen({ port: 8000 });
diff --git a/.well-known/host-meta.json b/src/.well-known/host-meta.json
similarity index 100%
rename from .well-known/host-meta.json
rename to src/.well-known/host-meta.json
diff --git a/src/404.md b/src/404.md
new file mode 100644
index 0000000..c214ce6
--- /dev/null
+++ b/src/404.md
@@ -0,0 +1,13 @@
+---
+title: 404 - There's Nothing Here
+layout: layouts/base.tsx
+url: /404.html
+---
+
+# You've found a dead end!
+
+Would you like to [return](/)?
+
+```ts
+window.location.replace("/");
+```
diff --git a/src/_includes/components/navbar.tsx b/src/_includes/components/navbar.tsx
new file mode 100644
index 0000000..8ddd787
--- /dev/null
+++ b/src/_includes/components/navbar.tsx
@@ -0,0 +1,16 @@
+export default () => {
+  return (
+    <nav>
+      <ul>
+        <ul>
+          <li>
+            <a href="https://google.com">Test</a>
+          </li>
+          <li>
+            <a href="https://google.com">Test 2</a>
+          </li>
+        </ul>
+      </ul>
+    </nav>
+  );
+};
diff --git a/src/_includes/layouts/base.tsx b/src/_includes/layouts/base.tsx
new file mode 100644
index 0000000..ba0669e
--- /dev/null
+++ b/src/_includes/layouts/base.tsx
@@ -0,0 +1,27 @@
+// This exists because lume doesn't actually add the <!DOCTYPE> header when rendering.
+export const layout = "layouts/doctype.njk";
+
+import type { PageData } from "lume/core.ts";
+import Navbar from "../components/navbar.tsx";
+
+export default ({ title, children }: PageData) => (
+  <html lang="en">
+    <head>
+      <meta charSet="utf-8" />
+      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
+      <title>{title}</title>
+
+      <link rel="shortcut icon" href="img/favicon.png" />
+      <link rel="stylesheet" href="/styles/style.css" />
+    </head>
+    <body>
+      {/* <header>
+        {/* <Navbar /> 
+      </header> */}
+      <main>
+        {children}
+      </main>
+    </body>
+  </html>
+);
diff --git a/src/_includes/layouts/doctype.njk b/src/_includes/layouts/doctype.njk
new file mode 100644
index 0000000..e9cdbf3
--- /dev/null
+++ b/src/_includes/layouts/doctype.njk
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+{{ content | safe }}
diff --git a/src/_includes/styles/base.scss b/src/_includes/styles/base.scss
new file mode 100644
index 0000000..eba461d
--- /dev/null
+++ b/src/_includes/styles/base.scss
@@ -0,0 +1,16 @@
+// Imports
+@use "styles/external/pico/scss/pico.classless"; // Pico Framework
+@use "styles/external/nord.min"; // Highlight.js
+
+// Font
+@import url("https://rsms.me/inter/inter.css");
+
+html {
+  font-family: "Inter", sans-serif;
+}
+
+@supports (font-variation-settings: normal) {
+  html {
+    font-family: "Inter var", sans-serif;
+  }
+}
diff --git a/src/_includes/styles/external/nord.min.css b/src/_includes/styles/external/nord.min.css
new file mode 100644
index 0000000..efbb0c1
--- /dev/null
+++ b/src/_includes/styles/external/nord.min.css
@@ -0,0 +1 @@
+pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#2e3440}.hljs,.hljs-subst{color:#d8dee9}.hljs-selector-tag{color:#81a1c1}.hljs-selector-id{color:#8fbcbb;font-weight:700}.hljs-selector-attr,.hljs-selector-class{color:#8fbcbb}.hljs-property,.hljs-selector-pseudo{color:#88c0d0}.hljs-addition{background-color:rgba(163,190,140,.5)}.hljs-deletion{background-color:rgba(191,97,106,.5)}.hljs-built_in,.hljs-class,.hljs-type{color:#8fbcbb}.hljs-function,.hljs-function>.hljs-title,.hljs-title.hljs-function{color:#88c0d0}.hljs-keyword,.hljs-literal,.hljs-symbol{color:#81a1c1}.hljs-number{color:#b48ead}.hljs-regexp{color:#ebcb8b}.hljs-string{color:#a3be8c}.hljs-title{color:#8fbcbb}.hljs-params{color:#d8dee9}.hljs-bullet{color:#81a1c1}.hljs-code{color:#8fbcbb}.hljs-emphasis{font-style:italic}.hljs-formula{color:#8fbcbb}.hljs-strong{font-weight:700}.hljs-link:hover{text-decoration:underline}.hljs-comment,.hljs-quote{color:#4c566a}.hljs-doctag{color:#8fbcbb}.hljs-meta,.hljs-meta .hljs-keyword{color:#5e81ac}.hljs-meta .hljs-string{color:#a3be8c}.hljs-attr{color:#8fbcbb}.hljs-attribute{color:#d8dee9}.hljs-name{color:#81a1c1}.hljs-section{color:#88c0d0}.hljs-tag{color:#81a1c1}.hljs-template-variable,.hljs-variable{color:#d8dee9}.hljs-template-tag{color:#5e81ac}.language-abnf .hljs-attribute{color:#88c0d0}.language-abnf .hljs-symbol{color:#ebcb8b}.language-apache .hljs-attribute{color:#88c0d0}.language-apache .hljs-section{color:#81a1c1}.language-arduino .hljs-built_in{color:#88c0d0}.language-aspectj .hljs-meta{color:#d08770}.language-aspectj>.hljs-title{color:#88c0d0}.language-bnf .hljs-attribute{color:#8fbcbb}.language-clojure .hljs-name{color:#88c0d0}.language-clojure .hljs-symbol{color:#ebcb8b}.language-coq .hljs-built_in{color:#88c0d0}.language-cpp .hljs-meta .hljs-string{color:#8fbcbb}.language-css .hljs-built_in{color:#88c0d0}.language-css .hljs-keyword{color:#d08770}.language-diff .hljs-meta,.language-ebnf .hljs-attribute{color:#8fbcbb}.language-glsl .hljs-built_in{color:#88c0d0}.language-groovy .hljs-meta:not(:first-child),.language-haxe .hljs-meta,.language-java .hljs-meta{color:#d08770}.language-ldif .hljs-attribute{color:#8fbcbb}.language-lisp .hljs-name,.language-lua .hljs-built_in,.language-moonscript .hljs-built_in,.language-nginx .hljs-attribute{color:#88c0d0}.language-nginx .hljs-section{color:#5e81ac}.language-pf .hljs-built_in,.language-processing .hljs-built_in{color:#88c0d0}.language-scss .hljs-keyword,.language-stylus .hljs-keyword{color:#81a1c1}.language-swift .hljs-meta{color:#d08770}.language-vim .hljs-built_in{color:#88c0d0;font-style:italic}.language-yaml .hljs-meta{color:#d08770}
\ No newline at end of file
diff --git a/src/_includes/styles/external/pico b/src/_includes/styles/external/pico
new file mode 160000
index 0000000..3052db4
--- /dev/null
+++ b/src/_includes/styles/external/pico
@@ -0,0 +1 @@
+Subproject commit 3052db4bd3439e236479dc0f98069f7d3b559486
diff --git a/src/_site.json b/src/_site.json
new file mode 100644
index 0000000..a8d8fd8
--- /dev/null
+++ b/src/_site.json
@@ -0,0 +1,5 @@
+{
+  "info": {
+    "title": "samtherapy.net"
+  }
+}
diff --git a/favicon.png b/src/img/favicon.png
similarity index 100%
rename from favicon.png
rename to src/img/favicon.png
diff --git a/src/index.md b/src/index.md
new file mode 100644
index 0000000..5330bf8
--- /dev/null
+++ b/src/index.md
@@ -0,0 +1,20 @@
+---
+title: Sam Site 2.0 (currently under construction)
+layout: layouts/base.tsx
+---
+
+# Hello there
+
+This is a website.
+
+## There appears to be nothing here
+
+You would be correct.
+
+### Currently under (re)construction
+
+It'll be ready, eventually. :)
+
+#### Plans
+
+As of now I'm using [lume.land](https://lume.land) and deploying to [Deno Deploy](https://deno.com/deploy) with a [custom Drone CI action](https://git.froth.zone/sam/drone-deno-deploy) ;)
\ No newline at end of file
diff --git a/src/robots.txt.njk b/src/robots.txt.njk
new file mode 100644
index 0000000..4996dc3
--- /dev/null
+++ b/src/robots.txt.njk
@@ -0,0 +1,4 @@
+Sitemap: {{ 'sitemap.xml' | url(true) }}
+
+User-agent: *
+Disallow:
diff --git a/src/styles/style.scss b/src/styles/style.scss
new file mode 100644
index 0000000..619e85f
--- /dev/null
+++ b/src/styles/style.scss
@@ -0,0 +1 @@
+@use "styles/base";
diff --git a/style.css b/style.css
deleted file mode 100644
index 9a16175..0000000
--- a/style.css
+++ /dev/null
@@ -1,85 +0,0 @@
-a {
-  color: rgba(200, 200, 200, 0.8);
-}
-
-a:hover {
-  color: rgba(200, 200, 200, 1);
-}
-
-#frens a {
-  color: rgba(250, 250, 250, 0.4);
-}
-
-#frens a:hover {
-  color: rgba(200, 200, 200, 0.6);
-}
-
-.top, .bottom {
-  display: grid;
-  grid-template-rows: 1fr;
-	grid-column-gap: 0;
-	grid-row-gap: 5%;
-  grid-auto-rows: minmax(100px, auto);
-}
-
-.top {
-  grid-template-rows: 0fr;
-}
-
-.bottom {
-  align-items: center;
-  position: relative;
-}
- 
-.top .left {
-  grid-row: 1 /  2;
-  grid-column: 1 / 2;
-}
-
-.top .right {
-  grid-row: 1 /  2;
-  grid-column: 2 / 2;
-  white-space: nowrap;
-}
-
-bottom .right {
-  position: absolute;
-}
-
-#header {
-  text-align: center;
-}
-
-
-#hosting,
-#comms {
-  border-collapse: collapse;
-  width: 100%;
-  table-layout: fixed;
-  justify-content: right;
-  align-items: right;
-  text-align: center;
-  font-size: larger;
-}
-
-#frens {
-  text-justify: auto;
-}
-
-body {
-  background-color: #000000;
-  color: rgba(255, 255, 255, 1);
-  max-width: 80%;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
-	text-align: center;
-  position: absolute;
-	top: 50%;
-	left: 50%;
-	margin-right: -50%;
-	transform: translate(-50%, -50%);
-  margin: auto;
-  
-}
