time2 2.5.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.
Files changed (51) hide show
  1. time2-2.5.0/LICENSE +21 -0
  2. time2-2.5.0/MANIFEST.in +17 -0
  3. time2-2.5.0/PKG-INFO +447 -0
  4. time2-2.5.0/README.md +414 -0
  5. time2-2.5.0/docs/AI_INSIGHTS.md +188 -0
  6. time2-2.5.0/docs/CODE_WALKTHROUGH.md +222 -0
  7. time2-2.5.0/docs/DEVELOPER_GUIDE.md +738 -0
  8. time2-2.5.0/docs/MANUAL.md +570 -0
  9. time2-2.5.0/docs/MODULES.md +167 -0
  10. time2-2.5.0/docs/PACKAGING.md +189 -0
  11. time2-2.5.0/docs/README.md +153 -0
  12. time2-2.5.0/docs/TAILSCALE_PRIVATE_ACCESS.md +157 -0
  13. time2-2.5.0/examples/time2_data.example.json +5 -0
  14. time2-2.5.0/examples/time2_settings.example.json +85 -0
  15. time2-2.5.0/pyproject.toml +86 -0
  16. time2-2.5.0/requirements-llm.txt +1 -0
  17. time2-2.5.0/requirements-whisper.txt +1 -0
  18. time2-2.5.0/requirements.txt +2 -0
  19. time2-2.5.0/setup.cfg +4 -0
  20. time2-2.5.0/tests/time2_regression_checks.py +270 -0
  21. time2-2.5.0/time2.egg-info/PKG-INFO +447 -0
  22. time2-2.5.0/time2.egg-info/SOURCES.txt +49 -0
  23. time2-2.5.0/time2.egg-info/dependency_links.txt +1 -0
  24. time2-2.5.0/time2.egg-info/entry_points.txt +2 -0
  25. time2-2.5.0/time2.egg-info/requires.txt +12 -0
  26. time2-2.5.0/time2.egg-info/top_level.txt +5 -0
  27. time2-2.5.0/time2_ai_cache_worker.py +76 -0
  28. time2-2.5.0/time2_app/__init__.py +14 -0
  29. time2-2.5.0/time2_app/ai.py +1391 -0
  30. time2-2.5.0/time2_app/app.py +885 -0
  31. time2-2.5.0/time2_app/budget.py +261 -0
  32. time2-2.5.0/time2_app/chat.py +512 -0
  33. time2-2.5.0/time2_app/cli.py +307 -0
  34. time2-2.5.0/time2_app/components.py +47 -0
  35. time2-2.5.0/time2_app/config.py +106 -0
  36. time2-2.5.0/time2_app/models.py +610 -0
  37. time2-2.5.0/time2_app/reports.py +384 -0
  38. time2-2.5.0/time2_app/storage.py +373 -0
  39. time2-2.5.0/time2_app/streamlit_entry.py +11 -0
  40. time2-2.5.0/time2_app/tailscale_utils.py +148 -0
  41. time2-2.5.0/time2_app/transcription.py +62 -0
  42. time2-2.5.0/time2_app/utils.py +869 -0
  43. time2-2.5.0/time2_app/views.py +5422 -0
  44. time2-2.5.0/time2_e2_component/index.html +575 -0
  45. time2-2.5.0/time2_jupyter_launcher.ipynb +85 -0
  46. time2-2.5.0/time2_jupyter_launcher.py +69 -0
  47. time2-2.5.0/time2_matrix_component/index.html +427 -0
  48. time2-2.5.0/time2_streamlit_app.py +12 -0
  49. time2-2.5.0/time2_tailscale_jupyter_launcher.ipynb +139 -0
  50. time2-2.5.0/time2_tailscale_jupyter_launcher.py +310 -0
  51. time2-2.5.0/time2_task_list_component/index.html +191 -0
