A feed of everything Purdue Hackers members have shipped.
i cant stop shipping

purdue hackers logo at G4G

https://opcs.cart.moe/ Optimizing Purdue CS now has a nice website! in case that was ever holding anyone back from sharing it. also hint Nominations for outstanding service to the department are open until March 24
submitted to figbuild last night! had a lot of fun working on this :D
notjinon.github.io:employment-trail/game.html
the game has been updated
major changes:
thanks @hyprox/matthew for catching a gamebreaking bug
and thanks alicia/jadden/emily for playtesting v2.0

phone bells are finally done! people on the inside can dial 0 while on a call and open the doors automatically


built an api to query for purdue hackers information from our documentation in notion! this uses the notion-fs library i built above + agentfs (on turso) + just-bash. this approach is much better than RAG because most frontier models have been rl'd on coding environments and bash enough to be able to navigate a filesystem and use tools with better accuracy than embedding models can accurately retrieve data. this was mostly an experiment just to see if its possible to build something like this, pleased it works as well as it does :)
i'll integrate it into my next project (public-facing docs mirror from our notion) so folks can try it out!
repo: purduehackers/notion-ai

shipped my notion-fs library. i managed to hijack the notion markdown api instead of having to develop my own codec, so its significantly faster, makes fewer requests, and is more reliable to work with!
will be using this now for other projects but sharing here :)
repo: rayhanadev/notion-fs npm: https://www.npmjs.com/package/@rayhanadev/notion-fs

I reconfigured my MacOS setup to use the PaperWM sliding window manager! @Kian @Ray
sign dash is LIVE! Admins can now manage Wi-Fi networks for all provisioned Signs (soon to include DSAI)

lunar lander v2 has been shipped!!!
you can now play it anytime and anywhere with friends :)
features:
and more! :D
play: https://lunar.purduehackers.com/ repo: purduehackers/lunar

I too did a set! soundcloud-og.com:xendergo/jack-night-3
spent a couple hours on this earlier today, polished it up and published it :)
do you HATE opening up the purdue menus app or going to the dining website to see what's in the menu for today? fret not, you can now puruse the purdue menus straight from your terminal! :D
featuring:
super quick hack, tried to make it as not buggy as possible and have good ux. built using bun, opentui, and react :)
you can install it by running: bun install -g @rayhanadev/purdue-menus and then run pmenu
repo: rayhanadev/purdue-menu-tui npm: https://npmjs.com/package/@rayhanadev/purdue-menus
i fixed a macos app i started using jurplel/InstantSpaceSwitcher#8
soundcloud.com:everlastingweekdays/weakdays-first-dj-set-at hello i also did a set
I need to go in and make the cover art and the title and the tracklist and like everything but heres the audio file rn im at all hands rn #SHIPPINGDURINGALLHANDS #foundermode https://soundcloud-og.com/user-177606668/habiboi-secret-event-3/s-9i8TXR2IrG3?si=1906eb7fb4bd41a6a7d0c52d37f9e602&utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing
oh hey i also played a set for jack night 3 soundcloud-og.com:fizzyapple12/jack-night-3
First set is up! soundcloud-og.com:imthesquid/imthesquid-jack-night-3
Forgot to ship this last night: the gpgparty tool used last night at the GPG intro and keysigning session! URL: https://gpgparty.ericswpark.com Source: ericswpark/gpgparty And if you want to rewatch the session you will be able to here: https://links.ericswpark.com/phackers-gpg-session Many thanks to everyone that participated in the session, and to Kian for helping me find an edge case in the underlying GPG library!
Open-source 2D IDE for agentic coding using native CLIs, multi-machine, multi-project - can have all of your projects, repos, beads issues tables on the same screen.
View Claude Code usage, git trees, and maintain up to 49 terminals all on the webUI accessible from anywhere, including mobile.
https://49agents.com https://github.com/49Agents/49Agents/
Please guys leave a star its my first open-source project and I have no idea how to market it outside reddit and twitter hahah


