Skip to content

jp1337/momo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

125 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸͺΆ Momo

"You must do one more thing, and you'll get to rest."

Steal your time back.

Momo is a task management app built for people who struggle with avoidance, procrastination, and the overwhelming weight of everyday tasks. Not a power-user productivity suite β€” a quiet, daily companion that asks only one thing of you: one small step, today.

🌐 Live version: momotask.app
πŸ“– Documentation: jp1337.github.io/momo


✨ The Name

The name Momo comes from Michael Ende's 1973 novel Momo β€” one of the most quietly radical books about time, attention, and what it means to be present.

In the story, the Grey Gentlemen β€” shadowy figures carrying briefcases β€” visit ordinary people and convince them to "save time." They tell people to stop lingering, to cut out the things that don't produce anything: long conversations, idle afternoons, play, rest. People comply. They become efficient. They become joyless. They lose themselves.

Momo is a small, homeless girl who has a rare gift: she truly listens. And through that gift, she sees what others cannot β€” that the Grey Gentlemen are stealing people's time, not saving it. She fights them. Alone. Slowly. One step at a time.

The parallel to procrastination and avoidance is not accidental.

When anxiety or overwhelm turns every task into a wall, when the Grey Gentlemen of your own mind tell you that you're behind, that you'll never catch up, that you should just wait until tomorrow β€” Momo is on your side. She doesn't ask you to be productive. She asks you to do one thing. Just one. That's enough for today.

This app is named in her honor.


🌟 Features

  • Daily Quest β€” One small task, chosen for you each day. No overwhelm, just one step forward.
  • Topics & Subtasks β€” Break big projects (like "Moving" or "Tax Return") into tiny, manageable pieces.
  • Recurring Tasks β€” Weekly laundry, monthly cleaning, fortnightly grocery runs. Set it and forget it.
  • Gamification β€” Earn coins, build streaks, level up. Small wins deserve real celebration.
  • Wishlist & Budget β€” Track things you want to buy, with a monthly budget indicator to spend more consciously.
  • Push Notifications β€” Daily reminders via browser push. No third-party service, no subscription.
  • PWA β€” Install on your phone like a native app. Works offline. The task creation form is fully usable on mobile β€” a corrected z-index ensures it renders above the bottom navigation bar as a proper full-height modal.
  • REST API & API Keys β€” Full public REST API with personal access tokens (read-only flag, expiry dates). Interactive Swagger UI at /api-docs.
  • Account Linking β€” Connect multiple OAuth providers to one account.
  • Multilingual β€” German, English, and French UI with cookie-based locale switching. Add any language by dropping in a messages/XX.json file.
  • Statistics β€” Personal stats dashboard showing tasks completed, coins earned, streaks, level progress, achievements unlocked, and wishlist purchases.
  • Admin Panel β€” Platform-wide statistics for operators (user growth, top users, achievement distribution). Protected by ADMIN_USER_IDS env var β€” only listed user UUIDs can access /admin.
  • Procrastination Counter β€” Every task tracks how many times it has been postponed. Tasks postponed 3 or more times award double coins on completion.
  • Daily Quest Postpone Limit β€” Configurable per-user daily postpone limit (1–5, default 3) in Settings. Prevents endless deferral of the one thing that matters.
  • Task Breakdown β€” Split any task into subtasks with a single button. A new Topic is created from the breakdown; the original task is removed. The totalTasksCreated statistics counter is correctly incremented for each generated subtask.
  • Timezone-Aware Daily Quest β€” The daily quest selection respects the user's local timezone (GET /api/daily-quest?timezone=Europe/Berlin), ensuring the quest resets at local midnight rather than UTC.
  • Immutable Statistics Counter β€” totalTasksCreated is a cumulative counter that only ever increases. Deleting a task never decrements it, giving an accurate lifetime picture of your output.
  • Time Estimates β€” Assign a time estimate (5, 15, 30, or 60 minutes) to any task. Estimates are displayed as a badge on task cards.
  • Quick Wins β€” Dashboard section that surfaces all tasks estimated at 15 minutes or less, so a short window of focus never goes to waste.
  • Public Landing Page β€” Atmospheric Momo-themed landing page (Lora italic, dark forest green, feather animation, Michael Ende quote) for unauthenticated visitors.
  • Dark & Light Mode β€” Cozy warm tones in both themes. Because productivity shouldn't feel clinical.
  • DSGVO / GDPR Ready β€” Data export (JSON), account deletion with full cascade, Impressum + DatenschutzerklΓ€rung pages, no tracking cookies.
  • Open Source & Self-Hostable β€” Your data, your server, your rules. Migrations run automatically on container start.

