* use vue router
* use pinia
* use tailwindcss
* use vite
* transform /api/login and /api/login/callback into JSON APIs
* add Access-Control-Allow-Credentials header
* add TODO about JSON errors
* fix init misuse which makes running tests impossible since tests are run inside a temporary test directory which breaks env loading
* use dependency injection pattern for server creation and global server context in route handlers
I have put too much code into the same files.
Also, I put everything into the same package: main.
This package is only meant for executables.
Therefore, I have refactored my code to use multiple packages. These packages also guarantee separation of concerns since Golang doesn't allow cyclic imports.