![LFG Bot icon](/_astro/lfgbot_icon.BlyLXBaG_Z2by6Q6.webp)
LFG Bot
• Elixir, Phoenix, Ash, PostgreSQL, Fly.io, Discord
GitHub PageA Discord LFG (Looking For Group) bot for organizing in-house 5v5 matches of Counter-Strike, Valorant, Overwatch, etc.
This was a quick project (< 1 month), and an excuse to ship something new using Elixir. I'm pretty proud of this one! I haven't come across many other bots that run persistent, session-based interfaces inside a text chat channel.
Startup Message
![the discord bot's startup message, with a button underneath labelled 'new group'](/_astro/lfgbot_init_msg.CVTT1oDi_Z1qleSy.webp)
Empty Teams
![a discord message showing a group with two empty teams, and buttons to leave/join or control the session underneath](/_astro/lfgbot_group_msg_empty.BgD_XTI9_ZFVWm7.webp)
Full Teams
![a discord message showing a group with 10 players split between two teams, and buttons to leave/join or control the session underneath](/_astro/lfgbot_group_msg_full.OH_15C6o_TWKSj.webp)
![tntp logo icon](/_astro/tntp-icon.DwsfiPzF_Z2o4W1a.webp)
tntp
• S.js, Surplus, JavaScript
GitHub PageA bare-bones new tab page WebExtension. Inspired by Speed Dial in the Vivaldi browser (and Opera, back in the day). This was an exercise in learning how to make a browser extension.
Note from 2024: S.js is a signals-based reactivity library, and Surplus is a JSX-based UI library for S.js. Having now used Solid.js a lot, it's funny to look back on this and realize it's the same thing! By the time I first picked up Solid, I had totally forgotten that I worked in this stack once before.
![TNTP New tab page](/_astro/tntp-newtab.DrPMJvEs_ZJFHiF.webp)
![TNTP edit screen](/_astro/tntp-edit.CmbrhDGk_Z1cJixH.webp)
Issue Tracker
• React, Koa, GraphQL, Node.js, TypeScript
GitHub PageA prototype issue tracking app, built with React. This was an exercise in learning new server-side JavaScript/TypeScript technologies (Koa & GraphQL).
![Preview of issue tracker](/_astro/issue-tracker.pzUc2gm5_ZHAWLV.webp)
![Twitchi logo](/_astro/twitchi-icon.BmECNnDq_ZQn5ag.webp)
Twitchi
• Hyperapp, Electron, Stylus, JavaScript
Documentation • GitHub PageA Twitch follow list viewer integrated with Streamlink. View your follow list, and click a stream to open it using Streamlink or a Twitch pop-out player.
![Twitchi interface](/_astro/twitchi-home.BqSEasCT_Z9Lu9g.webp)
Hyperapp Router
• HyperApp, JavaScript
GitHub PageA Higher-order app providing minimal top-level routing for the Hyperapp framework.
IPC Result
• JavaScript
GitHub PageA small Node.js module for tracking operation status and value in JavaScript, useful for Electron webview ↔ window IPC calls.
![gDiscordBot icon](/_astro/gdiscordbot-icon.Dwbswh-s_ZODVup.webp)
gDiscordBot
• Discordie, Node.js, JavaScript
GitHub PageA plugin-driven Discord bot platform based on the Discordie node.js library.
![DSAS icon](/_astro/dsas-icon.CbweuEEK_1vxp8.webp)
Deep Space All-Stars
• Unity, C#
GitHub PageUnity-based shoot-em-up style game (think Space Invaders) for mobile devices.