πŸ” Authentication

Sign in with the account you already have. No new password to forget.

Provider Live (momotask.app) Self-hosted
GitHub βœ… βœ… (own OAuth App)
Discord βœ… βœ… (own OAuth App)
Google βœ… βœ… (own OAuth App)
OIDC (Authentik, Keycloak, …) β€” βœ…

See OAuth Setup Guide for configuration instructions.


πŸ› οΈ Tech Stack

Layer Technology
Frontend Next.js 16 (App Router) + React 19, TypeScript, Tailwind CSS v4
Animations Framer Motion
Auth Auth.js v5 (GitHub, Discord, Google, OIDC)
Database PostgreSQL 18 + Drizzle ORM
i18n next-intl β€” German, English, French (cookie-based, no URL prefix)
Push Notifications Web Push API (VAPID, no third-party)
API OpenAPI 3.1.0 + Personal Access Tokens (Bearer)
Container Docker (Node.js 22 LTS)
Orchestration Kubernetes
CI/CD GitHub Actions (native multi-arch: amd64 + arm64)
Image Registries GHCR, Docker Hub, Quay.io

Note for React developers: Next.js is a React framework. All UI is written in React β€” Next.js adds routing, server-side rendering, API routes, and PWA support on top.


🎨 Design

Momo is intentionally cozy. Both the dark and light themes use warm, earthy tones β€” no harsh whites, no cold blues, no sterile greys. The goal is an app you want to open, not one that feels like a spreadsheet.

  • Dark theme: Deep forest greens and near-blacks with warm amber accents
  • Light theme: Soft parchment whites and warm sand tones
  • Typography: Lora (headings) Β· JetBrains Mono (tasks) Β· DM Sans (UI)
  • Animations: Subtle, purposeful β€” a small celebration when you finish something, not a distraction

πŸš€ Quick Start (Docker Compose)

Prerequisites

  • Docker & Docker Compose
  • Node.js 22+ (for local development only)
  • A GitHub or Discord OAuth App (see OAuth Setup)

1. Clone the repository

git clone https://github.com/jp1337/momo.git
cd momo

2. Configure environment variables

cp .env.example .env.local
# Edit .env.local with your credentials

See Environment Variables for a full reference.

3. Start with Docker Compose

docker compose up -d

The app is available at http://localhost:3000. Database migrations run automatically before the server starts β€” no manual step needed.


πŸ§‘β€πŸ’» Local Development (WSL / Linux)

# Install dependencies
npm install

# Start PostgreSQL via Docker Compose
docker compose up db -d

# Run database migrations (local dev only)
npx drizzle-kit migrate

# Start the development server
npm run dev

The app runs at http://localhost:3000.


πŸ“¦ Container Images

Momo images are published to three registries on every release for redundancy:

Registry Image
GitHub Container Registry ghcr.io/jp1337/momo
Docker Hub docker.io/jp1337/momo
Quay.io quay.io/jp1337/momo

Pull from whichever is available:

docker pull ghcr.io/jp1337/momo:latest
# or
docker pull jp1337/momo:latest
# or
docker pull quay.io/jp1337/momo:latest

