You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/01_Overview_Principles.md
+9-7Lines changed: 9 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,8 +14,8 @@
14
14
**1. Code-native content**
15
15
Every prompt is real, idiomatic code—not random words or generic sentences. Practice algorithms, syntax patterns, and framework idioms that you'll actually use in your work.
16
16
17
-
**2. True privacy**
18
-
All data stays on your device. Sessions, metrics, and custom prompts live in IndexedDB. No tracking, no analytics, no external API calls. Your typing data is yours alone.
17
+
**2. Privacy-first design**
18
+
All personal data stays on your device. Sessions, metrics, and custom prompts live in IndexedDB. Optional anonymous analytics track only aggregate usage patterns (no personal data). Your typing data is yours alone.
19
19
20
20
**3. Editor-like experience**
21
21
The UI borrows from modern IDEs: file-based prompt organization, language switching, syntax highlighting with VS Code themes, and Tab-aware indentation that respects code structure.
@@ -53,11 +53,12 @@ Generic typing trainers use news articles or literature. DevKeys uses code that
53
53
54
54
### 3. Own your data
55
55
56
-
Privacy isn't a feature—it's the foundation. Sessions, progress, and custom prompts never leave your device. No servers, no sync, no cloud dependency.
56
+
Privacy isn't a feature—it's the foundation. Sessions, progress, and custom prompts never leave your device. Optional anonymous analytics are self-hosted and track only aggregate usage.
- Browser devtools provide full data access and export capability
62
63
- Clear localStorage/IndexedDB to reset completely
63
64
@@ -94,13 +95,14 @@ The app works with the TypeScript evaluator out of the box. When the Rust WASM b
94
95
95
96
### 7. Offline matters
96
97
97
-
Once the app loads, it should work indefinitely without network access. Prompts ship with the bundle. Metrics stay local. The only external dependency is the initial HTML/CSS/JS delivery.
98
+
Once the app loads, it should work indefinitely without network access. Prompts ship with the bundle. Metrics stay local. Optional analytics are self-hosted and don't affect core functionality.
98
99
99
100
**In practice:**
100
101
- All prompt packs bundled at build time
101
102
- No CDN dependencies for fonts or icons
102
103
- IndexedDB persists across sessions
103
104
- Static deployment (works on any file server)
105
+
- Analytics (if enabled) are self-hosted and optional
104
106
105
107
---
106
108
@@ -180,7 +182,7 @@ DevKeys fails if:
180
182
1. It requires cloud sync or accounts
181
183
2. Keystroke latency becomes noticeable
182
184
3. The bundle size grows beyond 500KB (gzipped)
183
-
4. Privacy model changes to support growth
185
+
4. Privacy model changes to collect personal data
184
186
5. Core features require JavaScript frameworks beyond React
185
187
186
188
---
@@ -205,7 +207,7 @@ These are explicitly **not** goals for DevKeys:
Analytics are **optional** and disabled by default. This guide shows how to enable self-hosted Umami analytics to track:
6
+
7
+
1. Website visits (automatic pageviews)
8
+
2. Run starts (custom event)
9
+
3. Run completions (custom event)
10
+
11
+
Umami is open source, privacy-first (no cookies), and you control all data on your own infrastructure.
12
+
13
+
**Note**: The production example at `devkeys.app` has analytics enabled to demonstrate the feature. Your self-hosted instance will have analytics disabled by default.
14
+
15
+
## Deployment Setup
16
+
17
+
### 1. Deploy Umami
18
+
19
+
Using your preferred container orchestration platform (Dokploy, Coolify, Docker Compose, etc.):
0 commit comments