{"id":22352939,"url":"https://github.com/fschick/timetracking","last_synced_at":"2026-03-11T15:03:09.703Z","repository":{"id":38892277,"uuid":"327364889","full_name":"fschick/TimeTracking","owner":"fschick","description":"Time tracking for freelancers and people who work on projects based on an hourly quota","archived":false,"fork":false,"pushed_at":"2024-11-03T10:40:57.000Z","size":6378,"stargazers_count":15,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-30T08:48:13.562Z","etag":null,"topics":["timetracking"],"latest_commit_sha":null,"homepage":"https://timetracking.schick-software.de","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fschick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-06T16:14:54.000Z","updated_at":"2025-04-01T14:48:44.000Z","dependencies_parsed_at":"2024-11-03T11:18:06.842Z","dependency_job_id":"c5a58d5b-9bce-48b0-812f-7721386a387d","html_url":"https://github.com/fschick/TimeTracking","commit_stats":null,"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"purl":"pkg:github/fschick/TimeTracking","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fschick%2FTimeTracking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fschick%2FTimeTracking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fschick%2FTimeTracking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fschick%2FTimeTracking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fschick","download_url":"https://codeload.github.com/fschick/TimeTracking/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fschick%2FTimeTracking/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30385035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T14:10:17.325Z","status":"ssl_error","status_checked_at":"2026-03-11T14:09:37.934Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["timetracking"],"created_at":"2024-12-04T12:31:54.010Z","updated_at":"2026-03-11T15:03:09.682Z","avatar_url":"https://github.com/fschick.png","language":"C#","readme":"# FS.TimeTracking\n\nTime tracking for freelancers\n\n## Demo\n\nhttps://demo.timetracking.schick-software.de/\n\n## Supported operating systems\n\nSupported operation systems are Windows 10 + / Windows Server 2016 + / Debian based Linux\n\nOther Operating systems might worked but are untested\n\n## Supported databases\n\n**SQL Server 2019+**: Fully tested\n\n**MySQL / MariaDB**: Fully tested\n\n**SQLite**: Partially tested, demo runs with it\n\n**PostgreSQL**: Mainly untested\n\n## Installation\n\n### Run as docker container\n\n```bash\ndocker run -d -p \u003cport_on_host\u003e:5000 \\\n\t--name timetracking \\\n\t-e TimeTracking__Database__Type='\u003cMySql|SqlServer|Sqlite|PostgreSql\u003e' \\\n\t-e TimeTracking__Database__ConnectionString=\u003cconnection string\u003e \\\n\tschicksoftware/timetracking\n```\n\n### Run from command line\n\n```shell\n# Windows\n.\\FS.TimeTracking.exe\n\n# Linux\nchmod +x ./FS.TimeTracking\n./FS.TimeTracking\n```\n\n### Install as Windows service\n\n```bash\n# Copy the content of publish folder to suitable location\nmkdir C:\\services\\TimeTracking\nrobocopy /E timetracking.1.0.1.windows\\ C:\\Services\\TimeTracking\n\n# When the service runs from program folder adjust path to log files (programm folder isn't writeable!)\ncd C:\\services\\TimeTracking\nnotepad config\\FS.TimeTracking.config.nlog\n\n# Install and run as windows service\n# The service will be installed as \"FS.TimeTracking\". You can change the name in the .bat file\nC:\\services\\TimeTracking\\services\\windows.service.install.bat\n\n# Uninstall service\nC:\\services\\TimeTracking\\windows.service.uninstall.bat\n```\n\n### Install as Linux daemon\n\n```bash\n# Copy files\ncp -r timetracking.1.0.1.linux/opt/FS.TimeTracking/ /opt/\ncp timetracking.1.0.1.linux/etc/systemd/system/FS.TimeTracking.service /etc/systemd/system\nchmod +x /opt/FS.TimeTracking/bin/FS.TimeTracking\n\n# Create system user/group\nuseradd -m dotnetuser --user-group\n# Adjust user/group\nvi /etc/systemd/system/FS.TimeTracking.service\nchown -R dotnetuser:dotnetuser /opt/FS.TimeTracking/\nchmod -R o= /opt/FS.TimeTracking/\n\n# Test service\n/opt/FS.TimeTracking/bin/FS.TimeTracking\n\n# Start service\nsystemctl daemon-reload\nsystemctl start FS.TimeTracking.service\n\n# Get service status\nsystemctl status FS.TimeTracking.service\njournalctl -u FS.TimeTracking.service\n\n# If you want your service to start when the machine does then you can use\nsystemctl enable FS.TimeTracking.service\n```\n\n## Configuration\n\n##### Application / Service / Kestrel configuration\n\n./config/FS.TimeTracking.config.json\n\n```json\n\"TimeTracking\": {\n  \"Features\": {\n    // Enable authorization\n    \"Authorization\": false,\n    // Enable reporting\n    \"Reporting\": false\n  },\n  \"Database\": {\n    \"Type\": \"Sqlite\",\n    \"ConnectionString\": \"Data Source=database/TimeTracking.sqlite\"\n\n    //\"Type\": \"SqlServer\",\n    //\"ConnectionString\": \"Data Source=\u003cserver\u003e;Initial Catalog=\u003cdatabase\u003e;User ID=\u003cuser\u003e;Password=\u003cpassword\u003e;Persist Security Info=True;TrustServerCertificate=True\"\n\n    //\"Type\": \"PostgreSql\",\n    //\"ConnectionString\": \"Server=\u003cserver\u003e;Database=\u003cdatabase\u003e;User Id=\u003cuser\u003e;Password=\u003cpassword\u003e;\"\n\n    //\"Type\": \"MySql\",\n    //\"ConnectionString\": \"Server=\u003cserver\u003e;Database=\u003cdatabase\u003e;User=\u003cuser\u003e;Password=\u003cpassword\u003e;\"\n  },\n  \"Reporting\": {\n    // The base URL of the report server\n    \"ReportServerBaseUrl\": \"http://localhost:5010\"\n  },\n  \"Keycloak\": {\n    // The URL of the Keycloak server\n    \"AuthServerUrl\": \"https://URL/to/Keykloak\",\n    // The realm to use\n    \"Realm\": \"\u003cRealm\u003e\",\n    // The client id of the backend application\n    \"ClientId\": \"\u003cFront-end client id\u003e\",\n    \"SslRequired\": true,\n    \"VerifyTokenAudience\": true,\n    // Creates the realm if it does not exist\n    \"CreateRealm\": false,\n    // The username of the admin user to create the realm, clients and users\n    \"AdminUser\": null,\n    // The password of the admin user to create the realm, clients and users\n    \"AdminPassword\": null\n  }\n}\n```\n\n##### Logging configuration\n\n./config/FS.TimeTracking.config.nlog\n\nSee [official documentation](https://github.com/nlog/nlog/wiki/Configuration-file) for details\n\n## Features\n\n### Reports\n\nActivity reports available via [TimeTracking Report Server](https://github.com/fschick/TimeTracking.ReportServer). The server uses a paid reporting engine. Let me know if you know of a suitable free report engine. Contact me, if you like to go with the paid reporting engine.\n\n### User management\n\nAuthentication is available via OpenID Connect / OAuth2 with [Keycloak](https://www.keycloak.org/). Other identity servers may work with smaller adjustments or limitations (e.g. users and role must be created by your own).\n\n## Development\n\n### Pre requirements\n\n[.NET 7 SDK](https://dotnet.microsoft.com/en-us/download)\n\n[Node.js 16.x](https://nodejs.org/en/)\n\n[OpenJDK](https://docs.microsoft.com/en-us/java/openjdk/download) (required to generate Angular REST client via OpenAPI Generator)\n\n### Run\n\nDownload or clone repository\n\n```bash\ngit clone https://github.com/fschick/TimeTracking.git\ncd TimeTracking\n```\n\nInstall NPM packages\n\n```bash\ncd FS.TimeTracking.UI/FS.TimeTracking.UI.Angular\nnpm install\ncd ../..\n```\n\nRun server\n\n```\ndotnet run --project FS.TimeTracking/FS.TimeTracking/FS.TimeTracking.csproj\n```\n\nRun UI\n\n```\ncd FS.TimeTracking.UI/FS.TimeTracking.UI.Angular\nnpm run start\n```\n\nOpen web browser:\n\nhttp://localhost:4200/\n\n### Publish\n\nSee publish script `Build/make_publish.ps1`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffschick%2Ftimetracking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffschick%2Ftimetracking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffschick%2Ftimetracking/lists"}