.. | ||
backend | ||
frontend | ||
screenshots | ||
.env | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile | ||
nginx.conf | ||
README.md | ||
remove-app.sh | ||
start-app.sh | ||
stop-app.sh |
CopyBook
A messageboard type social website
The expected target environment is linux.
Backend
Fully coded in golang utilizing the following technologies:
The backend consists of multiple modules:
- db.go: database modules setup with gorm
- auth.go: authorization module with jwt tokens setup
- server.go: main buisness logic functionality
running the backend without docker requires:
go mody tidy
go build
./social-network
Frontend
Typescript + nextjs + tailwindcss
all of the required packages are in package.json
file
the frontend uses nextjs for server side rendering.
there are multiple pages each responsible for its own functionality:
- index.tsx: mounted on
/
is the homepage for the messageboard. - login.tsx: mounted on
/login
the login page - logout.tsx: mounted on
/logout
for logging out and removing the jwt token. - profile.tsx: mounted on
/profile
is for the user profile info. - signup.tsx: mounted on
/signup
is for registering new users.
running the frontend manually can be done through
npm i
npm run dev
Devops
Fully dockerized and ready for deployment on any environment
backend setup consists of 2 containers one that builds the golang binary for and another that runs the server
the database for the backend is running a postgresql server with persistent storage enabled
frontend setup has 3 containers:
deps
: pulls the dependecies required for compiling the typescript files.
builder
: compiles the typescript files.
runner
: runs the nextjs server.
all of the previous services are running on internalnet
virtual network and then afterwards its served with a nginx reverse proxy for traffic management and redundancy purposes
afterwards the application should be up and running http://localhost
the app can be turned off and on and removed through the following scripts:
start-app.sh
stop-app.sh
remove-app.sh
TODO
- better db management
- more documentation
- user personalization
- more ui changes