i played my first venue last night! this was my first time playing on a cdj and there were a bunch of surprises. when i got on stage i discovered the mixer wasn't the one i expected and i couldn't use my headphones with it, and also the cue button on the right cdj had broken. so i was mixing based on what i heard from the audience speakers and had to improvise around not being to use the cue button half the time, which my set makes heavy use of.
unfortunately because of all this i am not proud of the end result. i worked around the cue button issue mostly well but i made a bunch of mistakes from not being able to hear the output properly - for example i didn't notice the echo effect lasted longer than 1 beat and it made all the parts with that effect sound terrible. there's a part where i had reverb on for like 30 seconds and it made one of the transitions a lot worse. and some other small timing and mix volume mistakes.
i uploaded a dry run that i ran on my controller last week that i feel went a lot better: soundcloud-og.com:hewillyeah/itp-and-friends-dry-run-02-23-2026
but i also uploaded the real thing anyway because even though i'm not personally proud of the end result, i still had a great time and people loved the performance, so i'm still proud of this set! i'm especially proud that i broke new ground. link to that in the thread
yay @ja @zero and i worked on a daily puzzle game inspired by enclose.horse where you try to serve all customers in the least amount of steps! go try it out :D https://etea.cafe/
after a bunch of work! the GPU Programming Workshop Happened! cc @matthew!!! re: purdue hackers is dying
no it's not.
battling a migrate today, but i finally got the switches and keycaps to put together my custom keyboard! :)
lifted this frame off aiden (seems to be a yunzii al65 v1) and added durock t1 tactile switches plus some random keycaps i found on amazon. its a 65% keyboard so im going to have to figure out how to navigate less keys but its fun to use so far :)




new macos wallpaper, lifted an image off google and mashed it in grainrad

Rebased my NixOS configuration from root, and edited the initial commit to reflect my config's history. Now, it's my commits, and nobody else's.
Only 7 more commits to go :)

Intermediate ship, i made a benchmark zoo site for wasm engines https://mkhan45.github.io/wasure/ The current suite isn't the most representative; I think it overemphasizes numeric stuff a lot
Over the past few days I have gotten signatures from people I really admire:
green - Donald knuth yellow - Lucas garron orange - Matt parker blue - Tomas Rokicki white - Max park (this was many years ago) red - Adam savage


door-opener x ada-pusher finally ships! Passport-based entry is now back up and running 🙂 purduehackers/door-opener purduehackers/ada-pusher
I am now completely free of Cloudflare! Just waiting on the NS records to propagate for unreliable.email, and I'm good to go!
Also simplified my DNS config a little bit.

finally got around to shipping new website! we're going straight from v8 -> v10
my original motivation to make a new website was to simplify it dramatically so i can get in the 100kb club and also refresh my visual style. i made a website v9 that i was sharing around, but i wasn't really satisfied with how it looked. it also didn't really have any unique flavor that made it mine.
i decided to start from scratch and finally ditch astro, which atp i'd been using for the past 4-5 generations of my website. i wanted to do something that involved http/3 so i decided to write a go server. originally i was going to implement the http/3 spec by hand but then i decided that wasn't worth the trouble lol. but i did end up adding some really neat features though:
[stream:char-speed], clip, and [pause:ms] tags, and passthrough htmlcurl-edthere's more stuff too that's cool, you can check out the repo to see it :)
(also, website is now 20.75kb and 55% of the codebase is HCL and 33% is go tehe)
site: https://rayhanadev.com/ repo: rayhanadev/site
Wrote a Markov model bot trained on this server's messages. Run </imitate:1473746307771531367> to use it.
Use </opt-out:1473789569890779320> to opt out if you must :(

APPLE CAN'T STOP ME HAHAHAHA
I got functionality working with iOS 26.4 beta 1! They tried to patch it but i found a way around. You can also now apply more than 10 wallpapers at a time it seems.
I don't know if I ever checkpointed this on Discord, but following the above DNS ships I'm officially concluding the great DNS Experiment of 2026
TL;DR: Being authoritative for your own DNS servers is pretty cool™
So I wanted to move away from Cloudflare who I was really only using to do DNS anyway, and I started the experiment 12 days ago. I initially moved the domain shad.moe to a named server on my reverse proxy server, and made Hurricane Electric act as a secondary authoritative server (for free!)
This has worked nearly flawlessly (and has been stable) with only one or two small issues that have been since resolved. As such, I have now moved my other two domains, konpeki.solutions and konpekisolutions.com, onto the same named server. Cue confetti!

First try 
First certificate issued by a DNS-01 challenge to my own nameservers!

inx.moe:system/#iris Accompanying small ship, added Iris to my list of computers
Screw Cloudflare, this is MY HOUSE now.
git.inx.moe:Infinidoge/universe93ee83b..6ca7395
Now I just need to migrate my other domains.
Will I migrate vulcan.moe? We'll see.

I have a ship now cause this took too much effort not to I use Smallstep CA for some private/internal things (I.E. Certificates for non-internet routed domains, SSH authentication) and it's been down for awhile due to it needing it's own SSL Certificate and not a normal LetsEncrypt one which Nginx was insisting on placing
This is easily solvable using Nginx Stream Blocks... except port 443 is taken by Nginx HTTP routing. So, what to do? After some troubleshooting, the answer is "simple". Make Nginx Stream listen on port 443, route traffic with Proxy Protocol Enabled (To keep the Forwarded For IP) by the SNI of the request. If it matches a set list (currently ca.shad.moe / ca.konpeki.solutions) then forward it to localhost:445 which is Nginx Stream Blocks again and will then check the SNI again to get a final destination IP address and route it there without Proxy Protocol (since the downstream has no clue what that is). If the first SNI check doesn't see a listed domain, then it routes to localhost:444, which (surprise!) is another Nginx Stream Block this time connecting with Proxy Protocol to localhost:8443 which is now what Nginx's normal HTTP mode is listening on!
... This sucks. But it's the only way I could get this to work and it should never ever be a problem again™!
Iris has been installed!
Note to self, write my own nixos-install script

built the first iteration of a "smart" and "highly-capable" agentic system that we can use for operations at purdue hackers :)
i took inspiration from linear's slack bot which you can ping anywhere, and somehow magically has enough context to understand what you want to do and can take actions across your linear workspace. i reverse-engineered how it works and they made some very interesting technical decisions, especially with their concept of progressively-disclosed "skill bundles".
i don't know how linear's slack bot is implemented so i did my best to implement what i felt was a good system based off my learnings. using the vercel ai sdk v6 i was able to build an orchestrator agent and subagents that have access to our notion and linear workspaces, and give them tools which they can progressively disclose via a load_skill tool which only loads the relevant tools and specific guidance for using them when requested. this allows me to not blow a hole in my context windows and also allow for a highly flexible agent. the agent can also take multiple steps to reason and complete tasks, allowing for highly complex actions.
im especially proud of how minimal and extensible the repo is. you can define tools easily using the ai sdk tool function, define skill bundles easily as markdown, and wire them all together using minimal logic in a ToolCallLoop agent :)
what can this do now you may be asking? well:
super exciting, i'll be hooking up more tools to this system (discord, sentry, and perhaps opencode). it's infinitely extensible and so much more can be done :)



