- Flask backend with TinyDB database - Multi-user auth with bcrypt password hashing - Goal CRUD with activation/deactivation and per-user limits - Task CRUD with status tracking (todo/doing/pending/done) - Focus rule: one doing task per goal - Time picker-style scroll view with drag-and-drop reordering - Admin panel for user management - uv environment management
102 lines
2.3 KiB
Markdown
102 lines
2.3 KiB
Markdown
# 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](https://github.com/astral-sh/uv) package manager
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```python
|
|
# 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):
|
|
|
|
```bash
|
|
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
|