Hi, I'm Pravdeep. Welcome to my website. I work in React, Next.js, TypeScript, Node.js, PostgreSQL, Firebase, FastAPI, Python, PyTorch, scikit-learn, Claude API, and whatever the problem needs.

I do a bit of everything, and I do it well.

My day job is at Mentera, an AI platform for private practices and medspas. I'm also finishing a graduate certificate in AI and machine learning at Humber.

Now
Software developer at Mentera
Studying
AI and machine learning at Humber Polytechnic
Working on
The canvas panel for Tera, Mentera's assistant
Based in
Ontario, Canada
Status
Open to new work
01

About

Written by me, not a model.

The problems I like are the ones where the model isn't the hard part.

I'm a developer at Mentera, an AI platform for private practices and medspas. My current project is the canvas panel for Tera, our assistant, which renders whatever the model streams back over a WebSocket. Before that I spent a year at Rebelsnow building client sites.

I'm finishing a graduate certificate in AI and machine learning at Humber, which has mostly been useful for knowing what a model can and can't be asked to do.

Outside of work I build things I want to use myself. A multiplayer Wordle clone with real-time rooms, auth, and a socket server I deployed myself. A tool that reads a screenshot of my class timetable and hands back a calendar file. Making the interface not feel slow is usually the interesting part.

02

Selected work

Eight projects. Some were paid, the rest I built because I wanted the thing to exist.

01Mentera

Tera

Mentera is an AI platform for private practices and medspas. Tera is the assistant inside it, and staff lean on it in the middle of a working day. I build the parts they touch, most recently the panel where everything Tera produces gets rendered as it streams in, instead of arriving as a wall of chat text.

The hard part

Content arrives in pieces, and drawing a piece before it's finished makes the panel flicker. Each block now waits until it's whole before any of it renders. The code that does the waiting is ugly. The flickering stopped.

Streamed blocks are buffered until each one closes, then rendered.socketbufferpanel<svg … still open
Fig. 01 · Buffer, then render

ReactNext.jsTypeScriptWebSocketVercel

02Mentera and Rosehill

Making sites fast and findable

Two of the sites I've worked on had the same two problems: they were slow on a phone, and search engines weren't reading them properly. A heavy hero video was the biggest culprit on both. I worked through the video and the images, the fonts, and the scripts sitting in front of the first thing you see, then the metadata and page structure that search engines read.

Where it landed

Mentera scores 96 on a phone and 100 on desktop. Rosehill scores 90 and 100, with a perfect score for search. On a slow connection the main content lands in about two seconds, and neither page jumps around while it loads.

PageSpeed scores: Mentera 96 on mobile and 100 on desktop, Rosehill 90 on mobile and 100 on desktop.90Mentera, mobile96Mentera, desktop100Rosehill, mobile90Rosehill, desktop100
Fig. 02 · PageSpeed, both sites

Core Web VitalsSEONext.jsVercel

03Client work

Rosehill Design Build

Rosehill is a design build contractor in the GTA. Their old site was a template, and on a phone it opened on a white screen because of the hero video. I rebuilt the site, pointed their domain at the new one, and fixed the previews so sharing a link stopped looking broken. Most of the win came from the video, which is still the slowest thing on the page.

Trade-off

The owner had no interest in learning a CMS, so changes came to me through a Notion board and I made them myself. That was faster for both of us, and it means a new phone number still has to come through me.

Feedback goes from the owner to a Notion board, I make the edit and deploy it. There is no CMS in the loop.OwnerNotionMeDeploya cms for the ownernever built
Fig. 03 · How an edit reaches the site

Next.jsVercelGoDaddy DNSNotion

04E-commerce platform

Rebelsnow

Rebelsnow sells clothing online. I spent a year on the storefront, remote, building the pages customers land on and the parts they buy through: the catalog, the cart, checkout and payment.

Where the risk was

Checkout got the most testing, because it's the one place where a bug costs the store a sale instead of just looking wrong.

Catalog through to payment, reading from REST APIs, with checkout under the heaviest test coverage.CatalogProductCartCheckoutPaymentrest api · products · auth · ordersjest + rtl
Fig. 04 · Storefront chain

ReactNext.jsNode.jsREST APIsJestReact Testing Library

05Personal project

FakeWordle

fakewordle.com is Wordle, except you play it against someone else. You open a room, send someone the code, and race them in real time with a chat running alongside. Accounts and past games are saved, and Claude writes the word lists.

