diff --git a/_layouts/projects.html b/_layouts/projects.html
index 1776382..e71decf 100644
--- a/_layouts/projects.html
+++ b/_layouts/projects.html
@@ -6,16 +6,33 @@ layout: default
{% if post.categories contains "project" %}
+ {% if post.href %}
{{ post.title }}
+ {% else %}
+ {{ post.title }}
+ {% endif %}
{% if post.image %}
{% endif %}
- {{ post.content }}
- {{ post.href }} - {{ post.date | date_to_string }}
+
+ {% for tag in post.tags %}
+
{{ tag }}
+ {% endfor %}
+
+
{{ post.content }}
+
+ {% if post.href %}
+ {{ post.href }} -
+ {% endif %}
+
+ {{ post.date | date_to_string }}
+
{% endif %}
diff --git a/_posts/2015-03-24-mini-java.md b/_posts/2015-03-24-mini-java.md
new file mode 100644
index 0000000..4777207
--- /dev/null
+++ b/_posts/2015-03-24-mini-java.md
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Mini Java
+categories: project
+tags: [java]
+href: "https://github.com/jrpotter/mini-java"
+---
+
+A Java implemention of a subset of Java. Generates code that targets mJAM, an
+abstract machine included in the source that supports running `miniJava`. In
+particular, this implementation supports various primitives, array types, and,
+to a certain degree, classes.
diff --git a/_posts/2015-06-20-fifth.md b/_posts/2015-06-20-fifth.md
new file mode 100644
index 0000000..f8d88be
--- /dev/null
+++ b/_posts/2015-06-20-fifth.md
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Fifth
+categories: project
+tags: [python]
+href: "https://github.com/jrpotter/fifth"
+---
+
+A library for parsing various rulesets for cellular automata machines (CAMs).
+The parsed CAM is displayed using [matplotlib](https://matplotlib.org){:target="_blank"}.
+For instance, this library parses ruleset `B3/S23` and then produces a running
+visualization of Conway's Game of Life.
diff --git a/_posts/2015-10-01-pong.md b/_posts/2015-10-01-pong.md
new file mode 100644
index 0000000..493ded4
--- /dev/null
+++ b/_posts/2015-10-01-pong.md
@@ -0,0 +1,13 @@
+---
+layout: post
+title: Pong
+categories: project
+tags: [verilog]
+href: "https://github.com/jrpotter/pong"
+---
+
+An implementation of the classic pong video game, written from scratch on an
+Artix FPGA using System Verilog. This works on a custom ALU intended to process
+an arbitrary MIPS program with modified memory configuration: `.text 0x0000`
+and `.data 0x2000`. A memory mapped IO scheme is used to draw to the monitor and
+interact with the keyboard.
diff --git a/_posts/2017-07-25-vim-highlight.md b/_posts/2017-07-25-vim-highlight.md
new file mode 100644
index 0000000..158b9dd
--- /dev/null
+++ b/_posts/2017-07-25-vim-highlight.md
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Highlight Plugin
+categories: project
+tags: [vim, vimscript]
+href: "https://github.com/jrpotter/vim-highlight"
+---
+
+A small Vim plugin that maintains a custom registry for manipulating highlights.
+This registry allows highlighting different keywords without overriding previous
+seaarches. Includes a small snippet for including the active highlight from
+within the statusline.
diff --git a/_posts/2017-07-25-vim-join.md b/_posts/2017-07-25-vim-join.md
new file mode 100644
index 0000000..72085ac
--- /dev/null
+++ b/_posts/2017-07-25-vim-join.md
@@ -0,0 +1,11 @@
+---
+layout: post
+title: Join Plugin
+categories: project
+tags: [vim, vimscript]
+href: "https://github.com/jrpotter/vim-join"
+---
+
+A small Vim plugin that joins a number of lines together and then breaks them
+again with respect to the `textwidth` parameter. This enables re-flowing a set
+of lines similar in manner to `fold` or `fmt`.
diff --git a/_posts/2020-03-29-postlude.md b/_posts/2020-03-29-postlude.md
new file mode 100644
index 0000000..dd54ebf
--- /dev/null
+++ b/_posts/2020-03-29-postlude.md
@@ -0,0 +1,13 @@
+---
+layout: post
+title: Postlude
+categories: project
+tags: [haskell]
+href: "https://github.com/jrpotter/postlude"
+---
+
+An example of a custom-rolled
+[Prelude](https://hackage.haskell.org/package/base-4.19.0.0/docs/Prelude.html){:target="_blank"}.
+Serves as a fairly comprehensive list of imports I found relevant across the
+various Haskell projects I worked on as well as a demonstration on how
+forwarding imports with Haskell works.
diff --git a/_posts/2021-04-01-looped.md b/_posts/2021-04-01-looped.md
new file mode 100644
index 0000000..d076f0e
--- /dev/null
+++ b/_posts/2021-04-01-looped.md
@@ -0,0 +1,15 @@
+---
+layout: post
+title: Looped
+categories: home
+tags: [python, swift, kotlin, vue]
+image: looped.png
+---
+
+VP of engineering at Looped, the "Ultimate Virtual Venue". Featured on
+[TechCrunch](https://techcrunch.com/2021/03/02/looped-raises-7-7m-to-expand-its-interactive-live-event-platform){:target="_blank"}
+after the initial seed round. Led development on the Kotlin-based
+[Android app](https://play.google.com/store/apps/details?id=com.vipvr.android){:target="_blank"}
+(featuring 50K+ downloads and a 4.5 star review), the Swift-based iOS app (no
+longer available), the Vue-based web app (no longer available), and the
+Django-based backend.
diff --git a/_posts/2021-12-28-homesync.html b/_posts/2021-12-28-homesync.html
index 271f167..1751457 100644
--- a/_posts/2021-12-28-homesync.html
+++ b/_posts/2021-12-28-homesync.html
@@ -6,7 +6,7 @@ tags: [rust, git, nix]
href: "https://github.com/jrpotter/homesync"
---
-An experimental Rust-based project for automatically syncing files scross your
+An experimental Rust-based project for automatically syncing files across your
desktop to a git repository. Allows upstream and downstream syncing with a
single command, without any need to copy files manually to and from a git
repository. Separately, a daemon can be spawned that watches files for changes
diff --git a/_posts/2023-11-17-bootstrap.md b/_posts/2023-11-17-bootstrap.md
index 47ce3c6..701c696 100644
--- a/_posts/2023-11-17-bootstrap.md
+++ b/_posts/2023-11-17-bootstrap.md
@@ -1,6 +1,6 @@
---
layout: post
-title: Boostrap
+title: Bootstrap
categories: project
tags: [c, nix]
href: "https://github.com/jrpotter/bootstrap"
diff --git a/_posts/2023-12-10-nixos-configuration.md b/_posts/2023-12-10-nixos-configuration.md
new file mode 100644
index 0000000..39757e3
--- /dev/null
+++ b/_posts/2023-12-10-nixos-configuration.md
@@ -0,0 +1,11 @@
+---
+layout: post
+title: NixOS Configuration
+categories: project
+tags: [nix]
+href: "https://github.com/jrpotter/nixos-configuration"
+---
+
+The [nix](https://nixos.org){:target="_blank"} configuration files used to
+declaratively describe my local and remote machines. The site you are on now is
+declared within this project!
diff --git a/_posts/2023-12-14-bookshelf-doc.md b/_posts/2023-12-14-bookshelf-doc.md
new file mode 100644
index 0000000..632627b
--- /dev/null
+++ b/_posts/2023-12-14-bookshelf-doc.md
@@ -0,0 +1,12 @@
+---
+layout: post
+title: Bookshelf Doc Generator
+categories: project
+tags: [lean]
+href: "https://github.com/jrpotter/bookshelf-doc"
+---
+
+A fork of [doc-gen4](https://github.com/leanprover/doc-gen4){:target="_blank"}
+tightly coupled to my [bookshelf](https://github.com/jrpotter/bookshelf){:target="_blank"}
+project. This augments the `:docs` facet to convert LaTeX files into PDFs and
+then list them in the generated navbar.
diff --git a/_sass/_post.scss b/_sass/_post.scss
index edce735..3f4fb43 100644
--- a/_sass/_post.scss
+++ b/_sass/_post.scss
@@ -7,13 +7,25 @@
}
}
+.post-tags {
+ display: flex;
+ gap: 8px;
+
+ div {
+ background: #e0e0e0;
+ border-radius: 999px;
+ padding: 2px 8px;
+ font-size: 16px;
+ }
+}
+
.post-date {
display: block;
- margin-top:3px;
+ margin-top: 3px;
margin-bottom: 1rem;
color: $light-gray-color;
font-family: $sans-serif-font-family;
- font-size:0.8rem;
+ font-size: 0.8rem;
}
@media (max-width: $elements-responsive-width) {