Decision: Tech stack — Go framework and frontend approach #9
Labels
No labels
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:prototype
wayfinder:research
wayfinder:research
wayfinder:task
wayfinder:task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
#11 Decision: Card review UI — how the review screen works
gaetan/knowledgify
#12 Decision: Dashboard and stats — what the user sees outside review
gaetan/knowledgify
#6 Decision: User model — single user vs multi-user with auth
gaetan/knowledgify
Reference
gaetan/knowledgify#9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #1
Question
Which Go framework and frontend approach should we use?
The content model and user model are settled, so we can now choose the tech stack.
Backend framework options:
encoding/json/v2for JSON. Simplest possible. Best for a small project.Frontend approach:
Recommended combinations:
This decision shapes everything: how we serve pages, how we handle API calls, how the review screen works.
Dependencies
Resolution
Tech stack decided:
Backend: net/http (stdlib). Go 1.22+ ServeMux for routing (path params, wildcards). No framework dependency. Add chi/middleware only for recovery and logger if desired.
Frontend: Go templates + Alpine.js. Server-rendered HTML base with Alpine.js for interactivity (flashcard flip, rating buttons without page reload, keyboard shortcuts). No build step, no JS framework.
Why not HTMX: Alpine is simpler for this use case — we're manipulating a few DOM elements (flip card, show rating, update progress bar), not doing complex AJAX flows.
Why not SPA: Overkill. Build step, state management, API layer. Single-user study tool.
Why not Gin: Custom gin.Context locks you in. Overkill for a personal app.
File structure: