Skip to projects
01 · Intro
Northeastern UniversityB.S. Computer Engineering and Computer Science · Expected May 2029

Karthik (Tejas) Basavarajappa

I build embedded systems and the software around them. I lean toward the hardware side: firmware, wiring, and bench debugging.

Open to co-op Jan–Aug 2027Boston, MA

02 · Hardware

Phone Box

A phone lockbox with a real lock: a servo latch, a touchscreen countdown, an adjustable emergency override, and an iOS app over Bluetooth LE.

Co-developed with a friend · Aug–Sep 2026

Phone Box system diagramAn ESP32-S3 in the middle. The AXS5106L touch controller (address 0x63) and the modified MAX17043 fuel gauge (0x36) share one I²C bus. The MG90S servo latch is driven by PWM on GPIO5 and powered from the battery rail with bulk capacitance. A 1S LiPo with a TP4056 charger powers the system. Bluetooth LE links the board to the iOS app, which syncs with Firebase.bulk CI²CPWM · GPIO5VBATSYSBLE GATTsyncTouch displayAXS5106L · 0x63Fuel gauge (modified)MAX17043 · 0x36Servo latchMG90S · 50 HzESP32-S3CircuitPythonBLE radio1S LiPoTP4056 chargeriOS appReact Native · ExpoFirebaseFirestore · FunctionsSDA 41 · SCL 42

Swipe the diagram sideways →

  1. 01 / 06

    One board runs the box

    An ESP32-S3 running CircuitPython drives the 1.47-inch touch display, the servo latch, the lock and override buttons, and the Bluetooth LE radio.

  2. 02 / 06

    A driver for the touch controller

    The display's AXS5106L touch controller sits on the I²C bus at 0x63 and runs on a custom driver written for this board.

  3. 03 / 06

    A real battery percentage, no extra pins

    We hand-modified a MAX17043 fuel gauge and put it on the same I²C bus as the touchscreen, at 0x36. The box shows a measured battery percentage without spending another GPIO.

  4. 04 / 06

    Tracking down the servo failures

    The latch failed now and then. On the bench it came down to two things: the CPU clock was scaling out from under the servo's PWM timer, and a servo drawing close to an amp was hanging off the 3.3 V rail. The fix: re-assert 50 Hz before every move, move the servo to the battery rail with bulk capacitance, and keep a brownout counter in NVM so the firmware recovers on its own.

  5. 05 / 06

    A BLE contract that can't drift

    A custom GATT service with 8 characteristics (status, history, commands, settings, time, alerts, labels, pending) feeds a React Native iOS app that syncs to Firebase. A contract test fails if the UUIDs ever differ between the Python firmware and the TypeScript app.

  6. 06 / 06

    Enclosure and tests

    Two SolidWorks enclosure revisions, FDM printed and fit-tested on the real parts. 2,500+ tests across the firmware, the app, the Firestore security rules, and the cloud functions.

The Phone Box touchscreen showing a focus countdown timer while a finger presses the screen.
The Phone Box: a dark textured enclosure with a small portrait touchscreen showing the battery percentage.
The Phone Box web dashboard's focus calendar for August 2026, with focus days highlighted in green.

The display's override screen, and the web dashboard that shows focus history.

Claude Code wrote most of the code. The enclosure CAD, the MAX17043 modification, and the bench debugging were done by hand.

  • ESP32
  • CircuitPython
  • UART/I²C/SPI
  • GPIO/PWM
  • BLE
  • Oscilloscope
  • Multimeter
  • Bench power supply
  • Breadboarding & soldering
  • SolidWorks
  • 3D printing
  • React Native
  • TypeScript
  • Firebase
  • Python
  • Git

03 · Hardware · team project

ShoreClear

A small tracked robot that picks plastic out of beach sand, built by a team of four for Northeastern's first-year engineering course.

Team of four · I did the drive electronics and the arm · Cornerstone of Engineering

  1. 01 / 05

    The problem

    Plastic piles up on beaches and in shallow water, where it hurts wildlife and drifts out to sea. Picking it up by hand is slow, and big cleanup machines are expensive and rough on the shoreline. We wanted something small that could keep pulling debris out of the sand.

    ShoreClear on a classroom table: a teal body on black tank tracks with a black laser-cut acrylic arm and a breadboard on top.
  2. 02 / 05

    Designed in SolidWorks

    The main body and the top-mounted collection arm were modeled in SolidWorks. The goals: collect plastic reliably, drive on sand, separate sand from plastic, and stay stable, all inside a tight budget and the torque and battery limits of our parts.

    SolidWorks assembly of the robot body with its perforated sifter tray pulled out.
  3. 03 / 05

    Printed, cut, and assembled

    The body was 3D printed and the arm parts were laid out for the laser cutter. The tracked base was built from purchased parts instead of being custom-made.

    The first complete prototype: teal printed body on tracks, black acrylic top and arm, and a white perforated sifter tray.
  4. 04 / 05

    My part: the drive

    I wired the drive: an ESP32 on the Arduino framework running four motors through two dual-channel motor drivers, with the left and right sides on their own direction and PWM pins. I wrote the test firmware that runs each side forward and back, then straight, then spins in both directions, to check every motor and every pin.

    The drive electronics on a breadboard: an ESP32 dev board wired to two red dual-channel motor-driver boards.
  5. 05 / 05

    My part: the arm

    The arm kept coming out too heavy. I went from an acrylic arm with a metal claw, to the same arm with a 3D-printed claw, to a laser-cut low-density wood arm with the printed claw, which was finally light enough. When the servo stopped responding in the final assembly, I worked through everything around it until the servo itself was the only cause left.

    The final build: a laser-cut low-density wood arm with servos at the joints and a 3D-printed claw, on the tracked teal chassis.
