Yuyao Huang 6b05ba3e2c Improve tasks UI: scroll-to-focus picker, landscape layout, height alignment
- Complete tasks now displayed in scroll view alongside unfinished tasks
- Priority order: completed tasks first (by finished_time desc), then unfinished (by order asc)
- Time picker-style scroll: wheel scroll snaps per task, center item gets visual focus
- Landscape mode (>=1024px): scroll view + edit panel side by side, panel always visible
- Portrait mode: edit panel slides in from right on tap
- Fixed flex layout so scroll view and edit panel align perfectly in height
2026-05-08 15:47:25 +08:00
2026-05-08 12:41:19 +08:00
2026-05-08 12:41:19 +08:00

GoalsBreakDown

A web-based task management application focused on goal-oriented task tracking with a scroll-view interface.

Features

  • Multi-user support with registration and authentication
  • Goal management with activation/deactivation
  • Task management with status tracking (todo/doing/pending/done)
  • Focus rule: Only one "doing" task per goal
  • Scroll-view task selector with drag-and-drop reordering
  • Admin panel for user management
  • Per-user goal limits

Quick Start

Prerequisites

  • Python 3.10+
  • uv package manager

Installation

# Clone the repository
git clone <repository-url>
cd GoalsBreakDown

# Install dependencies with uv
uv sync

# Run the application
uv run python app.py

The application will start at http://127.0.0.1:5000

Default Admin Account

  • Username: admin
  • Password: admin123

Important: Change the default admin password after first login.

Configuration

Edit config.py to customize settings:

# Database path
DB_PATH = "data/db.json"

# Default admin credentials (change these!)
DEFAULT_ADMIN_USERNAME = "admin"
DEFAULT_ADMIN_PASSWORD = "admin123"

# Default max goals for new users
DEFAULT_MAX_GOALS = 5

# Flask settings
SECRET_KEY = "your-secret-key-here"  # Change in production
DEBUG = True
HOST = "0.0.0.0"
PORT = 5000

Production Deployment

  1. Change SECRET_KEY to a random secure string
  2. Set DEBUG = False
  3. Change default admin credentials
  4. Use a production WSGI server (e.g., gunicorn):
uv add gunicorn
uv run gunicorn -w 4 -b 0.0.0.0:5000 app:app

Project Structure

GoalsBreakDown/
├── app.py              # Flask application
├── config.py           # Configuration
├── database.py         # TinyDB operations
├── auth.py             # Authentication helpers
├── templates/          # HTML templates
├── static/
│   ├── css/           # Stylesheets
│   └── js/            # JavaScript files
└── data/              # Database (auto-created, not tracked in git)

Tech Stack

  • Backend: Python + Flask
  • Database: TinyDB
  • Frontend: Vanilla JS + HTML/CSS
  • Drag-and-Drop: SortableJS
  • Authentication: bcrypt + Flask sessions
  • Environment: uv
Description
No description provided
Readme 270 KiB
Languages
JavaScript 32.6%
Python 30%
CSS 19.9%
HTML 17.5%