* Frontend Mentor - Results summary component solution
:PROPERTIES:
:CUSTOM_ID: frontend-mentor---results-summary-component-solution
:END:
This is a solution to the
[[https://www.frontendmentor.io/challenges/results-summary-component-CE_K6s0maV][Results
summary component challenge on Frontend Mentor]]. Frontend Mentor
challenges help you improve your coding skills by building realistic
projects.

** Overview
:PROPERTIES:
:CUSTOM_ID: overview
:END:
*** The challenge
:PROPERTIES:
:CUSTOM_ID: the-challenge
:END:
Users should be able to:

- View the optimal layout for the interface depending on their device's
  screen size
- See hover and focus states for all interactive elements on the page
- *Bonus*: Use the local JSON data to dynamically populate the content

*** Screenshot
:PROPERTIES:
:CUSTOM_ID: screenshot
:END:
[[screenshot-mobile.png]]
[[screenshot-desktop.png]]

*** Links
:PROPERTIES:
:CUSTOM_ID: links
:END:
- Solution URL: https://github.com/efim/Learning-HTMX/tree/master/17-results-summary-component-go
- Live Site URL: https://efim-frontentmentor-results-summary-go.onrender.com/

** My process
:PROPERTIES:
:CUSTOM_ID: my-process
:END:
*** Built with
:PROPERTIES:
:CUSTOM_ID: built-with
:END:
- Semantic HTML5 markup
- TailwindCSS
- Flexbox
- CSS Grid
- Mobile-first workflow
- Go Server Side Rendering
- Nix for building and docker image creation

*** What I learned
:PROPERTIES:
:CUSTOM_ID: what-i-learned
:END:
**** restarting server of file watch
:PROPERTIES:
:CUSTOM_ID: restarting-server-of-file-watch
:END:
go doesn't have built in restart on file watch, and there are separate programs that do that

#+begin_src bash
wgo -verbose -file .go -file .gohtml -file tailwind.config.js tailwindcss -i ./input.css -o public/out.css :: go run main.go -p 1234
#+end_src

and doing tailwind first, because server embeds the output css file, so
it's needed for the build step
**** setting up static routes with default go web server
**** generating template and returning it as response of go route
**** embedding files into the binary for portability
**** using css variables to set custom colors in TailwindCSS
**** getting cli arguments in the go program

*** Continued development
:PROPERTIES:
:CUSTOM_ID: continued-development
:END:
Further things to learn: getting data from forms, general go things - coroutines, utilizing sqlite, embedding PocketBase

*** Useful resources
:PROPERTIES:
:CUSTOM_ID: useful-resources
:END:
- https://pkg.go.dev/text/template#example-Template-Block
  main go templating documentation
- https://pkg.go.dev/net/http
  main default server documentation
- https://nixos.wiki/wiki/Go - packaging Go
- https://golangdocs.com/command-line-arguments-in-golang
  command line arguments


