|
1 | | -<div align="center"> |
| 1 | +# FocusFlow |
2 | 2 |
|
3 | | -# DevBreak |
| 3 | +FocusFlow is an installable Angular productivity workspace for focused work, lightweight task planning, and healthier recovery habits. |
4 | 4 |
|
5 | | -**A calm Angular productivity workspace for focused work, operational task flow, and sustainable recovery habits.** |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | -</div> |
14 | | - |
15 | | ---- |
| 5 | +It combines a focus timer, Pomodoro workflows, a Kanban board, and wellness-aware break suggestions in a frontend-only PWA that works well on desktop, tablet, and mobile. |
16 | 6 |
|
17 | 7 | ## Overview |
18 | 8 |
|
19 | | -DevBreak is a portfolio-grade productivity workspace built with Angular. It combines an operational Kanban board, focus sessions, keyboard-first workflows, wellness-aware reminders, local persistence, accessibility support, and responsive dashboard ergonomics. |
| 9 | +FocusFlow is built around a simple idea: productivity tools should support attention without ignoring recovery. The app helps users plan tasks, run focused sessions, track meaningful daily progress, and take small movement or wellness breaks without adding noise to the workflow. |
20 | 10 |
|
21 | | -The product is intentionally calm: it helps users move work forward without turning productivity into a noisy scoring system. |
| 11 | +The application is fully client-side and offline-first. User preferences, sessions, tasks, wellness exercises, language settings, and productivity state are persisted locally with safe restoration and fallback behavior. |
22 | 12 |
|
23 | | ---- |
| 13 | +## Features |
24 | 14 |
|
25 | | -## Highlights |
| 15 | +- Focus timer with completion tracking and daily productivity stats |
| 16 | +- Pomodoro mode with configurable focus, short break, and long break durations |
| 17 | +- Wellness mode for movement-friendly work sessions |
| 18 | +- Hybrid mode that blends focus sessions with active recovery prompts |
| 19 | +- Kanban workspace with task creation, editing, completion, archiving, restore, filtering, sorting, and drag/drop-ready workflows |
| 20 | +- Custom wellness exercises by category, including stretching, mobility, cardio, strength, and Pilates |
| 21 | +- Sound personalization with volume, preset, and repeat alert settings |
| 22 | +- Runtime internationalization for English, Spanish, and French |
| 23 | +- Installable PWA support with manifest, service worker, offline asset caching, and app-like standalone behavior |
| 24 | +- LocalStorage-backed offline persistence with defensive normalization for legacy or malformed data |
| 25 | +- Responsive layouts for desktop, installed PWA windows, tablets, and mobile screens |
| 26 | +- Accessibility-minded interaction design with keyboard navigation, focus handling, labels, and live announcements |
26 | 27 |
|
27 | | -- Operational Kanban board with create, edit, archive, restore, drag/drop-ready workflows |
28 | | -- Quick-add per column for low-friction task capture |
29 | | -- Advanced filters, sorting, density modes, and search |
30 | | -- Focus ownership mode with active-task workflow |
31 | | -- Timer and Pomodoro sessions with resilient timestamp-based persistence |
32 | | -- Adaptive wellness reminders for hydration, posture, and movement recovery |
33 | | -- Contextual recovery suggestions and lightweight wellness consistency tracking |
34 | | -- Keyboard shortcut personalization with conflict prevention |
35 | | -- Workspace and daily productivity reset actions |
36 | | -- Dark/light themes, reduced-motion support, and responsive layouts |
37 | | -- Cypress E2E coverage for core workflows, persistence, keyboard, and accessibility behavior |
| 28 | +## Tech Stack |
38 | 29 |
|
39 | | ---- |
| 30 | +- Angular |
| 31 | +- TypeScript |
| 32 | +- RxJS |
| 33 | +- SCSS |
| 34 | +- Angular CDK |
| 35 | +- Angular service worker / PWA support |
| 36 | +- ngx-translate |
| 37 | +- Vitest / Angular test runner |
| 38 | +- Cypress |
40 | 39 |
|
41 | | -## Product Philosophy |
| 40 | +## Architecture |
42 | 41 |
|
43 | | -DevBreak is not a Pomodoro clone and not a fitness tracker. It is a focused workspace that treats productivity and recovery as part of the same workflow. |
| 42 | +FocusFlow uses a frontend-only Angular architecture with feature modules for the timer and Kanban workspace. State is owned by focused Angular services and exposed through RxJS streams so UI components can stay mostly presentational. |
44 | 43 |
|
45 | | -Wellness guidance is intentionally subtle: |
| 44 | +The app does not require a backend. Persistence is handled through localStorage with validation and normalization on restore. Productivity metrics are derived from canonical session and task history instead of separate drifting counters. |
46 | 45 |
|
47 | | -- no blocking modals |
48 | | -- no gamification pressure |
49 | | -- no productivity guilt |
50 | | -- no invasive notifications |
51 | | -- supportive summaries only after meaningful activity exists |
| 46 | +Core architectural choices: |
52 | 47 |
|
53 | | ---- |
| 48 | +- Client-side only, deployable as static assets |
| 49 | +- Offline-first PWA behavior after the first visit |
| 50 | +- Service-owned state for timer, session history, tasks, wellness preferences, shortcuts, language, and workspace mode |
| 51 | +- Derived productivity stats for completed sessions, skipped sessions, focus minutes, streaks, completed tasks, and recovery rhythm |
| 52 | +- Lightweight persistence with safe fallbacks instead of sync infrastructure |
54 | 53 |
|
55 | | -## Architecture |
| 54 | +## Installation |
56 | 55 |
|
57 | | -The app uses a modular feature structure with service-owned state and presentational component boundaries. |
| 56 | +Install dependencies: |
58 | 57 |
|
59 | | -```text |
60 | | -src/app/ |
61 | | - features/ |
62 | | - kanban/ |
63 | | - components/ |
64 | | - models/ |
65 | | - services/ |
66 | | - timer/ |
67 | | - components/ |
68 | | - models/ |
69 | | - services/ |
70 | | - models/ |
71 | | - services/ |
| 58 | +```bash |
| 59 | +npm install |
72 | 60 | ``` |
73 | 61 |
|
74 | | -Key architectural choices: |
75 | | - |
76 | | -- RxJS streams for timer, workspace mode, focus, wellness, and derived UI state |
77 | | -- LocalStorage persistence with validation and safe fallbacks |
78 | | -- Angular CDK DragDrop for board interactions |
79 | | -- Focused presentational component boundaries for settings, timer actions, wellness cards, and insights |
80 | | -- CSS variables for density, theme, and responsive ergonomics |
81 | | -- Minimal global state, no backend assumptions, no heavyweight store layer |
| 62 | +Run the development server: |
82 | 63 |
|
83 | | ---- |
84 | | - |
85 | | -## Accessibility |
86 | | - |
87 | | -DevBreak includes an accessibility pass across semantics, keyboard behavior, screen-reader feedback, and motion preferences. |
| 64 | +```bash |
| 65 | +npm start |
| 66 | +``` |
88 | 67 |
|
89 | | -- Landmark and heading structure |
90 | | -- Accessible form labels and icon/control labels |
91 | | -- Visible focus states |
92 | | -- ESC handling and focus restoration |
93 | | -- Keyboard activation parity for primary workflows |
94 | | -- ARIA live regions for meaningful state changes |
95 | | -- `prefers-reduced-motion` support |
96 | | -- Cypress coverage for keyboard and accessibility-critical flows |
| 68 | +Open the app: |
97 | 69 |
|
98 | | ---- |
| 70 | +```text |
| 71 | +http://localhost:4200/ |
| 72 | +``` |
99 | 73 |
|
100 | | -## Testing & Reliability |
| 74 | +Create a production build: |
101 | 75 |
|
102 | 76 | ```bash |
103 | | -npm test |
104 | 77 | npm run build |
105 | | -npm run e2e |
106 | 78 | ``` |
107 | 79 |
|
108 | | -Current validation status: |
109 | | - |
110 | | -- 56 automated tests passing |
111 | | -- Production build passing |
112 | | -- Cypress workflow coverage stable |
113 | | - |
114 | | -Coverage includes: |
115 | | - |
116 | | -- Unit tests for timer persistence, wellness heuristics, shortcuts, filters, density, and component behavior |
117 | | -- Cypress E2E tests for Kanban, focus sessions, persistence restore, keyboard workflows, and reduced-motion smoke coverage |
118 | | -- Production build validation through Angular budgets |
119 | | - |
120 | | -Note for local Windows shells: if Cypress inherits `ELECTRON_RUN_AS_NODE`, clear it before running E2E. |
| 80 | +Run the unit test suite: |
121 | 81 |
|
122 | | -```powershell |
123 | | -Remove-Item Env:ELECTRON_RUN_AS_NODE -ErrorAction SilentlyContinue |
124 | | -$env:CYPRESS_SKIP_VERIFY='true' |
125 | | -npm run e2e |
| 82 | +```bash |
| 83 | +npm test -- --watch=false |
126 | 84 | ``` |
127 | 85 |
|
128 | | ---- |
129 | | - |
130 | | -## Tech Stack |
131 | | - |
132 | | -- Angular |
133 | | -- TypeScript |
134 | | -- RxJS |
135 | | -- SCSS |
136 | | -- Angular CDK |
137 | | -- Vitest / Angular unit testing |
138 | | -- Cypress |
139 | | -- GitHub Actions |
140 | | - |
141 | | ---- |
142 | | - |
143 | | -## Getting Started |
144 | | - |
145 | | -Use the Node version in `.nvmrc`. |
| 86 | +Run Cypress E2E tests: |
146 | 87 |
|
147 | 88 | ```bash |
148 | | -npm install |
149 | | -npm start |
| 89 | +npm run e2e |
150 | 90 | ``` |
151 | 91 |
|
152 | | -Open: |
| 92 | +## PWA Support |
153 | 93 |
|
154 | | -```text |
155 | | -http://localhost:4200/ |
156 | | -``` |
| 94 | +FocusFlow includes Angular service worker support and a configured web app manifest. |
157 | 95 |
|
158 | | -Production build: |
| 96 | +The production build supports: |
159 | 97 |
|
160 | | -```bash |
161 | | -npm run build |
162 | | -``` |
| 98 | +- Desktop installation in Chromium-based browsers such as Chrome and Edge |
| 99 | +- Android installation through supported mobile browsers |
| 100 | +- Standalone app display mode |
| 101 | +- Offline reload after the first successful visit |
| 102 | +- Cached application shell and static assets |
| 103 | +- Local persistence for tasks, settings, wellness exercises, language, theme, and productivity history |
163 | 104 |
|
164 | | ---- |
| 105 | +Because the app is frontend-only, offline support is intentionally local-first. There is no account system or cloud sync layer. |
165 | 106 |
|
166 | | -## Deployment |
| 107 | +## Accessibility |
167 | 108 |
|
168 | | -The app is static-build ready. |
| 109 | +Accessibility is treated as part of the product surface, not as a separate mode. |
169 | 110 |
|
170 | | -### GitHub Pages |
| 111 | +The app includes: |
171 | 112 |
|
172 | | -The included workflow builds the Angular app with a repository-based `base-href`, uploads `dist/devbreak-timer/browser`, and adds a `404.html` fallback for SPA-compatible refresh behavior. |
| 113 | +- Keyboard-accessible primary flows |
| 114 | +- Visible focus states |
| 115 | +- Focus restoration for settings and dialog-like interactions |
| 116 | +- Escape handling where appropriate |
| 117 | +- Form labels and accessible control names |
| 118 | +- ARIA live announcements for important timer and task state changes |
| 119 | +- Responsive layouts that preserve readable controls on small screens |
| 120 | +- Reduced-motion considerations in the UI layer |
173 | 121 |
|
174 | | -Required repository setting: |
| 122 | +## Screenshots |
175 | 123 |
|
176 | | -```text |
177 | | -Settings -> Pages -> Source -> GitHub Actions |
178 | | -``` |
| 124 | +Screenshots are intentionally left as placeholders so they can reflect the final deployed build. |
179 | 125 |
|
180 | | -### Vercel |
| 126 | +### Desktop |
181 | 127 |
|
182 | | -Recommended settings: |
| 128 | +Add a desktop screenshot here. |
183 | 129 |
|
184 | | -```text |
185 | | -Framework Preset: Angular |
186 | | -Build Command: npm run build |
187 | | -Output Directory: dist/devbreak-timer/browser |
188 | | -Install Command: npm ci |
189 | | -``` |
| 130 | +### Mobile |
| 131 | + |
| 132 | +Add a mobile screenshot here. |
190 | 133 |
|
191 | | -For SPA fallback routing, add a Vercel rewrite if routes are introduced later. |
| 134 | +### Wellness Mode |
192 | 135 |
|
193 | | ---- |
| 136 | +Add a wellness mode screenshot here. |
194 | 137 |
|
195 | | -## GitHub Actions |
| 138 | +### Kanban Workspace |
196 | 139 |
|
197 | | -Workflows are intentionally lightweight: |
| 140 | +Add a Kanban workspace screenshot here. |
198 | 141 |
|
199 | | -- CI: install, unit tests, production build |
200 | | -- Pages deploy: install, unit tests, production build, upload static artifact |
| 142 | +## Future Improvements |
201 | 143 |
|
202 | | -Cypress remains available for local and future CI expansion without making the default pipeline heavy. |
| 144 | +FocusFlow is intentionally complete as a local-first PWA, but a few realistic extensions would fit the product: |
203 | 145 |
|
204 | | ---- |
| 146 | +- Optional cloud sync for users who want multi-device continuity |
| 147 | +- Richer productivity and recovery analytics |
| 148 | +- More built-in wellness exercise presets |
| 149 | +- Optional import/export for local data portability |
| 150 | +- Additional language packs |
205 | 151 |
|
206 | | -## Portfolio Notes |
| 152 | +## Release Notes |
207 | 153 |
|
208 | | -DevBreak demonstrates production-minded frontend work: |
| 154 | +FocusFlow is designed as a polished portfolio project that demonstrates production-minded Angular development: |
209 | 155 |
|
210 | | -- product-oriented UX decisions |
211 | | -- accessible keyboard-first interaction design |
212 | | -- resilient local persistence |
213 | | -- maintainable Angular boundaries |
214 | | -- responsive operational UI |
215 | | -- calm wellness-aware behavior |
216 | | -- meaningful automated reliability coverage |
| 156 | +- Modular frontend architecture |
| 157 | +- Offline-first PWA integration |
| 158 | +- Responsive operational UI |
| 159 | +- Local persistence and defensive state restoration |
| 160 | +- Runtime i18n |
| 161 | +- Accessibility-aware interaction design |
| 162 | +- Behavior-focused tests around session tracking, tasks, wellness logic, and productivity stats |
0 commit comments