feels 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- feels-0.1.0/LICENSE +21 -0
- feels-0.1.0/MANIFEST.in +4 -0
- feels-0.1.0/PKG-INFO +296 -0
- feels-0.1.0/README.md +259 -0
- feels-0.1.0/pyproject.toml +47 -0
- feels-0.1.0/setup.cfg +4 -0
- feels-0.1.0/src/feels/__init__.py +0 -0
- feels-0.1.0/src/feels/add.py +72 -0
- feels-0.1.0/src/feels/cli.py +90 -0
- feels-0.1.0/src/feels/config.py +18 -0
- feels-0.1.0/src/feels/config_cmd.py +54 -0
- feels-0.1.0/src/feels/database.py +180 -0
- feels-0.1.0/src/feels/delete.py +29 -0
- feels-0.1.0/src/feels/edit.py +62 -0
- feels-0.1.0/src/feels/export_cmd.py +57 -0
- feels-0.1.0/src/feels/help_cmd.py +36 -0
- feels-0.1.0/src/feels/home.py +194 -0
- feels-0.1.0/src/feels/logs.py +56 -0
- feels-0.1.0/src/feels/onboarding.py +75 -0
- feels-0.1.0/src/feels/project_cmd.py +48 -0
- feels-0.1.0/src/feels/reset_cmd.py +58 -0
- feels-0.1.0/src/feels/stats_cmd.py +93 -0
- feels-0.1.0/src/feels/utils.py +60 -0
- feels-0.1.0/src/feels/validation.py +47 -0
- feels-0.1.0/src/feels.egg-info/PKG-INFO +296 -0
- feels-0.1.0/src/feels.egg-info/SOURCES.txt +32 -0
- feels-0.1.0/src/feels.egg-info/dependency_links.txt +1 -0
- feels-0.1.0/src/feels.egg-info/entry_points.txt +3 -0
- feels-0.1.0/src/feels.egg-info/requires.txt +11 -0
- feels-0.1.0/src/feels.egg-info/top_level.txt +1 -0
- feels-0.1.0/tests/__init__.py +1 -0
- feels-0.1.0/tests/test_config.py +184 -0
- feels-0.1.0/tests/test_database.py +261 -0
- feels-0.1.0/tests/test_utils.py +175 -0
feels-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gabriel Pereira
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
feels-0.1.0/MANIFEST.in
ADDED
feels-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: feels
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A local-first CLI mood tracker for developers
|
|
5
|
+
Author-email: Gabriel Pereira <gabriel@example.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/gabrielpereira/feels
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/gabrielpereira/feels/issues
|
|
9
|
+
Project-URL: Documentation, https://github.com/gabrielpereira/feels#readme
|
|
10
|
+
Project-URL: Source Code, https://github.com/gabrielpereira/feels
|
|
11
|
+
Keywords: mood,tracker,cli,mental-health,journal
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Office/Business
|
|
23
|
+
Classifier: Topic :: Utilities
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: rich>=13.0
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest>=7.0; extra == "test"
|
|
30
|
+
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
34
|
+
Requires-Dist: black; extra == "dev"
|
|
35
|
+
Requires-Dist: ruff; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# feels
|
|
39
|
+
|
|
40
|
+
A local-first CLI mood tracker for developers. Log how you're feeling, track focus and stress, organize by project, all from your terminal.
|
|
41
|
+
|
|
42
|
+
**All data stays on your machine.** No cloud. No accounts. No tracking.
|
|
43
|
+
|
|
44
|
+
## Installation
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# From PyPI (when published)
|
|
48
|
+
pip install feels
|
|
49
|
+
|
|
50
|
+
# From source
|
|
51
|
+
git clone https://github.com/gabrielpereira/feels.git
|
|
52
|
+
cd feels
|
|
53
|
+
pip install -e .
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# First run — interactive setup
|
|
60
|
+
feels
|
|
61
|
+
|
|
62
|
+
# Log an entry (interactive prompts)
|
|
63
|
+
feels add
|
|
64
|
+
|
|
65
|
+
# View logs (last 7 days by default)
|
|
66
|
+
feels logs
|
|
67
|
+
|
|
68
|
+
# View all logs
|
|
69
|
+
feels logs --all
|
|
70
|
+
|
|
71
|
+
# See all commands
|
|
72
|
+
feels help
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Commands
|
|
76
|
+
|
|
77
|
+
### Logging
|
|
78
|
+
- **`feels add`** — Log a new entry with mood (0–5), optional focus/stress scores, tags, and a note
|
|
79
|
+
- **`feels logs`** — View logs grouped by day
|
|
80
|
+
- `--all` — Show all logs ever
|
|
81
|
+
- `--oldest` — Reverse sort (oldest first)
|
|
82
|
+
- `--from YYYY-MM-DD` — Start date
|
|
83
|
+
- `--to YYYY-MM-DD` — End date
|
|
84
|
+
- `--project <name>` — Filter by project
|
|
85
|
+
- **`feels edit <id>`** — Edit an existing log entry
|
|
86
|
+
- **`feels delete <id>`** — Delete a log entry (with confirmation)
|
|
87
|
+
|
|
88
|
+
### Organization
|
|
89
|
+
- **`feels config`** — Update settings (enable/disable focus, stress, projects, tags, notes)
|
|
90
|
+
- **`feels project add <name>`** — Manually add a project (or projects auto-create during `feels add`)
|
|
91
|
+
- **`feels project list`** — Show all projects
|
|
92
|
+
- **`feels project delete <name>`** — Remove a project
|
|
93
|
+
|
|
94
|
+
### Insights & Data
|
|
95
|
+
- **`feels stats`** — View statistics
|
|
96
|
+
- Overall: total logs, average mood, best/worst mood
|
|
97
|
+
- Optional: focus and stress averages (if enabled)
|
|
98
|
+
- Last 7 days: logs this week and weekly average
|
|
99
|
+
- **`feels export`** — Export logs as JSON or CSV
|
|
100
|
+
- `--format json` — JSON format (full details)
|
|
101
|
+
- `--format csv` — CSV format (spreadsheet-friendly)
|
|
102
|
+
- **`feels reset`** — Delete all data (logs, projects, settings) with double confirmation
|
|
103
|
+
|
|
104
|
+
### Help & Home
|
|
105
|
+
- **`feels help`** — Show all available commands
|
|
106
|
+
- **`feels`** — Show home screen with quick stats and command list
|
|
107
|
+
|
|
108
|
+
## Features
|
|
109
|
+
|
|
110
|
+
✅ **Log mood entries** with optional focus and stress scores (0–5)
|
|
111
|
+
✅ **Add tags and notes** to logs for context
|
|
112
|
+
✅ **Organize by project** (optional) to keep work separated
|
|
113
|
+
✅ **View logs grouped by day** with flexible filtering
|
|
114
|
+
✅ **Edit & delete** entries anytime
|
|
115
|
+
✅ **Home dashboard** showing total logs, current streak, last 7-days average
|
|
116
|
+
✅ **Statistics** — overall and weekly mood/focus/stress analysis
|
|
117
|
+
✅ **Export data** as JSON (full) or CSV (spreadsheet)
|
|
118
|
+
✅ **Local storage only** — everything at `~/.feels/`, completely private
|
|
119
|
+
✅ **Comprehensive tests** — 23 tests covering core functionality
|
|
120
|
+
✅ **Robust error handling** — validates input and reports clear errors
|
|
121
|
+
|
|
122
|
+
## Configuration
|
|
123
|
+
|
|
124
|
+
Settings are interactive. On first run, choose your defaults:
|
|
125
|
+
- **Mood score** — always enabled (required)
|
|
126
|
+
- **Focus score** — optional (enable/disable anytime)
|
|
127
|
+
- **Stress score** — optional (enable/disable anytime)
|
|
128
|
+
- **Projects** — optional (organize logs by project; projects auto-create during logging)
|
|
129
|
+
- **Tags** — enabled by default (enable/disable anytime)
|
|
130
|
+
- **Notes** — enabled by default (enable/disable anytime)
|
|
131
|
+
|
|
132
|
+
Run **`feels config`** anytime to revisit and change these settings.
|
|
133
|
+
|
|
134
|
+
### Projects
|
|
135
|
+
|
|
136
|
+
When projects are enabled, you can create them on-the-fly while logging:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
$ feels add
|
|
140
|
+
Project (last_project): new-project # Type any project name
|
|
141
|
+
Mood: 4
|
|
142
|
+
✓ Logged 4/5 mood #1
|
|
143
|
+
|
|
144
|
+
# Next time, new-project is remembered as default
|
|
145
|
+
$ feels add
|
|
146
|
+
Project (new-project): # Press Enter to use it again
|
|
147
|
+
Mood: 5
|
|
148
|
+
✓ Logged 5/5 mood #2
|
|
149
|
+
|
|
150
|
+
# Or override anytime
|
|
151
|
+
$ feels add
|
|
152
|
+
Project (new-project): another-one # New project auto-created
|
|
153
|
+
Mood: 3
|
|
154
|
+
✓ Logged 3/5 mood #3
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
You can also manage projects with `feels project` commands.
|
|
158
|
+
|
|
159
|
+
## Data Storage
|
|
160
|
+
|
|
161
|
+
All your data lives locally:
|
|
162
|
+
- `~/.feels/config.json` — your configuration
|
|
163
|
+
- `~/.feels/data.db` — your log entries (SQLite database)
|
|
164
|
+
|
|
165
|
+
**No internet required.** No servers. No tracking. No data leaves your machine.
|
|
166
|
+
|
|
167
|
+
## Examples
|
|
168
|
+
|
|
169
|
+
### Log your first entry
|
|
170
|
+
```bash
|
|
171
|
+
$ feels add
|
|
172
|
+
Project: work
|
|
173
|
+
Mood (0–5): 4
|
|
174
|
+
Focus (0–5): 3
|
|
175
|
+
Stress (0–5): 2
|
|
176
|
+
Tags: #meetings #productive
|
|
177
|
+
Note: Good progress on the project
|
|
178
|
+
|
|
179
|
+
✓ Logged 4/5 mood #1
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### View logs from the last week
|
|
183
|
+
```bash
|
|
184
|
+
$ feels logs
|
|
185
|
+
──────────────────── March 25, 2026 ────────────────────
|
|
186
|
+
#1 · 14:30 · work
|
|
187
|
+
4/5 3/5 focus 2/5 stress #meetings #productive
|
|
188
|
+
Good progress on the project
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### View statistics
|
|
192
|
+
```bash
|
|
193
|
+
$ feels stats
|
|
194
|
+
|
|
195
|
+
Overall
|
|
196
|
+
total logs 42
|
|
197
|
+
avg mood 3.8/5
|
|
198
|
+
best 5/5
|
|
199
|
+
worst 1/5
|
|
200
|
+
|
|
201
|
+
Focus
|
|
202
|
+
avg 3.5/5
|
|
203
|
+
best 5/5
|
|
204
|
+
worst 1/5
|
|
205
|
+
|
|
206
|
+
Last 7 days
|
|
207
|
+
logs this week 12
|
|
208
|
+
avg mood 4.1/5
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Export your logs
|
|
212
|
+
```bash
|
|
213
|
+
$ feels export --format json
|
|
214
|
+
✓ Exported 42 logs to feels_20260325_170013.json
|
|
215
|
+
|
|
216
|
+
$ feels export --format csv
|
|
217
|
+
✓ Exported 42 logs to feels_20260325_170014.csv
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Reset all data
|
|
221
|
+
```bash
|
|
222
|
+
$ feels reset
|
|
223
|
+
This will delete all your logs, projects, and settings.
|
|
224
|
+
Are you sure? [y/n] (n): y
|
|
225
|
+
|
|
226
|
+
THIS ACTION CANNOT BE UNDONE. ALL DATA WILL BE PERMANENTLY DELETED. ARE YOU SURE? [y/n] (n): y
|
|
227
|
+
|
|
228
|
+
✓ All data deleted. Run feels to start fresh.
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Development
|
|
232
|
+
|
|
233
|
+
### Running Tests
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Install test dependencies
|
|
237
|
+
pip install -e ".[test]"
|
|
238
|
+
|
|
239
|
+
# Run all tests
|
|
240
|
+
pytest tests/ -v
|
|
241
|
+
|
|
242
|
+
# Run with coverage
|
|
243
|
+
pytest tests/ --cov=src/feels --cov-report=html
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Current test coverage:
|
|
247
|
+
- **100%** config module
|
|
248
|
+
- **84%** database module
|
|
249
|
+
- **85%** utils module
|
|
250
|
+
- **21%** overall
|
|
251
|
+
|
|
252
|
+
### Project Structure
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
feels/
|
|
256
|
+
├── src/feels/
|
|
257
|
+
│ ├── cli.py # CLI entry point and argument routing
|
|
258
|
+
│ ├── config.py # Configuration management
|
|
259
|
+
│ ├── database.py # SQLite database operations
|
|
260
|
+
│ ├── utils.py # Shared utilities (colors, formatting)
|
|
261
|
+
│ ├── validation.py # Input validation
|
|
262
|
+
│ ├── add.py # Log entry command
|
|
263
|
+
│ ├── logs.py # View logs command
|
|
264
|
+
│ ├── edit.py # Edit log command
|
|
265
|
+
│ ├── delete.py # Delete log command
|
|
266
|
+
│ ├── config_cmd.py # Settings command (mood, focus, stress, projects, tags, notes)
|
|
267
|
+
│ ├── project_cmd.py # Project management command
|
|
268
|
+
│ ├── stats_cmd.py # Statistics command (overall, weekly, optional scores)
|
|
269
|
+
│ ├── export_cmd.py # Export command (JSON, CSV)
|
|
270
|
+
│ ├── reset_cmd.py # Reset command (delete all data with confirmation)
|
|
271
|
+
│ ├── help_cmd.py # Help command
|
|
272
|
+
│ ├── home.py # Home screen display
|
|
273
|
+
│ └── onboarding.py # First-run setup
|
|
274
|
+
├── tests/ # Test suite
|
|
275
|
+
├── pyproject.toml # Package configuration
|
|
276
|
+
└── README.md # This file
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Roadmap
|
|
280
|
+
|
|
281
|
+
- [ ] Theme customization (light/dark, custom colors)
|
|
282
|
+
- [ ] Mood trends over time
|
|
283
|
+
- [ ] Daily/weekly/monthly summaries
|
|
284
|
+
- [ ] Best/worst times of day analysis
|
|
285
|
+
- [ ] Export to other formats (PDF, Excel)
|
|
286
|
+
- [ ] Data import from CSV
|
|
287
|
+
- [ ] Cloud sync option (optional, default local)
|
|
288
|
+
- [ ] Plugin system for custom commands
|
|
289
|
+
|
|
290
|
+
## License
|
|
291
|
+
|
|
292
|
+
MIT License — see LICENSE file for details.
|
|
293
|
+
|
|
294
|
+
## Contributing
|
|
295
|
+
|
|
296
|
+
Contributions welcome! Feel free to open issues or submit PRs.
|
feels-0.1.0/README.md
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# feels
|
|
2
|
+
|
|
3
|
+
A local-first CLI mood tracker for developers. Log how you're feeling, track focus and stress, organize by project, all from your terminal.
|
|
4
|
+
|
|
5
|
+
**All data stays on your machine.** No cloud. No accounts. No tracking.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# From PyPI (when published)
|
|
11
|
+
pip install feels
|
|
12
|
+
|
|
13
|
+
# From source
|
|
14
|
+
git clone https://github.com/gabrielpereira/feels.git
|
|
15
|
+
cd feels
|
|
16
|
+
pip install -e .
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# First run — interactive setup
|
|
23
|
+
feels
|
|
24
|
+
|
|
25
|
+
# Log an entry (interactive prompts)
|
|
26
|
+
feels add
|
|
27
|
+
|
|
28
|
+
# View logs (last 7 days by default)
|
|
29
|
+
feels logs
|
|
30
|
+
|
|
31
|
+
# View all logs
|
|
32
|
+
feels logs --all
|
|
33
|
+
|
|
34
|
+
# See all commands
|
|
35
|
+
feels help
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Commands
|
|
39
|
+
|
|
40
|
+
### Logging
|
|
41
|
+
- **`feels add`** — Log a new entry with mood (0–5), optional focus/stress scores, tags, and a note
|
|
42
|
+
- **`feels logs`** — View logs grouped by day
|
|
43
|
+
- `--all` — Show all logs ever
|
|
44
|
+
- `--oldest` — Reverse sort (oldest first)
|
|
45
|
+
- `--from YYYY-MM-DD` — Start date
|
|
46
|
+
- `--to YYYY-MM-DD` — End date
|
|
47
|
+
- `--project <name>` — Filter by project
|
|
48
|
+
- **`feels edit <id>`** — Edit an existing log entry
|
|
49
|
+
- **`feels delete <id>`** — Delete a log entry (with confirmation)
|
|
50
|
+
|
|
51
|
+
### Organization
|
|
52
|
+
- **`feels config`** — Update settings (enable/disable focus, stress, projects, tags, notes)
|
|
53
|
+
- **`feels project add <name>`** — Manually add a project (or projects auto-create during `feels add`)
|
|
54
|
+
- **`feels project list`** — Show all projects
|
|
55
|
+
- **`feels project delete <name>`** — Remove a project
|
|
56
|
+
|
|
57
|
+
### Insights & Data
|
|
58
|
+
- **`feels stats`** — View statistics
|
|
59
|
+
- Overall: total logs, average mood, best/worst mood
|
|
60
|
+
- Optional: focus and stress averages (if enabled)
|
|
61
|
+
- Last 7 days: logs this week and weekly average
|
|
62
|
+
- **`feels export`** — Export logs as JSON or CSV
|
|
63
|
+
- `--format json` — JSON format (full details)
|
|
64
|
+
- `--format csv` — CSV format (spreadsheet-friendly)
|
|
65
|
+
- **`feels reset`** — Delete all data (logs, projects, settings) with double confirmation
|
|
66
|
+
|
|
67
|
+
### Help & Home
|
|
68
|
+
- **`feels help`** — Show all available commands
|
|
69
|
+
- **`feels`** — Show home screen with quick stats and command list
|
|
70
|
+
|
|
71
|
+
## Features
|
|
72
|
+
|
|
73
|
+
✅ **Log mood entries** with optional focus and stress scores (0–5)
|
|
74
|
+
✅ **Add tags and notes** to logs for context
|
|
75
|
+
✅ **Organize by project** (optional) to keep work separated
|
|
76
|
+
✅ **View logs grouped by day** with flexible filtering
|
|
77
|
+
✅ **Edit & delete** entries anytime
|
|
78
|
+
✅ **Home dashboard** showing total logs, current streak, last 7-days average
|
|
79
|
+
✅ **Statistics** — overall and weekly mood/focus/stress analysis
|
|
80
|
+
✅ **Export data** as JSON (full) or CSV (spreadsheet)
|
|
81
|
+
✅ **Local storage only** — everything at `~/.feels/`, completely private
|
|
82
|
+
✅ **Comprehensive tests** — 23 tests covering core functionality
|
|
83
|
+
✅ **Robust error handling** — validates input and reports clear errors
|
|
84
|
+
|
|
85
|
+
## Configuration
|
|
86
|
+
|
|
87
|
+
Settings are interactive. On first run, choose your defaults:
|
|
88
|
+
- **Mood score** — always enabled (required)
|
|
89
|
+
- **Focus score** — optional (enable/disable anytime)
|
|
90
|
+
- **Stress score** — optional (enable/disable anytime)
|
|
91
|
+
- **Projects** — optional (organize logs by project; projects auto-create during logging)
|
|
92
|
+
- **Tags** — enabled by default (enable/disable anytime)
|
|
93
|
+
- **Notes** — enabled by default (enable/disable anytime)
|
|
94
|
+
|
|
95
|
+
Run **`feels config`** anytime to revisit and change these settings.
|
|
96
|
+
|
|
97
|
+
### Projects
|
|
98
|
+
|
|
99
|
+
When projects are enabled, you can create them on-the-fly while logging:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
$ feels add
|
|
103
|
+
Project (last_project): new-project # Type any project name
|
|
104
|
+
Mood: 4
|
|
105
|
+
✓ Logged 4/5 mood #1
|
|
106
|
+
|
|
107
|
+
# Next time, new-project is remembered as default
|
|
108
|
+
$ feels add
|
|
109
|
+
Project (new-project): # Press Enter to use it again
|
|
110
|
+
Mood: 5
|
|
111
|
+
✓ Logged 5/5 mood #2
|
|
112
|
+
|
|
113
|
+
# Or override anytime
|
|
114
|
+
$ feels add
|
|
115
|
+
Project (new-project): another-one # New project auto-created
|
|
116
|
+
Mood: 3
|
|
117
|
+
✓ Logged 3/5 mood #3
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
You can also manage projects with `feels project` commands.
|
|
121
|
+
|
|
122
|
+
## Data Storage
|
|
123
|
+
|
|
124
|
+
All your data lives locally:
|
|
125
|
+
- `~/.feels/config.json` — your configuration
|
|
126
|
+
- `~/.feels/data.db` — your log entries (SQLite database)
|
|
127
|
+
|
|
128
|
+
**No internet required.** No servers. No tracking. No data leaves your machine.
|
|
129
|
+
|
|
130
|
+
## Examples
|
|
131
|
+
|
|
132
|
+
### Log your first entry
|
|
133
|
+
```bash
|
|
134
|
+
$ feels add
|
|
135
|
+
Project: work
|
|
136
|
+
Mood (0–5): 4
|
|
137
|
+
Focus (0–5): 3
|
|
138
|
+
Stress (0–5): 2
|
|
139
|
+
Tags: #meetings #productive
|
|
140
|
+
Note: Good progress on the project
|
|
141
|
+
|
|
142
|
+
✓ Logged 4/5 mood #1
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### View logs from the last week
|
|
146
|
+
```bash
|
|
147
|
+
$ feels logs
|
|
148
|
+
──────────────────── March 25, 2026 ────────────────────
|
|
149
|
+
#1 · 14:30 · work
|
|
150
|
+
4/5 3/5 focus 2/5 stress #meetings #productive
|
|
151
|
+
Good progress on the project
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### View statistics
|
|
155
|
+
```bash
|
|
156
|
+
$ feels stats
|
|
157
|
+
|
|
158
|
+
Overall
|
|
159
|
+
total logs 42
|
|
160
|
+
avg mood 3.8/5
|
|
161
|
+
best 5/5
|
|
162
|
+
worst 1/5
|
|
163
|
+
|
|
164
|
+
Focus
|
|
165
|
+
avg 3.5/5
|
|
166
|
+
best 5/5
|
|
167
|
+
worst 1/5
|
|
168
|
+
|
|
169
|
+
Last 7 days
|
|
170
|
+
logs this week 12
|
|
171
|
+
avg mood 4.1/5
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Export your logs
|
|
175
|
+
```bash
|
|
176
|
+
$ feels export --format json
|
|
177
|
+
✓ Exported 42 logs to feels_20260325_170013.json
|
|
178
|
+
|
|
179
|
+
$ feels export --format csv
|
|
180
|
+
✓ Exported 42 logs to feels_20260325_170014.csv
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Reset all data
|
|
184
|
+
```bash
|
|
185
|
+
$ feels reset
|
|
186
|
+
This will delete all your logs, projects, and settings.
|
|
187
|
+
Are you sure? [y/n] (n): y
|
|
188
|
+
|
|
189
|
+
THIS ACTION CANNOT BE UNDONE. ALL DATA WILL BE PERMANENTLY DELETED. ARE YOU SURE? [y/n] (n): y
|
|
190
|
+
|
|
191
|
+
✓ All data deleted. Run feels to start fresh.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Development
|
|
195
|
+
|
|
196
|
+
### Running Tests
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Install test dependencies
|
|
200
|
+
pip install -e ".[test]"
|
|
201
|
+
|
|
202
|
+
# Run all tests
|
|
203
|
+
pytest tests/ -v
|
|
204
|
+
|
|
205
|
+
# Run with coverage
|
|
206
|
+
pytest tests/ --cov=src/feels --cov-report=html
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Current test coverage:
|
|
210
|
+
- **100%** config module
|
|
211
|
+
- **84%** database module
|
|
212
|
+
- **85%** utils module
|
|
213
|
+
- **21%** overall
|
|
214
|
+
|
|
215
|
+
### Project Structure
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
feels/
|
|
219
|
+
├── src/feels/
|
|
220
|
+
│ ├── cli.py # CLI entry point and argument routing
|
|
221
|
+
│ ├── config.py # Configuration management
|
|
222
|
+
│ ├── database.py # SQLite database operations
|
|
223
|
+
│ ├── utils.py # Shared utilities (colors, formatting)
|
|
224
|
+
│ ├── validation.py # Input validation
|
|
225
|
+
│ ├── add.py # Log entry command
|
|
226
|
+
│ ├── logs.py # View logs command
|
|
227
|
+
│ ├── edit.py # Edit log command
|
|
228
|
+
│ ├── delete.py # Delete log command
|
|
229
|
+
│ ├── config_cmd.py # Settings command (mood, focus, stress, projects, tags, notes)
|
|
230
|
+
│ ├── project_cmd.py # Project management command
|
|
231
|
+
│ ├── stats_cmd.py # Statistics command (overall, weekly, optional scores)
|
|
232
|
+
│ ├── export_cmd.py # Export command (JSON, CSV)
|
|
233
|
+
│ ├── reset_cmd.py # Reset command (delete all data with confirmation)
|
|
234
|
+
│ ├── help_cmd.py # Help command
|
|
235
|
+
│ ├── home.py # Home screen display
|
|
236
|
+
│ └── onboarding.py # First-run setup
|
|
237
|
+
├── tests/ # Test suite
|
|
238
|
+
├── pyproject.toml # Package configuration
|
|
239
|
+
└── README.md # This file
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Roadmap
|
|
243
|
+
|
|
244
|
+
- [ ] Theme customization (light/dark, custom colors)
|
|
245
|
+
- [ ] Mood trends over time
|
|
246
|
+
- [ ] Daily/weekly/monthly summaries
|
|
247
|
+
- [ ] Best/worst times of day analysis
|
|
248
|
+
- [ ] Export to other formats (PDF, Excel)
|
|
249
|
+
- [ ] Data import from CSV
|
|
250
|
+
- [ ] Cloud sync option (optional, default local)
|
|
251
|
+
- [ ] Plugin system for custom commands
|
|
252
|
+
|
|
253
|
+
## License
|
|
254
|
+
|
|
255
|
+
MIT License — see LICENSE file for details.
|
|
256
|
+
|
|
257
|
+
## Contributing
|
|
258
|
+
|
|
259
|
+
Contributions welcome! Feel free to open issues or submit PRs.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "feels"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "A local-first CLI mood tracker for developers"
|
|
9
|
+
authors = [{name = "Gabriel Pereira", email = "gabriel@example.com"}]
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
requires-python = ">=3.10"
|
|
13
|
+
keywords = ["mood", "tracker", "cli", "mental-health", "journal"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Environment :: Console",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"License :: OSI Approved :: MIT License",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
25
|
+
"Topic :: Office/Business",
|
|
26
|
+
"Topic :: Utilities",
|
|
27
|
+
]
|
|
28
|
+
dependencies = [
|
|
29
|
+
"rich>=13.0",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.packages.find]
|
|
33
|
+
where = ["src"]
|
|
34
|
+
|
|
35
|
+
[project.urls]
|
|
36
|
+
"Homepage" = "https://github.com/gabrielpereira/feels"
|
|
37
|
+
"Bug Tracker" = "https://github.com/gabrielpereira/feels/issues"
|
|
38
|
+
"Documentation" = "https://github.com/gabrielpereira/feels#readme"
|
|
39
|
+
"Source Code" = "https://github.com/gabrielpereira/feels"
|
|
40
|
+
|
|
41
|
+
[project.optional-dependencies]
|
|
42
|
+
test = ["pytest>=7.0", "pytest-cov>=4.0"]
|
|
43
|
+
dev = ["pytest>=7.0", "pytest-cov>=4.0", "black", "ruff"]
|
|
44
|
+
|
|
45
|
+
[project.scripts]
|
|
46
|
+
feels = "feels.cli:main"
|
|
47
|
+
fls = "feels.cli:main"
|
feels-0.1.0/setup.cfg
ADDED
|
File without changes
|