Skip to main content

A local-first CLI mood tracker for developers

Project description

feels

A local-first CLI mood tracker for developers. Log how you're feeling, track focus and stress, organize by project, all from your terminal.

All data stays on your machine. No cloud. No accounts. No tracking.

Installation

# From PyPI (when published)
pip install feels

# From source
git clone https://github.com/gabrielpereira/feels.git
cd feels
pip install -e .

Quick Start

# First run — interactive setup
feels

# Log an entry (interactive prompts)
feels add

# View logs (last 7 days by default)
feels logs

# View all logs
feels logs --all

# See all commands
feels help

Commands

Logging

  • feels add — Log a new entry with mood (0–5), optional focus/stress scores, tags, and a note
  • feels logs — View logs grouped by day
    • --all — Show all logs ever
    • --oldest — Reverse sort (oldest first)
    • --from YYYY-MM-DD — Start date
    • --to YYYY-MM-DD — End date
    • --project <name> — Filter by project
  • feels edit <id> — Edit an existing log entry
  • feels delete <id> — Delete a log entry (with confirmation)

Organization

  • feels config — Update settings (enable/disable focus, stress, projects, tags, notes)
  • feels project add <name> — Manually add a project (or projects auto-create during feels add)
  • feels project list — Show all projects
  • feels project delete <name> — Remove a project

Insights & Data

  • feels stats — View statistics
    • Overall: total logs, average mood, best/worst mood
    • Optional: focus and stress averages (if enabled)
    • Last 7 days: logs this week and weekly average
  • feels export — Export logs as JSON or CSV
    • --format json — JSON format (full details)
    • --format csv — CSV format (spreadsheet-friendly)
  • feels reset — Delete all data (logs, projects, settings) with double confirmation

Help & Home

  • feels help — Show all available commands
  • feels — Show home screen with quick stats and command list

Features

Log mood entries with optional focus and stress scores (0–5) ✅ Add tags and notes to logs for context ✅ Organize by project (optional) to keep work separated ✅ View logs grouped by day with flexible filtering ✅ Edit & delete entries anytime ✅ Home dashboard showing total logs, current streak, last 7-days average ✅ Statistics — overall and weekly mood/focus/stress analysis ✅ Export data as JSON (full) or CSV (spreadsheet) ✅ Local storage only — everything at ~/.feels/, completely private ✅ Comprehensive tests — 23 tests covering core functionality ✅ Robust error handling — validates input and reports clear errors

Configuration

Settings are interactive. On first run, choose your defaults:

  • Mood score — always enabled (required)
  • Focus score — optional (enable/disable anytime)
  • Stress score — optional (enable/disable anytime)
  • Projects — optional (organize logs by project; projects auto-create during logging)
  • Tags — enabled by default (enable/disable anytime)
  • Notes — enabled by default (enable/disable anytime)

Run feels config anytime to revisit and change these settings.

Projects

When projects are enabled, you can create them on-the-fly while logging:

$ feels add
  Project (last_project): new-project    # Type any project name
  Mood: 4
   Logged 4/5 mood #1

# Next time, new-project is remembered as default
$ feels add
  Project (new-project):                 # Press Enter to use it again
  Mood: 5
   Logged 5/5 mood #2

# Or override anytime
$ feels add
  Project (new-project): another-one     # New project auto-created
  Mood: 3
   Logged 3/5 mood #3

You can also manage projects with feels project commands.

Data Storage

All your data lives locally:

  • ~/.feels/config.json — your configuration
  • ~/.feels/data.db — your log entries (SQLite database)

No internet required. No servers. No tracking. No data leaves your machine.

Examples

Log your first entry

$ feels add
  Project: work
  Mood (0–5): 4
  Focus (0–5): 3
  Stress (0–5): 2
  Tags: #meetings #productive
  Note: Good progress on the project

✓ Logged 4/5 mood #1

View logs from the last week

$ feels logs
──────────────────── March 25, 2026 ────────────────────
#1  ·  14:30  ·  work
4/5  3/5 focus  2/5 stress  #meetings  #productive
Good progress on the project

View statistics

$ feels stats

Overall
   total logs          42
   avg mood            3.8/5
   best               5/5
   worst              1/5

Focus
   avg                3.5/5
   best               5/5
   worst              1/5

Last 7 days
   logs this week     12
   avg mood           4.1/5

Export your logs

$ feels export --format json
✓ Exported 42 logs to feels_20260325_170013.json

$ feels export --format csv
✓ Exported 42 logs to feels_20260325_170014.csv

Reset all data

$ feels reset
This will delete all your logs, projects, and settings.
Are you sure? [y/n] (n): y

THIS ACTION CANNOT BE UNDONE. ALL DATA WILL BE PERMANENTLY DELETED. ARE YOU SURE? [y/n] (n): y

✓ All data deleted. Run feels to start fresh.

Development

Running Tests

# Install test dependencies
pip install -e ".[test]"

# Run all tests
pytest tests/ -v

# Run with coverage
pytest tests/ --cov=src/feels --cov-report=html

Current test coverage:

  • 100% config module
  • 84% database module
  • 85% utils module
  • 21% overall

Project Structure

feels/
├── src/feels/
│   ├── cli.py           # CLI entry point and argument routing
│   ├── config.py        # Configuration management
│   ├── database.py      # SQLite database operations
│   ├── utils.py         # Shared utilities (colors, formatting)
│   ├── validation.py    # Input validation
│   ├── add.py           # Log entry command
│   ├── logs.py          # View logs command
│   ├── edit.py          # Edit log command
│   ├── delete.py        # Delete log command
│   ├── config_cmd.py    # Settings command (mood, focus, stress, projects, tags, notes)
│   ├── project_cmd.py   # Project management command
│   ├── stats_cmd.py     # Statistics command (overall, weekly, optional scores)
│   ├── export_cmd.py    # Export command (JSON, CSV)
│   ├── reset_cmd.py     # Reset command (delete all data with confirmation)
│   ├── help_cmd.py      # Help command
│   ├── home.py          # Home screen display
│   └── onboarding.py    # First-run setup
├── tests/               # Test suite
├── pyproject.toml       # Package configuration
└── README.md            # This file

Roadmap

  • Theme customization (light/dark, custom colors)
  • Mood trends over time
  • Daily/weekly/monthly summaries
  • Best/worst times of day analysis
  • Export to other formats (PDF, Excel)
  • Data import from CSV
  • Cloud sync option (optional, default local)
  • Plugin system for custom commands

License

MIT License — see LICENSE file for details.

Contributing

Contributions welcome! Feel free to open issues or submit PRs.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

feels-0.1.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

feels-0.1.0-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file feels-0.1.0.tar.gz.

File metadata

  • Download URL: feels-0.1.0.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for feels-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8fd4117b4c46d8d8139b02170c1b034e05a9bd267dcf680ab42a75f37d8a89c0
MD5 b64ef775a0b222604a47f59e972cb290
BLAKE2b-256 aae80ea2b252709160f694ffe8a8c9c1c6d51ee36a0452e845e72271cd2e338b

See more details on using hashes here.

File details

Details for the file feels-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: feels-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for feels-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5c91bbe54313d8f438bd286e87ccb91c7308e8a52ebec5c65256bb13114df28a
MD5 da100461e8fd5f1d8c9f48319de4fedd
BLAKE2b-256 5fe6a4a9f42766cb2ca9759ee94f24335aef6fb6ed76486bf74679aa3ce7c4fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page