# Todo App with GO and HTMX Goal: make a todo app with minimal reliance on other libraries and frameworks. I'll assume that it is a single user app so I do not have to worry about concurrent access, high throughput, etc.. ## Plan day 1 - [x] create Go webserver - [x] create landing page - [x] import HTMX code - [x] display todo list - [x] add tailwind CSS - [x] show todo list - [x] let todos be marked completed - [x] remove todos - [x] add new todo with form - [x] persist todos in redis - [x] spruce up ## Plan day 2 make it use only battery included features i.e. replace redis with an event driven approach - [x] modularize app - [x] replace redis with json stream - [x] use hashmap for fast individual access - [x] cache data to avoid reading each time - [x] create event store - [x] make events - [x] implement event store ## Usage tips ### Running the app locally Install *air* from [cosmtrek/air github repo](https://github.com/cosmtrek/air) with `go install github.com/cosmtrek/air@latest` or use the provided install bash scripts. This tool will watch for changes in the project folder and rebuild and restart the app during development (at least most of the time) then in the root folder air and check for errors. Normally the site will now answer on [port 8080.](http://localhost:8080) ### Updating CSS with tailwind Just add tailwind tags to the *class* attributes per documentation then in the root folder: npx tailwindcss -i ./src/input.css -o ./static/output.css --watch Same deal, it will monitor changes in the templates and regenerate the output.css on the fly. ### Makefile I added a makefile to not have to remember the command lines : make tailwind starts the CSS generator and make air starts the go watcher builder although I do not know why anyone wants to type the 5 extra chars.