DEV Community

Cover image for ⏳🔮 The Secret Hour Whisperer: Unlocking Your Day’s Hidden Magic with TimeTracker ✨
Dev
Dev Subscriber

Posted on

⏳🔮 The Secret Hour Whisperer: Unlocking Your Day’s Hidden Magic with TimeTracker ✨

This is my solo submission for the Amazon Q Developer "Quack The Code" Challenge: Exploring the Possibilities as well as Crushing the Command Line prompts


Before you dive into TimeTracker, wanna check out all four of my entries for the Amazon Q Developer “Quack The Code” Challenge? ( I know 😅, I went a little too crazy here, and overdid it, a teeny tiny little too much 😁):

1️⃣ 🧩 Sudoku Taught Me I Could Achieve Anything: ✨ Powered by Amazon Q Developer CLI 🚀🗨️👩‍💻

2️⃣ 🦋✨ GratefulMind: Your Daily Dose of Joy & Growth 🌅💫

3️⃣ 🛡️ Embark on the DSAWarriors Quest: From Newbie to Expert in 20 Weeks! 🚀📜

4️⃣ ⏳🔮 The Secret Hour Whisperer: Unlocking Your Day’s Hidden Magic with TimeTracker ✨


What I Built 🎉

I’m a full-time MTech CSE student juggling placement drives, university exams, two Udacity Nanodegrees, side projects, regular coding quests, daily workouts, and the ever-precious need for sleep 😴. Naturally, I’m always hunting for productivity hacks—and what could be more powerful than tracking each hour of my day? Not only does it reveal where my time actually goes, but it gives me that gentle nudge back on course when I wander off plan.

Enter TimeTracker: a lightweight, offline-first script that logs your tasks at fixed intervals, whether you’re deep in VS Code, pouring over PDFs, or simply dreaming up your next breakthrough. It launches at laptop startup, pings you every 30/60/90/120 minutes, and lovingly( ooh really 👀😉) asks— “What did you just accomplish?” ⏰

TimeTracker modal popup- Landing page kinda ss

TimeTracker modal popup- Task categories dropdown ss


Why It Feels Fresh 🌞🌻🌼

1️⃣ Crushing the Command Line

  • Built entirely with the Amazon Q Developer CLI, this isn’t just another app—it’s a terminal-first automation that owns the command line. 🚀

2️⃣ Innovative Simplicity

  • No bloated Electron wrappers(🤧😏PWAs🤧😏). No Play Store headaches. Just PowerShell and batch scripts humming along natively. 🖥️⚙️

3️⃣ Offline Reliability

  • No internet? No problem. TimeTracker lives on your laptop, ready for action—even in airplane mode. ✈️

Key Features 🔑

1️⃣ Automatic Startup

  • Installs itself to launch on Windows startup—so you never forget to track! 🌅

2️⃣ Customizable Reminders

  • Choose your interval: 30 min, 60 min, 90 min, or 120 min—your time, your rules. ⏳

3️⃣ Quick Pop-Up Logging

  • A friendly modal prompt asks you to categorize your latest block of work: Work, Personal, Meeting, Learning, Break, or Other. 📝

4️⃣ Comprehensive Reporting

  • View daily, weekly, and monthly logs at a glance—because hindsight is 20/20. 📊

5️⃣ CSV Export

  • Download your time logs for spreadsheets, data science experiments, or just to brag to your friends. 😉

6️⃣ One-Click Uninstall

  • Remove everything via a friendly Windows modal—no registry detective work required! 🗑️

Demo 🎬

Check out its working here.

That moment when you realize you actually worked for three solid hours—yes, queen! 👑


Script Snapshot 💻

Below are the three core scripts—one PowerShell (.ps1) and two batch (.bat) files— all 3 of which together power the TimeTracker. Simply drop them into the same folder, run the installer, and you’re good to go! 💖


1️⃣ TimeTracker.ps1

A full-featured PowerShell script that:

  • Tracks your activities at fixed intervals
  • Prompts you with a modal window to log descriptions and categories
  • Stores all entries in a JSON file under ~/TimeTrackerData
  • Schedules itself to run at login and/or at your chosen reminder interval
  • Handles clean uninstallation via a GUI prompt
