Hobbies is a small social network built around a single idea: post the things you love doing, tag them, and find people and hobbies through those tags. I built it in the last two months of 2021, right as I was moving from Bayt.com to Trufla, as a way to put a full Laravel and Vue stack together end to end.
What it does
- Hobby posts with a title, a description and image uploads, created and managed by their owner.
- Tags. Any hobby can carry tags, and a tag page lists every hobby under it, which is how discovery works.
- Attach and detach tags on your own hobbies, protected by authentication.
- User profiles with avatars.
- Swagger UI at
/swaggerdescribing the API surface.
How it is built
The backend is Laravel 8 with resource controllers for hobbies, tags and users, and a dedicated controller for the hobby-to-tag relationship. Authentication uses Laravel’s standard scaffolding. Images are stored through Laravel’s filesystem with a public symlink.
The front end is server-rendered Blade with Vue 2 components mounted where interactivity is needed, styled with Bootstrap 4. This was the mainstream Laravel setup of the time, and it is still a productive one: full page loads for navigation, Vue for the parts of a page that change without a reload.
What I learned
This was my first time modelling a proper many-to-many relationship with behaviour attached to it, and the attach/detach endpoints taught me to treat a pivot as something with its own routes and authorisation rather than as a side effect of saving a form. It was also my first project with real image uploads, which is where I learned to think about storage paths, public access and cleanup of orphaned files.
The repository has local setup instructions.
