Joshua Potter

Hosted

The applications listed below are served from NixOS machines hosted on Digital Ocean . Configuration files for each of my machines can be found here . If interested in starting a similar hosting solution, consider getting a $200 credit using my referral link .

Hide and Seek 12 Apr 2024

Realtime hide-and-seek application for the town of Fort Collins, built using Phoenix and React . Group up with friends, designate a hider, and allow the rest of the group to find the hider in a city-wide search. Use various clues to narrow down the search space at the cost of potentially giving the hider means of thwarting the search.

Notebook 30 Jan 2024

A static site generated with Quartz . Contains a collection of my transcribed notes, primarily Markdown managed using Obsidian . Hidden within are a collection of Anki flashcards synced using Obsidian_to_Anki .

Forgejo 23 Dec 2023

A self-hosted Forgejo instance. For the most part, my GitHub repositories are a mirror of those found here. There do exist a few repos though that live exclusively on either site.

BoardWise 26 Nov 2023

A Phoenix - and React -based project that provides an interface for finding chess coaches. This serves as an alternative to those found on Lichess and Chess.com . Based on the Tailwind Studio theme.

Bookshelf 05 Feb 2023

A collection of books I am actively studying. Usually mathematics or computer-science based, I aim to prove concepts as I encounter them using the Lean interactive theorem prover. All proofs are also available in LaTeX .

Looped 04 Apr 2021

VP of engineering at Looped, the "Ultimate Virtual Venue". Featured on Forbes and TechCrunch . Led development on the Kotlin-based Android app (50K+ downloads, 4.5 star review), the Swift-based iOS app (100K+ downloads, 4.8 star review), the Vue-based web app, and the Django-based backend.

Projects

Other notable projects I've worked on or am currently working on.

Bookshelf Doc Generator 14 Dec 2023

A fork of doc-gen4 tightly coupled to my bookshelf project. This augments the :docs facet to convert LaTeX files into PDFs and then list them in the generated navbar.

NixOS Configuration 10 Dec 2023

The nix configuration files used to declaratively describe my local and remote machines. The site you are on now is declared within this project!

Bootstrap 17 Nov 2023

A C-based CLI for initializing projects in a flexible but deterministic way. Originally motivated to serve as a better alternative to Nix flake templates , bootstrap allows you to provide different parameters to custom initialization scripts akin to npm init, django-admin startproject, etc.

Anki Synonyms 02 Jul 2022

An Anki plugin for specifying synonyms within flashcard question and answer prompts.

Homesync 28 Dec 2021

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 and pushes/pulls them as they happen.

Postlude 29 Mar 2020

An example of a custom-rolled Prelude . 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.

Vim Join 25 Jul 2017

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.

Vim Highlight 25 Jul 2017

A small Vim plugin that maintains a custom registry for manipulating highlights. This registry allows highlighting different keywords without overriding previous searches. Includes a small snippet for including the active highlight from within the statusline.

Pong 01 Oct 2015

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.

Fifth 20 Jun 2015

A library for parsing various rulesets for cellular automata machines (CAMs). The parsed CAM is displayed using matplotlib . For instance, this library parses ruleset B3/S23 and then produces a running visualization of Conway's Game of Life.

Mini Java 24 Mar 2015

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.

Blog

Long-form writing on topics that I found interesting.

Effect Systems 20 Mar 2022

As I’ve begun exploring the world of so-called algebraic effect systems, I’ve become increasingly frustrated in the level of documentation around them. Learning to use them (and moreso understanding how they work) requires diving into library internals, watching various videos, and hoping to grok why certain effects aren’t being interpreted the way you might have hoped. My goal in this post is to address this issue, at least to some degree, in a focused, pedagogical fashion.

Tagless Final Parsing 25 Dec 2021

In his introductory text , Oleg Kiselyov discusses the tagless final strategy for implementing DSLs. The approach permits leveraging the strong typing provided by some host language in a performant way. This post combines key thoughts from a selection of papers and code written on the topic. We conclude with an implementation of an interpreter for a toy language that runs quickly, remains strongly-typed, and can be extended without modification.