# TimeTracker.ps1
# Time tracking tool that shows a modal at regular intervals to log activities

# Check command line parameters - moved to the top of the script
param(
    [switch]$ShowPrompt,
    [switch]$ViewLogs,
    [switch]$Uninstall
)

# Configuration
$global:config = @{
    IntervalMinutes = 60  # Default interval
    DataFolder = "$env:USERPROFILE\TimeTrackerData"
    LogFile = "$env:USERPROFILE\TimeTrackerData\activities.json"
    ConfigFile = "$env:USERPROFILE\TimeTrackerData\config.json"
    StartOnBoot = $true
}

# Ensure data directory exists
if (-not (Test-Path $global:config.DataFolder)) {
    New-Item -ItemType Directory -Path $global:config.DataFolder -Force | Out-Null
}

# Initialize or load config file
function Initialize-ConfigFile {
    if (-not (Test-Path $global:config.ConfigFile)) {
        $initialConfig = @{
            IntervalMinutes = $global:config.IntervalMinutes
            StartOnBoot = $global:config.StartOnBoot
        }
        $initialConfig | ConvertTo-Json | Out-File $global:config.ConfigFile -Encoding utf8
    }

    $savedConfig = Get-Content $global:config.ConfigFile -Raw | ConvertFrom-Json
    $global:config.IntervalMinutes = $savedConfig.IntervalMinutes
    $global:config.StartOnBoot = $savedConfig.StartOnBoot
}

# Initialize or load data file
function Initialize-DataFile {
    if (-not (Test-Path $global:config.LogFile)) {
        $initialData = @{
            Activities = @()
        }
        $initialData | ConvertTo-Json -Depth 10 | Out-File $global:config.LogFile -Encoding utf8
    }

    return Get-Content $global:config.LogFile -Raw | ConvertFrom-Json
}

# Function to completely uninstall the time tracker
function Uninstall-TimeTracker {
    # Remove scheduled tasks
    $taskNames = @("TimeTrackerPrompt", "TimeTrackerInterval")
    foreach ($taskName in $taskNames) {
        $taskExists = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
        if ($taskExists) {
            Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
        }
    }

    # Remove Start Menu shortcut
    $startMenuFolder = [Environment]::GetFolderPath('StartMenu') + "\Programs"
    $shortcutPath = "$startMenuFolder\Time Tracker.lnk"
    if (Test-Path $shortcutPath) {
        Remove-Item -Path $shortcutPath -Force
    }

    # Optionally remove data files (with user confirmation)
    $removeData = [System.Windows.MessageBox]::Show(
        "Do you want to remove all saved time tracking data as well?",
        "Remove Data",
        [System.Windows.MessageBoxButton]::YesNo,
        [System.Windows.MessageBoxImage]::Question
    )

    if ($removeData -eq [System.Windows.MessageBoxResult]::Yes -and (Test-Path $global:config.DataFolder)) {
        Remove-Item -Path $global:config.DataFolder -Recurse -Force
    }

    [System.Windows.MessageBox]::Show("Time Tracker has been completely uninstalled from your system.", "Uninstall Complete")
    exit
}

# Load existing config and data
Initialize-ConfigFile
$global:data = Initialize-DataFile

