A full-stack discussion forum built with Go and SQLite

NOTE: The repository for this is private and it can only be shared with potential employers.
This project is a web-based forum application that allows users to create posts, comment on discussions, and react to content. It was developed as part of the kood/Sisu Go-module to demonstrate backend web development, database design, and authentication concepts.
git clone https://gitea.kood.tech/marttikoivisto/forum.git
cd forum
# Local
go run .
# Docker
docker compose up --build
Visit http://localhost:8080/ for access to the forum. You can register a new user or use the test user:
NOTE: If you want to run the project in a Docker container, you need to install Docker Desktop on your device: https://docs.docker.com/get-started/get-docker/
The key learning objectives were:
/assets -> Static files (CSS, images, templates)
/data -> Database
/forumdb -> Database queries
/model -> Defined Go-structs to reflect the database
/model/sqlite -> Database queries directly related to the structs mentioned above
. (root) -> Main files relevant for running, building and deploying the server.
The project can be installed by cloning the repo. The database is established first time that the project is executed.
git clone https://gitea.kood.tech/marttikoivisto/forum.git
cd forum
go run .
The server will establish the database first time its ran but it can also be setup separately.
To establish the database outside of the main.go, you’ll need to use goose.
goose -dir=assets/migrations sqlite3 ./data/app.db up
docker compose up --build
If you have Docker Desktop installed, you can find the container in the “Containers” tab. There you can stop and restart the container without building it again.

If there has been edits to the database migration files, you may need to use one of these commnands (first one undoes latest update, second one wipes all the previous migrations)
goose -dir=assets/migrations sqlite3 ./data/app.db down
goose -dir=assets/migrations sqlite3 ./data/app.db down-to 0
Here are some ideas for further improving the project