✨ Try it yourself at todo.goatdb.dev! ✅
A simple, minimalistic, self-hosted todo list application powered by GoatDB. This application demonstrates how to build a Single Page Application (SPA) with user authentication and data persistence using GoatDB's server framework.
- User authentication and registration
- Create, update, and delete todo items
- Easy self-hosting on your own infrastructure
- Clients continue functioning even when the server is offline
- Realtime collaboration engine synchronizes changes across clients
- Update to Material UI
- Easier way to configure server
- Deadline reminder notifications
- Multiple todo lists per user
- Share todo lists with others

- Clone this repository
- Configure email settings in
server/server.ts
(supports SMTP or AWS SES via NodeMailer) - Run
deno task debug
to start the development server - Visit
http://localhost:8001
to access your todo list
Edit server/server.ts
to configure email settings.
Example SMTP configuration (see https://nodemailer.com/smtp/):
// In main() function
const server = new Server({
// ... other server config ...
emailConfig: {
host: "smtp.gmail.com",
port: 587,
secure: true,
auth: {
user: "user@gmail.com",
pass: "app-specific-password",
},
from: "system@my.domain.com",
},
});
Example Amazon SES configuration (see https://nodemailer.com/ses/):
// Insert this import at the top of the file
import { SendRawEmailCommand, SES } from "npm:@aws-sdk/client-ses";
// In main() function
const server = new Server({
// ... other server config ...
emailConfig: {
SES: {
ses: new SES({ region: "us-east-1" }),
aws: { SendRawEmailCommand },
},
from: "system@my.domain.com",
},
});
deno task build
This demo is currently deployed on a single t4g.nano EC2 instance that is shared with other projects. Thanks to GoatDB's distributed architecture, clients act as active replicas of the data. If the server fails, clients retain full functionality and can restore server state when it comes back online. This provides resilience against server outages without requiring complex infrastructure.
A systemd service file is provided at server/todo.service
which you can use as
a starting point for running the server as a system service on your own Linux
server.
Backing up your todo list data is straightforward. Simply zip the server's data
directory (specified when starting the server, defaults to todo-data
in the
current directory)