SDE @perplexity_ai, TC39 - ECMA402, ex-@CloudKitchens, @Dropbox, @yahoofinance, @iHeartRadio, @Selerity react-intl/formatjs maintainer

New York, NY
Joined June 2009
New react-intl@12 catches mistakes like this 🎉 "{count, number} items" ✅ {count: 2} ❌ {count: "two"} You don’t have to write the types—ESLint generates them from your messages and keeps them in sync with autofix.
42
React Compiler should really just be a oxc linter tbh longho.dev/posts/react-compi…
26
wrote about why “metaframework is dead” feels true rn. not bc frameworks are useless, but bc @OpenAIDevs Codex + @claudeai Claude Code make explicit scaffolding cheap. i’d rather codegen real routes/contracts than hide more runtime magic. longho.dev/posts/the-metafra…
34
A package is a distribution boundary. Use package names for code that leaves the monorepo. Use root imports for internal source. Enforce architecture with visibility/lint rules, not fake package.json files everywhere. longho.dev/posts/a-package-i…
18
Last part is up: a frontend build system is product infrastructure. @bazelbuild gives you precision, but teams still need rule APIs, codegen, docs, good errors, metrics, and gradual adoption so the graph stays usable. longho.dev/posts/part-8-oper…
25
Part 7 is up: @bazelbuild, @turborepo , and @NxDevTools are not one ladder. Turbo runs package tasks. Nx models projects. Bazel models actions and artifacts. The right choice depends on where your repo’s complexity already lives. longho.dev/posts/part-7-baze…
1
60
Part 6 is up: a successful bundle is not the same as a correct artifact. Use @bazelbuild to verify built outputs, then make deploys consume those verified artifacts instead of rediscovering files from the working tree. longho.dev/posts/part-6-veri…
1
40
Part 5 is up: @bazelbuild should not replace Vite. Bazel decides what the app needs; Vite turns it into a bundle. Apps, SDKs, tests, Storybook, assets, and output checks all become explicit graph edges. longho.dev/posts/part-5-apps…
25
Part 4 is up: some frontend inputs are graph questions. Translations, icons, routes, and generated TS packages get cleaner when @bazelbuild can model them as named artifacts instead of side effects. longho.dev/posts/part-4-tran…
1
33
Part 3 is up: typechecking is not one giant tsc --noEmit. Split runtime, test, config, generated, and lint contracts so @bazelbuild can catch dependency leaks where they happen. longho.dev/posts/part-3-type…
1
47
Part 2 is up: frontend packages are rarely just TypeScript folders. This one breaks down runtime code, tests, stories, config, assets, visibility, and codegen as separate build surfaces so @bazelbuild can rebuild less and explain more. longho.dev/posts/part-2-the-…
1
34
Part 1 of my series on @bazelbuild for large frontend monorepos. At scale, the hard question is not “how do we build the app?” It is “what did this change affect?” longho.dev/posts/part-1-why-…
1
1
37
Just wrote a piece a long hiatus medium.com/p/product-platfor…
2
46
Introducing Perplexity Computer. Computer unifies every current AI capability into one system. It can research, design, code, deploy, and manage any project end-to-end.
1,679
5,039
3,332
45,930
38,287,236
We just add a new capability to formatjs to make sure your translations are up-to-date and structurally sound! Check it out! formatjs.github.io/docs/tool…
1
1
152
Shout out to the YFinance crew as part of history!
huge thank to @LearnEQ for transferring vue-intl package to us!
3