A lightweight, secure, and mobile-responsive web application for managing tasks across users.
Built with Java 25 and SQLite.


Screenshots from a mobile phone browser above:
- Role-based access control: A separate interface for Admins and Users with their respective controls
- Live progress tracking: Admins can see Users task progression
- Mobile-friendly design: Looks good and easy to use on mobile phones as well as computers
- Persistent storage: SQLite database remains safe and intact after updates or changes
- Session Management: Implemented secure UUID-based session tokens with HttpOnly cookies to prevent Session Hijacking and IDOR attacks.
- SQL Injection Prevention: 100% coverage using PreparedStatements for all database interactions.
- XSS Protection: Automatic HTML entity escaping for all user-generated content (usernames and task descriptions).
- Access Control: Server-side verification of administrative privileges for all sensitive actions (adding users, clearing feeds).
- Language: Java (using the built-in com.sun.net.httpserver)
- Database: SQLite 3
- Frontend: Vanilla HTML5 and CSS3
- Prerequisites: Java 25 installed on server
- Clone the repo:
git clone https://github.com/js-2507/Multi-User-Task-Tracker.git - Add Dependencies: Download the sqlite-jdbc JAR file and add it to your classpath.
- To deploy, do this in the intellij project (or project directory) terminal on your local machine
#1. Compilejavac -cp "lib/*" src/*.java -d bin/
#2. Create a simple JAR
jar cfe chore-app.jar Main -C bin . - Then send the .jar file and the lib folder to your server (in your folder for the service)
you can use FileZilla or WinSCP for an easy GUI transfer or use the terminal - To start the .jar file, enter
java -cp "chore-app.jar:lib/*" Main - (Optional) To make it a systemd service (for best availability in case of power outage/restarting)
On your server, go to/etc/systemd/systemand create achore.serviceusingsudo nanoadd this:
[Unit]Description=Household Chore Tracker Service
# Wait for the network to be ready before starting
After=network.target[Service]
# The user that will run the app (usually your username, replace user)
User=user
# The folder where your .jar and chores.db are located (replace filepath)
WorkingDirectory=/home/user/filepath
# The command to start your app
ExecStart=/usr/bin/java -cp "chore-app.jar:lib/*" Main
# Restart the app automatically if it crashes
Restart=always
# Optional: standard output logs
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=chore-app[Install]
# This tells Ubuntu to start the service during a normal boot
WantedBy=multi-user.targetThen do
sudo systemctl daemon-reloadandsudo systemctl enable chore.serviceandsudo systemctl start chore.service
for web admin and use,
The admin can add users (and their usernames/passwords), add tasks for users, undo task progress, clear tasks for users, and see progress of all users tasks.
Default admin username is 'admin' and password is 'admin123$' (can be changed in Database.java file, line 28). Users can see only their tasks through login, and can mark tasks as complete. Any contributions and improvements are appreciated!