An early cardboard mock-up of the robot with a perforated sifter bin and a jointed cardboard arm.
Cardboard mock-up, before any CAD.
Laser-cut arm links in black acrylic and light wood laid out on a bench with standoffs and a servo.
Acrylic and wood arm links: the weight iterations side by side.
Four AutoCAD panels showing claw and arm parts laid out as flat outlines for laser cutting.
Arm and claw parts laid out for the laser cutter.
Three SolidWorks views of the main body, a box with a perforated sifter tray, modeled for 3D printing.
Main body in SolidWorks, ahead of printing.

Next time: screws and slots so parts can be swapped, lighter printed parts in place of wood, ultrasonic or IR sensing, and autonomous driving.

Team: Marwan A., Cyrus C., Lucas Peralta, and me. Photos from the team's build and Lucas's portfolio, used with his OK.

  • ESP32
  • Arduino
  • C++
  • GPIO/PWM
  • SolidWorks
  • 3D printing
  • Laser cutting
  • Breadboarding & soldering
  • Multimeter

04 · Software · co-built

Lumen

A Chromium browser on Electron with an AI agent in the sidebar that reads the page you're on and acts on it. This is the one I'm proudest of.

Co-built with a school friend · Sep 2026–now

  1. 01 / 04

    An agent that works the page

    The sidebar agent reads the page you're on and acts on it: it clicks, types, fills forms, and reads up to six pages in parallel. It asks before acting on a site it hasn't used yet.

    Lumen showing Hacker News with the agent sidebar on the right, listing the top stories it read from the page.
  2. 02 / 04

    Your choice of model

    It works with Claude, OpenAI, Gemini, Grok, OpenRouter, or local models through Ollama and LM Studio.

    Lumen's AI settings: a model picker, agent behavior toggles, and API key fields for several providers.
  3. 03 / 04

    A browser other agents can drive

    Lumen doubles as an MCP server. Outside agents like Claude Code, Codex, and Cursor drive it through 44 tools over an HMAC-authenticated local channel, and each app gets its own token you can revoke.

    Lumen showing an approval prompt in the sidebar asking whether an external agent, Claude Code, may act on the page.
  4. 04 / 04

    Built like a real browser

    Ad and tracker blocking built in, no telemetry. 1,700+ commits, Playwright test suites, and self-updating Windows and macOS builds.

    Lumen with a row of color-coded tab groups across the top, open on the React docs.
Asking the agent to open Hacker News and list the top stories.

emah-maker/lumen

(opens GitHub in a new tab)

Co-built with Evan (emah-maker), who owns the repo.

  • Electron
  • JavaScript
  • Node.js
  • MCP
  • Playwright
  • GitHub Actions
  • Git

05 · Software · solo

Data and markets

Two projects where the math has to be right before the interface matters.

Options Analytics

Full-stack options analytics that computes implied volatility and all five greeks itself and builds its own IV history.

Solo · Sep 2026

100
100
20%
1.00 yr

Rate fixed at 5%, no dividend.

call price

10.45

Δ Delta
0.637
Γ Gamma
0.0188
ν Vega / vol pt
0.375
Θ Theta / day
-0.018
ρ Rho / rate pt
0.532

Illustration, not market data. Same Black-Scholes-Merton formulas as the project's pricer, run in your browser.

  • Black-Scholes-Merton pricer with a Newton-Raphson IV solver and a bisection fallback; the price → IV round trip is tested to 1e-8.
  • Daily snapshots build the history behind IV rank, which says "insufficient history" instead of showing a fake zero.
  • 548 Python and 48 TypeScript tests; 97% measured coverage on the analytics core, with CI gating it at 90%.
The Options Analytics chain view for AAPL: an IV-rank panel beside a table of strikes with bid, ask, IV, and greeks.
The option chain, with IV and greeks computed locally.
  • Python
  • FastAPI
  • SQLite
  • SQL
  • Next.js
  • React
  • TypeScript
  • Docker
  • pytest
  • GitHub Actions
  • Git
  • Pandas
  • NumPy

ELISA Analysis Pipeline

Turns raw 96-well plate-reader exports into concentrations, QC verdicts, group statistics, and an HTML report.

