I've heard good things about invoiceninja[1], but for my small business, I use a small a markdown git repository and a php script to generate pdfs out of the following file format:
data/timetracking///timetracking.md
# Customer
```
John Doe
Mainstreet 5
10001 New York
My project to work on
```
# Time tracking
2023-02-27
- 17.52-18:41 A project task
- 18.42-19.49 Yet another project task
2023-02-28
- 11.52-12:11 Something else
- 16.43-19.01 And even more
- 00.05-00.00 Refund
With this structure I can build PDFs by parsing markdown all calculated and branded with my logo. But you can also see a good overview in the most markdown Wysiwygs or Gitwebs. On the last page of my invoice I automatically add a tasks summary listing for every task I worked on. It's simple, can be edited with vim or within the development environment, can be `grep`-ed and still pretty flexible (as you see you can even do refunds).
For my little business this is enough...
[1]: https://www.invoiceninja.org/