Building TaskMaster: A Self-Hosted To-Do List App with Django

21-09-2024

Introduction

In this post, I’ll walk through the design and deployment of my self-hosted To-Do List application, TaskMaster. This project was built using Django, Docker, and GitHub Actions, and is hosted on my personal Proxmox home server behind an Nginx reverse proxy with HTTPS enabled. The app is designed with privacy and productivity in mind—each user has a secure, personal dashboard where they can manage tasks, set deadlines, and prioritize items.

TaskMaster front page


Project Features

The TaskMaster app includes the following functionality:

  • User Authentication: Secure registration and login system with hashed passwords.
  • Task Management: Add, edit, and delete tasks with optional priority and due date fields.
  • User-Specific Views: Each user only sees their own tasks—data isolation is handled at the backend level.
  • Progress Tracking: Tasks can be marked as complete to track progress.
  • Responsive UI: Clean, mobile-friendly interface powered by custom CSS and Bootstrap.

Future features in the pipeline include:

  • Google Calendar sync
  • A job application tracker
  • Upload limits and premium plans
  • Integration with Discord for reminders

Deployment with Docker and CI/CD

To ensure consistent and repeatable deployment, I containerized the application using Docker. My deployment pipeline is powered by GitHub Actions, which:

  1. Builds a Docker image when I push new changes to the main branch.
  2. Pushes the image to GitHub Container Registry (GHCR).
  3. Pulls the latest image on my server and restarts the container with the updated version.

This CI/CD setup ensures that new features and bug fixes are automatically deployed with minimal downtime.


Securing Access with Nginx and HTTPS

To serve the app publicly and securely, I configured an Nginx reverse proxy to route traffic from todolist.arsank47.dev to the Docker container. HTTPS encryption is handled by Certbot, which obtains and renews SSL certificates from Let’s Encrypt.

This not only secures user data but also ensures trust when visitors interact with the app.


Hosting the App on My Home Server

The app is deployed on an Ubuntu Server VM managed by Proxmox VE, my home virtualization platform. This gives me complete control over the hosting environment while keeping costs low.

Benefits of hosting on Proxmox:

  • Resource isolation for each app using VMs or containers
  • Centralized control of my web projects
  • Flexibility to scale with minimal overhead

Conclusion

TaskMaster is more than just a to-do list—it’s a foundation for a larger ecosystem of productivity tools I’m building. From job tracking to calendar integration and file storage limits, the app is evolving into a full personal productivity suite.

You can try the live version here: todolist.arsank47.dev


Sources: