Ask HN: What was an interesting project you started and finished over a weekend?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • valoserveri

  • https://github.com/turol/valoserveri

    It's for controlling DMX colored lights over network. It takes UDP packets (and later Websocket messages) and turns them into DMX protocol packets which get sent over USB serial adapter to the DMX wire. It's a rewrite of a previous node.js version which had bitrotted.

    I think I made the MVP in about 7 hours during one saturday afternoon. Finishing it up took a few weeks more of evenings.

  • recognize-anything-api

    Dockerized FastAPI wrapper around the recognize-anything image recognition models

  • I've not cleaned it up enough to push yet, but I packaged up an open source image recognition model (https://github.com/mnahkies/recognize-anything-api) and then wrote a script to crawl my photo library, run inference over each image and then write the results into the tag tables of digikams sqlite database (https://www.digikam.org/)

    One thing I was fairly proud of was how scrappy the script was - I wrote it in typescript for the familiarity with the sqlite driver, but I used find and curl to actually do the crawling and API submission.

    Is it hard to do that in pure typescript/node? No, but I was in a "how can I validate if this is even an interesting thing to be doing mode" and execing out to these tools was a way to get there slightly faster.

    I've found that this attitude has been a great way to make weekend projects more fun and feel less like work.

    Getting to some kind of tangible value sooner has also made easier to not lose interest halfway through and has been yielding me more semi-complete weekend projects (the word semi is doing a lot of work here tbf, but it's all relative)

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • fakeprinter

    AirPrint printer that reverse proxies into a real printer

  • The TXT records are based on the Bonjour Printing Spec [0] which list out which fields so it knows the type of the printer and it uses the SRV port to find the ipp port so it can contact the printer.

    Further investigation using rvictl (iOS packet sniffing) showed the IPP traffic, which is really http API. It is via this API that iOS determines what paper is supported from what tray.

    The path is then clear: create my own mDNS service that returns a printer on my own port, this IPP port acts as a reverse proxy to the real printer's IPP port, but it modifies the "media-col-ready" attribute to make iOS think A6 is loaded into the manual try.

    It was extremely painful, but it was done: https://github.com/LittleLightLittleFire/fakeprinter

  • tab-in-workspace

    Open browser tabs on the active virtual desktop/workspace

  • Small browser and Linux desktop extension to open links on the current virtual desktop. https://github.com/Janhouse/tab-in-workspace

    It's a small quality of life improvement but I wonder why this does not exist out of the box.

    I could probably make it a bit easier to set up, but it would then require another weekend. :))

  • wumpus

    A vanilla go implementation of Hunt The Wumpus I & II & III + and advanced mode (by Koumbaya)

  • notiflux

    notiflux - subscribe over WebSockets, publish over REST

  • It was actually couple of weeks ago, but a small project that took mostly just two days to put together and I'm pretty happy with how it turned out.

    Notiflux (https://github.com/ikornaselur/notiflux): a small WebSocket broadcast server, the idea being that clients connect with WebSocket (such as a website) and then any source can send a POST request to the API to broadcast messages, allowing for real-time functionality from servers that don't support WebSockets, or you might have multiple sources that each might broadcast messages.

    Auth is done by Notiflux having a public key and the sources have the corresponding private key, JWT tokens signed with the private key include topics and scope (subscribe or broadcast to the topics). Clients would auth with an API for example, get a JWT with maybe a 10 second expiry, use it to subscribe to the topics that the API would then broadcast to through Notiflux.

    It was an excuse as well to play with WebSocket in Rust and learn a little bit about the Actor Pattern.

    If I would continue I'd want to explore how well it scales, how much traffic it could handle and look into horizontal scaling, but I feel like it's complete enough as a toy project.

  • Isotope

    :revolving_hearts: Filter & sort magical layouts

  • I had access to a Windows server VM at a previous job that was commissioned for a piece of work. The actual work was then stopped, but the IT folks never decommissioned the VM so I had a nice little server on the local network to play around with. It didn't have Internet access so I was somewhat limited in what I could do with it.

    I ended up building a hacky internal IIS/PHP web app (I guess these days one would call it an SPA) that hooked into the company's Active Directory that showed a nice little page of people in our "business unit", with their names, pictures, employee grade (analyst/consultant/manager etc.) and subteam -- basically any bit of info I could get from a user's Active Directory profile.

    It used Datatables (https://datatables.net/) for a simple text-based table view and Isotope (https://isotope.metafizzy.co/) for a card-based grid view that you could quickly toggle between.

    I called it the "Book of Faces" and announced it to my team at a team social event, and it took off massively beause it was way more performant, simpler, and just much less painful to use than using the clunky corporate intranet app to check user profiles.

    Word spread outside of my team and I started getting requests from various other teams to set up similar pages for them as well, which I was only too happy to oblige. This spurred me on to refactor it to make it as simple as possible to set up new team pages.

    This silly thing boosted my profile a ridiculous amount within the company, just because I'd left a small footer "emailto" link that people could use to get in touch with suggestions/bugs.

    I maintained it as a side project and surreptitious internal app for about 6 years until I left the org, after which I handed it over to someone else. Last I heard though, internal IT finally caught wind of it, and in what I suppose is a "progressive for its kind" response, spoke to the users of the various pages and built a corporate-ised version of the same thing.

    A decade-plus of working in tech and data, and that IIS-PHP-JS monstrosity is still one of the bits of work I'm most proud of!

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • radio_colette

    Raspberry Pi Mp3 Player

  • A minimalist MP3 player for my grandmother.

    The whole user interface is a single physical button on her desk :

    - ON : indefinitely play all MP3 files randomly

    - OFF : stop playing

    The longest task was to find her favourite pieces of music from my aunts and uncles.

    https://github.com/remipch/radio_colette

  • craft-jitter

    Jitter: the just in time image transformer for Craft CMS.

  • I think my favourite weekend project I've built was an image transformer plugin for Craft CMS. The popular (and only) free image plugin had been deprecated and the author was only going to continue supporting their paid version so I hacked together an Imgix-inspired plugin called Jitter[0] over the weekend.

    It's not very popular but I like it and use it frequently.

    [0]: https://github.com/codewithkyle/craft-jitter

  • Logdy.dev

    Web based real-time log viewer. Stream ANY content to a web UI with autogenerated filters. Parse any format with TypeScript.

  • I've built a first version of Logdy[1] over the weekend. Since then I have been developing it and it's getting traction and attention.

    Logdy is a real-time logs browser that is meant to replace viewing logs in a terminal during development stage. I was tired of browsing and searching through infinite stream of non-searchable json whereas having such a great tool as DataDog on production. I've felt that development process lacks this kind of tool and decided to scratch my own itch.

    [1] https://logdy.dev

  • certmaster

    Automatically renew certs and install to destinations

  • I built a tool that generates and renews letsencrypt certs, automatically verifies via dns, and uploads to your destination (for example, a load balancer.)

    https://github.com/poundifdef/certmaster

    I want to turn it into a service but haven’t gotten any feedback that people want it!

  • plainoldrecipe

    Takes a recipe website URL and transforms it to a plain-text version for reading or printing.

  • I built a website that takes online recipe pages and just returns the main recipe in plain text. https://www.plainoldrecipe.com

  • sendenv

  • A utility to share environment variables with others P2P - https://github.com/viraniaman94/sendenv

    Had posted it here as well: https://news.ycombinator.com/item?id=39098133

    Got a lot more GitHub stars than I had anticipated. Still getting stars here and there.

  • headless-recorder

    Discontinued Chrome extension that records your browser interactions and generates a Playwright or Puppeteer script.

  • openwhatsapp

    Open SMS to Whatsapp (by Kiran-Rao)

  • My grandmother's primary method of communication is a cheap Android tablet. It unfortunately includes a preinstalled SMS app that upsells a VoIP SMS service. My grandmother gets extremely frustrated by accidently clicking the message icon and opening an upsell page. There's no way to uninstall the VoIP app.

    So instead of giving up and buying a new tablet or paying for an unnecessary service, I hacked together a way to open WhatsApp instead.

    https://github.com/Kiran-Rao/openwhatsapp

  • gifDisco

    It takes a png and builds a disco-gif version

  • It's extremely silly and inefficient but I love making random disco gifs: https://github.com/egeozcan/gifDisco

  • apps

    Apps that available to plang programming language (by PLangHQ)

  • I wrote a D&D game in Plang language. https://github.com/PLangHQ/apps/tree/main/DnD

    I noticed there are a lot of D&D game in the chatgpt store, so I wanted to bring it to my local machine instead of using the chatgpt website

    Took about 4 hours from idea to finish. Source code is in the .goal files

  • sleep-machine

    An RP2040-based project for generating brown noise for sleeping

  • I used to have a raspberry pi that was running on a schedule to play rain noise while I was sleeping. When I moved I took it down and didn't put it back up, but never liked how excessive it felt.

    So I built a simpler version that doesn't have a schedule but runs on an RP2040 and generates brown noise:

    https://github.com/bschwind/sleep-machine

    Will eventually add some key switches to it so I can start/stop it more easily (currently just plug it into USB when I want sound) adjust volume, low-pass filter params, etc.

  • HNRelevant

    A browser extension that shows relevant submissions on Hacker News

  • I made HNRelevant, a web extension for HN (https://github.com/imdj/HNRelevant).

    The extension adds a section for related discussions for each submission page. Many times, I found myself intrigued by interesting discussions which left me hungry for more and I'd go down a rabbit hole, or maybe it was promising but didn't get enough attention and I'd need to check if there were any related discussions in the past about the same subject.

    I found that even though HN is a news aggreagator, many discussions on HN are timeless (just like this here).

    I'm proud of it and find the experience and flow to be very enjoyable. It also helps me find great stories that I might not have stumbled across.

  • banban

    Self hosted Kanban board tool

  • It started as a weekend project, but I've since then continued working on it.

    https://github.com/m0g/banban

  • Pingu

    Pingu - 🐧 A nifty menubar app that... pings

  • Spent some time in an apartment with shady WiFi, dropped connections and frequent disconnects.

    I built a macOS menubar app that just... pings: https://github.com/attheodo/Pingu

  • CopilotForXcode

    The missing GitHub Copilot, Codeium and ChatGPT Xcode Source Editor Extension

  • words

    A set of word-based puzzle games for the CLI while you wait for the build to run (by ludovicianul)

  • Starting from Wordle, I've created some additional word-based games that can be played in the terminal: https://github.com/ludovicianul/words

  • dividebatur

    counts Australian Senate single transferable vote elections, parsing AEC provided data files

  • https://github.com/grahame/dividebatur

    Of course, I/we were fortunate that the electoral commission was forward-thinking enough to have published the data required to fully reproduce the count.

    Some open government folks later on used the existence of my software to try and get the electoral commission to release their software system under Freedom of Information laws, so that it could be verified. I was quite amused when the commission alleged there was no way I'd done it in two nights. I had; but of course, what I had was a Python implementation of the count, not a fully-fledged electoral management system like they had.

    Later on in 2017-18 we had a constitutional crisis[0], as various senators were found to hold foreign citizenship and thus be ineligible to hold office. Those ineligible senators were replaced by running a count-back of the vote, with them excluded. I happened to be the only person who had a system that could work out the results ahead of the electoral commission, so I had quite an exciting few weeks providing the media with predictions on who would take over the various seats that were lost.

    Now there are better and more robust systems that have followed mine, but I must say I was quite happy with this two-day hack!

    [0] https://en.wikipedia.org/wiki/2017%E2%80%9318_Australian_par...

  • lego-macropad

    Arduino nano based macropad buit out of Lego bricks

  • I made simple mechanical macropad (only two keys) out of LEGO bricks, ethernet wire and Arduino nano. And little bit of PC software to overcome Arduino nano limitations.

    I was really surprised how springy LEGO may be :)

    https://github.com/karczex/lego-macropad/

  • teeny

    A super simple static site generator (by yakkomajuri)

  • I think it took me less than a day to put Teeny (https://github.com/yakkomajuri/teeny) together, which is the static site generator that's powered my website for almost three years. I never touched the code again after that.

  • snapcast-client

  • I implemented a Snapcast client[0] in Rust, with the goal of having synchronized speakers, using only an ESP32 per speaker. I didn't get to the ESP32 part that weekend though, probably it'll come on the next one.

    [0]: https://github.com/DavidVentura/snapcast-client

  • airprinter

    AirPrint reverse proxy with MacOS and iOS support

  • argparse-sh

    Bash script argument parser

  • I was teaching myself Rust and got tired of doing Project Euler problems. I've always wanted a program that made it easier to parse arguments in shell scripts. Something like Python's ArgParse. So I wrote it.

    https://github.com/Hounshell/argparse

    Initial implementation took about a weekend. I've tweaked and added features and documentation since then. I've only tested it in Bash and I'd love feature improvements or a critique of the code from better Rustaceans than me. I've been using it in a couple scripts and have really appreciated the functionality.

  • warren

    Small encryption tool to avoid symmetric key leakage

  • To learn Go, I made a small app that supports encrypting files with a public key where the keypair is generated from a password. Because I want my backups to be encrypted but it offends me to keep symmetric keys lying around. With this you can just generate a file containing the public key, stream your file through the app, and decrypt it later with just the password.

    https://github.com/TomatoCo/warren

  • validate-configs-action

    :octocat: Github Action to validate your config files using the config-file-validator

  • Took me bout 2 days for the initial release of the config-file-validator. I had been thinking about it for a while and was able just to knock it pretty quickly

    https://github.com/Boeing/config-file-validator

  • BLE_LED_strip

    A relatively short reverse engineering of a 12V LED strip controller based on XC610 chip

  • https://github.com/NotACoin/BLE_LED_strip

    this one, took me little time to figure out how to use wireshark, get data, input command with my phone...eventually the voltage regulator died a day after for overcurrent or dead chip. But it was fun. I don't have the motivation to undead the device unfortunatly.

  • WhatsApp-Group-Playlist-Generator

    Create a playlist of all the tracks shared in a WhatsApp group

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts