TypeScript at Craftzing, Belgium. Expo apps and the APIs behind them.
Mostly I care that the types are honest at the boundary. On the API side that means generating them from a TypeSpec contract instead of maintaining them by hand. On the Expo side it means checking the TypeScript surface against what the Swift and Kotlin actually do β when they disagree, the types are the bug.
Working with
TypeScript Β· Expo Β· React-Native Β· TypeSpec / OpenAPI Β· Zod Β· Effect Β· ts-pattern Β· NestJS
Recent upstream work
- expo/expo β
anchorsupport for Apple Maps annotations, and two fixes to iOS camera barcode scanning where the ZXing fallback path disagreed with AVFoundation on type strings - microsoft/typespec β a dropped
discriminator.mappingentry when the first union variant caused a circular emit - react-native-passkey β Android Credentials 1.6.0 / Android 15 support, and realigning the TypeScript types with what the native implementations actually do
- facebook/react-native β custom fonts rendering the
heaviest face on iOS Fabric when combined with an explicit
fontWeight
How I like to build
- Contract-first. The API is authored in TypeSpec, compiled to OpenAPI, and the types, Zod schemas, controller interfaces and SDK are generated from it β implementation and docs can't drift apart.
- Typed domains. DDD and hexagonal ports & adapters, making illegal states unrepresentable rather than validating after the fact.
- Architecture you can read. C4 levels as Mermaid in the repo, updated in the same PR as the code.
- Declarative machines. Fedora + mise + chezmoi: a laptop is one command from ready.