What went wrong

I ran the live game straight off the database to begin with, which meant a write for every letter a player typed, and you could feel the delay. Moving the match onto its own live server fixed it, and the database only stores the result now.

Match state runs over the socket server; only the final result is written to Firestore.player aplayer bsocketrailwayfirestoreresultoncea write every keystroke
Fig. 05 · Where the state lives

Next.js 15Firebase AuthFirestoreWebSocket on RailwayClaude APISource

06Personal project

Schedule to calendar

Every semester I typed my class timetable into a calendar by hand. Now I upload a screenshot of the timetable and get back a calendar file that imports straight into Google Calendar or Outlook.

The hard part

The model was the easy part. A timetable is a grid where position carries the meaning: where a class sits tells you when it is, so parsing the text alone throws away half the information.

A timetable cell keeps its row and column, which become the time and the room.screenshotmontuewedthufripositionics eventAIGC 5500Wed 14:00 to 16:00Room D221
Fig. 06 · Cell to event

Next.jsClaude vision APIICSSource

07Capstone, AIGC 5005

Health risk classifier

One of my two capstones. It takes health data and predicts risk, and the point of the project was putting a plain statistical model up against a small neural network on the same data to see what the extra complexity actually bought.

My part

I prepared the data and ran the comparison between the two models, then built the interface for it, because a page of numbers in a notebook is not something you can put in front of anyone outside the program.

Logistic regression compared against a multilayer perceptron on the same inputs.logistic regressionmultilayer perceptron
Fig. 07 · Same inputs, two models

PythonPyTorchscikit-learnFastAPINext.jsNot public yet

08Capstone, AIGC 5505

HuntigoX

Fake job postings are a real problem for people applying for work in Canada. HuntigoX checks the employer behind a listing before anyone applies: it confirms the business is real and registered, then scores the posting against the patterns that show up in scams. The compliance side is built around Canadian hiring rules.

My part

I built what candidates and employers actually see, including the verification steps and the scorecard at the end of them. On the model side I worked on spotting the patterns that mark a listing as suspect.

Verification scorecard: business registration matched, documents matched, posting pattern clear, LMIA reference valid, legitimacy score 94 of 100.verification scanverifiedBusiness registrationMatchedDocument authenticityMatchedPosting patternClearLMIA referenceValidlegitimacy score94 / 100
Fig. 08 · Verification output, illustrative

ReactNext.jsTypeScriptPythonREST APIsNot public yet

03

Coursework

Humber Polytechnic, January to August 2026. Model work run locally on an M4 MacBook through the MPS backend.

AIGC 5500 · Deep learning

Fully connected variational autoencoder on CIFAR-10. The torchvision mirror was crawling, so I wrote a parallel downloader and pulled the archive myself. The reconstructions came back as coloured blur, which is what a fully connected encoder does to 32x32 colour images. The assignment was about the VAE and not the architecture, so I left it and wrote up why a convolutional encoder would fix it.

AIGC 5502 · Computer vision

ResNet18 cat and dog classifier with best-epoch checkpointing and MPS support, plus a set of image processing labs.

AIGC 5501 · NLP

Toxic comment detection on the Jigsaw dataset for the midterm, using SVM over Word2Vec and Doc2Vec embeddings. Earlier work covered named entity recognition, TF-IDF, and LSTM sentiment analysis.

AIGC 5504 · Big data and RL

A VAR and Hive assignment, a GAN in TensorFlow and Keras generating synthetic patient vitals, and a Thompson Sampling lab.

AIGC 5503 · Data mining

Market basket analysis with Apriori, and seasonal decomposition on time series. Group presentation reviewing the ReCANet paper on repeat consumption in recommender systems.

04

Where I've been

2026–now

Mentera

Software Developer

Jan–Aug 2026

Humber Polytechnic

Graduate certificate, artificial intelligence with machine learning

2024–2025

Rebelsnow

Software Developer

Also

  • Diploma, computer programming. Humber Polytechnic, GPA 3.9.
  • Computer engineering technology. Humber Polytechnic.
  • Meta Front-End Developer certification.
  • Meta UI/UX Design certification.
05

Contact

Got something you want built?

I'm open to frontend and full-stack roles, and I take freelance work. If the idea isn't figured out yet that's fine, I'd rather hear it early. Email is the fastest way to reach me.