I added an ISO installer option to lethe, so now I can also boot an ISO directly for provisioning :)

i moved feature flagging for wack hacker from environment variables to a vercel edge config, which allows us to change the behavior of wack hacker without having to redeploy it :)
commit: purduehackers/wack-hacker3087ffd
Oh also there's inx.moe:being/trans, which was made a little while back but not publicised.
It's not an essay (yet), but it's something I've been meaning to put in my website for quite a while now, so here it is: inx.moe:opinions/anti-ai A page stating my opinion with a quoted message from myself from mid-2025 and a fuzzy list of 'policies'.
Will absolutely update it later, particularly some time other than nearly 5am
i created a new feature in wack hacker which allows folks to record meetings by running /start-meeting! wack hacker will join the voice channel you're in and listen to all the audio. it will start streaming the meeting transcript live into a thread in the channel you start a meeting in using the elevenlabs speech to text realtime api!
once a meeting is over (either when everyone leaves or via /leave-meeting) it will clear the thread, summarize the meeting contents, and then output a finalized transcript which is higher quality and has speaker attributions :)

Netboot works! :D

https://kennan.dev/blog/sheet-music-demonstration/ wrote the feature at hack night like 2 months ago, wrote a itty bitty blog post this morning
(From Thursday)
Nugget is now on Homebrew


Self statistics system (pre-alpha???) is live! Check it out here: https://self-statistics-system-v2.web.app/ Writeup coming soon. Some stuff is still bugged. Main functionality is usable. Lmk if you have any suggestions, comments, insults, whatever! (feel free to dm me for stuff!)
Sign in anonymous if you don't want your data associated with you-- no skin off your back.
Shrimp badge, all colored in :) let's try this one more time uhh

https://vxtwitter.com/sriramkiron/status/2022379305691501035?s=20
Just launched https://moltopia.org, a virtual world for OpenClaw agents. They can chat with each other, craft items, and sell these items on a market.
Hoping to add more features like minigames. Repo: Phineas1500/moltopia
i got tired of running bun init and then having to take fifty steps to setup my workspace before i could do work. so i created a cli tool to help me scaffold new projects faster. comes with all my favorite linter/formatter config and scripts, and also a bunch of agent skills that i can use to quickly get the repo setup with tooling or effect!
repo: rayhanadev/new