Plate 1 standard curve: straight line versus 4PLSeven IL-6 standards from 7.8 to 500 pg/mL, in duplicate. The study's straight-line calibration reads the standards back at 99 to 134 percent of nominal, worst at the low end. The weighted four-parameter logistic fit reads them back at 94 to 102 percent.0.00.40.81.21.60100200300400500pg/mLODstudy's straight lineweighted 4PL100%130%recovery, % of nominal · shaded band 80–120%7.815.631.362.5125250500

This is plate 1 of a public 110-mouse IL-6 study. The authors calibrated with a straight line, which reads their own standards back at 99–134% of nominal, worst at the low end where most samples sit. The pipeline's weighted 4PL reads the same standards at 94–102%. Across all four plates, the straight lines range 28–142%.

  • Weighted 4PL/5PL standard curves picked by AICc, with %CV, recovery, and LOD/LLOQ/ULOQ checks against FDA/ICH M10-style criteria.
  • Runs in the browser with no backend: the Streamlit app is compiled to WebAssembly. 135 tests, CI on Python 3.11–3.13.

Loads the real app, with Python running in your browser through WebAssembly. The first load takes a little while.

The ELISA app in the browser: sidebar controls for data, curve fitting, and QC thresholds, with summary metrics and a plate view.
The app running in the browser, no server.
  • Python
  • Pandas
  • NumPy
  • SciPy
  • Streamlit
  • pytest
  • GitHub Actions
  • Git

06 · 2024–2025

Earlier builds

RecycleRight's homepage illustration: people dropping bottles, cans, and boxes into four colored recycling bins.

Hackathon

RecycleRight

Snap a photo of trash and it tells you how to get rid of it.

  • Flask backend. GPT-4o vision identifies the item, with a heuristic image classifier as the fallback.
  • Google Maps finds nearby recycling centers; MongoDB holds accounts, history, and a points leaderboard.
  • Python
  • Flask
  • MongoDB
  • OpenAI API
  • JavaScript
  • HTML/CSS
  • Git

Hackathon team · Mar 2025

Chrome extension

Wordle Solver

A Chrome extension that solves the daily Wordle.

  • Reads each tile's green, yellow, or gray state straight from the page's DOM, then narrows the word list with constraint filtering.
  • JavaScript
  • HTML/CSS
  • Chrome extensions
  • Git

07 · Work

Experience

  1. XalteraMedia

    Co-Founder

    Jan 2024 – present · Andover, MA

    • Next.js
    • React
    • Node.js
    • TypeScript
    • Build client-acquisition systems end to end for service businesses: Meta ads, Next.js sites, GoHighLevel CRM, and booking.
    • Automate the lead pipeline in GoHighLevel: sub-5-minute first response, qualification, recovery, and attribution.
    • Build voice and text agents that answer inbound calls and qualify leads around the clock, with speech-to-text, an LLM response layer, and ElevenLabs voice in one pipeline.
  2. CodeWiz

    Programming & Robotics Coach

    Feb 2025 – Jul 2025 · Reading, MA

    • Python
    • Java
    • Coached a FIRST LEGO League team to 1st place at the Massachusetts state championship and a spot at the 2025 FLL World Festival in Houston.
    • Taught robot design, building, and programming on LEGO SPIKE Prime, including how to isolate sensor, motor, and code faults.
    • Taught Python, Java, and Lua (Roblox), from a first program up to competition level.
  3. ABRIS.IO

    Software Engineering Intern

    Jun 2022 – Aug 2023 · Andover, MA

    • Python
    • Designed and tested conversation flows for Pizza Pal, an AI host in Uprate.AI's demo suite, and fixed faulty responses found through systematic testing.
    • Wrote PyTeal (Python) smart contracts for Licit, an Algorand platform that stores document hashes on-chain for tamper-proof verification.
  4. Northeastern University

    B.S. Computer Engineering and Computer Science

    Expected May 2029 · Boston, MA

    Open to co-op Jan–Aug 2027, for embedded and hardware roles.

08 · Toolbox

Skills and GitHub

Hardware & embedded

Languages

CAD & fabrication

Frameworks & libraries

Tools & platforms

09 · Leading and teaching

Beyond code

What I'm good at outside the code: leading a group and keeping a lot of moving parts on schedule.
  • 2016 – 2025

    Eagle Scout

    Boy Scouts of America, Troop 77

    Led my Eagle project: a raised-bed garden for the Village Food Hub food pantry.

  • Feb 2025 – Jul 2025

    FIRST LEGO League coach

    CodeWiz

    Coached our team to the Massachusetts state title and a spot at the 2025 FLL World Festival in Houston.

  • 2022–now

    Sanskrit teacher

    Chinmaya Mission Boston

    Teach weekly Sanskrit lessons to 10+ students, with a curriculum and materials I built myself.

10 · Say hi

Contact

I'm looking for an embedded or hardware co-op from January to August 2027. Email is the fastest way to reach me.

Email

basavarajappa.k at northeastern dot edu
Send an email

Karthik (Tejas) Basavarajappa

CompE + CS @ Northeastern | Seeking Jan 2027 Co-op | Co-Founder @ XalteraMedia

linkedin.com/in/tejasb12

Connect on LinkedIn