SwapLah Student Co-op Marketplace
A student co-op marketplace built under an Agile and DevOps module and run through GitLab. I owned user management end to end.
5
User stories
1
GitLab Epic
4
Docs authored
✓
GWT acceptance criteria
What it does
- 🔐 Registration & login
- 👤 Profile management
- ⏲️ Session timeout
- 🚧 Access restriction
- 🔑 Werkzeug password hashing
- 📋 GitLab Epic & user stories
- 🔁 CI/CD documentation
- 🧾 Test plan & definition of done
Built with
- Python
- Flask
- SQLite
- Werkzeug
- GitLab CI/CD
The case study
Situation & Task
A student co-operative marketplace, built by a team working the Agile Development Process with DevOps module through GitLab. My slice was user management: everything between a stranger arriving and an authenticated member with a profile and a session that expires.
Actions Taken
Built registration, login and logout, profile management, session timeout and access restriction as a Flask Blueprint, using werkzeug for password hashing and raw sqlite3 rather than an ORM. The work was specified up front as a GitLab Epic broken into five user stories with Given-When-Then acceptance criteria, so "done" was defined before any of it was written. I also wrote the team's CI/CD pipeline documentation, test plan, definition of done, and security documentation.
Results Achieved
Given-When-Then criteria turned out to be the useful part: writing the acceptance conditions before the code meant the session-timeout and access-restriction cases were specified rather than discovered, and the test plan wrote itself from the stories.
What I took away
- Given-When-Then acceptance criteria written before the code turn "done" from an opinion into a checklist.
- Password hashing and session expiry are the parts of auth that are easy to skip and expensive to retrofit.
- Raw sqlite3 rather than an ORM makes the SQL visible, which is a fair trade on a small schema.
- Writing the CI/CD and security documentation forced me to understand the pipeline rather than just use it.