# Function to show the activity input dialog with integrated settings and logs
function Show-ActivityPrompt {
    Add-Type -AssemblyName PresentationFramework
    Add-Type -AssemblyName PresentationCore
    Add-Type -AssemblyName WindowsBase

    # Create XAML for the window
    [xml]$xaml = @"
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Time Tracker"
    Height="550"
    Width="650"
    WindowStartupLocation="CenterScreen"
    Topmost="True">
    <Grid Margin="15">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" FontSize="16" FontWeight="Bold" Margin="0,0,0,10">
            What have you been working on?
        </TextBlock>

        <TextBlock Grid.Row="1" Margin="0,0,0,5">
            Activity Description:
        </TextBlock>

        <TextBox Grid.Row="2" x:Name="ActivityText" AcceptsReturn="True" TextWrapping="Wrap" Height="80" Margin="0,0,0,10"/>

        <Grid Grid.Row="3" Margin="0,0,0,10">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>

            <TextBlock Grid.Column="0" VerticalAlignment="Center" Margin="0,0,10,0">Category:</TextBlock>
            <ComboBox Grid.Column="1" x:Name="CategoryCombo" Width="150" HorizontalAlignment="Left">
                <ComboBoxItem>Work</ComboBoxItem>
                <ComboBoxItem>Personal</ComboBoxItem>
                <ComboBoxItem>Learning</ComboBoxItem>
                <ComboBoxItem>Meeting</ComboBoxItem>
                <ComboBoxItem>Break</ComboBoxItem>
                <ComboBoxItem>Other</ComboBoxItem>
            </ComboBox>

            <TextBlock Grid.Column="2" VerticalAlignment="Center" Margin="20,0,10,0">Reminder Interval:</TextBlock>
            <ComboBox Grid.Column="3" x:Name="IntervalCombo" Width="80" HorizontalAlignment="Left">
                <ComboBoxItem>30 min</ComboBoxItem>
                <ComboBoxItem>60 min</ComboBoxItem>
                <ComboBoxItem>90 min</ComboBoxItem>
                <ComboBoxItem>120 min</ComboBoxItem>
            </ComboBox>
        </Grid>

        <Grid Grid.Row="4" Margin="0,5,0,5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <TextBlock Grid.Column="0" FontWeight="Bold" Margin="0,0,0,5">Activity Logs:</TextBlock>

            <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
                <RadioButton x:Name="DailyRadio" Content="Daily" Margin="0,0,15,0" IsChecked="True" GroupName="ViewType"/>
                <RadioButton x:Name="WeeklyRadio" Content="Weekly" Margin="0,0,15,0" GroupName="ViewType"/>
                <RadioButton x:Name="MonthlyRadio" Content="Monthly" GroupName="ViewType"/>
                <Button x:Name="RefreshButton" Content="Refresh" Margin="15,0,0,0" Padding="8,0"/>
                <Button x:Name="ExportButton" Content="Export CSV" Margin="10,0,0,0" Padding="8,0"/>
            </StackPanel>
        </Grid>

        <DataGrid Grid.Row="5" x:Name="LogsGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="0,5,0,10">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Date/Time" Binding="{Binding Timestamp}" Width="150"/>
                <DataGridTextColumn Header="Category" Binding="{Binding Category}" Width="100"/>
                <DataGridTextColumn Header="Description" Binding="{Binding Description}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>

        <StackPanel Grid.Row="6" Orientation="Horizontal" HorizontalAlignment="Right">
            <CheckBox x:Name="StartupCheckbox" Content="Start with Windows" VerticalAlignment="Center" Margin="0,0,20,0"/>
            <Button x:Name="UninstallButton" Content="Uninstall" Width="80" Foreground="Red" Margin="0,0,10,0"/>
            <Button x:Name="SubmitButton" Content="Submit" Width="80" IsDefault="True"/>
        </StackPanel>
    </Grid>
</Window>
"@

    # Create a form
    $reader = New-Object System.Xml.XmlNodeReader $xaml
    $window = [Windows.Markup.XamlReader]::Load($reader)

    # Get form controls
    $activityText = $window.FindName("ActivityText")
    $categoryCombo = $window.FindName("CategoryCombo")
    $intervalCombo = $window.FindName("IntervalCombo")
    $startupCheckbox = $window.FindName("StartupCheckbox")
    $submitButton = $window.FindName("SubmitButton")
    $uninstallButton = $window.FindName("UninstallButton")
    $logsGrid = $window.FindName("LogsGrid")
    $dailyRadio = $window.FindName("DailyRadio")
    $weeklyRadio = $window.FindName("WeeklyRadio")
    $monthlyRadio = $window.FindName("MonthlyRadio")
    $refreshButton = $window.FindName("RefreshButton")
    $exportButton = $window.FindName("ExportButton")

    # Set default values
    $categoryCombo.SelectedIndex = 0

    # Set interval combo based on current config
    switch ($global:config.IntervalMinutes) {
        30 { $intervalCombo.SelectedIndex = 0 }
        60 { $intervalCombo.SelectedIndex = 1 }
        90 { $intervalCombo.SelectedIndex = 2 }
        120 { $intervalCombo.SelectedIndex = 3 }
        default { $intervalCombo.SelectedIndex = 1 } # Default to 60 min
    }

    # Set startup checkbox
    $startupCheckbox.IsChecked = $global:config.StartOnBoot

    # Function to update the logs grid based on selected view
    function Update-LogsView {
        $today = Get-Date
        $activities = $global:data.Activities

        if ($dailyRadio.IsChecked) {
            $todayStr = $today.ToString("yyyy-MM-dd")
            $filteredActivities = $activities | Where-Object { $_.Date -eq $todayStr }
            $window.Title = "Time Tracker - Today's Activities"
        }
        elseif ($weeklyRadio.IsChecked) {
            $startOfWeek = $today.AddDays(-([int]$today.DayOfWeek))
            $endOfWeek = $startOfWeek.AddDays(6)
            $filteredActivities = $activities | Where-Object {
                $activityDate = [DateTime]::ParseExact($_.Date, "yyyy-MM-dd", $null)
                $activityDate -ge $startOfWeek -and $activityDate -le $endOfWeek
            }
            $window.Title = "Time Tracker - This Week's Activities"
        }
        elseif ($monthlyRadio.IsChecked) {
            $currentMonth = $today.Month
            $currentYear = $today.Year
            $filteredActivities = $activities | Where-Object {
                $activityDate = [DateTime]::ParseExact($_.Date, "yyyy-MM-dd", $null)
                $activityDate.Month -eq $currentMonth -and $activityDate.Year -eq $currentYear
            }
            $window.Title = "Time Tracker - This Month's Activities"
        }

        $logsGrid.ItemsSource = $filteredActivities
    }

    # Set up event handlers
    $submitButton.Add_Click({
        if ($activityText.Text.Trim() -ne "") {
            # Save activity
            $activity = @{
                Description = $activityText.Text.Trim()
                Category = $categoryCombo.SelectedItem.Content
                Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
                Date = (Get-Date).ToString("yyyy-MM-dd")
            }

            # Save settings
            $intervalText = $intervalCombo.SelectedItem.Content.ToString()
            $intervalMinutes = [int]($intervalText.Split()[0])
            $global:config.IntervalMinutes = $intervalMinutes
            $global:config.StartOnBoot = $startupCheckbox.IsChecked

            # Save to config file
            @{
                IntervalMinutes = $global:config.IntervalMinutes
                StartOnBoot = $global:config.StartOnBoot
            } | ConvertTo-Json | Out-File $global:config.ConfigFile -Encoding utf8

            # Update scheduled tasks
            Register-IntervalTask

            if ($global:config.StartOnBoot) {
                Register-StartupTask
            } else {
                Unregister-StartupTask
            }

            $window.DialogResult = $true
            return $activity
        }
        else {
            [System.Windows.MessageBox]::Show("Please enter an activity description.", "Input Required")
        }
    })

    $uninstallButton.Add_Click({
        $result = [System.Windows.MessageBox]::Show(
            "Are you sure you want to completely uninstall Time Tracker? This will remove all scheduled tasks and shortcuts.",
            "Confirm Uninstall",
            [System.Windows.MessageBoxButton]::YesNo,
            [System.Windows.MessageBoxImage]::Warning
        )

        if ($result -eq [System.Windows.MessageBoxResult]::Yes) {
            $window.Close()
            Uninstall-TimeTracker
        }
    })

    $dailyRadio.Add_Checked({ Update-LogsView })
    $weeklyRadio.Add_Checked({ Update-LogsView })
    $monthlyRadio.Add_Checked({ Update-LogsView })
    $refreshButton.Add_Click({ Update-LogsView })

    $exportButton.Add_Click({
        $saveDialog = New-Object Microsoft.Win32.SaveFileDialog
        $saveDialog.Filter = "CSV Files (*.csv)|*.csv"
        $saveDialog.DefaultExt = "csv"
        $saveDialog.FileName = "TimeTracker_Export_$(Get-Date -Format 'yyyyMMdd')"

        if ($saveDialog.ShowDialog()) {
            $activities = $logsGrid.ItemsSource
            $activities | Select-Object Timestamp, Category, Description |
                Export-Csv -Path $saveDialog.FileName -NoTypeInformation
            [System.Windows.MessageBox]::Show("Export completed successfully!", "Export")
        }
    })

    # Initial update of logs view
    Update-LogsView

    # Show the window
    $result = $window.ShowDialog()

    # Return the activity data if submitted
    if ($result) {
        return @{
            Description = $activityText.Text.Trim()
            Category = $categoryCombo.SelectedItem.Content
            Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
            Date = (Get-Date).ToString("yyyy-MM-dd")
        }
    }

    return $null
}

