A simple to-do app focused on tasks that can be completed within a specific time span. taskline.tobinio.dev
Rust 56%
Vue 27%
TypeScript 15%
Nix <1%
CSS <1%
Just <1%
JavaScript <1%
<1%
Shell <1%

README.md

TaskLine #

A simple to-do app focused on tasks that can be completed within a specific time span.

Development #

Create a OAuth client at google

Create vapid keys for webpush this can be done via npx web-push generate-vapid-keys

#Nuxt
NUXT_GOOGLE_CLIENT_ID=<google_client_id>
NUXT_GOOGLE_CLIENT_SECRET=<google_client_secret>

BETTER_AUTH_URL=http://localhost:3000
#BETTER_AUTH_DATABASE_PATH=postgres://devuser:devpassword@localhost:5432/devdb

NUXT_PUBLIC_WEBPUSH_PUBLIC_KEY=<public_key>

#Api
API_WEBPUSH_PRIVATE_KEY=<private_key>

#API_DATABASE_URL=postgres://devuser:devpassword@localhost:5432/devdb

run just dev to start the nuxt dev server and the api server

Deployment via Nix #

flake.nix #

inputs = {
  ...
  taskline.url =
    "git+https://tangled.org/tobinio.dev/task-line?ref=<current_version>";
  ...
};

configuration.nix #

systemd.services.taskline-backend = {
  description = "TaskLine Backend";
  after = [ "network.target" ];
  wantedBy = [ "multi-user.target" ];

  serviceConfig = {
    ExecStart = "${inputs.taskline.packages.${pkgs.system}.backend}/bin/api";
  };
};

systemd.services.taskline-frontend = {
  description = "TaskLine Frontend";
  after = [ "network.target" ];
  wantedBy = [ "multi-user.target" ];

  serviceConfig = {
    ExecStart = "${pkgs.nodejs_22}/bin/node ${inputs.taskline.packages.${pkgs.system}.frontend}/server/index.mjs";
  };
};

.env example #

# Nuxt
NUXT_GOOGLE_CLIENT_ID=<google_client_id>
NUXT_GOOGLE_CLIENT_SECRET=<google_client_secret>

BETTER_AUTH_SECRET=<secret>
BETTER_AUTH_URL=<base_url>
BETTER_AUTH_DATABASE_PATH=<path_to_database>

NUXT_PUBLIC_WEBPUSH_PUBLIC_KEY=<public_key>

NUXT_PUBLIC_API_BASE=<api_base>

# Api
API_WEBPUSH_PRIVATE_KEY=<private_key>

API_DATABASE_URL=<database_url>

API_AUTH_API_BASE=<auth_api_base>
API_SELF_API_BASE=<self_api_base>