diff --git a/head b/head
index 735ff02..753cdbd 100644
--- a/head
+++ b/head
@@ -1,4 +1,4 @@
-
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e2b4d9d
--- /dev/null
+++ b/index.html
@@ -0,0 +1,91 @@
+
+logan's site
+
+me
+I am a programming and philosophy enthusiast. Once upon a time i was a
+competitive debater on a few local and state circuits. After over 10 years of
+doing robotics I'm finally starting to get the hang of it. Currently in the
+process of discovering my love for hypertext and the world wide web!
+portfolio
+
+- my git server
+- http web server
+- html templating language
+- stack based assembly language
+- kinematic image processing
+- n dimensional cartesian product
+- stock trading algorithm
+
+
\ No newline at end of file
diff --git a/index.md b/index.md
index 7841eb2..3435db6 100644
--- a/index.md
+++ b/index.md
@@ -1,5 +1,6 @@
# logan's site
+
## me
I am a programming and philosophy enthusiast. Once upon a time i was a
competitive debater on a few local and state circuits. After over 10 years of
diff --git a/projects/fishbowl.html b/projects/fishbowl.html
new file mode 100644
index 0000000..626b171
--- /dev/null
+++ b/projects/fishbowl.html
@@ -0,0 +1,106 @@
+
+fishbowl
+Choose an image and click submit. The image will be sent and processed by my
+server, so be mindful of what you submit. No logs or copies of the input are
+preserved.
+
+
+<script>
+const form = document.getElementById("fishForm");
+const image = document.getElementById("fishImage");
+form.onsubmit = async (ev) => {
+ ev.preventDefault();
+ image.src = "";
+ try {
+ const file = document.getElementById("fishFile").files[0];
+ const arrayBuf = await file.arrayBuffer();
+ const response = await fetch("/api/fishbowl", {
+ method: 'POST',
+ body: arrayBuf,
+ });
+ const blob = await response.blob();
+ image.src = URL.createObjectURL(blob);
+ } catch (error) {
+ console.log(error);
+ }
+}
+</script>
+
\ No newline at end of file