Skip to content

Commit 2636476

Browse files
PythonSmall-QCopilot
andcommitted
Add new executable and MSIX package for TimeLens v0.4.0.0
Co-authored-by: Copilot <copilot@github.com>
1 parent b9b6d72 commit 2636476

34 files changed

Lines changed: 1754 additions & 169 deletions

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@ coverage/
4040
.env
4141
.env.local
4242
.env.production
43+
ROADMAP.md
44+
build_log.txt
45+
src-tauri/check_results.txt
46+
src-tauri/full_check.txt
47+
src-tauri/windows/Package.appxmanifest

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,43 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
55

66
---
77

8+
## [0.4.0] - 2026-04-26
9+
10+
### Added
11+
12+
#### Global Shortcuts
13+
14+
- **System-level global shortcuts** — powered by Tauri `globalShortcut`; shortcuts work even when TimeLens is not focused
15+
- `Alt+W` — open Widget Center (focus main window + navigate)
16+
- `Alt+Shift+W` — toggle visibility of all floating widgets (hide if any visible, otherwise restore all)
17+
- `Alt+R` — resume screen-time monitoring
18+
- `Alt+P` — pause screen-time monitoring
19+
- **Shortcut customization** — all four shortcuts are editable from Settings → Shortcuts; changes are saved to the backend and take effect immediately without restarting the app
20+
- **Conflict handling** — registering new shortcuts automatically unregisters the old ones; failures are silently caught to avoid crashes
21+
22+
#### System Notifications
23+
24+
- **Native OS notifications for app limits** — replaced the in-app banner-only warnings with real system notifications using `tauri-plugin-notification`
25+
- 80 % warning — yellow notification when daily limit threshold is reached
26+
- 90 % warning — orange notification when approaching the limit
27+
- 100 % alert — red notification + blocking modal when limit is fully consumed
28+
- **Click-to-navigate** — clicking a notification brings the main window to the foreground and jumps to the Limits page
29+
- **Permission-aware** — gracefully handles denied notification permission (falls back silently)
30+
31+
32+
### Changed
33+
34+
- App version bumped to **0.4.0** in `package.json`, `Cargo.toml`, `tauri.conf.json`, and the in-app update checker (`MainApp.tsx`)
35+
- Limit warning delivery mechanism upgraded from pure frontend toast to hybrid frontend toast + native OS notification
36+
- Shortcuts settings now stored in the backend database (`app_settings` table) instead of `localStorage` alone
37+
38+
### Fixed
39+
40+
- Potential race condition when rapidly changing shortcuts — shortcuts are now unregistered before new ones are registered
41+
- Widget toggle visibility now correctly distinguishes between "some visible" and "all hidden" states using `isVisible()` checks on every widget window
42+
43+
---
44+
845
## [0.3.0] - 2026-04-25
946

1047
### Added

