diff --git a/src/routes/admin/index.svelte b/src/routes/admin/index.svelte
index 141b5bf..8853c0b 100644
--- a/src/routes/admin/index.svelte
+++ b/src/routes/admin/index.svelte
@@ -1 +1,36 @@
+
+
Administration Area
+Add a cat
+
+
+
+{#if showSuccess}
+ Successfully beamed up the kitty!
+{/if}
+
+
diff --git a/src/routes/cat/cats.json.ts b/src/routes/cat/cats.json.ts
new file mode 100644
index 0000000..eb6fb24
--- /dev/null
+++ b/src/routes/cat/cats.json.ts
@@ -0,0 +1,47 @@
+function encode(input: Uint8Array) {
+ const keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+ let output = '';
+ let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ let i = 0;
+
+ while (i < input.length) {
+ chr1 = input[i++];
+ chr2 = i < input.length ? input[i++] : Number.NaN; // Not sure if the index
+ chr3 = i < input.length ? input[i++] : Number.NaN; // checks are needed here
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+ output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
+ }
+ return output;
+}
+
+export async function GET({ request, params }) {
+ const response = await fetch('https://catapi.cf4.workers.dev/list');
+ const asJson = await response.json();
+
+ const resultcats = await Promise.all(
+ asJson.map(async (cat) => {
+ const catimage = await fetch(`https://catapi.cf4.workers.dev/${cat.key}`);
+ const img = await catimage.arrayBuffer();
+
+ const b64 = encode(new Uint8Array(img));
+ return { ...cat, b64 };
+ }),
+ );
+
+ return {
+ status: response.status,
+ body: {
+ cats: response.ok && resultcats,
+ },
+ };
+}
diff --git a/src/routes/cat/index.svelte b/src/routes/cat/index.svelte
new file mode 100644
index 0000000..2aff911
--- /dev/null
+++ b/src/routes/cat/index.svelte
@@ -0,0 +1,29 @@
+
+
+
+
+{#each cats as cat}
+
+{/each}
+
+