feat: Add Focus Tools (ADHD-friendly productivity features)
continuous-integration/drone/push Build is passing

- Add Focus Tools dashboard with collapsible help section
- Implement Quick Wins page for tasks under 15 minutes
- Add Single Task Focus mode to reduce overwhelm
- Create Body Doubling page for virtual co-working
- Add visual timer, break reminders, and energy tracking
- Implement hyperfocus protection alerts
- Add ADHD settings panel with customizable options
- Include full English and German translations
- Fix larger touch targets CSS to not break button layouts
- Add Playwright tests for Focus Tools features
This commit is contained in:
Paul Nothaft
2026-01-15 21:20:04 +01:00
parent 74ffef48d3
commit 7ce4f7efdc
31 changed files with 5651 additions and 11 deletions
+310
View File
@@ -35,6 +35,7 @@
"weekList": "Week",
"create": "Create",
"kanban": "Kanban",
"adhd": "Focus Tools",
"achievements": "Achievements",
"leaderboard": "Leaderboard",
"settings": "Settings"
@@ -286,6 +287,18 @@
"2fa": "Two-Factor Authentication",
"2faDesc": "Secure your account with email-based 2FA"
},
"schedule": {
"title": "Schedule Settings",
"description": "Define your availability for smart scheduling.",
"start": "Start Time",
"end": "End Time",
"days": "Active Days",
"saved": "Schedule saved",
"work": "Work Schedule",
"personal": "Personal Schedule",
"workDesc": "Tasks with 'Work' labels will be scheduled during these hours.",
"personalDesc": "Tasks with 'Personal' labels will be scheduled during these hours. 'Neutral' tasks can use either."
},
"admin": {
"title": "Admin Settings",
"description": "System administration and configuration",
@@ -783,6 +796,17 @@
}
},
"analytics": {
"title": "Analytics",
"timeTracking": "Time Tracking",
"timeDistribution": "Time Distribution",
"totalTime": "Total Time",
"noData": "No data recorded for this period",
"period": {
"day": "Day",
"week": "Week",
"month": "Month",
"year": "Year"
},
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
@@ -892,5 +916,291 @@
"estimatedDuration": "Estimated Duration",
"subtasks": "Subtasks",
"timeEstimate": "Time Estimate"
},
"common": {
"optional": "Optional",
"saving": "Saving...",
"creating": "Creating..."
},
"adhd": {
"mode": "Focus Tools",
"modeEnabled": "Focus Tools enabled",
"modeDisabled": "Focus Tools disabled",
"modeDescription": "Optimizes the app for focus and productivity",
"toggleMode": "Toggle Focus Tools",
"active": "Active",
"dashboard": {
"title": "Focus Dashboard",
"subtitle": "Tools designed for how your brain works",
"available": "available",
"completedToday": "Done today",
"coworking": "Co-working",
"energyLevel": "Energy",
"focusMode": "Focus mode",
"helpTitle": "How Focus Tools Help You",
"helpIntro": "These tools are designed around how your brain works - addressing common challenges like time blindness, task paralysis, and the need for quick wins.",
"help": {
"quickWins": {
"title": "Quick Wins",
"why": "Starting tasks feels overwhelming, and your brain craves quick dopamine hits.",
"how": "Shows only tasks under 15 minutes, sorted by easiest to complete. Completing small tasks builds momentum and gives your brain the reward it needs.",
"usage": "Open Quick Wins when you feel stuck. Pick the first task and complete it. The dopamine boost will help you tackle more."
},
"singleTask": {
"title": "Single Task Focus",
"why": "Seeing a long task list causes overwhelm and paralysis.",
"how": "Hides everything except ONE task. No distractions, no list anxiety - just the task in front of you.",
"usage": "Select a task and enter focus mode. Work only on that task until done or you need a break."
},
"fiveMinute": {
"title": "5-Minute Starter",
"why": "The hardest part is beginning. Your brain resists starting big tasks.",
"how": "Commit to just 5 minutes. Your brain thinks 'I can do anything for 5 minutes.' Once started, you often keep going.",
"usage": "Click '5 Min Start' on any task. Work for 5 minutes. After that, you can stop guilt-free OR continue."
},
"visualTimer": {
"title": "Visual Timer",
"why": "Time blindness - you can't feel time passing naturally.",
"how": "A shrinking circle shows time visually. Colors change (green → yellow → red) as time runs out.",
"usage": "Use the timer during focus sessions. The visual feedback helps you feel time passing."
},
"breaks": {
"title": "Break Reminders",
"why": "You forget to take breaks, leading to burnout or hyperfocus crashes.",
"how": "Gentle reminders appear after your set interval suggesting quick breaks like stretching or water.",
"usage": "When the reminder appears, take a real break. Even 2 minutes helps. You can snooze if needed."
},
"hyperfocus": {
"title": "Hyperfocus Protection",
"why": "You get stuck on one task for hours, neglecting everything else.",
"how": "Warns you when you've been on a single task too long. Shows other waiting tasks.",
"usage": "When warned, assess if you should continue or switch. It's okay to keep going, but make it a conscious choice."
},
"energy": {
"title": "Energy Check-ins",
"why": "Forcing yourself to do hard tasks when exhausted leads to failure.",
"how": "Log your energy level daily. The app suggests tasks that match your current energy.",
"usage": "Check in each morning. Low energy? Do simple tasks. High energy? Tackle challenges."
},
"bodyDoubling": {
"title": "Body Doubling",
"why": "Working alone makes it hard to stay accountable.",
"how": "Virtual co-working sessions where you work alongside others. Social accountability keeps you focused.",
"usage": "Join or create a session. Just knowing others are working helps you stay on track."
},
"taskBreakdown": {
"title": "AI Task Breakdown",
"why": "Big tasks feel impossible to start.",
"how": "AI breaks down overwhelming tasks into small, concrete steps with time estimates.",
"usage": "Click 'Break It Down' on any large task. Review the steps and create them as subtasks."
}
},
"quickWins": "Quick wins",
"streak": "Day streak"
},
"timer": {
"remaining": "remaining"
},
"breakReminder": {
"title": "Time for a break!",
"workingFor": "You've been working for {{minutes}} minutes",
"message": "Your brain needs regular breaks. Choose a quick break:",
"snooze5": "5 min later",
"snooze15": "15 min later",
"gentle": "It's okay to take breaks. You're doing great!",
"types": {
"stretch": "Stretch",
"water": "Water",
"walk": "Walk",
"eyes": "Eyes",
"snack": "Snack",
"breathe": "Breathe"
}
},
"taskBreakdown": {
"title": "Break Down Task",
"description": "Large tasks can be overwhelming. Let's break them into smaller steps.",
"prompt": "Click below to break this task into manageable steps.",
"analyzing": "Analyzing...",
"breakItDown": "Break It Down",
"estimated": "estimated",
"totalTime": "Total time",
"regenerate": "Regenerate",
"createSubtasks": "Create {{count}} steps",
"error": "Failed to break down task. Please try again."
},
"quickWins": {
"title": "Quick Wins",
"description": "Small tasks for instant dopamine boosts",
"tip": "Small wins build momentum! Complete these quick tasks to boost your dopamine and build confidence.",
"noTasks": "No quick tasks available"
},
"singleTask": {
"title": "Single Task Focus",
"description": "Focus on one task at a time without distractions",
"selectTask": "Select a task to focus on",
"choosePlaceholder": "Choose a task...",
"task": "Task",
"complete": "complete",
"allDone": "All Done!",
"allDoneDesc": "You've completed all tasks. Take a well-deserved break!",
"exit": "Exit view",
"markComplete": "Mark Complete",
"fiveMin": "Start 5 Min",
"startTimer": "Start Timer",
"skip": "Skip"
},
"fiveMin": {
"title": "The 5-Minute Rule",
"prompt": "Commit to just 5 minutes. You can stop after that.",
"start": "Start 5 Minutes",
"noObligation": "No obligation to continue!",
"remaining": "remaining",
"pause": "Pause",
"resume": "Resume",
"done": "Done!",
"encouragement": "You're doing great! Every second counts.",
"congrats": "Well done!",
"fiveMinDone": "You made it through 5 minutes!",
"continueWorking": "Keep Going",
"finished": "Task finished!",
"takeBreak": "Take a break",
"earned": "earned"
},
"energy": {
"title": "How's your energy level?",
"description": "Help us suggest the right tasks for you.",
"checkIn": "Check In",
"checkInReminder": "How are you feeling today?",
"checkInBenefit": "Track your energy to get better task suggestions",
"notesLabel": "Notes",
"notesPlaceholder": "How are you feeling today?",
"submit": "Log Energy",
"levels": {
"low": "Low",
"medium": "Medium",
"high": "High"
},
"suggestions": {
"low": {
"title": "Low energy recommendation",
"description": "Focus on simple, administrative tasks or quick wins."
},
"medium": {
"title": "Medium energy recommendation",
"description": "Good for routine tasks and communication."
},
"high": {
"title": "High energy recommendation",
"description": "Perfect for creative or challenging tasks!"
}
}
},
"hyperfocus": {
"title": "Hyperfocus Warning",
"message": "You've been working on this task for {{minutes}} minutes.",
"minutes": "min",
"urgentTasks": "urgent tasks",
"waitingTasks": "Waiting tasks",
"takeBreak": "Take a break",
"continue": "Continue",
"gentle": "It's okay to take breaks or switch tasks."
},
"bodyDoubling": {
"title": "Body Doubling",
"description": "Work alongside others for more focus and accountability.",
"tip": "Working alongside others helps maintain focus. Join or create a session to stay accountable.",
"createSession": "Create Session",
"newSession": "New Session",
"newSessionDesc": "Create a session others can join.",
"sessionTitle": "Title",
"titlePlaceholder": "e.g. Morning Focus Session",
"sessionType": "Type",
"types": {
"focus": "Focus",
"brainstorm": "Brainstorm",
"admin": "Admin",
"creative": "Creative"
},
"startTime": "Start Time",
"duration": "Duration",
"create": "Create Session",
"activeSessions": "Active Sessions",
"upcomingSessions": "Upcoming Sessions",
"noSessions": "No sessions scheduled. Create the first one!",
"live": "Live",
"join": "Join",
"leave": "Leave"
},
"settings": {
"title": "Focus Settings",
"description": "Customize your focus-friendly experience",
"visualTitle": "Display & Interaction",
"visualDesc": "Customize the interface for your needs.",
"reducedAnimations": "Reduced Animations",
"reducedAnimationsDesc": "Less visual motion for better focus.",
"largerTargets": "Larger Buttons",
"largerTargetsDesc": "Bigger touch targets for easier clicking.",
"singleTaskDefault": "Single Task Mode Default",
"singleTaskDefaultDesc": "Show only one task at a time.",
"timerTitle": "Timer & Focus",
"timerDesc": "Settings for time management.",
"visualTimer": "Visual Timer",
"visualTimerDesc": "Show time as a shrinking circle.",
"hyperfocusProtection": "Hyperfocus Protection",
"hyperfocusProtectionDesc": "Warnings when working too long on one task.",
"hyperfocusMaxMinutes": "Maximum Focus Time",
"breakTitle": "Breaks",
"breakDesc": "Reminders for regular breaks.",
"breakInterval": "Break Interval (minutes)",
"motivationTitle": "Motivation",
"motivationDesc": "Positive reinforcement and rewards.",
"messagingLevel": "Encouragement Level",
"messagingMinimal": "Minimal",
"messagingNormal": "Normal",
"messagingHigh": "High",
"messagingLevelDesc": "How much positive encouragement do you want?",
"quickWinThreshold": "Quick Win Threshold",
"quickWinThresholdDesc": "Tasks under this duration are considered Quick Wins.",
"energyTitle": "Energy",
"energyDesc": "Daily energy check-ins.",
"energyCheckIns": "Enable Energy Check-ins",
"energyCheckInsDesc": "Ask about your energy level daily.",
"reset": "Reset to Defaults"
},
"encouragements": {
"taskComplete": [
"Amazing! Every step counts.",
"You're doing great! Keep it up!",
"One less task - you rock!",
"See? You can do it!",
"Fantastic! Stay on track!"
],
"returning": [
"Good to see you back!",
"Every fresh start is a win.",
"Welcome back! Let's get started."
],
"struggling": [
"It's okay to take small steps.",
"You don't have to do everything at once.",
"Take a deep breath. You've got this."
],
"streakBroken": [
"Streaks are just numbers. You're more than that.",
"Tomorrow is a new day!",
"Every day is a fresh chance."
],
"milestone": [
"Milestone reached! Incredible!",
"You made it! Celebrate this moment!",
"What an achievement!"
],
"quickWin": [
"Quick win! The dopamine is flowing!",
"Boom! Quick win complete!",
"That was fast!"
]
}
}
}