110 lines
3.1 KiB
Markdown
110 lines
3.1 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
|
|
|
|
# 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:
|
|
|
|
```bash
|
|
# 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):
|
|
|
|
```bash
|
|
uv run gunicorn -w 4 -b 0.0.0.0:5000 app:app
|
|
```
|
|
|
|
> **Note:** The `-b` flag is required because gunicorn is a separate WSGI server and does not read Flask's `config.py`. The values in `config.py` (`HOST`, `PORT`) only apply to Flask's built-in dev server (`app.run()`).
|
|
|
|
## 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
|