goalsbreakdown/README.md
Yuyao Huang 2629e8f2cd feat: move config.py to config.example.py, exclude config.py from git tracking
- Copy config.py to config.example.py as template (tracked in git)
- Add config.py to .gitignore (local config per developer)
- Update README.md with configuration setup instructions
- Fix outdated references (TinyDB -> SQLite, add missing files)
- Persist goal selection across task and note pages
2026-05-09 10:12:37 +08:00

2.9 KiB

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

# Create your local configuration from the example
cp config.example.py config.py

# 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

Local configuration is managed via config.py (not tracked in git). Use config.example.py as a template:

# Copy the example config and edit it
cp config.example.py config.py

Available settings in config.py:

Setting Description Default
DB_PATH SQLite database path data/db.sqlite
DEFAULT_ADMIN_USERNAME Default admin username admin
DEFAULT_ADMIN_PASSWORD Default admin password admin123
DEFAULT_MAX_GOALS Max goals per new user 5
SECRET_KEY Flask session secret (change in production!)
DEBUG Debug mode True
HOST Server bind address 0.0.0.0
PORT Server port 5000

Production Deployment

  1. Copy config.example.py to config.py
  2. Change SECRET_KEY to a random secure string
  3. Set DEBUG = False
  4. Change default admin credentials
  5. 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.example.py   # Configuration template (tracked in git)
├── config.py           # Local configuration (NOT tracked in git)
├── database.py         # SQLite operations
├── auth.py             # Authentication helpers
├── schema.py           # Database schema & migration
├── templates/          # HTML templates
├── static/
│   ├── css/           # Stylesheets
│   └── js/            # JavaScript files
└── data/              # Database (auto-created, not tracked in git)

Tech Stack

  • Backend: Python + Flask
  • Database: SQLite
  • Frontend: Vanilla JS + HTML/CSS
  • Drag-and-Drop: SortableJS
  • Markdown: marked.js
  • Authentication: bcrypt + Flask sessions
  • Environment: uv