Peter Mwangi
Developer Experience Engineer specializing in high-performance Rust tooling and polished TypeScript SDKs that multiply developer productivity.
ABOUT
Developer Experience Engineer specializing in Rust and TypeScript tooling. I design and build CLI tools, SDKs, and infrastructure that remove friction from developer workflows — reducing setup time, simplifying integrations, and enabling teams to ship faster.
My work bridges low-level systems performance with polished, product-minded interfaces that developers actually enjoy using. Based in Nairobi, I thrive in remote, async-first engineering teams building for global developer audiences.
SKILLS
OPEN SOURCE DEVELOPER TOOLS
trance-richtext-editor
React · LexicalA plug-and-play rich text editor for React, powered by Lexical. Drop in a single TranceEditor component, get production-quality editing with HTML output, dark mode, feature flags, and a matching TranceRenderer — no CMS dependency required.
create-neon-api
Rust CLI · 1k+ downloadsCLI that eliminates hours of boilerplate configuration, scaffolding a secure, database-backed Rust API with Neon PostgreSQL, JWT auth, and sqlx migrations in under 30 seconds.
create-rust-on-vercel
npm · 451+ weekly downloadsOne-command CLI that scaffolds a complete project with a Next.js frontend, serverless Rust API functions, JWT authentication, and database integration — configured for zero-friction Vercel deployment.
neon-context-server
Rust · Zed ExtensionA community-maintained Zed editor context server for Neon serverless Postgres. Query databases, explore schemas, and list projects and branches — all from within your editor.
rust-neon-template
Rust · Axum · NeonProduction-ready Rust API starter built with Axum and Neon's built-in Auth and Data APIs. Features a generic CRUD client, JWT session management via Axum extractors, and comprehensive integration tests.
axum-vercel-template
Rust · Axum · SeaORMA Rust Notes API built with Axum and SeaORM, deployed on Vercel via the vercel_runtime crate. Features automatic schema sync — define your entities in Rust and tables stay in sync, no migration files required.
EXPERIENCE
- ✦Built and maintained internal CLI tools and shared libraries in TypeScript and Rust that automated repetitive workflows, reducing onboarding time for new developers.
- ✦Profiled and optimized microservices and database queries (PostgreSQL, MongoDB), improving service response times that directly impacted the developer feedback loop during local development.
- ✦Championed clean, typed API contracts using tRPC and TypeScript, creating self-documenting interfaces that eliminated ambiguity between frontend and backend teams.
- ✦Advocated for and prototyped Rust in performance-critical paths, creating example repos and internal documentation that lowered the barrier for other engineers to adopt systems programming.
- ✦Designed and built internal dashboards and workflow automation tools with Next.js and TypeScript that replaced manual operational processes, directly increasing team productivity.
- ✦Collaborated with Web3 backend engineers to design clean, typed integration layers between blockchain systems and the frontend, reducing integration friction.
- ✦Created reusable, accessible UI components with Tailwind CSS adopted across multiple internal projects, reducing redundant frontend work.
- ✦Worked directly with backend teams to co-design efficient, well-typed tRPC API contracts, ensuring predictable, error-resistant data flow — reducing integration bugs across sprints.
- ✦Built and maintained a shared component library with React, Next.js, and ShadcnUI that accelerated development velocity for the broader team.
- ✦Documented component usage patterns and API integration guides for internal use, reducing ramp-up time for new frontend hires.
- ✦Built an AI-powered chatbot that automated responses to frequently asked questions, reducing front-office inquiry volume by over 50% — a self-service tool that removed manual friction for both staff and students.
- ✦Configured Ubuntu Apache servers and network infrastructure, including documenting setup procedures that allowed non-technical staff to manage basic maintenance tasks independently.
- ✦Contributed to an accessible website redesign, advocating for standards that made the university's digital tools usable by a wider audience.
COMMUNITY
A lot of my favorite work happens in other people's threads — debugging Discord questions, digging into open-source install failures, and reporting security issues upstream. The goal is always the same: leave behind an answer that saves the next person hours.
Ubuntu install fix for watchman
facebook/watchman · 31 reactionsWhen recent Watchman releases stopped shipping a .deb, I pieced together a working Ubuntu install from the prebuilt linux.zip — copy the binaries into /usr/local, then fix the libcrypto.so.1.1 error with the archived libssl1.1 package. When my first answer stopped working for others, I came back with this one.
Supply-chain disclosure for Wasmer's Next.js starter
wasmerio/wasmer · SecurityDiscovered and reported an active supply-chain compromise in Wasmer's Next.js starter: a preinstall.js dropper obfuscated with Unicode variation selectors that fetched encrypted logic from a Solana address, with clear intent to exfiltrate .env and .ssh data.
Answering questions on Answer Overflow
Theo's Typesafe Cult · 25K+ membersAnswer Overflow makes Discord answers searchable on the open web. I help out in Theo's Typesafe Cult, mostly around tRPC, Next.js, and TanStack Query:
Traced a flashing Loading... state to empty query data during refetch. My reply — keep the previous page of results in local state — was marked as the solution.
Helped wire a custom credentials sign-in page to return users to where they came from — capturing the current URL and passing it as callbackUrl, then switching to search params for the App Router. The OP got it working and confirmed.
Narrowed down how file data reaches an UploadThing server action from a shadcn form — checking whether the React Hook Form schema typed the field as a file and whether controlled components were feeding FormData.
Answered a cryptic mutation error by pointing out where the await belongs on a tRPC mutation call and what the client/server boundary allows.
TypeRacer, off the clock
data.typeracer.comA small habit that keeps the hands fast for terminal-heavy days.