🎯 AI Focus Tool

Time-Boxed Project Management

Loading AI Focus Tool...

AI Focus Tool

My Projects

search
sort
category
inbox

No projects found{{ projectFilterText ? ' matching your filter' : '' }}.

Get started by creating a new project using the '+' button or the Project Wizard.

{{ project.name }}

{{ getCategoryIcon(project.categoryId) || 'label' }} {{ getCategoryName(project.categoryId) }}

{{ truncateDescription(project.description, 100) || 'No description provided.' }}

{{ tag }}
event_available Start: {{ formatDate(project.startDate) }} event_busy End: {{ formatDate(project.endDate) }}
{{ calculateProgress(project) }}% complete
check_circle {{ countCompletedTasks(project) }}/{{ project.tasks && Array.isArray(project.tasks) ? project.tasks.filter(t => t).length : 0 }} tasks
schedule {{ formatDuration(calculateTotalTime(project)) }}
Project Name
Category
Progress
Tasks
Est. Time
Actions

{{ project.name }}

{{ truncateDescription(project.description, 60) || 'No description' }}

{{ getCategoryIcon(project.categoryId) || 'label' }} {{ getCategoryName(project.categoryId) }}
{{ calculateProgress(project) }}%
check_circle {{ countCompletedTasks(project) }}/{{ project.tasks && Array.isArray(project.tasks) ? project.tasks.filter(t => t).length : 0 }}
schedule {{ formatDuration(calculateTotalTime(project)) }}
inventory_2

Archived Projects

{{ archivedProjectsList.length }}
{{ archiveViewExpanded ? 'expand_less' : 'expand_more' }}
inventory_2 Archived

{{ project.name }}

{{ truncateDescription(project.description, 100) || 'No description provided.' }}

check_circle {{ countCompletedTasks(project) }}/{{ project.tasks && Array.isArray(project.tasks) ? project.tasks.filter(t => t).length : 0 }} tasks
schedule Archived {{ formatArchiveDate(project.archivedAt) }}

Today's Schedule

AI Suggested Schedule:

AI could not generate a schedule recommendation.

event_busy

Nothing scheduled for today yet.

{{ formatTimeRange(block.startTime, block.duration) }}
{{ block.taskName }}
folder_open {{ block.projectName }}

Focus Timer

timer Choose your focus session and start productive work

Quick Start

timer

Pomodoro

25 min focus

hourglass_top

Quick Focus

15 min session

psychology

Deep Focus

45 min session

tune

Custom

Set your own time

Select Focus Target

folder

{{ project.name }}

{{ project.description || 'No description' }}

assignment {{ getProjectTaskCount(project.id) }} tasks
{{ task.status === 'Completed' ? 'check_circle' : 'assignment' }}

{{ task.name }}

{{ task.description || 'No description' }}

schedule {{ task.estimatedDuration }} min folder {{ getProjectName(task.projectId) }}
{{ item.completed ? 'check_box' : 'check_box_outline_blank' }}

{{ item.text }}

assignment {{ getTaskName(item.taskId) }} folder {{ getProjectNameFromTask(item.taskId) }}

Focus Settings

schedule

Duration

{{ timerDuration }} min
timer

Mode

music_note

Ambient Sound

volume_down volume_up
notifications

Alerts

Focus Presets

psychology

Deep Work

90 min • Forest sounds • No interruptions

flash_on

Quick Focus

25 min • Light background • Gentle alerts

school

Study Session

45 min • Cafe ambiance • Progress tracking

palette

Creative Flow

60 min • Ambient sounds • Minimal distractions

schedule {{ timerDuration }} minutes
timer Pomodoro Mode
music_note {{ getAmbientSoundName(timerAmbientSound) }}
{{ getTimerTargetIcon() }} {{ getTimerTargetName() }}
arrow_back Back to Projects

{{ selectedProject.name }}

search
sort
low_priority
rule
Debug Info:
Raw tasks: {{ selectedProject.tasks.length }}
Filtered tasks: {{ filteredSortedTasks.length }}
Is Loading: {{ isLoading }}
Task View Mode: {{ taskViewMode }}
Active Tab: {{ activeTab }}
Task Filter Text: "{{ taskFilterText }}"
assignment

No tasks found{{ taskFilterText ? ' matching your filter' : '' }}.

Add tasks manually or use AI Breakdown.

Task Name
Priority
Status
Duration
Deps
Actions
{{ task.status === 'Completed' ? 'check_circle' : (task.status === 'In Progress' ? 'radio_button_checked' : 'radio_button_unchecked') }}

{{ task.name }}

{{ truncateDescription(task.description, 50) || 'No description' }}