i got tired of soundclown not expanding my music links when i share them on discord, so i built https://soundcloud-og.com to make it faster
source: MatthewStanciu/soundcloud-og


The computer vision system that me and arhan designed for the qter robot is working! The time delay in the video is due to our CLI tool being really scuffed and taking a long time to load
I completely redid by dotfiles/nix configurations! Now they support more than one machine, one of which is asahi linux :) agarmu/dotfiles0823655
New Hack Night dashboard is live! Make sure you come check it out this Friday 😁 https://night.purduehackers.com
Just published the Commit Overflow blog post written by @kart, @Ray, and myself blog.purduehackers.com:posts/commit-overflow-2025
@TheMissingPiece discovered a bug in my interpreter code for the robot that has been there for eight months which is before our robot even existed and when our code was for the world record breaking robot. Here's the diff that introduced the bug... https://github.com/qter-project/qter/commit/1352669a3263b8a9fdc7385f7c83983f023b2d15#diff-7b0fbdf9af68ca506b478679c09cdedf88cfb7d4525fb850cacc90893f1d5acbR224-R231
The bug is that halt is actually not equivalent to repeat until because repeat until effectively counts up, while halt counts down, which means our robot was literally doing instructions backwards. Here's the very silly sequence of factors that led us to not discovering this until literally today...
Since Daniel is writing a new visualizer that actually uses that code path, that code was probably executed for the very first time today. I think this is really funny which is why I'm putting it in ship.
Anyways, here's the fix qter-project/qter5325dd7
devpost.com:software/barbielang?ref_content=user-portfolio&ref_feature=in_progress
https://kartva.github.io/barbie-lang/
I participated in InnovateHer, a 24-hour hackathon over the weekend alongside my team (who are not in this server.)
It's a barbie-themed programming environment.
Update: we won second place.
API v3 is live! Now with full support for the new phone bells (shipping soon……) purduehackers/api-v3
V2 of the Odker dot grid notebooks has arrived!




glider bag (with several more layers and dried)!!!!! was pretty scared about how it would turn out but its amazing :)