# Function to save activity to the log file
function Save-Activity {
    param (
        [Parameter(Mandatory=$true)]
        [PSCustomObject]$Activity
    )

    $global:data.Activities += $Activity
    $global:data | ConvertTo-Json -Depth 10 | Out-File $global:config.LogFile -Encoding utf8
}

# Function to create a scheduled task for the tracker
function Register-StartupTask {
    $taskName = "TimeTrackerPrompt"
    $taskExists = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue

    if ($taskExists) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }

    $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$PSCommandPath`""
    $trigger = New-ScheduledTaskTrigger -AtLogon
    $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable

    Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description "Time Tracker Prompt"
}

# Function to remove startup task
function Unregister-StartupTask {
    $taskName = "TimeTrackerPrompt"
    $taskExists = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue

    if ($taskExists) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }
}

# Function to create interval task
function Register-IntervalTask {
    $taskName = "TimeTrackerInterval"
    $taskExists = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue

    if ($taskExists) {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
    }

    $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$PSCommandPath`" -ShowPrompt"

    # Create a daily trigger instead of using RepetitionDuration
    $trigger = New-ScheduledTaskTrigger -Daily -At (Get-Date)
    # Set the repetition interval without the problematic duration
    $trigger.Repetition = (New-ScheduledTaskRepetition -Interval (New-TimeSpan -Minutes $global:config.IntervalMinutes))

    $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable

    Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description "Time Tracker Interval"
}

