A very simple and fast URL shortener Published the 2018-01-29 Yesterday, I came home and, before going to sleep and half-asleep, I decided to code something. What? I had no idea at the moment I did so. So I wanted something dead-simple and minimalistic. It serves only one purpose: shortening URLs. For that reason, I have two routes: a `POST` route at which a user can create a new shortened URL, giving the target ; a `GET` route which, when passing the shortened code, will redirect the user to the target URL. Database? Why bother? We have a very simple identity: the file name is the shortened code, the file content is the target URL. Which means that, when the user tries to retrieve a target (and be redirected), since they give us the shortened code, we can simply check for file existence in the storage folder and either return a `301` response with the target URL (if it could be found) or a `404` not found (if we couldn't find any file with this code). Said that, I want to be able to easily count requests and errors. I used a simple logging format composed of two files, respectively `request-date(Y-m-d).log` for requests and `error-date(Y-m-d).log` for errors. Every incoming request starts with `<--` and every error is contained in one line. That means that we can know the request count and the error count, by day, by simply doing a `grep '<--' request-{date}.log | wc -l` for requests and `wc -l error-{date}.log` for errors. Finally, for the web UI, I decided to simply go with Skeleton, as there's practically nothing. The shortening request is made in AJAX, giving a clean result but in case the user disables Js, the URL will still be shortened and the code returned, or the error shown, so we're also okay here!