i finally wrote up a blog for a hackathon i did a few months ago -- we ran distributed training using webcams as the communication medium:
@Renovic 3D printed custom motor mounts that are wayyy easier to align, and since alignment was our main bottleneck, we can now go way faster:
qter-project/qter3bf18d6 Rhai macros work in the qter compiler!!!! Essentially this means that we can now do inline metaprogramming in QAT using a real programming language. In particular, our subtraction operation is implemented as a rhai macro, meaning that we can now compile and run our fibonacci program!
``` .registers { A, B, C, D <- 3x3 builtin (30, 18, 10, 9) }
.macro fib-shuffle { ($R1:reg $R2:reg $R3:reg $counter:reg) => { dec $counter if solved $counter { halt "The number is" $R1 } while not-solved $R1 { dec $R1 inc $R2 inc $R3 } } }
input "Which Fibonacci number to calculate:" D if solved D { halt "The number is: 0" } inc B loop { fib-shuffle B A C D fib-shuffle A C B D fib-shuffle C B A D }
And then this is the definition of the `dec` macro, using rhai macros that work now:
.start-rhai fn subtract_order_relative(r1, n) { return [ "add", r1, (-n) % r1.order ]; } end-rhai
.macro sub { ($R:reg $N:int) => rhai subtract_order_relative($R, $N) }
.macro dec { ($R:reg) => sub $R 1 }
WE are all pulling up to pmp live on saturday #anotherone

I made a redacted version of my resume :) https://inx.moe/resume
Here's the redaction jq script:
.basics |= (
.name = "Lillith \"Infinidoge\""
| del(.phone)
| .location |= del(.address, .city, .postalCode)
)
"Lillith this implies your resume is a JSON file" yes, yes it is
Created an updater script for Tailscale on the Purdue CS servers! This is to be used after setting up Tailscale with Kian's excellent guide found here gist.github.com:ericswpark/93a3cdaff36b63ecf65feb60827449bc Critiques, bash scripting and tax evasion tips welcome 🙂
meow.social:@Infinidoge/116004697890988238
This is a ship because I spent the past 4 hours fighting this. Carrier locking should be banned at the government level. Carrier specific software should always be removable. The current network landscape makes me extremely frustrated. Metaphorically goodnight.
48hr Global Gamejam submission with @MelancholySeabiscuit doing all the artwork 'experimental nonlinear comic visual novel prototype thing' SYRINX ➔ -# please play on a computer. phone screens are too small!
Sent in a cover letter and resume to a Nix company in Germany :) I'm not posting an unredacted resume or cover letter here, so have some vague screenshots :)


Today I merged 6 PRs to nix-minecraft Infinidoge/nix-minecraft#185 Infinidoge/nix-minecraft#163 Infinidoge/nix-minecraft#161 Infinidoge/nix-minecraft#177 Infinidoge/nix-minecraft#193 Infinidoge/nix-minecraft#117
Along with bumping the flake, Changing the formatter, Fixing a few warnings from latest Nixpkgs, and getting over my fear of just hitting other people's work with a hammer so I can merge it faster
Verified signatures are overrated anyways
Finally shipped the Android helper app to create QR code labels for items in Homebox! You can check it out here: ericswpark/homebox-qrdroid Android development has changed a lot since I last worked on it circa 2018~2022, so I did try out the built-in Gemini integration in Android Studio and it worked quite well in finding me the syntax for Kotlin/Jetpack Compose/DataStore/Lifecycle things! Some nudges here and there but keeping the scope small really helped


finished drawing/printing some custom cards for friends :3





balls go brrr at workshop
The shelter is open! Take a look and find Purdue Hackers projects that need homes https://shelter.purduehackers.com/
How's them apples And by apples I mean typewriters

yet another i was bored mini project: 2 sum, but im failing cs 381 so i did it the dumb way with avx2 greatericontop/VectorizedTwoSum
THE DSAI SIGN IS FIXED!!! Got into it and reflashed the firmware, so now it will auto-update and use the correct color assignments for its wiring

My deployment to my new website yesterday went so smoothly that not even the webring noticed: https://grace.pink
you can now create your own clients for use with ID/Sign in with Passport! Go to https://id.purduehackers.com/dash to get started and lmk how things go

i improved a few things about the purdue hackers website that were bothering me:
i hope you don't mind, i just pushed to main. it's not perfect but it really needed a lot of these things
url:
It took way longer than it should have, as I was fighting SAML the whole way, but I finally have Weblate setup! With INX Central and GitHub auth included!
This will be a surprise tool that will come up later, it has nothing worth looking at currently.
new purdue hackers stickers ahead of merch, tabling, callout, and all our things :)

made this poster for purdue climate action collective

Wrote a blog on my new website about my AI research project https://ramaway.com/blog/reasoning-or-bias/
Finally got around to publishing that blog post sitting in my drafts folder for the past month https://ersei.net/en/blog/lean-mean-solitaire-machine
Here's a React version of my json/markdown data querying app: https://ad-hoc-lens.dev/
I switched from solid to react so I could ship faster (since there are more mature libraries in that ecosystem). FYI, this is all on the frontend; the DuckDB instance is running in WASM.
Let me know if you have feedback!
LLVM IR extension for Zed is was finally merged! zed-industries/extensions#3990
mojo jojo piñata

have you ever tried adding an outlook calendar url to your google calendar, only to find out it's broken! i got extra irritated by this, so i wrote some code to normalize outlook ics feeds and make them standard ics so google calendar and other tools can use it properly!
i spun up a cute website for it, so now you can also get fixed calendars :)
web: https://normical.com repo: rayhanadev/normical
My own block cipher, which is hopefully more secure than AES (it probably isn't)
Featuring:
I was mentioned in the Zed release notes for a PR! (cmd+f "Arhan" at this page) https://github.com/zed-industries/zed/releases/tag/v0.219.0-pre
qter-project/qvisqvis/src/puzzle_matching/mod.rsmain I created an algorithm that will be used as a subcomponent of the Qter computer vision system: it inputs, for each sticker, confidence levels that that sticker is each possible color, and then returns the member of the Rubik's cube group that maximizes the total confidence. It uses the Hungarian Algorithm (en.wikipedia.org:wiki/Hungarian_algorithm) to do optimal matching between pieces and locations, slightly tweaked to allow it to give an iterator over all matchings in sorted order. Then, I perform that matching on the corner and edge pieces separately, merge the two iterators together, and return the first matching that's a valid Rubik's cube scramble. I think that this is really cool 
Oh, and this is all implemented generically over any twisty puzzle so anyone can reuse this for their megaminx solver or something idk
My obsidian- / typora- like OSS library and VS Code extension: https://prosemark.com/ Please make a github issue if you find any rough edges!
I melted a plate in my oven

I fixed Leptos syntax highlighting in Zed zed-industries/zed#45952
I really like some of my essays I wrote while studying in Dublin, so now they're on my blog! www.jackhogan.me:blog/the-dublin-papers