Skills
What I work with
The technologies I use, grouped by area, each linked to the projects where I used it. (team) marks a team project, where I used it in my part of the work.
Frontend
Accessible, responsive interfaces in React and plain JavaScript: component structure, routing, state and design tokens that stay readable.
- JavaScriptUsed in: PLANIT, Tarn Wellness, My Travel Buddy (team), BridgeAI (team), Playlist, Street Eats, TTP frontend exercises
- TypeScriptUsed in: DHIMIX AI, School Website Template, This portfolio
- ReactUsed in: My Travel Buddy (team), BridgeAI (team), Playlist, CreatorVerse, DHIMIX AI, This portfolio
- Next.jsUsed in: DHIMIX AI, School Website Template, PDF Workspace, Résumé Builder, This portfolio
- ViteUsed in: PLANIT, My Travel Buddy (team), BridgeAI (team), Playlist, CreatorVerse, Street Eats
- React RouterUsed in: My Travel Buddy (team), BridgeAI (team), Playlist, CreatorVerse
- HTMLUsed in: TTP frontend exercises, Tarn Wellness, This portfolio
- CSSUsed in: TTP frontend exercises, Tarn Wellness, This portfolio
- Tailwind CSSUsed in: BridgeAI (team), My Travel Buddy (team), DHIMIX AI, School Website Template, Résumé Builder, This portfolio
- Framer MotionUsed in: BridgeAI (team), DHIMIX AI, This portfolio
- ZustandUsed in: DHIMIX AI
- Chart.jsUsed in: Tarn Wellness
- RechartsUsed in: DHIMIX AI
- Toast UI CalendarUsed in: My Travel Buddy (team)
- AxiosUsed in: My Travel Buddy (team)
- Web Speech APIUsed in: Tarn Wellness
- Progressive web appsUsed in: PLANIT
- pdf-libUsed in: PDF Workspace, PLANIT
- PDF.jsUsed in: PDF Workspace, PLANIT
- PapaParseUsed in: PDF Workspace
- MammothUsed in: PDF Workspace
- JSZipUsed in: PDF Workspace
- read-excel-fileUsed in: Playlist
- Canvas APIUsed in: PDF Workspace, This portfolio
- Responsive designUsed in: This portfolio, TTP frontend exercises, School Website Template
- AccessibilityUsed in: This portfolio, DHIMIX AI
- Design tokens and themingUsed in: This portfolio
Backend
REST APIs with real validation and error handling, not just happy-path routes, and the services and functions behind them.
- Node.jsUsed in: BridgeAI (team), My Travel Buddy (team), Tarn Wellness, Playlist, Street Eats, TTP API practice
- Express.jsUsed in: BridgeAI (team), My Travel Buddy (team), Tarn Wellness, Playlist, Street Eats, TTP API practice
- REST APIsUsed in: My Travel Buddy (team), BridgeAI (team), Playlist, Tarn Wellness, TTP API practice, Walkspan ML
- PythonUsed in: Walkspan ML, DHIMIX AI, IBM Data Analyst notebooks
- FastAPIUsed in: Walkspan ML, DHIMIX AI
- PydanticUsed in: DHIMIX AI
- Serverless functionsUsed in: PLANIT, This portfolio
- Web Push notificationsUsed in: PLANIT
- File upload handlingUsed in: BridgeAI (team)
- PDF text extractionUsed in: BridgeAI (team)
- Email delivery (Resend)Used in: This portfolio
- NodemailerUsed in: School Website Template
Data
Relational modeling, SQL and migrations, and the unglamorous work of checking that the data is actually what it claims to be.
- PostgreSQLUsed in: PLANIT, BridgeAI (team), My Travel Buddy (team), Playlist, Street Eats, TTP API practice, CreatorVerse
- SQLUsed in: PLANIT, CreatorVerse, Street Eats
- SupabaseUsed in: PLANIT, CreatorVerse
- SequelizeUsed in: BridgeAI (team), My Travel Buddy (team), Playlist, TTP API practice
- Schema designUsed in: Playlist, PLANIT, BridgeAI (team)
- SQL migrationsUsed in: PLANIT
- Realtime updatesUsed in: PLANIT
- Cloudflare R2Used in: DHIMIX AI
- PandasUsed in: Walkspan ML, IBM Data Analyst notebooks
- NumPyUsed in: Walkspan ML, IBM Data Analyst notebooks
- MatplotlibUsed in: IBM Data Analyst notebooks
- SeabornUsed in: IBM Data Analyst notebooks
- JupyterUsed in: IBM Data Analyst notebooks
- StreamlitUsed in: Walkspan ML
- Data cleaningUsed in: Walkspan ML
- Data interpretationUsed in: IBM Data Analyst notebooks, Walkspan ML
AI & Machine Learning
Applied model work with an emphasis on honest evaluation: knowing what a number does and does not support, and where a model belongs in a system.
- PyTorchUsed in: Walkspan ML
- scikit-learnUsed in: IBM Data Analyst notebooks
- Image segmentationUsed in: Walkspan ML
- Model evaluationUsed in: Walkspan ML
- Gemini APIUsed in: BridgeAI (team), My Travel Buddy (team), Tarn Wellness, PLANIT
- Claude APIUsed in: BridgeAI (team)
- Structured model outputUsed in: My Travel Buddy (team)
- Prompt designUsed in: BridgeAI (team), Tarn Wellness
- AI document and image extractionUsed in: BridgeAI (team), PLANIT
- Recommendation systemsUsed in: DHIMIX AI
- Explainable scoringUsed in: DHIMIX AI, Tarn Wellness
- Safety-aware AI workflowsUsed in: Tarn Wellness, BridgeAI (team)
Security & Reliability
Safeguards enforced where they cannot be skipped: authentication, authorization, limits, headers, and tests that try to break them.
- Row-level securityUsed in: PLANIT
- Server-side authorizationUsed in: BridgeAI (team), PLANIT
- Auth0Used in: My Travel Buddy (team)
- JWTUsed in: My Travel Buddy (team)
- bcryptUsed in: BridgeAI (team), My Travel Buddy (team)
- Session authenticationUsed in: BridgeAI (team)
- Supabase AuthUsed in: PLANIT
- API-key authenticationUsed in: Walkspan ML
- Rate limitingUsed in: BridgeAI (team), My Travel Buddy (team), This portfolio, Walkspan ML
- Security headersUsed in: BridgeAI (team), My Travel Buddy (team), PLANIT
- CORSUsed in: BridgeAI (team), My Travel Buddy (team), Tarn Wellness, Playlist
- Input validationUsed in: This portfolio, My Travel Buddy (team), TTP API practice
- Error handlingUsed in: My Travel Buddy (team), This portfolio
- Spam protectionUsed in: This portfolio
- Security testingUsed in: PLANIT
- Vulnerability remediationUsed in: PLANIT, Walkspan ML
- Privacy-aware designUsed in: PLANIT, Tarn Wellness, PDF Workspace
Development, Testing & Deployment
Version control, testing at every level, containers, CI and hosting: the parts that let someone other than me build, run and ship a project.
- GitUsed in: TTP frontend exercises, My Travel Buddy (team), This portfolio
- GitHubUsed in: My Travel Buddy (team), This portfolio
- Collaborative Git workflowUsed in: TTP frontend exercises, My Travel Buddy (team)
- DockerUsed in: Walkspan ML, DHIMIX AI
- Docker ComposeUsed in: DHIMIX AI
- GitHub ActionsUsed in: Walkspan ML
- pytestUsed in: Walkspan ML, DHIMIX AI
- Node.js test runnerUsed in: Tarn Wellness, BridgeAI (team), PLANIT
- VitestUsed in: This portfolio
- Testing LibraryUsed in: This portfolio
- SupertestUsed in: BridgeAI (team)
- Database testingUsed in: PLANIT
- Browser end-to-end testingUsed in: PLANIT
- Regression testingUsed in: Walkspan ML
- Load testing and performance tuningUsed in: Walkspan ML
- PostmanUsed in: TTP API practice
- ESLintUsed in: This portfolio, BridgeAI (team), My Travel Buddy (team), CreatorVerse, DHIMIX AI
- oxlintUsed in: Playlist
- PrettierUsed in: DHIMIX AI
- Husky and lint-stagedUsed in: DHIMIX AI
- RuffUsed in: Walkspan ML
- Type checkingUsed in: This portfolio, DHIMIX AI
- Technical documentationUsed in: PLANIT, Tarn Wellness, DHIMIX AI
- VercelUsed in: BridgeAI (team), My Travel Buddy (team), Tarn Wellness, Playlist, CreatorVerse, School Website Template, This portfolio
- NetlifyUsed in: PLANIT
- RenderUsed in: BridgeAI (team), Street Eats
- NeonUsed in: BridgeAI (team)
How this maps to the work
- Full-stack
- BridgeAI and My Travel Buddy: React and Vite front ends against Express APIs over PostgreSQL with Sequelize. My Travel Buddy is secured with Auth0 and JWT, and BridgeAI with sessions and bcrypt.
- Machine learning
- Walkspan: a DeepLabV3-ResNet50 segmentation pipeline in PyTorch, served through FastAPI, with a dataset-integrity suite and a Docker image verified locally.
- In the browser
- PDF Workspace and the Résumé Builder on this site: pdf-lib and pdfjs-dist running entirely client-side, with no server in the path.
Every skill above maps to something shipped.