Sign in

Jan

@amann.work
230 followers 351 following 289 posts

Author of next-intl.dev, building eloqnt.dev

PostsRepliesMedia
Jan @amann.work · 09/09/2026
Would you like eloqnt/cli to catch hardcoded strings in your components? Does your agent get this wrong sometimes?
100
Jan @amann.work · 01/09/2026
Seems like eloqnt/cli is helpful to you! Anything it could do that it doesn't today?
111
Jan @amann.work · 27/08/2026
next-intl 4.14 is out with 𝚞𝚜𝚎𝙴𝚡𝚝𝚛𝚊𝚌𝚝𝚎𝚍 improvements! → Switch 𝚖𝚜𝚐𝚒𝚍 of .𝚙𝚘 codec to source string → Support 𝙿𝚛𝚘𝚖𝚒𝚜𝚎.𝚊𝚕𝚕 with 𝚐𝚎𝚝𝙴𝚡𝚝𝚛𝚊𝚌𝚝𝚎𝚍 → Update 𝚜𝚠𝚌_𝚌𝚘𝚛𝚎 to 77
120
Jan @amann.work · 17/08/2026
With 𝚗𝚎𝚡𝚝/𝚛𝚘𝚘𝚝-𝚙𝚊𝚛𝚊𝚖𝚜, you can cache more of your app. If you read a locale from 𝚌𝚘𝚘𝚔𝚒𝚎𝚜() or 𝚑𝚎𝚊𝚍𝚎𝚛𝚜(), this is request data. A locale from [𝚕𝚘𝚌𝚊𝚕𝚎] is a cache key. Your routing strategy becomes a caching decision.
120
Jan @amann.work · 12/08/2026
Next.js 16.3 includes better ISR: Pages can now show an instant loading shell on first visit, and then upgrade to a fully prerendered page in the background (cached). This comes in handy for apps with a large number of locales!
183
Jan @amann.work · 06/08/2026
𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 now links to rule details, so agents can get more guidance when fixing issues.
000
Jan @amann.work · 04/08/2026
Next.js 16.3 is out with next/root-params 🥹🥹🥹 I've literally waited years for this! Use it today with next-intl 🔗↓
140
Jan @amann.work · 03/08/2026
With the number of lint rules for eloqnt/cli growing continuously, I've now added dedicated pages for each one. Is this helpful? Anything to add/change?
100
Jan @amann.work · 27/07/2026
eloqnt/studio now has built-in Crowdin synchronization
100
Jan @amann.work · 27/07/2026
before/after
010
Jan @amann.work · 27/07/2026
MDX components in eloqnt/studio now render twice: → React for humans → Markdown for agents
110
Jan @amann.work · 24/07/2026
Shipped a much-needed docs revamp for eloqnt/studio. → Zero-to-lint quickstart (with a prompt) → Copyable .𝚖𝚍 links → Support for 𝙰𝚌𝚌𝚎𝚙𝚝: 𝚝𝚎𝚡𝚝/𝚖𝚊𝚛𝚔𝚍𝚘𝚠𝚗 → Split into multiple pages → Public changelogs → It looks just a lot nicer :D
100
Jan @amann.work · 17/07/2026
When should you translate your app? After every change? Before a commit, after a commit? What about the moment you switch the PR from "draft" to "ready for review"? bsky.app/profile/aman...
110
Jan @amann.work · 16/07/2026
What makes eloqnt/cli somewhat special, is that it understands not only your i18n strings, but also your source code. Helpful for quality checks, but also for updates. bsky.app/profile/aman...
000
Jan @amann.work · 15/07/2026
Have you tried linting your i18n strings yet? > npm install @eloqnt/cli --save-dev
010
Jan @amann.work · 14/07/2026
Start linting your strings today. 𝚗𝚙𝚖 𝚒 @𝚎𝚕𝚘𝚚𝚗𝚝/𝚌𝚕𝚒 --𝚜𝚊𝚟𝚎-𝚍𝚎𝚟 Add .𝚎𝚕𝚘𝚚𝚗𝚝/𝚌𝚘𝚗𝚏𝚒𝚐.𝚝𝚜 and run: 𝚗𝚙𝚡 𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 Docs → studio.eloqnt.dev/docs
100
Jan @amann.work · 14/07/2026
Localization outgrowing your repo? eloqnt/studio is modular—keep it for linting and source review, and swap out the translation layer for your favorite translation management system. Crowdin support is built in, so upgrading is a config file away—unlocking reviews, 3rd party integrations, and more.
100
Jan @amann.work · 14/07/2026
The backbone of eloqnt/studio is its AI engine. You can either use a hosted version, or bring your own model—anything supported by the AI SDK. This also includes 3rd-party plugins for using your Claude Code or Codex sub (subject to their latest terms).
100
Jan @amann.work · 14/07/2026
And it all lives in your repo. Config, styleguides, messages—versioned and branched with your code. Nothing to sync, nothing drifting apart on a feature branch.
100
Jan @amann.work · 14/07/2026
What makes your product or service unique? Terms to keep, tone to hold, a glossary—all placed in simple markdown styleguides. Easy to set up and maintain, and the format your agent already speaks. It's AGENTS.md, but for translations.
100
Jan @amann.work · 14/07/2026
After maintaining next-intl for years, I've seen every way translations break. eloqnt/studio matches strings to their references in source code. This not only enables additional quality guardrails—it pulls in all the relevant context your agent has always silently guessed at.
100
Jan @amann.work · 14/07/2026
So eloqnt/studio is different. It's not a model, but a pipeline. Every string moves through well-defined steps: ① Static analysis ② Source text review ③ Context enrichment ④ Translate
100
Jan @amann.work · 14/07/2026
Today, I'm launching eloqnt/studio. An AI-based toolchain that helps you ship high-quality translations. All from the command line. 𝚎𝚕𝚘𝚚𝚗𝚝 𝚕𝚒𝚗𝚝 𝚎𝚕𝚘𝚚𝚗𝚝 𝚛𝚎𝚟𝚒𝚎𝚠 𝚎𝚕𝚘𝚚𝚗𝚝 𝚝𝚛𝚊𝚗𝚜𝚕𝚊𝚝𝚎 With our hosted model, or bring your own. 🔗↓
110
Jan @amann.work · 09/07/2026
What if your linter caught translation bugs the way it catches code bugs? Missing translations. Unused keys. Broken ICU args. The list goes on.
050
Jan @amann.work · 02/07/2026
AI will translate your app in seconds. It'll also confidently mistranslate, break a plural, flatten your tone—and you'll ship it, because you can't review what you can't read.
010
Jan @amann.work · 30/06/2026
How do you keep translations in sync when you're coding with agents?
220
Jan @amann.work · 19/05/2026
A new Payload CMS template is available for members of 🌐 learn.next-intl.dev — let me know if you find it helpful!
010
Jan @amann.work · 20/04/2026
I've been pretty quiet lately since I've been secretly working on a new project ❤️
My son was born
270
Jan @amann.work · 05/02/2026
Black-magic Next.js hack of the week 🧙‍♂️ → When self-hosting, you can pass request headers from a custom server to the rendering process without opting into dynamic rendering.
271
Jan @amann.work · 28/01/2026
🌐 next-intl 4.8 is out with ahead-of-time compilation! Flip the 𝚙𝚛𝚎𝚌𝚘𝚖𝚙𝚒𝚕𝚎 flag and drop ~9KB of compressed JS from your bundles.
281
Jan @amann.work · 26/01/2026
The slimmest next-intl ever is coming to a 𝚗𝚘𝚍𝚎_𝚖𝚘𝚍𝚞𝚕𝚎𝚜 folder near you this week.
120
Jan @amann.work · 14/01/2026
Starter templates are here on 🌐 learn.next-intl.dev!
4 templates:
- app-router-auth
- app-router-saas
- app-router-tenants
- app-router-monorepo
110
Jan @amann.work · 07/01/2026
code.visualstudio.com/docs/getstar...
010
Jan @amann.work · 07/01/2026
If you're not using 𝚠𝚘𝚛𝚔𝚋𝚎𝚗𝚌𝚑.𝚎𝚍𝚒𝚝𝚘𝚛.𝚌𝚞𝚜𝚝𝚘𝚖𝙻𝚊𝚋𝚎𝚕𝚜.𝚙𝚊𝚝𝚝𝚎𝚛𝚗𝚜 in your IDE yet, you should turn it on today.
120
Jan @amann.work · 19/12/2025
I'm thinking about adding a set of premium templates for members of 🌐 learn.next-intl.dev E.g.: - Auth integrations - E-commerce integrations - CMS integrations - Advanced cases like multi tenancy Anything you found challenging that you think would be useful to include?
About to create the repo on GitHub …
000
Jan @amann.work · 17/12/2025
… and then, you can of course pass the errors to the client side.
000
Jan @amann.work · 17/12/2025
Contextual, localized error handling in Server Actions with Zod 4 — the easy way.
Code snippet that demonstrates how to use an error map in Zod 4 for computing errors.
120
Jan @amann.work · 16/12/2025
Many thanks to everyone who is actively helping with feedback to get this to stability as quick as we can. I'm adding a test for every edge case that we discover to make sure this remains fixed once the root cause has been addressed.
010
Jan @amann.work · 12/12/2025
🌐 next-intl@4.6 is out! You can now define custom codecs for useExtracted if you have more specific needs than what ships out of the box. This release also includes further fixes for message extraction, so definitely upgrade if you're already adopting this!
130
Jan @amann.work · 05/12/2025
💡 Factory functions are the cheat code for ergonomic TypeScript APIs
1110
Jan @amann.work · 01/12/2025
🌐 next-intl 4.5.7 is out with a significant middleware performance improvement for apps that use a large number of locales!
Benchmark results
180
Jan @amann.work · 20/11/2025
Finally switched 🌐 learn.next-intl.dev from LS over to Polar and couldn't be happier. I thought about migrating to Stripe Managed Payments, but I didn't realize how low-level this is until I had a closer look. Polar feels like exactly the right kind of abstraction.
The first order processed with the new Polar setup.
010
Jan @amann.work · 07/11/2025
🌐 next-intl 4.5: useExtracted → For humans & AI → Next.js-first by design → Full Turbopack support → SWC-based parsing
Code sample that demonstrates useExtracted
6183
Jan @amann.work · 04/11/2025
While everyone is arguing about directives, I’ve just used “using” for the first time, and now I feel like a TypeScript god
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management
380
Jan @amann.work · 30/09/2025
I didn't exactly have "build rust tooling" on my bingo card for next-intl in 2025, but here we are
000
Jan @amann.work · 26/09/2025
Such an incredibly helpful setting, makes me wonder if this should be the default … nextjs.org/docs/app/api...
Enabled logging of fetch calls in Next.js
210
Jan @amann.work · 12/08/2025
🌐 learn.next-intl.dev is officially live! Learn how to build delightful, multilingual apps with Next.js—from the basics to advanced patterns, all through a real-world project. 🎥 10 chapters · 42 lessons · 5+ hours of 4K video 💻 All code, recaps & resources included
171
Jan @amann.work · 08/08/2025
A sneak peek at what to expect from 🌐 learn.next-intl.dev: → No oversimplified examples → Built around a real-world project → Holistically transitioned to fully internationalized Full course reveal coming next week!
Screenshot of the course project
010
Jan @amann.work · 06/08/2025
I thought this course would take 2-3 months. It took eight. But now, learn.next-intl.dev is almost ready: Learn how to build delightful, multilingual apps with Next.js — launching next week! 🚀
Screenshot of the course platform
030
Jan @amann.work · 23/04/2025
TIL about i18n-check! This CLI helps you validate against: 1. Missing translations in target locales 2. Inconsistent usage of ICU arguments 3. Unused translations with next-intl (exp.) Learn more → next-intl.dev/docs/workflo...
030