πŸ“– Documentation

Full documentation is available at jp1337.github.io/momo

Guide Description
Deployment Docker Compose, production checklist, Kubernetes reference
Environment Variables All configuration options
OAuth Setup GitHub, Discord, Google & OIDC configuration
API Reference All REST endpoints β€” interactive Swagger UI at /api-docs
Database Schema overview, migrations, Drizzle Studio
DSGVO / GDPR Compliance guide for operators

πŸ—οΈ Project Status

Phase Status Description
Phase 1 – Foundation βœ… Done Next.js 16 + Auth.js v5 + Drizzle ORM + Design System
Phase 2 – Core Tasks βœ… Done Task CRUD, Topics, Recurring
Phase 3 – Daily Quest βœ… Done Quest algorithm, Dashboard
Phase 4 – Gamification βœ… Done Coins, Streaks, Animations
Phase 5 – Wishlist βœ… Done Wishlist CRUD, Budget tracking, Affordability, Coin-unlock
Phase 6 – PWA & Push βœ… Done PWA manifest, Service Worker, VAPID push, Daily quest & streak notifications, Settings page
Phase 7 – Deployment βœ… Done Multi-stage Docker, GitHub Actions (GHCR + DockerHub + Quay), Security Headers, Rate Limiting, K8s manifests
Phase 8 – Polish βœ… Done Multilingual (DE/EN/FR), DSGVO compliance, Dark mode redesign, self-hosted fonts, data export, account deletion
Phase 9 – API & Keys βœ… Done Public REST API, Personal Access Tokens, Swagger UI, Account Linking, Font Awesome icons, SVG Logo
Phase 10 – Statistics & Admin βœ… Done Personal stats page, Admin panel, Mobile bottom navigation
Phase 11 – UX & Anti-Procrastination βœ… Done Procrastination counter, postpone limit, bonus coins, task breakdown, time estimates, Quick Wins, public landing page, dashboard redesign, FA icon picker
Phase 11 – Bugfixes (2026-04-05) βœ… Done Timezone-aware daily quest selection, immutable statistics counter, task breakdown stat increment, mobile task form z-index fix

🚒 Production Checklist

Before deploying Momo to production, verify all items below:

  • Generate AUTH_SECRET β€” minimum 32 random bytes:
    openssl rand -base64 32
  • Set AUTH_TRUST_HOST=true β€” required when running behind any reverse proxy (nginx, Caddy, Traefik) or in Kubernetes
  • Set all required environment variables β€” see Environment Variables
  • Generate VAPID keys for push notifications:
    npx web-push generate-vapid-keys
  • Register OAuth apps for your production domain with correct callback URLs
  • Set CRON_SECRET to protect cron endpoints:
    openssl rand -hex 32
  • Configure TLS β€” use a reverse proxy (nginx, Caddy) or cert-manager in Kubernetes
  • Configure legal pages (for public deployments) β€” set NEXT_PUBLIC_IMPRINT_NAME, NEXT_PUBLIC_IMPRINT_ADDRESS, NEXT_PUBLIC_IMPRINT_EMAIL (see DSGVO Guide)
  • Set ADMIN_USER_IDS (optional) β€” comma-separated UUIDs of users who can access /admin. If unset, the admin page is inaccessible to everyone:
    # Find your UUID in the database, or check the "access denied" screen at /admin
    ADMIN_USER_IDS=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • Migrations run automatically β€” the container applies all pending migrations on startup. Check docker compose logs app after deployment to confirm.

See the full Deployment Guide for AUTH_SECRET rotation procedures and Kubernetes deployment steps.


🀝 Contributing

Momo is open source and welcomes contributions. Please open an issue or pull request on GitHub.


πŸ“œ License

MIT β€” see LICENSE for details.


Named after Momo, by Michael Ende. For everyone whose Grey Gentlemen have been stealing their time.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

 
 
 

Contributors