# Create shortcut in Start Menu for easy access
function Create-Shortcut {
    $startMenuFolder = [Environment]::GetFolderPath('StartMenu') + "\Programs"
    $shortcutPath = "$startMenuFolder\Time Tracker.lnk"

    if (-not (Test-Path $shortcutPath)) {
        $WshShell = New-Object -ComObject WScript.Shell
        $Shortcut = $WshShell.CreateShortcut($shortcutPath)
        $Shortcut.TargetPath = "powershell.exe"
        $Shortcut.Arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`""
        $Shortcut.Description = "Time Tracker"
        $Shortcut.Save()
    }
}

# Main execution logic
if ($Uninstall) {
    # Directly uninstall without showing UI
    Add-Type -AssemblyName PresentationFramework
    Uninstall-TimeTracker
}
elseif ($ViewLogs) {
    # Just show the main window with focus on logs
    $activity = Show-ActivityPrompt
    if ($activity -ne $null) {
        Save-Activity -Activity $activity
    }
}
elseif ($ShowPrompt) {
    $activity = Show-ActivityPrompt
    if ($activity -ne $null) {
        Save-Activity -Activity $activity
    }
}
else {
    # First run - setup and show initial prompt
    Register-IntervalTask
    if ($global:config.StartOnBoot) {
        Register-StartupTask
    }
    Create-Shortcut

    $activity = Show-ActivityPrompt
    if ($activity -ne $null) {
        Save-Activity -Activity $activity
    }
}
Enter fullscreen mode Exit fullscreen mode

2️⃣ start_timetracker.bat

A simple launcher—right-click and Run as Administrator to install and begin tracking at boot:

# start_timetracker.bat
@echo off
powershell -ExecutionPolicy Bypass -File "%~dp0TimeTracker.ps1"
Enter fullscreen mode Exit fullscreen mode

3️⃣ uninstall_timetracker.bat

One click to fully remove the script, scheduled tasks, shortcuts, and (optionally) your logged data:

# uninstall_timetracker.bat
@echo off
echo Uninstalling Time Tracker...
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%~dp0TimeTracker_updated.ps1" -Uninstall
echo Done!
pause
Enter fullscreen mode Exit fullscreen mode

How to Get Up and Running

  1. Save all three files (.ps1 + two .bat) in the same directory.
  2. Install: Right-click start_timetracker.batRun as Administrator → grant permissions.
  3. Enjoy: TimeTracker will launch at startup and pop up on your chosen interval.
  4. Uninstall: When you’re ready to say goodbye, run uninstall_timetracker.bat as Administrator.

That’s it—no extra dependencies, no fuss, just non-stop productivity magic! ✨


How I Used Amazon Q Developer 🤖

1️⃣ Ideation & Precision Planning with Q CLI
I kicked things off by querying the Amazon Q Developer terminal to map out every requirement: offline functionality, timed reminders, CSV export, and automatic startup hooks. This CLI-driven brainstorming kept my feature list razor-focused and saved hours of back-and-forth.

Prompt 1 screenshot

2️⃣ PowerShell Prototype Generation via Q CLI
Next, I prompted the Q Developer CLI to scaffold the core PowerShell script. Within minutes, I had a working prototype—complete with a timer logic and pop-up stubs — which I then polished by diligence & targeted prompts for edge cases (like handling modal closures).

# prompt 2
> perfect, script it is then. now please create the complete script with all the functionalities mentioned for my laptop.
Enter fullscreen mode Exit fullscreen mode

3️⃣ Seamless Install/Uninstall Batch Tools from Q CLI
Finally, I leveraged the CLI to auto-generate two robust batch wrappers: one to install & launch TimeTracker at startup, and another to cleanly uninstall everything. Having Amazon Q Developer handle the boilerplate meant I could focus on user experience, not Windows registry puzzles.

Prompt 3 example screenshot


🙏 A Heartfelt Thank-You

TimeTracker isn’t just a script—it’s my silent study buddy, my friendly nudge when I lose focus, and my evening reminder that every hour matters. Building it taught me that sometimes the simplest tools leave the biggest impact. 💫


✨ A Little About Me

I’m Divya, a caffeine-fueled web developer with an obsession for real productivity ☕. One day, I hope to wrap this script into a sleek app—but until then, I’ll keep hacking at the command line, making my own life a little more trackable and a lot more intentional.


Still reading? You deserve a medal 🏅! Ready to slay your next task? Let TimeTracker be your guide—because your dreams deserve every minute. 💗✨

A Gif saying You're awesome

Top comments (12)

Collapse
 
divyasinghdev profile image
Divya

i'll be try it out if it works as well for me.

Collapse
 
dev_99718084404de profile image
Dev

Did you try it yet?

Feedback?

Collapse
 
dummy001 profile image
dummy

This is truly amazing work, love it totally ✨⭐️⭐️⭐️⭐️⭐️ ✨
Also, I couldn’t help but notice your great sense of using emojis 😎 you've placed them perfectly throughout your writing. 👌

You’ve done a wonderful work! 😊

Collapse
 
dev_99718084404de profile image
Dev

Thank you 🙏😁😊

It wasn't that innovative placement imo though. Like I mainly used used them at the End of Line, or if the situation warranted it, in the middle of a sentence.

Collapse
 
harshit3011 profile image
Harshit Khosla

Proud of your work! Just loved everything✨️✨️

Collapse
 
dev_99718084404de profile image
Dev

Thank you 😊
I'm glad you did.

Collapse
 
developerd29108 profile image
Divya developer

I love it. This is really good!
All the best!

Collapse
 
dev_99718084404de profile image
Dev

Thank you 😊😊

Collapse
 
divya_singh_b80fb66bcdbd5 profile image
Divya Singh

I intend to use it.
Let's see if it's as useful

Collapse
 
dev_99718084404de profile image
Dev

Awesome. thank you.

Btw. did you try it yet? Feedback?

Collapse
 
divya_singh_12024c583f7b5 profile image
Divya Singh

This is good!
All the best!

Collapse
 
dev_99718084404de profile image
Dev

Thank you 😁