I'm working on a set of open-source applications to help collaborate on building software. Basic principles are better online communication between people(Pyrite - Galene SFU, channel-based chat), automating i18n and project management where feasible. Mostly experimental: https://github.com/garage44/garage44/
Expressio simplifies i18n workflows with tooling that works for both human translators and AI. Type-safe translations, AI translation support (DeepL, Claude), and code sync.
Instead of magic strings like `$t('menu.settings')`, you use typed references: `$t(i18n.menu.settings)`. TypeScript knows about all translations, IDE autocomplete works, and refactoring is safe. The type-safe approach also makes it easy for AI tools to understand and work with translations.
Features:
- AI translation via DeepL/Claude
- Type-safe translations (no magic strings)
- CLI + web UI
- Real-time WebSocket sync
- Lint to find missing translations in code
Works with i18next format. Uses a workspace file (`.expressio.json`) to track source text and translations.
Built partly with AI assistance to speed up development.
I can't believe people still buy the Purism scam after all these years...I ordered a Librem 5 and a Pinephone back in the days of the other supply chain story(Covid). The Pinephone flew in from China in less than 2 months; the Librem 5 took more than 4 years to arrive. All Purism offered during that time were "opportunities" to invest and exhausting delay stories about failing supply chains, while keeping their customers completely in the dark about their order state. Instead of preying on the goodwill of FOSS enthousiasts, they now try to tap into a new market (nationalism) to sell the same useless overpriced brick to.
Recently used Cursor/Claude sonnet to port ~30k lines of EOL Livescript/Hyperscript to Typescript/JSX in less than 2 weeks. That would have took at least several months otherwise. Definitively a force multiplier, for this kind of repetitional work.
Not hours; but days instead of months: porting around 30k lines of legacy livescript project to typescript. Most of the work is in tweaking a prompt for Claude (using Aider) so the porting process is done correctly.
Interesting approach! I like the idea of using an ast to find translation strings and to generate source strings by an llm from the context. My experience is the same. Having to deal with 6 languages and a fast changing application is impossible for small teams, so I ended up with asimilar approach where developers only edit the source text, and target translations are automatically kept in sync using Deepl. This solves the whole i18n dilemma of outdated/missing translations, by just focussing on the source texts. It would be great to be able to even generate the source texts from the $t tag. I'm slowly turning this into an open source developer tool: https://garage44.org/posts/expressio/expressio-machine-trans...
"you have 3 items in your cart" would in that case create a translation for each time the amount changes, instead of having "you have {{count}} items in your cart. A backend proxy sounds like an interesting idea, but working with an i18n formatted string from the start seems like a more sustainable approach.
Cool, nice product. Interesting to see that you've managed to get translations working on top of chatGPT, even for languages like Arabic! I decided not to support target language edits, because I felt it would make it much more difficult to keep languages in sync, when the source string is not always leading. How do you deal with this properly? Would love to have an automatic workflow that updates the json source file, as i18n tags are being added/removed from frontend files. For versioning; maybe just take advantage of the project's (git) versioning?
Interesting! How about using Deepl as a translation backend? I got some good results for translation strings with {{placeholders}} that needed to be ignored in the translations. Its api also has some neat features like formality, glossaries and context(experimental).
Just updated my Librem 5, to see where it's at after catching dust in a drawer for a year. No bluetooth audio, sluggish browsing, no maps, no suspend, nice terminal, sweaty hands from the heat exhaust. So... still no battery life, and charging takes a couple of hours. I didn't even bother to try calls. Been there, done that with the PP & PPP. Great idea, nice proof of concept, but this is not a usable phone at all. Back to Fairphone + CalyxOS for me...
Wakapi is great! I'm using it for a couple of months now on a simple VPS. I like that it is written in Golang (quite fast) and feels polished. There is a recent instruction video about Wakatime & Wakapi which is a nice way to get a quick overview: https://www.youtube.com/watch?v=iEb71_kaluc
Because I couldn't find any similar solution, I've come up with a small script (Wakamonth) on top of Wakapi/Wakatime, that allows me to get an overview of worked hours at the end of the month, without me having to write down this manually. Any thoughts about it or similar solutions?
I tried to log hours with Wakapi and Wakatime plugins for Vscode and Firefox. Heartbeats are still collected when offline, but i'm not sure how precise the time tracking itself is. The collected data can be summarized on a project/branch level, which makes it suitable for hour reports. A first attempt: https://github.com/bitstillery/wakamonth