<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: jvanveen</title><link>https://news.ycombinator.com/user?id=jvanveen</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 07:24:36 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jvanveen" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: Mithril fork with Signals, state, store and SSR]]></title><description><![CDATA[
<p>Tldr; we use mithril in a large frontend application, happy with it, but missing some features. So we generated an experimental version with support for Signals, proxy state, a store and SSR. Ported tooling to Bun + Typescript. Mostly with Cursor + Composer 1/1.5. Compatible with regular Mithril. Performance with Signals seems pretty good. More AI slop or useful tooling? Time will tell...<p>* Repo: <a href="https://github.com/bitstillery/mithril" rel="nofollow">https://github.com/bitstillery/mithril</a><p>* Docs: <a href="https://mithril.garage44.org" rel="nofollow">https://mithril.garage44.org</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47078520">https://news.ycombinator.com/item?id=47078520</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 19 Feb 2026 20:09:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47078520</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=47078520</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47078520</guid></item><item><title><![CDATA[New comment by jvanveen in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p>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: <a href="https://github.com/garage44/garage44/" rel="nofollow">https://github.com/garage44/garage44/</a></p>
]]></description><pubDate>Wed, 11 Feb 2026 12:47:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46974290</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=46974290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46974290</guid></item><item><title><![CDATA[Garage44 – Modern web applications built with Bun, Preact, and DeepSignal]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/garage44/garage44">https://github.com/garage44/garage44</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45990751">https://news.ycombinator.com/item?id=45990751</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 20 Nov 2025 09:26:04 +0000</pubDate><link>https://github.com/garage44/garage44</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45990751</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45990751</guid></item><item><title><![CDATA[New comment by jvanveen in "Show HN: Expressio – internationalization tooling for translators and AI"]]></title><description><![CDATA[
<p>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.<p>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.<p>Features:<p>- AI translation via DeepL/Claude<p>- Type-safe translations (no magic strings)<p>- CLI + web UI<p>- Real-time WebSocket sync<p>- Lint to find missing translations in code<p>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.</p>
]]></description><pubDate>Fri, 07 Nov 2025 08:34:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45844587</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45844587</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45844587</guid></item><item><title><![CDATA[Show HN: Expressio – internationalization tooling for translators and AI]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/garage44/garage44/tree/main/packages/expressio">https://github.com/garage44/garage44/tree/main/packages/expressio</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45844586">https://news.ycombinator.com/item?id=45844586</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 07 Nov 2025 08:33:55 +0000</pubDate><link>https://github.com/garage44/garage44/tree/main/packages/expressio</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45844586</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45844586</guid></item><item><title><![CDATA[New comment by jvanveen in "Show HN: Real-time app starter with FastAPI, PostgreSQL pub/sub, and UV"]]></title><description><![CDATA[
<p>Live demo: <a href="https://garage44.org/" rel="nofollow">https://garage44.org/</a></p>
]]></description><pubDate>Fri, 03 Oct 2025 16:14:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45464592</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45464592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45464592</guid></item><item><title><![CDATA[Show HN: Real-time app starter with FastAPI, PostgreSQL pub/sub, and UV]]></title><description><![CDATA[
<p>Starter template for real-time web apps using modern Python/JS tooling and PostgreSQL's LISTEN/NOTIFY instead of external message queues.<p>Stack:
- UV (Python package manager - incredibly fast)
- FastAPI with full async/await
- PostgreSQL triggers + LISTEN/NOTIFY for pub/sub
- Bun for frontend builds
- Proper connection pooling and lifecycle management<p>GitHub: <a href="https://github.com/garage44/plank" rel="nofollow">https://github.com/garage44/plank</a><p>This came from rebuilding the same pattern across projects. Most examples I found were toy demos that didn't handle reconnection, dead clients, or proper shutdown.<p>Includes working frontend example that updates in real-time when database changes. Docker Compose setup for testing.<p>Good for: admin dashboards, monitoring tools, collaborative apps where you just need current state pushed immediately. Not for: guaranteed message delivery or job queues.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45463893">https://news.ycombinator.com/item?id=45463893</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 03 Oct 2025 15:12:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45463893</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45463893</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45463893</guid></item><item><title><![CDATA[New comment by jvanveen in "Ask HN: What is nowadays (opensource) way of converting HTML to PDF?"]]></title><description><![CDATA[
<p>Puppeteer (Pdfium => <a href="https://github.com/chromium/pdfium" rel="nofollow">https://github.com/chromium/pdfium</a>)</p>
]]></description><pubDate>Thu, 02 Oct 2025 07:28:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45447135</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=45447135</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45447135</guid></item><item><title><![CDATA[Show HN: Expressio – Internationalization for humans, through AI]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/garage44/expressio">https://github.com/garage44/expressio</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44506954">https://news.ycombinator.com/item?id=44506954</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 09 Jul 2025 06:40:56 +0000</pubDate><link>https://github.com/garage44/expressio</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=44506954</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44506954</guid></item><item><title><![CDATA[Show HN: Expressio – AI-Automated Internationalization]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/garage44/expressio">https://github.com/garage44/expressio</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44162589">https://news.ycombinator.com/item?id=44162589</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 02 Jun 2025 20:17:27 +0000</pubDate><link>https://github.com/garage44/expressio</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=44162589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44162589</guid></item><item><title><![CDATA[New comment by jvanveen in "How a $2k 'Made in the USA' Phone Is Manufactured"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 10 Apr 2025 21:09:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=43648036</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=43648036</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43648036</guid></item><item><title><![CDATA[Show HN: Mithril Improved with AI]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/bitstillery/mithril">https://github.com/bitstillery/mithril</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43458439">https://news.ycombinator.com/item?id=43458439</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 24 Mar 2025 07:39:06 +0000</pubDate><link>https://github.com/bitstillery/mithril</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=43458439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43458439</guid></item><item><title><![CDATA[Show HN: Expressio – Automated Internationalization]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/garage44/expressio">https://github.com/garage44/expressio</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43454530">https://news.ycombinator.com/item?id=43454530</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sun, 23 Mar 2025 17:54:22 +0000</pubDate><link>https://github.com/garage44/expressio</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=43454530</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43454530</guid></item><item><title><![CDATA[Show HN: Expressio – open-source Translation Automation]]></title><description><![CDATA[
<p>Article URL: <a href="https://expressio.tech/">https://expressio.tech/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43094069">https://news.ycombinator.com/item?id=43094069</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 18 Feb 2025 19:39:39 +0000</pubDate><link>https://expressio.tech/</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=43094069</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43094069</guid></item><item><title><![CDATA[New comment by jvanveen in "Ask HN: SWEs how do you future-proof your career in light of LLMs?"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Fri, 20 Dec 2024 21:03:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42474999</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=42474999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42474999</guid></item><item><title><![CDATA[New comment by jvanveen in "Why does nobody use Time Tracking?"]]></title><description><![CDATA[
<p>I hate to manually keep track of development time. Wakatime and Wakapi (<a href="https://github.com/muety/wakapi">https://github.com/muety/wakapi</a>) are super useful to generate monthly stats from its api. Made an open-source tool to generate monthly hour reports with: <a href="https://codeberg.org/garage44/garage44/src/branch/main/packages/wakamonth" rel="nofollow">https://codeberg.org/garage44/garage44/src/branch/main/packa...</a></p>
]]></description><pubDate>Fri, 22 Nov 2024 18:40:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=42216284</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=42216284</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42216284</guid></item><item><title><![CDATA[Show HN: Codebrew – An open-source AI-powered development workflow (early stage)]]></title><description><![CDATA[
<p>Hi HN! I'm working on a suite of open-source developer tools, and I'd love to get early feedback on the approach and architecture.<p>What I'm building:
Codebrew is an AI-powered development workflow tool that aims to automate ticket management, code reviews, and time tracking. It's part of a planned ecosystem alongside two other tools I've been developing: Pyrite (real-time collaboration) and Expressio (i18n automation).<p>Current status:<p>• Expressio: Working alpha (<a href="https://codeberg.org/garage44/workspace/src/branch/main/packages/expressio" rel="nofollow">https://codeberg.org/garage44/workspace/src/branch/main/pack...</a>)
  - Automatic i18n with DeepL
  - Built with Bun
  - Already being used in small projects<p>• Pyrite: Being refactored
  - Moving from Vue to Preact
  - Real-time collaboration platform
  - Built on Galène SFU<p>• Codebrew: Early development
  - Integrating Claude for ticket refinement
  - Building Wakapi integration for time tracking
  - Planning GitHub/GitLab/Forgejo integrations<p>Tech stack:<p>• Backend: Bun/Node.js<p>• Frontend: Preact<p>• AI: Claude/Anthropic<p>• All open-source under MIT license<p>Why I'm building this:
As a solo developer, I found myself spending too much time on routine tasks. While there are many great tools out there, they often feel disconnected or too complex for smaller teams. I'm aiming for something that's both powerful and lightweight.<p>The vision:<p>1. Keep each tool useful on its own<p>2. Build toward optional integration (project name: Nexus)<p>3. Focus on developer experience and automation<p>4. Stay open-source while building sustainable features<p>Looking for:<p>• Feedback on the architecture and approach<p>• Potential early adopters/testers<p>• Contributors interested in any of the components<p>• Thoughts on what features would be most valuable<p>Links:<p>• Workspace: <a href="https://codeberg.org/garage44/garage44" rel="nofollow">https://codeberg.org/garage44/garage44</a><p>• Expressio docs: <a href="https://codeberg.org/garage44/garage44/src/branch/main/packages/expressio" rel="nofollow">https://codeberg.org/garage44/garage44/src/branch/main/packa...</a><p>• Development blog: <a href="https://garage44.org" rel="nofollow">https://garage44.org</a><p>I know it's early days, but I believe in building in public and would love to hear your thoughts, especially from developers who've faced similar challenges in their workflows.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42214898">https://news.ycombinator.com/item?id=42214898</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 22 Nov 2024 16:01:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42214898</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=42214898</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42214898</guid></item><item><title><![CDATA[Show HN: Codecrew LLM Issue Refinement]]></title><description><![CDATA[
<p>Article URL: <a href="https://codeberg.org/garage44/codecrew">https://codeberg.org/garage44/codecrew</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42021775">https://news.ycombinator.com/item?id=42021775</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 01 Nov 2024 21:34:28 +0000</pubDate><link>https://codeberg.org/garage44/codecrew</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=42021775</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42021775</guid></item><item><title><![CDATA[New comment by jvanveen in "Google CEO says more than a quarter of the company's new code is created by AI"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 31 Oct 2024 05:25:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=42003750</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=42003750</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42003750</guid></item><item><title><![CDATA[New comment by jvanveen in "Launch HN: Quetzal (YC S24) – Stripe for Internationalization"]]></title><description><![CDATA[
<p>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: <a href="https://garage44.org/posts/expressio/expressio-machine-translation.html" rel="nofollow">https://garage44.org/posts/expressio/expressio-machine-trans...</a></p>
]]></description><pubDate>Fri, 04 Oct 2024 16:20:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=41742926</link><dc:creator>jvanveen</dc:creator><comments>https://news.ycombinator.com/item?id=41742926</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41742926</guid></item></channel></rss>