Hello world 🌏, I'm

NathanKeith Poernama

I'm a final-year Computer Science student at SUTD in Singapore, graduating May 2027. I've spent three internships building full-stack products at a computer-use AI startup and two major consulting firms.

I've been doing competitive programming in C++ since high school, and my focus is low-level work: anything involving optimization and algorithms!

Nathan Keith P.

Where I've shipped.

01
Singapore
May 2026 – Present
Software Engineer Intern

Building agent infra, search, and knowledge systems for Sai, Simular's computer‑use agent.

The Simular team
PythonTypeScriptFastAPIGCPAI Agents
Details

Sai is Simular's computer-use agent. I've been building its hands and senses: how it searches the web, reads a page, finds things in its own workspace, and asks before it guesses.

What I built

  • Web fetch β€” cut the page context the agent reads by 45Γ— on Wikipedia's Apollo 11 article, from 100,175 characters to 2,217. A fetch now returns a lazy page object instead of raw text: it opens on an outline capped at 4,000 characters, then the agent greps, reads, or asks the page a question, so context cost stopped scaling with page size.
  • Web search β€” built a search primitive on Exa's neural index so the agent skips the browser, then benchmarked it against browser-in-VM search on a 21-query golden set over 3 graded runs: 1.7Γ— faster (16s vs 27.9s), 36% fewer tokens, and higher LLM-graded relevance (8.71 vs 8.14 overall, 8.83 vs 7.79 on find tasks). The results led leadership to serve Exa search to the free tier without VMs, and Web lookup is now on by default for all free Sai users. The index lags the live web, so I recommended a browser fallback for recency-worded queries.
  • Link walking β€” for pages the search index never saw, the agent live-crawls a URL it constructs, hops through real resolved links, or crawls a page's neighbourhood in one call. Capped at 20 pages or 60 seconds, same-origin by default.
  • Knowledge service β€” wrote the founding tech design, then built idempotent ingestion across Slack, Gmail, Calendar, and GitHub, with Google Drive as a read-only source, and a semantic search REST API (BGE-M3) on FastAPI, Cloud Run, and Firestore.
  • Decision-model research β€” reproduced TypeSafe's game demos in Python test harnesses with a replay viewer, to learn how Jev, a fast decision model, actually behaves. Across 4 Snake experiments, hard constraints only held when they were enforced in code, not in the prompt, and a code fallback below 0.5 confidence raised wins from 3/5 to 5/5. Now working on Mario, which adds in-game physics.
  • ⌘K search β€” one search across 5 entity types, including messages, workflows, drafts, and files. ~70K records indexed in a week on Meilisearch, blended into one ranked list with reciprocal rank fusion.
  • Choice cards β€” a task can pause, ask the user, and resume, on desktop, iMessage/SMS, and Telegram. A lock stops two sessions answering the same prompt.
  • Pixel-art characters β€” designed a rules framework for AI-generated pixel-art characters: 9 art rules and pass/fail checks, such as every stage reading as a black silhouette, refined over 24 iterations by turning each failure into a new rule. 7 of my characters were adopted into Sai's Saibot family.
  • Integrations β€” co-built a QuickBooks Online connector with Linlin, merged on 8 Oct, with read-only access enforced in code because Intuit's one accounting scope grants read and write together. Also shipped a Fireflies integration to staging.
  • And the rest β€” 55 PRs across 5 repos as of 14 Oct 2026. Beyond the features above: shareable session links, composer drafts that survive a reload or restart, and 11 smaller fixes, from a modal that silently no-opped in production builds to a CI runner pinned after a toolchain update broke untouched builds.
02
UC Davis, California
Jan 2026 – Mar 2026
Software Engineer

Joined the 8-person team behind RoomU, a roommate-finding app for 40,000+ UC Davis students, and merged my first PR in week one.

The AggieWorks team in front of a snowy cabin
React NativeTypeScriptHonoDrizzle
Details

AggieWorks is UC Davis's student-run product club. I joined for one quarter while on exchange, on the 8-person team behind RoomU, a roommate-finding app for the university's 40,000+ students.

My quarter there

Merged my first PR in week one, then built the app's versioning system and a reusable filter bar. See the RoomU project for the details. The rest were experiences with the team: a 2 night retreat at Lake Tahoe, a bunch of socials, and a team photoshoot. Definitely a memorable way to spend my time during exchange!

03
Singapore
Sep 2025 – Dec 2025
AI Research & Innovation Intern

Tackled 4 projects across robotics, full-stack, and applied AI: a Misty II robot, a booking system, an AI video avatar, and a RAG chatbot.

The TCS Pace Port team
PyTorchLangChainReactNode.jsPostgreSQL
Details

Worked across four projects at TCS's Pace Port innovation lab, spanning robotics, full-stack, and applied AI: a personality framework for a Misty II robot, a booking system for the Pace Port's meeting room, a real-time AI video avatar, and a RAG chatbot.

Misty II robot

A custom personality framework in PyTorch, OpenCV, and YOLO. Cut response time from 7s to 3s by optimizing frame processing, and built face tracking plus idle behaviors (wave greetings, backtracking search, jokes, sleeping, grumbling) so the robot stays present between interactions. Demoed to Toyota and UBS.

