Context
The visual idea was easy to define. Harder was keeping the board understandable and usable under real conditions: authentication, permissions, slow requests and mobile interaction.
Approach
The project consists of a Go backend, a React/TypeScript frontend and MongoDB. I worked across the backend, interaction, security and deployment.
System
- React / TypeScript: board and interaction
- Go / Chi: API and sessions
- MongoDB: projects, stories, tasks and bugs
- Docker: deployment
Engineering decisions
- Protect session cookies with CSRF protection and rate limiting.
- Provide WebSocket support for updates.
- Split loading states so a slow request does not block the whole application.
What did not work
Initially, the board waited for too much data at once. If one request was slow, the entire application felt broken. Simply loading faster was not the real solution.
Result
Authentication, role-based behavior, CSRF protection, rate limiting, WebSockets and Docker-based deployment are part of the system.
What stayed with me
The better solution was to reduce dependencies and reveal content progressively as its data became available.