No description
Find a file
2026-08-08 06:08:24 +02:00
app deployment ready 2026-08-08 06:08:24 +02:00
migrations final 2026-08-08 05:37:41 +02:00
tests deployment ready 2026-08-08 06:08:24 +02:00
.dockerignore deployment ready 2026-08-08 06:08:24 +02:00
.env.example deployment ready 2026-08-08 06:08:24 +02:00
.gitignore git ignore 2026-08-08 02:52:44 +02:00
ACCESSIBILITY.md final 2026-08-08 05:37:41 +02:00
AGENTS.md phase 1 2026-08-08 02:53:18 +02:00
calender_design.md final 2026-08-08 05:37:41 +02:00
compose.yaml deployment ready 2026-08-08 06:08:24 +02:00
config.py deployment ready 2026-08-08 06:08:24 +02:00
DEPLOYMENT.md deployment ready 2026-08-08 06:08:24 +02:00
design.md final 2026-08-08 05:37:41 +02:00
Dockerfile deployment ready 2026-08-08 06:08:24 +02:00
flask_app_deploy_prompt.md deployment ready 2026-08-08 06:08:24 +02:00
gunicorn.conf.py final 2026-08-08 05:37:41 +02:00
Perfect! Hier ist die Zusammenfassung 2de.md phase 1 2026-08-08 02:53:18 +02:00
progress.md final 2026-08-08 05:37:41 +02:00
README.md deployment ready 2026-08-08 06:08:24 +02:00
requirements.txt final 2026-08-08 05:37:41 +02:00
wsgi.py phase 1 2026-08-08 02:53:18 +02:00

Steady

Steady is an ADHD-friendly task manager built with Flask. It provides a modular application foundation, secure authentication, task and subtask management, a seven-item Today view, status filters, priorities, progress indicators, and a single-task Focus Mode with countdowns, time blocks, context cues, positive completion feedback, forgiving streaks, bulk text capture, and portable JSON backups with reversible completed-task clearing. Per-user settings control theme, reading style, completion sound, and future reminder frequency.

Local setup

Python 3.14 is the development and container runtime used by this repository.

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
flask --app app run --debug

The development server is available at http://127.0.0.1:5000. Copy .env.example to .env or export its values in your shell. Replace the sample SECRET_KEY before using the app beyond local development.

Database migrations

Apply the committed migrations after installing dependencies:

flask --app app db upgrade

When a model changes, generate a migration with flask --app app db migrate -m "Describe the schema change", review the generated operations, and commit them so every environment applies the same schema.

Tests

python -m pytest

Tests use an isolated in-memory SQLite database and never write to the local development database.

Data and backups

After signing in, open /tasks/transfer to:

  • import up to 200 UTF-8 Markdown or plain-text task lines;
  • download a versioned JSON backup without credentials or account identifiers;
  • merge or replace tasks from a validated Steady backup; and
  • clear completed tasks with an immediate user-scoped undo action.

JSON restore validates the complete file before changing tasks. Keep downloaded backups private because task descriptions may contain personal information.

Personalization

Open /settings/ after signing in to choose Light, Dark, or system-controlled color mode; enable a dyslexia-friendly local reading style; turn completion sound on or off; and save a future reminder-frequency preference. The browser reminder control checks capability only. It does not request notification permission, register a service worker, or schedule reminders.

Roles and admin placeholder

Steady recognizes user, admin, viewer, and coach roles. Viewers can read and export their own tasks but cannot mutate task data; the other three roles retain writes to their own tasks. Ownership checks apply independently of role.

The admin feature is absent by default. Setting FEATURE_ADMIN=true before the application starts registers /admin/, which remains restricted to the admin role. It is a data-free placeholder only: user management, role assignment, and analytics are intentionally not implemented.

Production and quality

Task lists are paginated at 50 records per page and use an indexed visibility, status, and due-date query path. Dynamic responses are not cached; static assets use a bounded cache; and responses include CSP, framing, MIME, referrer, permissions, and cross-origin policies.

The production stack uses Docker Compose behind Caddy at https://steady.bujour.de. In summary: clone the repository to ~/stacks/steady, create a private .env containing SECRET_KEY, start with docker compose up -d --build, add reverse_proxy steady:5000 to Caddy, and verify /health. The application port is private and must not be published.

Follow DEPLOYMENT.md for the complete copy-paste deployment, update, TLS/reverse-proxy, migration, backup, verification, troubleshooting, and rollback procedure. Use ACCESSIBILITY.md for automated evidence and the mandatory manual browser, keyboard, zoom, forced-colors, and screen-reader release matrix.

Focused quality checks can be run with:

python -m pytest tests/polish
node --check app/static/js/main.js
SECRET_KEY=configuration-check-only gunicorn --check-config --config gunicorn.conf.py wsgi:app