outstaff_tracker
Local-first cross-platform time analytics app for freelancers working through Kimai.
- Flutter stable
- Riverpod
- go_router
- Dio
- Drift + SQLite
- flutter_secure_storage
- fl_chart
- intl
Development
Section titled “Development”If platform runner files are not present yet, generate them once with Flutter:
flutter create . --project-name outstaff_tracker --platforms=windows,android,webGenerate Drift code before running the app:
dart run build_runner build --delete-conflicting-outputsThen run Flutter for the target platform:
flutter run -d windowsflutter run -d chromeflutter run -d androidValidation
Section titled “Validation”dart format lib testflutter analyzeflutter test --reporter compactflutter build windows --debugflutter build windows --releaseWindows release
Section titled “Windows release”flutter build windows --releaseThe release executable is created under:
build/windows/x64/runner/Release/outstaff_tracker.exeWindows Code Signing
Section titled “Windows Code Signing”The GitHub release workflow can sign the Windows installer when a code signing certificate is available. Signing is optional: without these secrets the workflow still builds unsigned artifacts.
Required GitHub Actions secrets:
WINDOWS_SIGNING_CERTIFICATE_BASE64— base64-encoded.pfxcertificateWINDOWS_SIGNING_CERTIFICATE_PASSWORD— password for the.pfx
Create the base64 value on Windows:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("certificate.pfx")) | Set-Content certificate.pfx.base64Unsigned installers may show Microsoft Defender SmartScreen warnings such as
Unknown publisher. A valid Authenticode signature is required for Windows to
display the verified publisher.
Auto-update
Section titled “Auto-update”Windows builds check GitHub Releases for updates. The app reads:
latest.jsonfor version metadata, release notes URL, installer URL and SHA256.appcast.xmlfor the nativeauto_updater/ WinSparkle install flow.- GitHub Releases API
https://api.github.com/repos/{owner}/{repo}/releases/latestas a safe fallback when native update metadata is unavailable.
Automatic checks run in the app at most once per day and can be disabled in
settings. Windows prefers the native installer flow when appcast metadata is
available. In fallback mode the app opens the installer asset or release page in
the external browser and never silently downloads or executes an .exe.
The Windows installer artifact is:
outstaff_tracker-setup-{version}.exeAndroid does not install updates silently. Use the APK/AAB release artifacts or store distribution later. Web delivery is handled outside the GitHub ZIP release assets, for example by redeploying the hosted Docker/GHCR image.
Create a release by pushing a semantic version tag:
git tag v0.1.1git push origin v0.1.1GitHub Actions builds and attaches:
outstaff_tracker-setup-{version}.exeoutstaff_tracker-windows-portable-{version}.zipoutstaff_tracker-android-{version}.apkoutstaff_tracker-android-{version}.aabSHA256SUMS.txtlatest.jsonappcast.xml
If signing secrets are absent, the installer and updater still work, but Windows may show SmartScreen warnings. Production distribution should use a trusted OV/EV Authenticode certificate; self-signed certificates are useful only for testing and do not create a trusted publisher identity.
Branding Assets
Section titled “Branding Assets”Branding source and generated platform icons are checked into the repository:
assets/brand/app_icon.png— 1024x1024 source iconwindows/runner/resources/app_icon.ico— Windows executable and installer iconandroid/app/src/main/res/mipmap-*/ic_launcher.png— Android launcher iconsweb/favicon.pngandweb/icons/*.png— Web favicon and PWA iconsinstaller/windows/assets/*.bmp— Inno Setup wizard images
Regenerate all branding assets from the deterministic PowerShell script:
pwsh ./tool/generate_brand_assets.ps1On Windows without PowerShell 7:
powershell -ExecutionPolicy Bypass -File ./tool/generate_brand_assets.ps1The generator uses the same dark minimalist visual language as the app UI: near-black surface, thin grid lines, green time accent, and a subtle money marker. Re-run it after changing the icon composition, then commit the generated files.