- Templating - Templ
- SQL - SQLx, pgx
- Live Reload - Air
- Authentication/Authorization - Keyclock, GoCloak
- Cookies/Sessions - Gorilla Sessions
- Compression - Brotli, Gzip
- Hypermedia/AJAX - HTMX (+Extensions: Preload, Response Targets, SSE)
- WYSIWYG Editor - Tiptap Editor
- Formatting - Prettier
- Bundling - ESBuild
- Framework - Tailwind
- Components - DaisyUI
- Docker
- Makefile
- Local mail testing - Maildev (Dev-only)
- Terminal formatting - PTerm | Pretty Terminal Printer (Dev-only)
- Auth/auth - Stytch (swapped out)
- Webp encoding/decoding - MinGW & libwebp wrapper
- S3 compatible object storage - Cloudflare R2
- Need a way to disconnect live clients (remnant browser tabs causing panics)
- Stytch introduced about 250ms on localhost owing to service.CheckAuthentication()
- With Keycloak it fell to 50ms on localhost and 15-20ms in prod
- Setup a confidential client
- OpenID Connect
- Client Authentication > On
- Service Accounts Role > On
- Set an admin user and populate .env variables
- Admin user must be assigned realm-admin role
- Make sure this is off (default)
- Login > Email as Username > Off
- Choose One:
- Authentication > Flows > Direct Grants:
- Direct Grant - Conditional OTP > Disabled
- Realm Settings > User Profile >
- firstName > Required Field > Off
- lastName > Required Field > Off
- Authentication > Flows > Direct Grants:
- For Reset Password to provide a link back to app after reset,
- Client > confidential-client:
- Root URL > http://domain.name/
- Home URL > http://domain.name/login
- Client > confidential-client:
- Optional Realm Settings:
- Tokens > Set Access Token Lifespan > 30 days
- Root URL originally /realms/grumplr/account/
- TODO: Figure out why Keycloak Access Tokens expiry is max 259200 seconds