Some Helpful, Free APIs I Run
4 minute read
I run a few re-usable APIs for the various side projects I tinker on; in this post, I wanted to share a little about them.
Working on side projects is one of my favorite things to do in the pretty limited spare time I have (between family, work, friends, church, etc.). Working with software is unique in that it allows an individual to build systems, products, and prototypes that would normally be impossible for an individual. Want to try out a “new look” on your home? That’ll be a serious chunk of change and probably weeks worth of work for several contractors. Wondering about how you might re-build a coffee machine you enjoy? That’ll require a machine shop, parts, probably a CNC or 3D printer. Software is pretty incredible in terms of what it allows an individual to accomplish.
Some random stuff I work on / worked on / never finished:
- isbusy: free personal status pages
- griddler: wordle clone
- tallyho.dev: not published yet! Analytics for solo developers
- costbot: also in ‘stealth’ mode 😉
- podfind: super secret, too!
- blindns: deprecated; a version of nextDNS before nextDNS existed
- everyday.video: daily video journaling app
But it’s not all rosy. Even though you can do far more by yourself than at most things, you’re still… just… you. There’s no large team working on the project. This is a big part of why it’s so fun, of course. You get the “full experience” of working on every part of an idea or product. But even so, sometimes you don’t want to re-build everything yourself every time.
To that end, I’ve created a few APIs that I use across projects. I use fly.io for all my hosting needs and run these services on there, too. It’s a fantastic platform that I think has really filled (and exceeded) the space left by Heroku. It doesn’t enforce a serverless model like Vercel (another great company and platform), which enables me to run a wider variety of services. I highly recommend them across the board — from the technical side to their pricing (run a server for ~$2/month!) (this isn’t even a sponsored post - just love the product). Check them out!
Here are a few of the services I run “for free”, meaning I don’t gate them with creds or anything. Hoping I can keep running them that way without doing so 😅
This API is a tiny Go server that serves up some helpful data I find myself needing in many projcts. There are just 5 endpoints (I add more as I need them):
/: Some basic info about the server
/countries: a list of countries! I find myself needing this often and not wanting to find/re-add the same npm package over and over and over.
/prefixes: a list of prefixes like Dr., Speaker, Amd etc.
/states: a list of US states
/timezones: a list of timezones. I really don’t love working with timezones, but you can’t really get around needing and using them.
/echo: An endpoint that just echos back what you send at it
This is a websocket echo server. I found that the echo.websocket.org that folks used was taken down w/o any notice and spun up an instance of github.com/jmalloc/echo-server and pointed folks to it at this StackOverflow question. Been hosting it for about a year or so w/o any issue, but noticed recently it started getting a lot more traffic (see below). Scaled it up from a 256MB to 1GB for a bit to handle the load increase. Great to see folks are using it!
You can connect to the server at
wss://ws.ifelse.io using your application code or something like wscat or visit the GUI at https://ws.ifelse.io/.ws.
wscat -c wss://ws.ifelse.io Connected (press CTRL+C to quit) < Request served by 51b81c51 > hi! < hi! > yay < yay >
I have been slowly building out an analytics platform similar to plausible.io or Fathom and needed a way to easily ascertain IP address info. Also found myself occasionally needing to look up my IP for various reasons. So I’m hosting a version of github.com/mpolden/echoip and it’s been great! Very useful for application needs or if you’re just curious about your ISP.
Hope you find some use from these! They won’t be load-bearing, production ready for tons of people to use, but they are all written in Go and can run with pretty high concurrency even with smaller CPU/RAM allocations.