{{ getTaskPriorityIcon(task.priority) }} {{ task.priority }}
{{ task.status }}
schedule {{ formatDuration(task.estimatedDuration) }}
link {{ task.dependencies.length }}
inventory_2

Archived Tasks

{{ archivedTasksList.length }}
{{ archiveViewExpanded ? 'expand_less' : 'expand_more' }}
inventory_2 Archived
{{ task.status === 'Completed' ? 'check_circle' : 'radio_button_unchecked' }}

{{ task.name }}

schedule Archived {{ formatArchiveDate(task.archivedAt) }}
share

Add tasks to see the connected view.

arrow_back Back to Project

{{ selectedTask.name }}

Description

Focus Block Checklist

No checklist items yet.
inventory_2 Archived Items {{ archivedChecklistItems.length }}
{{ archiveViewExpanded ? 'expand_less' : 'expand_more' }}
{{ item.completed ? 'check_box' : 'check_box_outline_blank' }}

Dependencies

No dependencies set.
{{ getTaskName(depId) }}

Files

No files uploaded yet.
{{ getFileIcon(file.type) }}
{{ file.name }}
{{ formatFileSize(file.size) }} • {{ new Date(file.uploadedAt).toLocaleDateString() }}

Documents

No documents created for this task yet.
description
{{ doc.title }}
{{ doc.type }} • {{ new Date(doc.createdAt).toLocaleDateString() }}

Project Creation Wizard

1
Project Info
2
AI Task Generation
3
Review & Create

Project Details

Let's start by defining your project. What are you working on?

psychology

AI Suggestions

Already have a project name? Let AI help craft a detailed description.

AI Task Breakdown

Let the AI analyze your project and suggest a task breakdown with dependencies and checklists.

Project: {{ wizardProject.name }}

{{ wizardProject.description }}

{{ wizardLoadingMessage || 'Generating tasks...' }}

Generated Tasks (Select tasks to include)

schedule {{ formatDuration(task.estimatedDuration) }}

{{ task.description }}

Depends on:
{{ depName }}
{{ task.includeChecklist !== false ? 'expand_less' : 'expand_more' }} Checklist ({{ task.checklist.length }} items)
  • {{ item.text }}

Review & Create Project

Review your new project details before creating it.

Project Information

Name:
{{ wizardProject.name }}
Description:
{{ wizardProject.description }}
Category:
{{ wizardProject.category || 'None' }}

Task Summary

{{ wizardTasks.filter(t => t.selected).length }}
Selected Tasks
{{ formatDuration(getTotalDuration()) }}
Total Est. Time
{{ getTotalChecklistItems() }}
Checklist Items
Generated Tasks:
Task name
Duration
Checklist
{{ task.description.substring(0, 60) }}{{ task.description.length > 60 ? '...' : '' }}
schedule {{ formatDuration(task.estimatedDuration) }}
checklist {{ task.checklist.length }}

Day Planner

Project:
{{ day.name }} {{ day.dateNum }} {{ countBlocksForDay(day.date) }}
{{ formatDate(currentPlannerDate) }}
{{ formatHour(hour) }}

check_circle {{ block.taskName }}

{{ formatTimeRange(block.startTime, block.duration) }}

folder {{ block.projectName }}
Tap on any time slot to add a focus block

User Profile

Loading profile...

account_circle Account Information

{{ userProfile.uid }}

{{ formatProfileDate(userProfile.createdAt) }}

{{ formatProfileDate(userProfile.updatedAt) }}

insights User Statistics

folder Total Projects {{ projects.length }}
list_alt Total Tasks {{ getTotalTaskCount }}

verified Subscription & AI Credits

workspace_premium
Current Plan {{ userSubscription?.plan || 'Free' }} {{ userSubscription?.status === 'active' ? 'check_circle' : 'info' }} {{ userSubscription?.status === 'active' ? 'Active' : (userSubscription?.status || 'Inactive') }}
electric_bolt
AI Credits {{ typeof userSubscription?.credits === 'object' ? userSubscription.credits.balance : (userSubscription?.credits || aiCredits || 0) }} Available now
calendar_month
Monthly Alloc. {{ typeof userSubscription?.credits === 'object' ? userSubscription.credits.monthlyAllocation : (userSubscription?.monthlyCredits || 0) }} Per billing cycle
shopping_bag
Purchased {{ typeof userSubscription?.credits === 'object' ? userSubscription.credits.purchasedCredits : 0 }} One-time credits
event Next Billing Date: {{ formatProfileDate(userSubscription.currentPeriodEnd) }}
warning Cancellation Scheduled: Will cancel on {{ formatProfileDate(userSubscription.currentPeriodEnd) }}
credit_card Payment Method: {{ userSubscription?.paymentMethod || 'Card on file' }}
upgrade Upgrade Plan
person_off

