Welcome, to the Nanophage Discord Site!
This site runs on my homelab! For more information around homelabs and self-hosting, check out the following:
What is this website?
This website serves as a frontend for a collection of data on a discord server with a group of my friends. It also serves as a form of a frontend for a discord bot that also runs on this homelab. I created that discord bot as a way to track user quotes and create other fun commands to play with. Users of certain servers (Currently just the one) can click "Login with Discord" and access data from the discord bot, as well as see other related information. If you click on this link and are not a member of the server, you will just be greeted with some user data and a little message that asks you why you are here.
What can the website do? Do you have further plans?
This website currently does lots of inside joke-y things.
If this becomes something larger, so be it. But until then, its just a fun side project!
How is it set up?
Currently, this site consists of two main compute instances and one side instance (Hard to give it a label).
- A Frontend running on NextJS
- A Backend running on Django
- A Cron-Manager container running on Alpine
- A Postgresql Database
- A Discord Bot written in Python
The two main instances handle the serving of the frontend and the handling/tranforming/retrieval of data from a (currently) in memory database on the backend, via an api layer. The third compute instance runs the discord bot that users can interact with, within the server. You may ask me, why use a cron manager and not the host crontab? Great question! The issue is that currently all of these containers run on my UNRAID server, which can be a little finicky with user crons. Also, eventually I would like to migrate this site to a selfhosted k8s cluster, so by having a written out crontab I can migrate to K8s with more ease. All of these instances are containerized and self-hosted so that I can have full control over the process and learn as much as possible. Below is a simplified infra diagram:
Who am I?
My name is Thomas Campbell! I am passionate about creating things and learning as much as I can!
3rd Party Attributions:
A special thanks to all 3rd party libraries and APIs that make this website possible as a passion project. Libraries and APIs listed below:
- NextJS - Frontend
- NextUI - Frontend UI library to make my life as a DevOps guy easier
- RemixIcons - Open source icons.
- TipTap - Rich text editor, made it much easier to implement rich text editing for users.
- Rosen Charts - SSR Chart Library that is extremely easily extensible.
- Spotify API - All songs and artist related media is property of spotify and/or the respective artist.
- Discord API - The start of the whole project.