About • Features • Setup • Installation • License
Timecrack is a time tracking application, designed for simplicity and efficiency. It lets you define your projects and tasks, and then track the time you spend on them. You can also add notes to your time entries, and view reports of your time usage.
With Timecrack you can increase your productivity. It is a self-hosted application, so you can run it on your own server and have full control over your data.
The application allows you to manage and organize your time trackings.
- Clean & minimal interface
- Tagging & search
- Self-hosted (Docker support)
- Multi-user capable (future/planned)
- No tracking / no ads
To clone and run this application, you'll need Docker installed on your computer. From your command line:
# Clone this repository
$ git clone https://github.com/alextselegidis/timecrack.git
# Go into the repository
$ cd timecrack
# Install dependencies
$ docker compose up -dThen you can SSH into the PHP-FPM container and install the dependencies with composer install.
Note: the current setup works with Windows and WSL & Docker.
You can build the files by running bash build.sh. This command will bundle everything to a build.zip archive.
You will need to perform the following steps to install the application on your server:
- Make sure that your server has Apache/Nginx, PHP (8.2+) and MySQL installed.
- Create a new database (or use an existing one).
- Copy the "timecrack" source folder on your server.
- Make sure that the "storage" directory is writable.
- Rename the ".env.example" file to ".env" and update its contents based on your environment.
- Run the
php artisan migrate:freshcommand from the terminal. - Open the browser on the Timecrack URL and log in with admin@example.org and 12345678 as the password.
That's it! You can now use Timecrack at your will.
A dedicated DemoSeeder is shipped to populate the database with a realistic
demo dataset (one manager, three IT developers, eight software projects and
one month of past time-tracking entries). It is not wired into
DatabaseSeeder.php and therefore never runs during a normal db:seed —
you have to invoke it explicitly:
php artisan db:seed --class=DemoSeederWhen you read references to "migrate with seed" in Laravel docs or in this project, it refers to running the database migrations and then immediately invoking the registered seeders in a single command:
# Run any pending migrations and then run DatabaseSeeder
php artisan migrate --seed
# Drop all tables, re-run every migration from scratch and then seed
php artisan migrate:fresh --seedBoth commands only execute the seeders that are wired into
DatabaseSeeder::run(). Because DemoSeeder is intentionally not
registered there, neither migrate --seed nor migrate:fresh --seed will
populate the demo dataset — that still has to be triggered explicitly with
the --class=DemoSeeder invocation shown above (and can be combined with
a fresh migration if you want a clean slate):
php artisan migrate:fresh && php artisan db:seed --class=DemoSeederThe seeder is idempotent: running it again refreshes the trackings of the
demo team without duplicating users or projects. All demo accounts use
12345678 as the password and emails of the form <firstname>@example.org
(e.g. sarah@example.org, david@example.org, priya@example.org,
lukas@example.org).
You will find the latest release at github.com/alextselegidis/timecrack. You can also report problems on the issues page and help the development progress.
Code Licensed Under GPL v3.0 | Content Under CC BY 3.0
Website alextselegidis.com · GitHub alextselegidis · Twitter @alextselegidis