Booking system

Led a 3-person team building a full-stack app for booking the Pace Port's meeting room, a single room used for customer visits. Sangeetha built the frontend, and Anusree the AI chatbot and some of the backend. I designed the API, the database schema, the frontend design, and the Docker setup, then ran weekly code reviews. Deployed by December 2025, built for the Pace Port's 50+ employees.

Staff request a slot, admins approve or block out dates, and the lab's chatbot checks availability through the same API. 32 REST endpoints on React, Node.js, and PostgreSQL on GCP. Transactional constraints stop two requests claiming the same slot.

AI video avatar

Tested five real-time avatar platforms for the Pace Port website's chatbot in a React and Node.js test app, and picked Tavus for the lowest latency. Built an OpenAI-to-Gemini format converter so it could run on Gemini. Demoed it to the head of Pace Port in week three, who approved it for future projects.

RAG chatbot

Built with LangChain, grounding LLM responses in indexed internal docs and real-time database checks.

04
Jakarta, Indonesia
Jun 2024 – Aug 2024
Frontend Engineer Intern

Learned React from scratch, then fixed shared UI in REGLA IFRS 9, NTT's compliance platform for banks.

The NTT DATA team
ReactNext.jsTypeScriptTailwind CSS
Details

My first engineering internship. Learned JavaScript, React, and Next.js from scratch, then contributed UI fixes to REGLA IFRS 9, NTT's compliance platform for banks.

What I built

  • Shared layout fixes β€” fixed sidebar menus that opened behind page content, and reworked the dashboard grid and cards for tablet and desktop widths.
  • Responsive toolbar β€” table actions now collapse to icon-only buttons on smaller screens.
  • Team workflow β€” worked in agile sprints with about ten developers, merging through GitLab with enforced lint and commit checks.
05
Jakarta, Indonesia
Jun 2023 – Feb 2025
Competitive Programming Coach (C++ & Python)

Spent 300+ hours at Kokocoder coaching high-schoolers for Indonesia's National Olympiad in Informatics.

The KokoCoder team
C++PythonData Structures & Algorithms
Details

Coached high-school students for Indonesia's National Olympiad in Informatics (NOI), a national contest with ~20,000 participants a year. The org's students took 19 of 30 medals at NOI 2023.

What I built

  • Daily virtual contests β€” started a daily virtual contest for students heading into the NOI national round, and about 50 took part. I compiled 20 five-hour, NOI-style contests from oj.uz, TLX, Codeforces, and CodeChef. Then I led a team of 3 to rewrite the statements and editorials in English with new character names and wording, so nobody could paste a sentence into a search engine and find the original. Each night we went through the problems on Zoom.
  • Knight Camp 3.0 β€” Kokocoder's 2023 camp, a week in Lembang where students trained from morning to night. I was a supporting coach for the red class: the 12 strongest of our students competing in the NOI finals.
  • Teaching β€” 300+ hours of lectures and problem-solving sessions in C++ and Python.

Where I've placed.

Competitive Programming Competitions
Nathan and a teammate on stage at ICPC Asia-Manila 2025, holding their First to Solve certificates
ICPC Asia Regional
Dec 2025 Β· Manila
ICPC Regionals
First to Solve Award
Got the first balloon before anyone else did, but the folding problem keeps me up at night sometimes.
Nathan holding the OSN informatics gold medal and certificate
NOI/OSN Informatics
Oct 2022 Β· Indonesia
OSN / NOI
Gold Medalist (4th/20,877)
The 2am Codeforces era ended here, yet it turned out to be good for more than medals.
2025 Meta Hacker Cup certificate: progressed to Round 2, ranked 1,087th
Meta Hacker Cup
2023, 2024, 2025
Meta Hacker Cup
Round 2 Γ—3 Β· best 1,087th
Stayed up until 5 AM for 3 consecutive years just to get a T‑shirt. Worth it.
The IOI national training camp group under the Pelatihan Nasional Tahap III banner
IOI Selection
June 2023 Β· Indonesia
IOI Selection
National Team Candidate (Top 14)
The top 4 form Indonesia's national team for the IOI that year.
TCS CodeVita Season 12 rank certificate: global rank 201
TCS CodeVita
2025 Β· Global
TCS CodeVita
Ranked 201/537,000+
Officially recognized by Guinness World Records as the largest online programming competition.
click a polaroid to flip it

What I've dropped.

a case file, from upload to diagnosis
SMRT Digital Twin
AI tool that analyzes maintenance logs and flags faulty parts on a live 3D SMRT train
TypeScriptThree.jsPythonFastAPIGCPReactDocker

Built by a team of 4 at the LTA NebulaX Hackathon. Drop a maintenance file onto the train and the fault shows up as a bubble on the exact component. I built the full-stack integration layer and the 3D twin itself.

  • 4 subsystem ML models surfaced on the train: physics-based, Rainflow fatigue, ensembles
  • The camera flies to the top-ranked car of an 8-car consist
  • Live on Firebase Hosting, with a REST API backend on Cloud Run