PRIVACY_POLICY.md

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
# TimeLens Privacy Policy
2+
3+
**Last Updated:** April 26, 2026
4+
5+
**Effective Date:** April 26, 2026
6+
7+
---
8+
9+
## TL;DR (Summary)
10+
11+
TimeLens is a **local-first, offline-by-default** screen time tracker. We do not collect, transmit, or share your personal data with any server, cloud service, or third party. All data—including your app usage history, window titles, to-do items, notes, and settings—is stored exclusively in a local SQLite database on your own computer. You have full ownership and control over your data at all times.
12+
13+
---
14+
15+
## 1. Scope and Applicability
16+
17+
This Privacy Policy applies to the TimeLens desktop application ("the App", "we", "us", or "our") distributed for Windows and macOS. It governs how we handle any information that the App accesses, processes, or stores on your device.
18+
19+
By downloading, installing, or using TimeLens, you acknowledge that you have read and understood this Privacy Policy.
20+
21+
---
22+
23+
## 2. Information We Collect
24+
25+
TimeLens operates entirely on your local device. The App does **not** require user registration, login credentials, or an internet connection to function. The following categories of information are accessed or stored **locally only**:
26+
27+
### 2.1 Screen Time and Activity Data
28+
29+
To provide core screen-time tracking functionality, TimeLens periodically polls the operating system to identify the foreground application. The following fields are recorded in your local database:
30+
31+
| Data Field | Description | Example |
32+
|---|---|---|
33+
| `app_name` | Friendly name of the active application | "Visual Studio Code", "WeChat" |
34+
| `exe_path` | Full file path of the executable | `C:\Program Files\Code.exe` |
35+
| `window_title` | Title text of the active window | `lib.rs - TimeLens - VS Code` |
36+
| `active_seconds` | Duration (in seconds) the app was in focus | 120 |
37+
| `date` | The calendar date of the session | 2026-04-26 |
38+
| `first_seen_at` | Timestamp when the app first became active | 2026-04-26T09:15:00 |
39+
| `last_seen_at` | Timestamp when the app lost focus | 2026-04-26T09:17:00 |
40+
41+
**Important:** This data is never transmitted off your device. It is used solely to generate the dashboards, charts, and usage statistics displayed within the App.
42+
43+
### 2.2 User-Generated Content
44+
45+
Content that you voluntarily create within the App is stored locally:
46+
47+
- **To-Do Items:** The text content, completion status, creation time, and order of your to-do list entries.
48+
- **Notes:** Text entered into the Note widget (if applicable).
49+
- **Timer Events:** Start/stop times and labels for timer widgets.
50+
51+
### 2.3 Application Settings and Preferences
52+
53+
Your configuration choices are saved locally to restore your experience across sessions:
54+
55+
- Language preference (e.g., English, 简体中文)
56+
- Launch-at-startup setting
57+
- Silent-startup setting
58+
- Global shortcut bindings
59+
- Widget configurations (position, size, opacity, always-on-top mode, etc.)
60+
- Ignored applications list (apps you have chosen to exclude from tracking)
61+
- Auto-open widgets preference
62+
63+
### 2.4 Process Enumeration (Transient)
64+
65+
When you configure application usage limits, TimeLens may invoke the operating system's process list (`tasklist` on Windows) to present you with a selectable list of currently running executables. This enumeration is performed **in real time, in memory only**, and is not persisted to the database unless you explicitly save a limit rule.
66+
67+
### 2.5 What We Do **Not** Collect
68+
69+
TimeLens does **not** collect, store, or process:
70+
71+
- Your name, email address, phone number, or any other contact information.
72+
- Your IP address, MAC address, or network activity.
73+
- Files, documents, keystrokes, clipboard contents, or screenshots.
74+
- Precise geolocation data.
75+
- Any data from other users of your computer (unless they use the same OS user profile, in which case the local database is shared at the OS level).
76+
- Analytics, telemetry, crash reports, or usage statistics sent to external servers.
77+
78+
---
79+
80+
## 3. How We Use Your Information
81+
82+
All processing is performed locally on your device. We use the collected information for the following purposes:
83+
84+
1. **To display usage statistics:** Aggregating screen-time data into daily, weekly, and monthly views, charts, and rankings.
85+
2. **To enforce limits:** Comparing real-time activity against user-defined time limits and triggering local notifications when thresholds (80%, 90%, 100%) are reached.
86+
3. **To restore your workspace:** Saving widget layouts and settings so they persist across app restarts.
87+
4. **To manage your tasks:** Storing and displaying your to-do lists and notes.
88+
5. **To improve the App (locally):** Generating insights such as hourly usage distributions or period-over-period comparisons entirely within the local database.
89+
90+
---
91+
92+
## 4. Data Storage and Local-First Architecture
93+
94+
### 4.1 Storage Location
95+
96+
All data is stored in a single SQLite database file located in your operating system's standard application data directory:
97+
98+
- **Windows:** `%APPDATA%\com.timelens.app\timelens.db`
99+
- **macOS:** `~/Library/Application Support/com.timelens.app/timelens.db`
100+
101+
You can access, back up, or delete this file directly using your file manager.
102+
103+
### 4.2 No Cloud or Network Transmission
104+
105+
TimeLens does **not**:
106+
- Connect to remote servers to upload your usage data.
107+
- Use cloud databases, SaaS backends, or CDN analytics.
108+
- Embed third-party tracking SDKs (e.g., Google Analytics, Mixpanel, Sentry, Firebase).
109+
110+
The only network-related functionality is the optional **update check** (if implemented), which queries a public release manifest to determine whether a newer version is available. This request does not include any personal data or usage statistics.
111+
112+
### 4.3 Future Sync Features (Roadmap Notice)
113+
114+
Our public roadmap includes a planned end-to-end encrypted sync feature (targeted for v0.9.x). If and when this feature is implemented:
115+
- Sync will be **opt-in** only.
116+
- Data will be encrypted on your device **before** transmission using keys that remain on your device.
117+
- We will update this Privacy Policy to reflect the specific encryption protocols and storage endpoints used.
118+
119+
Until such a feature is explicitly enabled by you, no data leaves your device.
120+
121+
---
122+
123+
## 5. Data Security
124+
125+
We employ the following measures to protect your local data:
126+
127+
- **File System Permissions:** The SQLite database resides in your user-specific application data folder, protected by your operating system's standard user-access controls.
128+
- **WAL Mode:** The database uses SQLite Write-Ahead Logging (WAL) mode for improved integrity and concurrency safety.
129+
- **No External Exposure:** Because no data is transmitted over the network, there is no risk of interception in transit.
130+
131+
**Your Responsibility:** Since the data is stored locally on your machine, its security also depends on the overall security of your device. We recommend using full-disk encryption (e.g., BitLocker on Windows, FileVault on macOS) and keeping your operating system up to date.
132+
133+
---
134+
135+
## 6. Third-Party Services and Data Sharing
136+
137+
### 6.1 No Data Sharing
138+
139+
We do **not** sell, rent, trade, or otherwise share your data with any third party. There are no advertising partners, data brokers, or analytics providers integrated into TimeLens.
140+
141+
### 6.2 Open-Source Dependencies
142+
143+
TimeLens is built upon open-source frameworks, primarily Tauri (Rust + WebView). These frameworks run entirely on your local machine and do not independently exfiltrate data. You may inspect the source code and dependency tree in our public repository.
144+
145+
### 6.3 Optional Third-Party APIs (Future)
146+
147+
If future widgets (e.g., weather) require calling third-party APIs, such calls will:
148+
- Be initiated only when the relevant widget is active.
149+
- Use API keys provided and configured **by you**.
150+
- Transmit only the minimum data required by the API endpoint (e.g., a city name for weather).
151+
- Be explicitly documented in the widget settings.
152+
153+
No screen-time or personal data will ever be sent to these APIs.
154+
155+
---
156+
157+
## 7. Your Rights and Control
158+
159+
You retain full control over your data. The App provides the following mechanisms:
160+
161+
### 7.1 Access and Portability
162+
163+
You can export your entire database at any time:
164+
- **JSON Export:** A complete, structured backup of all tables (app usage, todos, widgets, settings).
165+
- **CSV Export:** Your app usage history in a spreadsheet-compatible format.
166+
167+
Exports are written to a location of your choosing on your local filesystem.
168+
169+
### 7.2 Correction and Deletion
170+
171+
- **Delete Individual Records:** Not directly exposed in the UI, but you may delete rows by editing the SQLite database file with standard database tools.
172+
- **Delete All Data:** Uninstalling the App and removing the application data directory (`com.timelens.app`) will permanently erase all stored information.
173+
- **Import/Reset:** The JSON import function allows you to overwrite the entire database, effectively enabling bulk correction or restoration.
174+
175+
### 7.3 Restriction of Processing
176+
177+
- **Pause Tracking:** You can pause screen-time monitoring at any time via the system tray menu or in-app controls. While paused, no new activity segments are recorded.
178+
- **Ignore Apps:** You can add specific executables to an ignore list. Once ignored, the App stops recording time for those applications.
179+
180+
### 7.4 GDPR, CCPA, and PIPL Compliance
181+
182+
Because TimeLens processes data locally and does not act as a data controller for any remote service, traditional cross-border data transfer concerns do not apply. However, we respect the principles embodied in these regulations:
183+
184+
- **Lawfulness, Fairness, and Transparency:** We process data only for the purpose of providing the App's features, and we inform you fully via this policy.
185+
- **Data Minimization:** We collect only the data strictly necessary for screen-time tracking.
186+
- **Purpose Limitation:** We do not use your data for any purpose other than those stated in Section 3.
187+
- **Storage Limitation:** See Section 8 below.
188+
- **Accountability:** We maintain this policy and welcome inquiries.
189+
190+
If you are in the European Economic Area (EEA), California, or China and have questions about your rights under GDPR, CCPA, or PIPL, please contact us (Section 14).
191+
192+
---
193+
194+
## 8. Data Retention
195+
196+
TimeLens retains your data indefinitely until you choose to delete it. There is no automatic expiration or pruning of historical records (unless you explicitly configure a cleanup setting in the future).
197+
198+
If you wish to remove your data:
199+
1. Use the export feature to create a backup if desired.
200+
2. Uninstall TimeLens.
201+
3. Manually delete the application data directory:
202+
- Windows: `%APPDATA%\com.timelens.app\`
203+
- macOS: `~/Library/Application Support/com.timelens.app/`
204+
205+
Once deleted, the data cannot be recovered.
206+
207+
---
208+
209+
## 9. Cookies and Similar Technologies
210+
211+
TimeLens is a desktop application, not a website. We do not use cookies, web beacons, local storage for tracking, or browser fingerprinting. The WebView runtime used to render the user interface does not persist cross-session web storage for tracking purposes.
212+
213+
---
214+
215+
## 10. Children's Privacy
216+
217+
TimeLens is not directed at children under the age of 13 (or the equivalent minimum age in your jurisdiction). We do not knowingly collect personal information from children. Because the App operates locally without accounts, we have no mechanism to determine the age of a user. If you are a parent or guardian and believe your child has provided personal information through the use of TimeLens (e.g., by typing identifiable information into a note or to-do item), you can delete that data by removing the local database file.
218+
219+
---
220+
221+
## 11. International Users
222+
223+
TimeLens is distributed globally. Regardless of your location, your data remains on your local device. By using the App, you acknowledge that you are subject to the data protection laws of your local jurisdiction, and we commit to complying with applicable privacy laws to the extent required by our role as the developer of a local-only application.
224+
225+
---
226+
227+
## 12. Changes to This Privacy Policy
228+
229+
We may update this Privacy Policy from time to time to reflect changes in our practices, features, or legal requirements. If we make material changes, we will:
230+
- Update the "Last Updated" date at the top of this document.
231+
- Notify users through the App's UI (e.g., a banner on first launch after an update) or via our release notes.
232+
- Continue to uphold the core principle that screen-time data is local-first unless you explicitly opt into a future sync feature.
233+
234+
We encourage you to review this policy periodically. Continued use of TimeLens after changes constitutes acceptance of the revised policy.
235+
236+
---
237+
238+
## 13. Open Source and Transparency
239+
240+
TimeLens is an open-source project. You are welcome to inspect the source code to verify our privacy claims:
241+
242+
- **Repository:** Available at the project's public GitHub repository.
243+
- **Build Reproducibility:** You may build the App from source to ensure the distributed binary matches the published code.
244+
- **Dependency Audit:** The `Cargo.lock` and `package-lock.json` files provide a complete, version-locked dependency tree for independent security review.
245+
246+
---
247+
248+
## 14. Contact Us
249+
250+
If you have any questions, concerns, or requests regarding this Privacy Policy or our data practices, please contact us:
251+
252+
- **GitHub Issues:** [https://github.com/seans/TimeLens/issues](https://github.com/seans/TimeLens/issues)
253+
- **Email:** privacy@timelens.app *(placeholder—update with real contact if available)*
254+
255+
We will make every effort to respond to legitimate inquiries within 30 days.
256+
257+
---
258+
259+
## 15. Legal Disclaimers
260+
261+
This Privacy Policy is provided in good faith to accurately describe the data practices of TimeLens as of the effective date. The App is provided "as is" without warranties of any kind. To the maximum extent permitted by law, the developers shall not be liable for any indirect, incidental, or consequential damages arising from your use of the App or your management of local data.
262+
263+
---
264+
265+
*Thank you for trusting TimeLens with your time. We built this App because we believe your screen-time data is yours and yours alone.*

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,25 @@ See [CHANGELOG.md](CHANGELOG.md).
130130
## 📄 License
131131

132132
MIT © 2026 TimeLens Contributors
133+
134+
---
135+
136+
## 🏬 Microsoft Store (MSIX)
137+
138+
139+
Store listing:
140+
141+
- URL: `https://apps.microsoft.com/detail/9MVT208CSF6P`
142+
- Store ID: `9MVT208CSF6P`
143+
- Store protocol: `ms-windows-store://pdp/?productid=9MVT208CSF6P`
144+
145+
Build an MSIX package draft:
146+
147+
```powershell
148+
./scripts/build-msix.ps1 -Version 0.4.0.0
149+
```
150+
151+
Notes:
152+
153+
- Replace placeholder logo files under `src-tauri/windows/msix-staging/Assets` with real Store assets.
154+
- Sign the resulting `.msix` with your Store-associated certificate before submission.

package-lock.json

Lines changed: 22 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)