diff --git a/island.html b/island.html
new file mode 100644
index 0000000..bdf91a7
--- /dev/null
+++ b/island.html
@@ -0,0 +1,11 @@
+<html>
+  <head>
+    <title>ProcGen Island</title>
+  </head>
+  <body>
+    <script src="js/island.js"></script>
+    <script>
+      document.body.append(...IslandApplet());
+    </script>
+  </body>
+</html>
diff --git a/island.ts b/island.ts
new file mode 100644
index 0000000..43e0f6d
--- /dev/null
+++ b/island.ts
@@ -0,0 +1,25 @@
+const BLOWUP = 4;
+const WIDTH = 240;
+const HEIGHT = 135;
+
+export function IslandApplet() {
+  const canvas = Object.assign(document.createElement("canvas"), {
+    width: WIDTH * BLOWUP,
+    height: HEIGHT * BLOWUP,
+  } satisfies Partial<HTMLCanvasElement>);
+
+  const cx = canvas.getContext("2d");
+  if (!cx) {
+    throw new Error("2D rendering context not supported");
+  }
+  cx.scale(BLOWUP, BLOWUP);
+
+  cx.fillStyle = "red";
+  cx.fillRect(0, 0, WIDTH, HEIGHT);
+  cx.fillStyle = "blue";
+  cx.fillRect(1, 1, WIDTH - 2, HEIGHT - 2);
+
+  return [canvas];
+}
+
+(globalThis as any).IslandApplet = IslandApplet;