A web application idea
Playground for new technologies
When learning any new programming language or technology it’s best to have a problem at hand. Everything new can be applied to a practical problem and any gaps in the understanding will quickly become obvious.
My main area of expertise is web development so naturally when learning anything new I tend to gravitate towards building a web application with it. Because the web is so popular and so flexible almost any language can be used to build it. All the basics stay the same and I can focus only on how given technology differs from the ones I have.
The paradox of choice
There’s a paradox here. Because I can create pretty much anything (assuming I don’t have a deadline) I have really hard time deciding what to actually build. The end result doesn’t matter that much because my main goal is to learn and not to build something long lasting, but it would be nice if the result was actually practical. That restriction limits my choice somehow, but not enough to cut through my indecision.
Despite all this indecision I did find a small project I plan to re-use a lot.
Couple times in the past I found myself wanting to publish somewhere a rendered markdown document. The page should be publicly visible, but only for people having a link. This security by obscurity would allow me to control who can see the content. I should also be able to specify how long it should stay up.
It’s really simple web service. I could probably code it in couple hours if I would want to use any technology stack which I know really well.
Instead, because my main goal is learning something new I’m going to take my time and think about it more.
Some of the things I want to explore with this applications is:
- not using a database,
- maybe building it without any server (using AWS Lambda and other AWS infrastructure),
- use a unikernel for running it,
- make it as performant as possible when running on the cheapest possible hosting,
- build it in Haskell,
- build frontend in PureScript.
Not all of those are possible at the same time, but nothing prevents me from implementing it many times. I can always use this idea as a playground for anything new I would like to try out.
Of course, there are existing solutions to my problem. One of them, peggd I even used myself. There’s nothing wrong with it. My main goal is to learn and this idea is something I can see using myself.