A time tracking app that respects your privacy and the gets the job done without being fancy.

Overview

Time Cop
icon

A time tracking app that respects your privacy and gets the job done without getting too fancy.

GitHub

Motivation

I'd rather not do time-tracking at all, but since its a necessity for my work, it's either use an app or keep track of things manually (which I'm terrible at). There are many time tracking apps on the app stores (and I have tried several of them), but each of them has at least one pain point that eventually drives me off—some cost more money than I think they should, others have (what I consider) poorly designed interfaces, some are way too complicated, some don't export data easily, most require an internet connection, I have privacy concerns with a large number of them, etc, etc.

Time tracking in and of itself is rather straightforward (hence all the apps on the app stores), so I figured “why not use this as an opportunity to practice mobile development and learn some new things?”. This app is the result of that question—its a tool that I use every day for work, but also a sample project to work off of and share with others.

Features

  • Offline-only, mobile-only (iOS / Android)
  • Fully private—there is no tracking / spying / advertising / etc
  • Keep track of tasks with multiple parallel timers that can be started with the tap of a button
  • Associate timers with projects to group your work (or don't)
  • Start, stop, edit, and delete timers whenever with no fuss
  • Export data as a .csv file, filtered by timespans and projects
  • Export the app's database for full access to all of its data
  • Automatic light mode / dark mode based on your device settings
  • Localized in several languages (thanks to Google Translate): English, Arabic, German, Spanish, French, Hindi, Indonesian, Japanese, Korean, Portuguese, Russian, Chinese (Simplified), Chinese (Traditional)
  • Open source (licensed under Apache-2.0)—fork away!

Screenshots

Screenshot Screenshot Screenshot Screenshot Screenshot

More screenshots (including dark-mode and localization demonstrations) are available in the screenshots/ folder.

Contributing

I'm happy to take bug reports and pull requests if you want to help improve Time Cop, but I fundamentally want to keep this app relatively small and simple. If that's not for you, there's plenty of other options out there.

The app is created pretty much entirely in Dart using Flutter, and I tried to make heavy use of the Bloc pattern.

Here are a few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view its online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Localizations

Translations are handled using Project Fluent. Currently all translations (except English) were auto-translated by Google Translate using my Translate Tool. If you notice any incorrect strings, I would love to know about it so that it can be fixed asap. Similarly, if you want to add a language, please do!

Todo

A list of “user stories” (and I use that term very loosely) guiding the development of this app is available in design/user-stories.md; any unchecked boxes are outstanding items on the todo list!

Comments
  • Generate screenshots using automated integration tests

    Generate screenshots using automated integration tests

    Time Cop used to use the screenshot package for automated tests, but unfortunately, that package is obsolete and non-functional now.

    Thankfully, Flutter 2.5 and above make it easy to take screenshots inside integration tests. It'd be useful if new tests were written to make generating screenshots easy again.

    Here's a relevant article on this: https://dev.to/mjablecnik/take-screenshot-during-flutter-integration-tests-435k

    And here's an example of a project using this in practice: https://github.com/wger-project/flutter/tree/feature/exercise-crowdsourcing/integration_test

    hacktoberfest hacktoberfest-accepted good first issue 
    opened by 12people 30
  • incorrect DB scheme

    incorrect DB scheme "corrupts" existing data when updated to 1.6.0

    Yesterday I got auto-updated by Google Play to version v1.6.0+36 (Android v8.0.0). After that my old projects disappeared the same way as described in #40.

    I believe the issue is caused by incorrect scheme of projects table: https://github.com/hamaluik/timecop/blob/a69d2778c1ab1b7ef18df87488071f4861b2c902/lib/data_providers/data/database_provider.dart#L40 After DB upgrade for all old projects archived contains string false but the application expects integer there (0 or 1).

    The scheme is incorrect from the application POV but I think that SQL doesn't support such tables either though I don't know SQL that much.

    As a workaround I exported my DB then manually edited the scheme in sqlite editor: changed the archived field description in the projects table to the following:

    archived boolean not null default 0
    

    Then I cleared data of the application on the phone and imported modified DB file. After small delay I can now use the app again.

    Status: Pending Priority: Critical Type: Bug 
    opened by peterazmanov 19
  • Bring the app to F-Droid

    Bring the app to F-Droid

    I'd love to see this app on F-Droid, the most popular free and open-source app store for Android.

    You could submit the app to F-droid via a pull request or simply create an issue on their Gitlab Request for Packaging repository, asking for this app to be packaged.

    Thank you for making this app!

    Status: In Progress Priority: Medium Type: Maintenance 
    opened by 12people 12
  • Fix BuildContexts across async gaps

    Fix BuildContexts across async gaps

    There's a number of warnings throughout the code about using BuildContexts across asynchronous gaps. It'd be good to fix the underlying problems.

    For information on why this is happening and how to fix it, see this video: https://www.youtube.com/watch?v=bzWaMpD1LHY

    hacktoberfest good first issue 
    opened by 12people 11
  • Initial macOS support

    Initial macOS support

    I wanted a macOS app for my own usage, even if not particularly optimized for the mouse.

    I did a rudimentary port, BUT did it in a pretty ugly way — I commented out dev dependencies (not part of the commits), removed tests (also not part of the commits), and updated several dependencies (that IS part of the commits).

    I can't afford to devote more time to this right now. If anyone would like to pick up where I left off, what's left to do is to bring tests in order, sort out dev dependency conflicts, and make sure everything still works as intended.

    opened by 12people 8
  • Linux support

    Linux support

    Adding support for Linux.

    I would be willing to also create an accompanying Flatpak release (that's the modern distro-agnostic packaging format for Linux) on Flathub, if permitted to.

    opened by 12people 6
  • Option to have ongoing notification for ongoing timers

    Option to have ongoing notification for ongoing timers

    Many a time have I forgotten to leave a timer going just because I closed the application to go do something else (on the phone). If there was a notification icon that would expand to the event description (maybe also the project under which it is) and the currently elapsed time, then when it would always be there in the periphery or at the very least be something that gets reminded when the phone is opened (as the notification would be visible in the lock screen).

    Status: Available Status: Review Needed Priority: Low Type: Enhancement 
    opened by usrme 6
  • Starting another timer doesn't stop the running one

    Starting another timer doesn't stop the running one

    With "Only Allow One Running Timer at a Time" set to ON in the settings, I expect it to stop the currently running timer when I start another one by swiping left on a previous task. This does not happen, and both timer runs at the same time as a result.

    hacktoberfest good first issue 
    opened by 1over137 5
  • Generate Screenshots Automation

    Generate Screenshots Automation

    Fixes #80

    Following the requested changes in the issue, there were a things that needed to happen in order for the feature to work:

    • A new folder called integration_test was created in the main project hierarchy
    • The integration_test dependency was added under dev_dependencies
    • The older screenshots_test.dart has been deleted
    • Integration tests use a WidgetTester, so the older logic had to be refactored
    • Since the older test relied on a timer with an id of 42, which does not exist, the logic has changed to rely on the current default timers which are running.
    • This means that the test selects the first running timer (UI Layout), stops it and then clicks on it to go to the editing screen

    The test has been run on an emulated device several times and appears to be working.

    A video of the test running:

    giphy

    hacktoberfest-accepted 
    opened by TomerPacific 4
  • Upgrade to latest flutter_bloc version

    Upgrade to latest flutter_bloc version

    The current version of the flutter_bloc library that's being used is 7.3.3, but the latest version is 8.1.1.

    For upkeep, it'd be good to upgrade to the latest version, including all the refactoring that takes.

    hacktoberfest hacktoberfest-accepted 
    opened by 12people 4
  • Error running pod install

    Error running pod install

    Hey there,

    i have issues to running this Project. I tried some stuff to run this, but nothing has fix it. Now i have already re-install this project, but the error is still there. I have the latest Ruby, flutter and Cocoapot version, but it seemy to me, there are more problems. Can you please help me with this?

    Thanks a lot.

    opened by MSGermany 3
  • [Suggestion] Filter shortcuts for e.g. this week, last week, this month, ...

    [Suggestion] Filter shortcuts for e.g. this week, last week, this month, ...

    Really nice tool. One handy feature could be filter "shortcuts" to easily select often used time periods like:

    • current {week,month,year} till today
    • last/previous {week,month,year}
    opened by maiers 0
  • WeekdayAverages are slightly skewed by extending the time period before calculating the daily average

    WeekdayAverages are slightly skewed by extending the time period before calculating the daily average

    Actual: It seems that WeekdayAverages a slightly off when viewed for a time period not aligned with the start/end of a week. Thus artificially decreasing the daily average for those days for which no data is available.

    Expected: WeekdayAverages only normalizes daily hours worked by the number of instances of the given weekday within the actual time period monitored.

    opened by maiers 1
  • [Suggestion] Browser Add-On simmilar to Clockify / Toggl

    [Suggestion] Browser Add-On simmilar to Clockify / Toggl

    Clockify and Toggl have a browser extension that add buttons on specific websites. This makes it easy for users to start/stop projects on the fly based on the where the button is. Example, gitlab-github buttons would automatically add the name of the issue to the timer. They use API's to their servers to start/stop timers, something Timecop does not have.

    However, it should be possible to connect to a Linux desktop client via Native messaging. I have not experimented with this so I can not be certain it would work.

    The Toggl Extention uses Apache License 2.0. It means that it can used, replacing their API requests to Native messaging.

    This is big suggestion, and I understand this. So there is no rush. Other people can add a '👍' or '👎' if they agree/disagree.

    Example Image
    opened by legoatoom 0
  • View with start and end time

    View with start and end time

    In my organization, we enter the work time in a form. The app would be even more useful if start and end time would be featured in the overview, possibly with a column chooser like in the reporting section.

    opened by mjjzf 2
  • Update Google Play release

    Update Google Play release

    Hi, I noticed that the latest update of Time Cop on the Play Store has been released on 2021-01-15, while the latest version on F-Droid has been released on 2022-05-18. Is it possible to update the Play Store release? (Btw, why does it cost 0.99$ if it is also on F-Droid?)

    opened by d1nuc0m 5
Releases(v1.8.1)
  • v1.8.1(Nov 22, 2022)

  • v1.8.0(Nov 11, 2022)

    Thanks to all the Hacktoberfest participants, translators, and other volunteers for helping out!

    Added

    • Turkish translation
    • Null safety
    • Tooltips for better accessibility
    • On-hover timer resume buttons
    • Directly visible timer stop button
    • Project action menu for discoverability
    • Filter indicator
    • Press enter to start timer
    • Support for Android 13 per-app localization
    • Monochrome launcher icon

    Changed

    • Translations
    • Updated dependencies
    • Refactored, fixed up a lot of code
    • Increased Android compile SDK
    • Clearer import/export labels
    • Settings Icon
    • Numerals font
    • Replaced gesture-based date removal with an icon
    • Move "set to current time" to menu in timer editor
    • Low contrasts on labels and icons

    Fixed

    • Fixed automated screenshot tests
    • Swiper
    • Storage access permissions
    • CastError
    • Archived project
    • Theme dropdown contrast
    • URL launching
    • firstDate bug
    Source code(tar.gz)
    Source code(zip)
    timecop-linux-aarch64.tar.xz(6.82 MB)
    timecop-linux-x86_64.tar.xz(7.73 MB)
  • v1.7.2(May 9, 2022)

  • v1.7.1(May 2, 2022)

  • v1.7.0(Mar 22, 2022)

  • v1.5.0(Apr 8, 2020)

    Added

    • Added ability to search for timers in the dashboard
    • Added ability to filter timers by time and project in the dashboard
    • Added a settings screen
    • Added ability to change the theme manually
    • Added ability to change the language manually
    • Added autocomplete on timer description fields
    • Added ability to collapse days
    • Added settings to control autocomplete, day collapsing, timer grouping
    • Added a time table report, listing per-project time sums

    Changed

    • Moved the menu button to be under the Time Cop logo on the left side, to make room for the search and filter buttons
    • Fixed some Russian translations thanks to @4name
    • Marked hand-translated translations as such so the automatic translator doesn't touch them
    • Normalized order of translations across all languages

    Fixed

    • Fixed negative duration timers by adjusting timer ends accordingly
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0+23(Apr 2, 2020)

  • v1.3.3+22(Mar 31, 2020)

    Added

    • 3 report charts: project breakdown pie chart, weekly total hours line chart, and average daily hours bar chart

    Fixed

    • Fixed start button positioning for right-to-left languages (Arabic)
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0+14(Mar 31, 2020)

  • v1.1.0+12(Mar 19, 2020)

    Added

    • Automatically group similar timers on the dashboard view within each day
    • Option to group similar timers on a day-by-day basis when exporting

    Changed

    • Changed UI of selecting which projects to filter by when exporting to be in line with the other sections on the export page
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0+11(Mar 19, 2020)

    Added

    • Ability to start / stop / create / edit / delete timers
    • Ability to create / edit / delete projects
    • Ability to export database file
    • Ability to export csv of filtered data
    Source code(tar.gz)
    Source code(zip)
Owner
Kenton Hamaluik
Kenton Hamaluik
A tracking app for tracking corona virus incidence around the world

?? COVID-19 Tracker A simple Flutter app to track COVID-19 cases. The data we provide is collected from World Health Organization (WHO), the US Center

Chiziaruhoma Ogbonda 2 Jul 21, 2020
A tracking app for tracking covid-19 cases around the world

?? COVID-19 Tracker A simple Flutter app to track COVID-19 cases. The data we provide is collected from World Health Organization (WHO), the US Center

Temitope Ajiboye 166 Nov 23, 2022
GChat is a chatting application developed using Flutter(Dart) and firebase for 2 users. Trying to Develop an application that does not sell your data with whatsapp rolling out its privacy policy updates.

Gchat - The Chatting Application A Flutter project for chatting. I used Android Studio and you can you any editor of your choice for ex: VS Code, Inte

Sanchaksh Kaul 6 Nov 6, 2022
📱⏰ Mobile application for tracking projects time written in Flutter!

ProTime Mobile application for tracking projects time Why? This app was born from the need of a simple and minimal solution to keep track of the times

Giorgio Bertolotti 36 Aug 27, 2022
This is the new version of my Task app "Tasko" which was done in Java. She is now in Flutter for the HotReload and the native Cross-Platform.

tasko_rem The Tasko App is now compatible on iOS, Android and others distribution, because it's made with Flutter ✨ You can now add task, check them o

Scythe 12 May 2, 2022
An open source encrypted peer-to-peer system. Own data, own privacy.

An open source encrypted peer-to-peer system. Own data, own privacy.

Cymple Tech 456 Jan 3, 2023
One codebase two platforms more privacy for the world 😎

Privyet A Privacy focused social media app. Getting Started This project is a starting point for a Flutter application. A few resources to get you sta

Privyet 3 Jun 3, 2021
An open source encrypted peer-to-peer system. Own data, own privacy. (Rust+Flutter)

An open source encrypted peer-to-peer system. Own data, own privacy. (Rust+Flutter)

Cymple Tech 124 Oct 7, 2021
⚗️A privacy centric matrix client

a privacy centric matrix client - now in open alpha* Syphon is still in alpha and we do not recommend using it where proven and independently verified

Syphon 882 Dec 31, 2022
Encrypted peer-to-peer system for data security. Own data, own privacy

ESSE (Encrypted Symmetrical Session Engine) An open source encrypted peer-to-pee

CympleTech 455 Dec 26, 2022
Flutter + Bloc + Laravel Sunctum + SQL Server Job Finder App

Intro Job Finder App on Flutter. Front-end: Flutter State Management: Bloc / Cubit Back-end: Laravel + SQL server to Build Rest Api Check the screensh

Ihab Zaidi 8 Oct 31, 2022
FlutterBloc - A simple app using Bloc with fancy UI and dio to fetch data

Breaking Bad A new Flutter project using Bloc with little animation. Free Api: h

Alaa Shoukri 8 Dec 6, 2022
A app made with Flutter, which allows user to lookup time of any major city in the world. The UI also changes its background according to the time.

first_flutter_project A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you st

Laksh Mittal 0 Oct 31, 2021
Worney - help people that want to know what time have been made on work time

Worney - help people that want to know what time have been made on work time

Kesse 1 Mar 10, 2022
📱 Tracking the impact of COVID-19 cases based on your location, built in Flutter

Installation Download apk here Get on Github Releases, or Build on your own: git clone https://github.com/adityanjr/covid19-tracker.git flutter pub ge

Aditya Singh 33 Dec 26, 2022
Dynamically changing your theme without hassle

dynamic_theme Dynamically changing your theme without hassle This packages manages changing your theme during runtime and persiting that theme. I wrot

Norbert Kozsir 329 Dec 29, 2022
A simple budgeting, expense, and income tracking app

Budgetrack A simple budgeting, expense, and income tracking app Backend This project includes a simple API server, written in Clojure, that stores fil

Darrell Brogdon 0 Jan 6, 2022
Flutter Android application for tracking Osu! user, beatmaps statistic and other features provided by Osu! API

TMP-team-2-Osu-track Целью проекта является написание приложения на платформе Android и IOS с помощью Dart+Flutter с интуитивно понятным интерфейсом,

Aleksandr P. 11 Nov 23, 2022
A beer tracking app made with Flutter

Beer Me Up Beer Me Up is an iOS and Android app build with Flutter. The app is a personal beer logging that allows you to enter every beer you have to

Benoit Letondor 471 Jan 5, 2023