ProductPromotion
Logo

Open.Source

made by https://0x3d.site

GitHub - almarklein/timetagger: Tag your time, get the insight
Tag your time, get the insight. Contribute to almarklein/timetagger development by creating an account on GitHub.
Visit Site

GitHub - almarklein/timetagger: Tag your time, get the insight

GitHub - almarklein/timetagger: Tag your time, get the insight

CI Documentation Status PyPI version

TimeTagger

Tag your time, get the insight - an open source time-tracker with an interactive user experience and powerful reporting.

Introduction

TimeTagger is a web-based time-tracking solution that can run locally or on a server. It's aimed at individuals and freelancers, and has the following features:

  • Intuitive UI based around an interactive timeline.
  • Lightweight feel by use of tags rather than projects.
  • Reporting in PDF and CSV.
  • Set daily/weekly/monthly targets.
  • Integrated Pomodoro method (experimental).
  • Responsive: works well on small and large screens.
  • Sync between devices.

Under the hood

The server runs on async Python using uvicorn and asgineer - which is fun and bloody fast. It uses SQLite via itemdb to store the data, making it easy to deploy.

The client is a mix of HTML, CSS, Markdown, and ... Python! PScript is used to compile the Python to JavaScript. This may be a bit idiosyncratic, but it's fun! Maybe I'll someday implement it in something that compiles down to Wasm :)

Install and run

TimeTagger is implemented as a Python library that requires Python 3.6 or higher. The dependencies are listed in requirements.txt - these are installed automatically when you install TimeTagger with Pip.

# Install
pip install -U timetagger

# Run
python -m timetagger

If the server runs on your local machine, you can use single-user mode out-of-the-box.

Self-hosting your time tracker

Docker images are provided via the Github container registry, so you can use e.g. Docker-compose to easily host your own server.

There are two variants, one that runs the server as root inside the container and a nonroot variant that runs as user 1000:

See this article for more information about self hosting.

Authentication using credentials

If you want multiple users, or if the server is not on localhost, you may want to provide the server with user credentials using an environment variable or a command line arg (see the docs on config).

# Using command-line args
python -m timetagger --credentials=test:$2a$08$0CD1NFiIbancwWsu3se1v.RNR/b7YeZd71yg3cZ/3whGlyU6Iny5i

# Using environment variables
export TIMETAGGER_CREDENTIALS='test:$2a$08$0CD1NFiIbancwWsu3se1v.RNR/b7YeZd71yg3cZ/3whGlyU6Iny5i'
python -m timetagger

The credentials take the form ":", where the hash is a (salted) BCrypt hash of the password. You can generate credentials using e.g. https://timetagger.app/cred.

Authentication using a reverse proxy

If you have a reverse proxy which already authenticates users (e.g. Authelia) and provides the username through a HTTP header, you can tell TimeTagger to use this information. To configure it there are three environment variables and command line arguments (see the docs on config).

# Using command-line args
python -m timetagger --proxy_auth_enabled=True --proxy_auth_trusted=127.0.0.1 --proxy_auth_header=X-Remote-User

# Using environment variables
export TIMETAGGER_PROXY_AUTH_ENABLED=True TIMETAGGER_PROXY_AUTH_TRUSTED=127.0.0.1 TIMETAGGER_PROXY_AUTH_HEADER=X-Remote-User
python -m timetagger

Show your support

If you're self-hosting TimeTagger and want to support the project, you can:

  • Write something about TimeTagger in a blog post or social media (and link to https://timetagger.app). This helps search engines find it better.
  • Contribute improvements via Github.
  • For financial support you can take a subscription or donate (see the donation links on the side).

Using the hosted version

You can also make use of https://timetagger.app so you don't have to worry about maintaining a server, backups, and all that. An account is just €3 per month. With that you'd also sponsor this project and open source in general.

Copyright and license

As usual, copyright applies to whomever made a particular contribution in this repository, which can be inspected via e.g. git blame. The owner of the copyright (i.e. the author) is free to use their code in any way.

This code is also subject to the GPL-3.0 License, to protect it from being used commercially by other parties.

Contributors must agree to the Contributor License Agreement to grant me (Almar) the right to use their contributions at e.g. the TimeTagger.app service. By making a contribution to this project, you agree to this CLA.

Developers

Clone the repo and install in development mode:

git clone https://github.com/almarklein/timetagger.git
cd timetagger
pip install -e .

Install additional developer dependencies:

pip install invoke black flake8 pytest pytest-cov requests

Then these commands can be used during development:

  • invoke -l to see available invoke tasks
  • invoke clean to remove temporary files
  • invoke format to autoformat the code (using black)
  • invoke lint to detect linting errors (using flake8)
  • invoke tests to run tests (using pytest)

Articles
to learn more about the open-source concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Open-Source.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory