Made a new thing. ZeroClock - time tracker with invoicing. Runs off a single SQLite file on your machine. No accounts, no cloud, nothing phoning home. Nobody else sees your data.

Completely free, not "free tier" free. Portable, CC0 public domain, WCAG 2.2 AAA accessible from the ground up. No VC money, no subscription, no catch.

Whether you freelance or just want to know where your hours go, give it a look.

https://apps.lashman.live/zeroclock/

#OpenSource #CC0 #FOSS #GetFediHired #A11y

ZeroClock - Local-first time tracker for freelancers

Portable, WCAG 2.2 AAA accessible time tracker and invoicing for Windows freelancers. No cloud, no account, no telemetry. CC0 public domain.

well, time for some good news for a change - i think i managed to work out how to compile this one for linux :) so here you go, now you can try it out on there as well, let me know how it goes :) boosts appreciated!

https://nc.robotbrush.com/s/QGwMRTqyoHj5bYi

#OpenSource #CC0 #FOSS #GetFediHired #A11y #Linux

@lashman looks good! (couldn’t test)

Maybe you could consider adding Flatpak / Flathub support, that would give you access to a lot of Linux users. As all you do is interact with the SQLite you can really restrict the Flatpak, which will make it less scary on the Flathub interface.

Also it’s not a bad idea to add "100% human crafted code" these days, if it applies :D
@helpsterTee ohhh, i would LOVE to add linux and even mac versions, but i don't really have anything to compile (or test) those in sadly :( so it'll have to stay windows-only for now :(
@lashman with Linux you could just try on a VM…Apple sucks with their $99 annual dev subscription :/
Or maybe someone else can maintain, but then it’s unofficial.

Nevertheless, congrats on release :)

@helpsterTee yeah, that's fair, but vm isn't entirely the same thing, sadly :( especially when it comes to performance. but i will consider it, might have to!

and thank you, appreciate it! :)

@lashman @helpsterTee on modern systems aside from GPU (unless you use passthrough) native instructions are basically 1:1 due to processor virtualization extensions, shouldn't see any noticeable slowdown in a vm. I run practically everything in a vm myself (hell, for my job on the industrial side we never do single servers independently anymore, we source bigger vm hosts and a NAS and run all the servers off one host with a file backup to the NAS.
@raptor85 @helpsterTee well, in that case i might actually give it a go i suppose, haha

@lashman there is also WSL, and I think I have seen X11 forwarding from WSL in the past.

https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps

Run Linux GUI apps with WSL

Learn how WSL support running Linux GUI apps.

@sassdawe @lashman I would not recommend that route for this use-case, it's got a ton of sharp edges and you'll spend more time figuring out if there's a bug in X11 forwarding or your app than actually working on your app.

a VM is much cleaner and far better for a development workflow like this.

@lashman That looks awesome based on the documentation and screenshots. Especially like that everything is stored on a SQLite database file, allowing people to use existing database tools for potential future integrations to other tools and workflows.

Simon Willison's Python-based Datasette https://datasette.io tools could be used to turn that SQLite file to optional browser-based UI that allows query building and enables APIs for integrating SQLite databases to existing applications. It has been used for both personal databases and for business usage.

Datasette

Datasette is a tool for exploring and publishing data. It helps people take data of any shape, analyze and explore it, and publish it as an interactive website and accompanying API.

@autiomaa thank you! :) and yeah, that sounds really cool! :D

@lashman Take a look at Datasette core tools https://datasette.io/tools and plugins https://datasette.io/plugins that enable cool things like data visualisation and integrations to 3rd party systems. All on top of your file-based SQLite databases.

You could (for example) do matching between Git commits and time tracking by importing multiple SQLite databases to Datasette. Then it would be possible to do SQL queries to both and visualize the outputs with various existing tools it has available. Datasette has importers from various SaaS platforms (including GitHub), allowing to do data analysis and archives to a local system.

Datasette Tools

@autiomaa i will check it out, for sure, thanks! :D
@autiomaa @lashman when I was on MacOS I used timingapp.com to track my hours, but I'm on Windows now. Thank you @lashman you are a treasure!
@sassdawe @autiomaa not a problem! :) glad i could help out :D

@lashman trying it out right now and I must say, I'm impressed! Thank you for creating this, especially for free.

Question: I tried to import a detailed Clockify CSV. It throws "Error: RangeError: Invalid time value". Do you have documentation somewhere, so I can fix the file myself? Can I help you in any way with logs or anything?

@dergell no problem! :) and i'll see what i can do about the import, thanks for letting me know about this, i'm on it! :)

@dergell ok, i thiiiink i found the bug (hopefully, fingers crossed!), so try this one and let me know, please: https://git.lashman.live/lashman/zeroclock/releases/tag/v1.0.1

and sorry about that

zeroclock

zeroclock

Gitea: Git with a cup of tea
@lashman well, that was quick! It worked, good job. Thank you very much and please don't apologize, you are doing this on a Saturday after all :D
@dergell it did? WOOHOO!!! :) thank you so much :D and it's no problem, really :) i'm just glad it actually works, haha
@lashman I've tested some more and found an issue with the date structure. I've checked the database and found, for example, an entry with a start date of February 12th has been imported as '2026-12-02T14:00:00'. Seems the month and day is flipped.
@dergell hmmm, i think i know why that is, lemme dig into the code again :) thanks

@dergell oooook, that one's DEFINITELY on me, oops :P apologies again

https://git.lashman.live/lashman/zeroclock/releases/tag/v1.0.2

zeroclock

zeroclock

Gitea: Git with a cup of tea
@lashman That seems to have solved it. Will test some more and let you know if I find anything else. Thanks!
@dergell awesome, thank you so much for all the help, seriously! :)
@lashman does it support network drives?
@LanceJZ can't see why it wouldn't :)
@lashman well... that is not really an answer.
@LanceJZ @lashman I haven't used the app, but it'd be down to whether SQLite supports your network drive. That said, if you need to work over a network, running the app on a server is almost always a better idea.
@lashman Are you kidding me?! This looks really great. Thanks for putting this together!
@Bruticus thank you so much! :) and no problem, i really hope it helps :D
@lashman I was excited and then realized it’s a Windows application. I had hoped it was browser based so I could give it a try. (I don’t have any Windows machines at home that are used for actual work.)
@rasterweb ah dang, i'm so sorry :( i might do a linux version soon(ish), but it's nothing concrete for now, apologies
@lashman It does look really nice! I just don’t do Windows. 😉
@rasterweb i totally understand - i wouldn't if i wasn't trapped here either :( but thank you :)

@lashman very cool!

“Windows”

_close tab _

@xconde sorry 
@lashman I’m just jealous! 💚
@xconde awww, sorry :( i would love to compile it for linux as well, but unfortunately i'm stuck on windows for now (and i HATE it, trust me), but as soon as i can - i will definitely try to do linux versions of evereything as well
@lashman site seems down from here?
@gsuberland @lashman for me, too!
@claudius @gsuberland yes, unfortunately my ssd died yesterday, apologies :(
@lashman @claudius oof, no fun. no worries though, hope it gets fixed soon!
@gsuberland @claudius i hope so too! thank you :)
@lashman @gsuberland damn. I hope you get everything recovered. I also hope you get a new SSD that is reasonably priced :-/
@claudius @gsuberland oh, definitely not happening, lol :P i wish, though!
@lashman I am getting a connection error both on Android as well on my laptop. What's going on?