User profile not available or could not be loaded.

This might happen if you're not logged in or if there was an issue fetching your data.

inventory_2 Archive

Review and restore archived projects, tasks, and checklist items

all_inclusive
{{ archiveStats.total }}
All Items
dashboard
{{ archiveStats.projects }}
Projects
check_circle
{{ archiveStats.tasks }}
Tasks
checklist
{{ archiveStats.checklists }}
Checklist Items
inventory_2

{{ archiveFilter.searchText || archiveFilter.type !== 'all' ? 'No matching items' : 'Archive is empty' }}

{{ archiveFilter.searchText || archiveFilter.type !== 'all' ? 'Try adjusting your search or filter' : 'Archived projects, tasks, and checklist items will appear here' }}

{{ item.type === 'project' ? 'dashboard' : item.type === 'task' ? 'check_circle' : 'checklist' }}

{{ item.name }}

{{ item.type }}

{{ truncateDescription(item.description, 120) }}

folder {{ item.projectName }} task {{ item.taskName }} schedule Archived {{ formatArchiveDate(item.archivedAt) }}

Settings

Notifications

Timer Settings

Text-to-Speech Configuration

alarm_add Custom Timer Alerts

Define multiple TTS alerts that trigger at specific times before your timer ends. These settings apply globally.

Add New Alert:

Your Defined Alerts:

  • {{ Math.floor(alert.timeRemaining / 60) }} min left: "{{ alert.message }}"

No custom alerts defined yet. Add one above!

AI Settings

Note: AI features use the application's configured API key securely via a proxy service.

Application

Install AI Focus Tool as an app on your device for quick access. Available on supported browsers.

Data Management

arrow_back Back to Project

{{ selectedProject.name }} Dashboard

{{ projectMetrics.completionPercentage }}%
Project Completion
{{ projectMetrics.totalTasks }}
Total Tasks
{{ formatDuration(projectMetrics.totalTime) }}
Estimated Time
{{ projectMetrics.documents }}
Documents
{{ projectMetrics.taskStatuses?.completed || 0 }}
Tasks Completed
{{ projectMetrics.taskStatuses?.inProgress || 0 }}
Tasks In Progress
{{ formatDuration(projectMetrics.timeTracked || 0) }}
Time Tracked
Task Status

Completed: {{ projectMetrics.taskStatuses?.completed || 0 }}

In Progress: {{ projectMetrics.taskStatuses?.inProgress || 0 }}

Total: {{ projectMetrics.totalTasks || 0 }}

Completed ({{ projectMetrics.taskStatuses.completed }})
In Progress ({{ projectMetrics.taskStatuses.inProgress }})
Checklist Progress

Completed: {{ projectMetrics.checklistItems?.completed || 0 }}

Remaining: {{ (projectMetrics.checklistItems?.total || 0) - (projectMetrics.checklistItems?.completed || 0) }}

Total: {{ projectMetrics.checklistItems?.total || 0 }}

Completed ({{ projectMetrics.checklistItems.completed }})
In Progress ({{ projectMetrics.checklistItems.total - projectMetrics.checklistItems.completed }})

Project Description

No tasks in this project.
{{ task.completed ? 'check_box' : 'check_box_outline_blank' }}

{{ task.name }}

schedule {{ formatDuration(task.estimatedDuration) }}

{{ task.focusBlockItems.filter(item => item && item.completed && !item.archived).length }}/{{ task.focusBlockItems.filter(i=>i && !i.archived).length }} checklist items
No documents or files yet for this project.

Documents

{{ doc.title }} {{ doc.aiGenerated ? 'psychology' : 'description' }}
{{ new Date(doc.createdAt).toLocaleDateString() }}
Task: {{ selectedProject.tasks?.find(t => t && t.id === doc.taskId)?.name || 'Project Level' }}

Files

{{ file.name }} {{ getFileIcon(file.type) }}
{{ new Date(file.uploadedAt).toLocaleDateString() }}
Attached to: {{ getFileContextName(file.id) }}
arrow_back Back to Task

{{ selectedTask.name }}

{{ pomodoroState.currentPhase==='short-break'?'Short Break':'Long Break' }}

folder {{ selectedProject.name }}
Cycle {{ pomodoroState.cycle }} – {{ pomodoroState.currentPhase.replace('-',' ') }}
{{ pomodoroMode?pomodoroTimerDisplay:formatTime(timerSeconds) }}

1-Min TTS Warning Settings:

Custom Timer Alerts:

Add New Alert:
Your Alerts:
  • {{ Math.floor(alert.timeRemaining/60) }} min left: "{{ alert.message }}"

No custom alerts defined yet.