time2-2.5.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Apurba Das
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.
@@ -0,0 +1,17 @@
1
+ include README.md
2
+ include LICENSE
3
+ include requirements.txt
4
+ include requirements-llm.txt
5
+ include requirements-whisper.txt
6
+ include time2_streamlit_app.py
7
+ include time2_jupyter_launcher.py
8
+ include time2_jupyter_launcher.ipynb
9
+ include time2_tailscale_jupyter_launcher.py
10
+ include time2_tailscale_jupyter_launcher.ipynb
11
+ include time2_ai_cache_worker.py
12
+ recursive-include time2_matrix_component *.html
13
+ recursive-include time2_e2_component *.html
14
+ recursive-include time2_task_list_component *.html
15
+ recursive-include docs *.md
16
+ recursive-include examples *.json
17
+ recursive-include tests *.py
time2-2.5.0/PKG-INFO ADDED
@@ -0,0 +1,447 @@
1
+ Metadata-Version: 2.4
2
+ Name: time2
3
+ Version: 2.5.0
4
+ Summary: Local-first task, planning, audio, AI insight, and budget tracker built with Streamlit.
5
+ Author: time-2 contributors
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/a4das/time-2
8
+ Project-URL: Documentation, https://github.com/a4das/time-2#readme
9
+ Project-URL: Issues, https://github.com/a4das/time-2/issues
10
+ Keywords: streamlit,tasks,planning,local-first,tailscale,whisper,llm,budget
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Office/Business :: Scheduling
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: streamlit>=1.45
24
+ Requires-Dist: ipython>=8.0
25
+ Provides-Extra: whisper
26
+ Requires-Dist: openai-whisper>=20231117; extra == "whisper"
27
+ Provides-Extra: llm
28
+ Requires-Dist: llama-cpp-python>=0.3.0; extra == "llm"
29
+ Provides-Extra: all
30
+ Requires-Dist: openai-whisper>=20231117; extra == "all"
31
+ Requires-Dist: llama-cpp-python>=0.3.0; extra == "all"
32
+ Dynamic: license-file
33
+
34
+ # time2-0.5.0
35
+
36
+ <p align="center">
37
+ <strong>A local-first attention-friendly life/work tracker for tasks, mind states, energy, audio transcripts, AI review, and monthly budgeting.</strong>
38
+ </p>
39
+
40
+ <p align="center">
41
+ <img alt="Python" src="https://img.shields.io/badge/Python-3.10%2B-blue">
42
+ <img alt="Streamlit" src="https://img.shields.io/badge/Streamlit-1.45%2B-red">
43
+ <img alt="Storage" src="https://img.shields.io/badge/Storage-Local%20JSON-green">
44
+ <img alt="AI" src="https://img.shields.io/badge/AI-Local%20or%20API-purple">
45
+ <img alt="Network" src="https://img.shields.io/badge/Network-Tailscale%20Recommended-lightgrey">
46
+ </p>
47
+
48
+ ## Why This Exists
49
+
50
+ time-2.0.5 is not a normal todo list. It is a local-only Streamlit app designed
51
+ for the kind of real-life tracking that helps with time blindness,
52
+ avoidance, energy swings, spontaneous work, and memory gaps.
53
+
54
+ The app keeps pending work visible, but it also keeps evidence of what happened:
55
+ sessions, comments, reschedules, cancelled work, completed work, mind states,
56
+ audio logs, transcripts, budget entries, and AI-ready summaries.
57
+
58
+ The current version is intentionally simple and hackable:
59
+
60
+ - Python and Streamlit.
61
+ - Dataclasses for the core model.
62
+ - Local JSON files.
63
+ - Optional one-file-per-task and one-file-per-mind-log storage.
64
+ - Optional local Whisper transcription with automatic language detection.
65
+ - Optional LLM insights through local `llama-cpp-python` or an OpenAI-compatible API endpoint.
66
+ - No cloud database.
67
+ - No public deployment.
68
+ - Tailscale recommended for private outside access.
69
+
70
+ ## Highlights
71
+
72
+ | Area | What it does |
73
+ | --- | --- |
74
+ | Task tracking | Tasks/events with project, area, priority, energy, planned window, deadline, status, comments, sessions, and history. |
75
+ | Reserved tasks | Save unscheduled brown backlog tasks without planned date/deadline, then give them natural colors when scheduled later. |
76
+ | Progress history | Done tasks stay on the Victory Board; cancelled tasks stay visible; reschedules keep reasons. |
77
+ | Spontaneous work | `Now doing` creates an active task immediately and starts a session. |
78
+ | Planning review | Day/range view shows planned, done, cancelled, left, spontaneous work, sessions, comments, and mind logs; sorting is limited to priority, planned date/time, or deadline date/time. |
79
+ | Eisenhower Matrix | Urgency comes from deadline; importance comes from priority; tasks can be moved/edited from the matrix. |
80
+ | E2 Plot | Adds energy as a third axis so you can see urgency, importance, and energy cost/gain together. |
81
+ | Mind Log | Standalone mind-state entries with text, audio, and transcripts. |
82
+ | Audio everywhere | Task, project, mind-log, and budget entries can upload or record audio. |
83
+ | Transcripts | Whisper transcription is optional, visible, can auto-detect spoken language, and can be re-run later. |
84
+ | Budget | Monthly budget files with categories, limits, spending entries, audio notes, transcripts, overspending, and previous month loading. |
85
+ | AI Insights | Tunable deterministic scores, attention support detectors, and optional local/API LLM analysis for days/ranges. |
86
+ | AI Chat | Multiple saved local or API-backed chats over selected task, mind-state, audio, budget, and date-range context. |
87
+ | Reports/PDF | Download task, dashboard, period, mind-state, budget, chat, and raw snapshot reports as PDF/HTML/TXT/JSON. |
88
+ | Backups | Manual and timed JSON backups. |
89
+ | Portable launch | JupyterLab launcher notebook/script plus terminal command. |
90
+
91
+ ## Screens And Workflows
92
+
93
+ time-2.0.5 currently has these tabs:
94
+
95
+ - `Add`
96
+ - `Planning`
97
+ - `Deadlines`
98
+ - `Matrix`
99
+ - `E2 Plot`
100
+ - `Mind Log`
101
+ - `Pending`
102
+ - `Victory Board`
103
+ - `Cancelled`
104
+ - `Dashboard`
105
+ - `Budget`
106
+ - `AI Insights`
107
+ - `AI Chat`
108
+ - `Reports`
109
+ - `Settings`
110
+ - `Data`
111
+
112
+ The app is built around a simple loop:
113
+
114
+ 1. Capture what you planned to do.
115
+ 2. Capture what you actually did.
116
+ 3. Keep the history visible instead of hiding it.
117
+ 4. Record reasons and mind states when things move.
118
+ 5. Review the day/range later with data, transcripts, and AI-ready summaries.
119
+
120
+ ## Quick Start From JupyterLab
121
+
122
+ 1. Unzip or clone this folder somewhere local.
123
+ 2. Open JupyterLab in the same folder.
124
+ 3. Install the base requirements:
125
+
126
+ ```python
127
+ %pip install -r requirements.txt
128
+ ```
129
+
130
+ 4. Open `time2_jupyter_launcher.ipynb`.
131
+ 5. Run the launch cell.
132
+
133
+ The app opens at:
134
+
135
+ ```text
136
+ http://127.0.0.1:8503
137
+ ```
138
+
139
+ It also appears inside JupyterLab as an iframe.
140
+
141
+ If your Jupyter kernel is already running from the app folder, this also works:
142
+
143
+ ```python
144
+ %run time2_jupyter_launcher.py
145
+ ```
146
+
147
+ ## Install As A Python Package
148
+
149
+ After the package is published, a normal user can install and run it with:
150
+
151
+ ```bash
152
+ python -m pip install time2-local
153
+ time2 doctor
154
+ time2 run --open-browser
155
+ ```
156
+
157
+ The `time2` command includes helper checks:
158
+
159
+ ```bash
160
+ time2 doctor --optional
161
+ time2 doctor --optional --install-missing
162
+ time2 install-optionals --whisper
163
+ time2 install-optionals --llm
164
+ time2 install-optionals --all
165
+ ```
166
+
167
+ Optional installs ask before changing the current Python environment.
168
+
169
+ Private access helper commands:
170
+
171
+ ```bash
172
+ time2 tailscale install
173
+ time2 tailscale login
174
+ time2 run --tailscale --open-browser
175
+ time2 tailscale serve-status
176
+ ```
177
+
178
+ Tailscale is system software. The CLI detects whether it is installed, prints
179
+ the install command/link, and asks before running a package-manager install.
180
+ The web app also has `Settings -> Private access with Tailscale` for status,
181
+ sign-in, and Serve setup.
182
+
183
+ ## Quick Start From Terminal
184
+
185
+ ```bash
186
+ pip install -r requirements.txt
187
+ python -m streamlit run time2_streamlit_app.py --server.address 127.0.0.1 --server.port 8503 --server.headless true
188
+ ```
189
+
190
+ Then open:
191
+
192
+ ```text
193
+ http://127.0.0.1:8503
194
+ ```
195
+
196
+ ## First Run
197
+
198
+ On a fresh laptop or fresh unzip, if `time2_settings.json` does not exist, the
199
+ app opens a first-run setup screen.
200
+
201
+ Choose the data folder there. The app creates this structure:
202
+
203
+ ```text
204
+ chosen_data_folder/
205
+ time2_data.json
206
+ time2_tasks/
207
+ time2_mind_logs/
208
+ time2_audio/
209
+ time2_budget/
210
+ time2_backups/
211
+ time2_ai_cache/
212
+ time2_chats/
213
+ time2_exports/
214
+ ```
215
+
216
+ The data folder can be changed later in `Settings -> Storage and backups` using
217
+ the `Choose folder` buttons.
218
+
219
+ ## Optional Whisper Transcription
220
+
221
+ Audio recording/upload works with only `requirements.txt`.
222
+
223
+ Install Whisper only when you want local transcription:
224
+
225
+ ```bash
226
+ pip install -r requirements-whisper.txt
227
+ ```
228
+
229
+ The default mode is `Auto detect`, so Whisper can infer whether the recording is
230
+ English, German, Spanish, Bengali, Hindi, or another language it recognizes. You
231
+ can still force one of these common languages from the app:
232
+
233
+ - Auto detect
234
+ - English
235
+ - German
236
+ - Spanish
237
+ - Bengali
238
+ - Hindi
239
+
240
+ Whisper can take a minute or two depending on audio length and laptop speed. The
241
+ app saves the audio first, then stores transcript status:
242
+
243
+ - `done`
244
+ - `failed`
245
+ - `missing_dependency`
246
+ - `not_requested`
247
+
248
+ If a transcript is missing, use the relevant `Transcribe this audio now` button.
249
+
250
+ ## Optional Local LLM Insights
251
+
252
+ Install the LLM dependency only on the laptop that will run the local model:
253
+
254
+ ```bash
255
+ pip install -r requirements-llm.txt
256
+ ```
257
+
258
+ Default model path:
259
+
260
+ ```text
261
+ ./Models/Qwen2.5-7B-Instruct-Q4_K_M.gguf
262
+ ```
263
+
264
+ You can choose a `.gguf` file from the app in:
265
+
266
+ ```text
267
+ Settings -> LLM defaults
268
+ ```
269
+
270
+ You can also use an OpenAI-compatible API instead of a local GGUF model. Configure it in:
271
+
272
+ ```text
273
+ Settings -> LLM defaults
274
+ ```
275
+
276
+ The API mode supports a base URL such as `http://127.0.0.1:8000/v1`, a model
277
+ name, an optional API key, timeout, answer length, temperature, and top-p. API
278
+ mode sends the selected AI context to that endpoint, so use a trusted local or
279
+ private server for sensitive data.
280
+
281
+ The same LLM settings are reused in `AI Chat`, where you can choose date ranges,
282
+ data types, projects, task states, context limits, temperature, top-p, repeat
283
+ penalty, seed, answer length, and chat history length.
284
+
285
+ The app still works without `llama-cpp-python` and without a model. In that case
286
+ you still get deterministic summaries, plots, scores, data-availability checks,
287
+ and next-action candidates.
288
+
289
+ ## Private Access From Outside Home
290
+
291
+ The recommended free private-access setup is Tailscale.
292
+
293
+ Keep Streamlit bound locally on the home laptop:
294
+
295
+ ```bash
296
+ python -m streamlit run time2_streamlit_app.py --server.address 127.0.0.1 --server.port 8503 --server.headless true
297
+ ```
298
+
299
+ If you want to do everything from JupyterLab, open and run:
300
+
301
+ ```text
302
+ time2_tailscale_jupyter_launcher.ipynb
303
+ ```
304
+
305
+ It starts Streamlit, starts Tailscale Serve, and prints the private
306
+ `https://...ts.net` URL.
307
+
308
+ The terminal equivalent is:
309
+
310
+ ```bash
311
+ tailscale serve --bg http://127.0.0.1:8503
312
+ ```
313
+
314
+ See [docs/TAILSCALE_PRIVATE_ACCESS.md](docs/TAILSCALE_PRIVATE_ACCESS.md).
315
+
316
+ ## Important Files
317
+
318
+ | Path | Purpose |
319
+ | --- | --- |
320
+ | `time2_streamlit_app.py` | Tiny Streamlit entrypoint. |
321
+ | `time2_jupyter_launcher.py` | Portable Jupyter launcher script. |
322
+ | `time2_jupyter_launcher.ipynb` | Notebook launcher for JupyterLab. |
323
+ | `time2_tailscale_jupyter_launcher.py` | Jupyter-only launcher that starts Streamlit and Tailscale Serve. |
324
+ | `time2_tailscale_jupyter_launcher.ipynb` | Notebook for private outside access through Tailscale Serve. |
325
+ | `time2_ai_cache_worker.py` | Optional background AI cache refresher. |
326
+ | `time2_app/config.py` | Defaults: app title, settings, options, colors, storage defaults. |
327
+ | `time2_app/utils.py` | General helpers: IDs, timestamps, parsing, settings loading, theme CSS. |
328
+ | `time2_app/models.py` | Dataclasses and model behavior for tasks, sessions, comments, mind logs, audio logs, board state. |
329
+ | `time2_app/storage.py` | JSON persistence, folders, backups, task files, mind files, audio files. |
330
+ | `time2_app/budget.py` | Budget entries, month-end logic, monthly files, budget reports. |
331
+ | `time2_app/ai.py` | Deterministic reports, local LLM calls, AI cache. |
332
+ | `time2_app/chat.py` | Saved AI chats, selected context assembly, and read-only chat prompts. |
333
+ | `time2_app/reports.py` | PDF/HTML/TXT/JSON report generation. |
334
+ | `time2_app/transcription.py` | Optional Whisper transcription helpers with auto-detect support. |
335
+ | `time2_app/tailscale_utils.py` | Optional Tailscale detection, sign-in, and Serve helpers. |
336
+ | `time2_app/cli.py` | `time2` command-line interface for install checks, running, and Tailscale helpers. |
337
+ | `time2_app/components.py` | Streamlit custom component registration. |
338
+ | `time2_app/views.py` | Streamlit view functions, task editor controls, settings screens, and report views. |
339
+ | `time2_app/app.py` | Top-level tab composition and app bootstrapping. |
340
+ | `pyproject.toml` | Python package metadata, dependencies, optional extras, console script, and wheel data files. |
341
+ | `MANIFEST.in` | Source distribution include list for docs, examples, and components. |
342
+ | `docs/MANUAL.md` | User manual. |
343
+ | `docs/DEVELOPER_GUIDE.md` | Detailed code and next-version developer guide. |
344
+ | `docs/MODULES.md` | Compact module dependency guide. |
345
+ | `docs/CODE_WALKTHROUGH.md` | Code walkthrough by layer. |
346
+ | `docs/AI_INSIGHTS.md` | Local AI setup and AI roadmap. |
347
+ | `docs/TAILSCALE_PRIVATE_ACCESS.md` | Private access notes. |
348
+ | `docs/PACKAGING.md` | Build, TestPyPI, PyPI, and pip-install release guide. |
349
+
350
+ ## Runtime Data
351
+
352
+ Runtime files are intentionally local and are not needed for a clean install.
353
+
354
+ | Path | Purpose |
355
+ | --- | --- |
356
+ | `time2_settings.json` | App settings and chosen data/storage folders. |
357
+ | `time2_data.json` | Main board JSON. |
358
+ | `time2_tasks/` | Optional one-file-per-task JSON files. |
359
+ | `time2_mind_logs/` | Optional one-file-per-mind-log JSON files. |
360
+ | `time2_audio/` | Uploaded and browser-recorded audio files. |
361
+ | `time2_budget/` | Monthly budget JSON files named `budget_YYYY_MM.json`. |
362
+ | `time2_backups/` | Timed/manual backup JSON files. |
363
+ | `time2_ai_cache/` | Cached AI report payloads. |
364
+ | `time2_chats/` | Saved AI Chat conversations. |
365
+ | `time2_exports/` | Saved report exports. |
366
+
367
+ ## Data Model Summary
368
+
369
+ The model is deliberately readable:
370
+
371
+ - `Time2Item`: one task/event/spontaneous item.
372
+ - `Time2Session`: one work session on a task.
373
+ - `Time2Reschedule`: one planned-date/time movement.
374
+ - `Time2Comment`: notes, blockers, reflections, reasons.
375
+ - `Time2MindLog`: standalone mind-state check-in with optional transcript.
376
+ - `Time2AudioLog`: stored audio metadata and transcript status/text.
377
+ - `Time2Board`: the container that owns tasks, mind logs, and audio logs.
378
+ - `BudgetEntry`: one income, expense, or savings entry with optional audio and transcript.
379
+
380
+ ## Development Rules
381
+
382
+ The code is modular on purpose. When changing it:
383
+
384
+ - Add new settings in `config.py`, normalize them in `utils.py`, expose them in `views.py`.
385
+ - Add new task fields in `models.py`, then update `from_dict()`/`to_dict()` compatibility.
386
+ - Keep disk paths and persistence in `storage.py`.
387
+ - Keep budget month-file logic in `budget.py`.
388
+ - Keep saved chat context and prompt assembly in `chat.py`.
389
+ - Keep PDF/HTML/TXT/JSON export generation in `reports.py`.
390
+ - Keep optional Whisper loading in `transcription.py`.
391
+ - Keep optional Tailscale command helpers in `tailscale_utils.py`.
392
+ - Keep install/run command behavior in `cli.py`.
393
+ - Keep deterministic AI data assembly in `ai.py`.
394
+ - Keep tab placement in `app.py`.
395
+ - Keep view rendering and form controls in `views.py`.
396
+
397
+ Before packaging:
398
+
399
+ ```bash
400
+ python -m py_compile time2_streamlit_app.py time2_jupyter_launcher.py time2_ai_cache_worker.py time2_app/*.py
401
+ ```
402
+
403
+ ## Documentation
404
+
405
+ Start here:
406
+
407
+ - [User Manual](docs/MANUAL.md)
408
+ - [Developer Guide](docs/DEVELOPER_GUIDE.md)
409
+ - [Module Guide](docs/MODULES.md)
410
+ - [Code Walkthrough](docs/CODE_WALKTHROUGH.md)
411
+ - [AI Insights](docs/AI_INSIGHTS.md)
412
+ - [Tailscale Private Access](docs/TAILSCALE_PRIVATE_ACCESS.md)
413
+ - [Packaging And Publishing](docs/PACKAGING.md)
414
+
415
+ ## Current Limitations
416
+
417
+ - No app-level login yet.
418
+ - No built-in encryption-at-rest yet.
419
+ - No SQLite database yet.
420
+ - No multi-user file locking yet.
421
+ - No online deployment target yet.
422
+ - Whisper and LLM features depend on optional local packages and local model files.
423
+
424
+ For internet access, keep it private with Tailscale until app-level accounts and
425
+ database-level concurrency are added.
426
+
427
+ ## Suggested Next Version Work
428
+
429
+ Good candidates for the next version:
430
+
431
+ - Add local accounts and user ownership.
432
+ - Move data to SQLite while keeping JSON export/import.
433
+ - Add file locking or transaction safety for multiple users.
434
+ - Add budget-entry editing/deletion.
435
+ - Add transcript search across tasks, mind logs, project audio, and budget audio.
436
+ - Add AI summaries over transcripts.
437
+ - Add calendar export/import.
438
+ - Add charts for budget and energy trends.
439
+ - Add automated nightly backup verification.
440
+
441
+ ## License
442
+
443
+ MIT License. See [LICENSE](LICENSE).
444
+
445
+ Runtime data is intentionally excluded from Git by `.gitignore`. Do not commit
446
+ personal task files, mind logs, budget files, transcripts, audio files, backups,
447
+ settings, or local model files.