from AiMao's greeting, to a chat message that updates the care profile, through the care plan to the care brief
CareKaki
An AI care assistant that builds a parent's care plan, then acts on it
Next.jsFastAPIOpenAI APIDockerTypeScriptReactPython

Built by a team of 4 for the Dell InnovateDash Hackathon, then reworked for the Codex for Healthcare Hackathon. Tell AiMao, a panda care companion, what's going on with a parent, and it builds a care plan from scattered community-care services. Approve it, and agents alert family on Telegram, find nursing and check medications. I built the design system and most of the screens, the Guardian safety layer, and the Docker setup.

  • Top 5 at Dell InnovateDash; semifinalist at Codex for Healthcare (OpenAI Γ— A*STAR)
  • Guardian masks NRICs and phone numbers, flags medical advice, and holds risky actions for approval
  • Runs in English, δΈ­ζ–‡ and Bahasa Melayu, with a spoken guide (ElevenLabs)
how a round works: one random number, sliced into moves, then played
Tappin' Queen
Simon, the memory game, rebuilt on an FPGA from raw logic gates with a twist
FPGALucid HDLComputer ArchitectureDigital Logic

Runs on an Alchitry Au FPGA. Everything from the adder up is hand-written in Lucid HDL. Built for SUTD's Computation Structures course.

  • 32-bit ALU from logic gates: adder, multiplier, shifter, comparator
  • 41-state control unit driving the datapath and register files
  • One 16-bit random draw per round, sliced into an 8-color sequence
the extension cutting a Reddit post down, then piling it back on
Cut the Crap
Turns LinkedIn humblebrags into β€œI got a new job.” Or the reverseΒ πŸ’©
JavaScriptLLM APIsChrome ExtensionManifest V3

One switch per site. Decrapify turns a 200-word LinkedIn humblebrag into "I got a new job." Crapify does the reverse. You can plug in your own LLM.

  • 3rd place at the Dumb Duber Dumber Hackathon
  • Content-hashed cache to block repeated text from reaching the paid model twice
  • Viewport-first queue: whatever is on your screen gets rewritten first
profile, matches and chat
RoomU
A roommate-matching app for 40,000+ UC Davis students
TypeScriptReact NativePostgreSQLHonoiOSDocker

Take a lifestyle and personality quiz, then get matched with people you could actually live with and chat with them in the app! Subleases also get their own feed. I joined the 8-person team behind it at AggieWorks, the university's student-run product club: designers, engineers and marketers. What I added to an app that was already running:

  • Built the app's semver versioning system full-stack, with its own REST API (Drizzle)
  • Filter bar and confirmation dialogs, built as reusable components (NativeWind, Reanimated)
  • That filter bar again, extended to the sublease feed (in review)
hotel listings with the clustered map
Ascenda Hotel Booking
A full-stack hotel booking site, from map search to Stripe checkout
TypeScriptReactNode.jsMySQLVitestDockerExpressAWS

A full-stack booking system built on Ascenda's hotel data. My part was the interactive map and the account side of the backend.

  • Map clustering that groups nearby hotels and splits apart as you zoom
  • Node.js/Express REST API on MySQL, with cascading deletes and role-based auth
  • 78% test coverage with Vitest and React Testing Library
posting a sunset at SUTD, finding food stories in the city, then walking to one
kNow
Social media on a map: see everything posted nearby in the last 24 hours
JavaAndroidCameraXGoogle MapsFirebase

Built by a team of 5 for SUTD's Information Systems & Programming course. Snap a photo or a short video, and it lands on a live map as a story others nearby can open, follow you from, and get walking directions to. I built the explore map and the Firebase backend.

  • 4th of 45 teams at the SUTD InfoSys–Singtel Awards
  • Clustered story markers, kept live by Firestore listeners, with category, place and user search
  • Walking routes drawn from your location to any story (Directions API)
the contest page on TLX
TROC #33
Problems for an international coding contest: 320 entrants, only 6 solved all
Competitive ProgrammingC++TCFrameData Structures & Algorithms

I was one of the lead authors of TOKI Regular Open Contest #33, a recurring online competitive programming contest from the NOI/IOI Indonesian Alumni (TOKI).

  • My problems ranged from DP to sweep line to centroid decomposition
  • Contestants from about 20 countries, including Japan, China, India and the US
  • Only 6 solved all eight problems, and all 6 were red-rated

What I build with.

AI / ML
PyTorch
LangChain
Vertex AI ADK
RAG
RAG
EMB
Embeddings
OpenCV
Languages
C / C++
Python
TS / JS
Java
SQL
HDL
Verilog / Lucid
ASM
Assembly
Web & Databases
React
Next.js
Three.js
FastAPI
Node / Express
PostgreSQL
MySQL
Firestore
Meilisearch
Practices & Tools
Git / GitHub
GitHub Actions
Docker
GCP
AWS
Linux
Vitest
Claude Code
Cursor

What's next.

kithΒ /kΙͺΞΈ/
kith: a nickname, from the middle name Keith. Nathan Keith Poernama.
Β© Nathan Keith Poernama

Designed and built with Next.js and TypeScript, with Claude Code and Cursor as pair programmers.