Projects
Starting with my work at Ivani, then the hackathon builds and write-ups. What each project does for people comes first; the tools used come at the end.
Work at Ivani
Firmware and data work on a 1,000+ node IoT deployment, and helping the engineering team use AI better.
AI adoption at Ivani: reusable prompt templates, a cheat sheet, and context guidance that spread from two engineers to roughly ten in about two weeks.
A self-run comparison of original vs. structured prompts on real engineering queries at Ivani. The savings estimates it produced are directional observations, not controlled measurement; see the case study for those figures and their limits. This is workplace AI-adoption work at Ivani, not one of the projects below.
Read the prompt-adoption case study → · Engineering at Ivani →
⭐ Flagship Builds
The most differentiated, hackathon-judged builds.
Helps new hires at a company find the context they need on day one, instead of spending their first week hunting through channels, DMs, and docs. It answers inside Slack, using what the workspace actually says right now, and tailors results to the person’s role. Along the way I debugged an AI making things up and a login problem on Windows. Built solo for the Slack Agent Builder Challenge 2026. Built with: Slack, Groq (LLaMA 3.3 70B), Notion.
Read the case study →An AI assistant memory that doesn’t just save everything. It judges what is worth keeping, catches duplicate or contradictory facts before storing them, and reviews old memories before forgetting them instead of deleting on a timer. Built for the Qwen Cloud Hackathon, Track 1. Built with: Python (FastAPI), Qwen, Alibaba Cloud.
Read the case study →Finds code that nothing uses anymore, and says how sure it is: every finding is labeled Confident, Uncertain, or Skipped, instead of a flat yes or no. It never opens a merge request and never claims code is “safe to delete.” Two platform problems came up mid-build, so I added a clearly labeled fallback mode instead of letting it fail quietly. Built for the GitLab AI Hackathon (Transcend). Built with: GitLab Duo, GitLab’s code knowledge graph.
Read the case study →📚 More Case Studies
Additional working builds with detailed write-ups covering the problem, decisions, results, and limitations.
Helps a team decide whether AI is actually the right fix for a workplace problem. You describe the problem in plain language and get a report rating AI as a strong, conditional, or poor fit, with facts kept separate from assumptions and gaps, plus a phased pilot plan and a 0–100 readiness score. It has 74 passing tests and a live evaluation that checks real Gemini output against 7 deterministic checks. A personal tool, not a hackathon build. There is a published demo where you can enter a workplace scenario, try a sample one, or open a pre-built sample report that makes no AI call. Built with: Gemini.
A prototype that helps with the first step of mental-health support: it asks intake questions, flags possible crisis signals, and writes summaries a therapist can read quickly. Safeguards were designed in from the start: no diagnoses, simulated data only, and a disclaimer on every insight. I also filed an issue in Google’s ADK documentation repository after hitting a tool bug, then worked around it. The project’s own README marks it “Archived / Demo Only”: a hackathon prototype, not a validated clinical tool. Built for the Google Cloud Multi-Agent (Agent Development Kit) Hackathon. Built with: Gemini 1.5 Flash, six cooperating AI agents.
Explores helping underserved households in Missouri cut their electric bills: it forecasts next-day energy use for a neighborhood and writes personalized, multilingual tips for saving. I built it solo and put a working end-to-end pipeline ahead of UI polish. Built for the AWS Breaking Barriers Virtual Challenge. Built with: AWS (IoT, S3, Lambda, SageMaker, Bedrock, Amplify), simulated smart-meter data.
Turns a therapist’s messy session notes into summaries and draft observations for the therapist to review. Tested by one practicing therapist using synthetic data. Built with: React, AWS Lambda, DynamoDB, Claude.
Looking for the smaller, playful tools? They live on the Playground.
🔒 In Progress
Private prototypes with public write-ups, no repository link since there's nothing public to open yet.
Ephemeral Agent Executor
A Python toolkit that runs AI helper programs safely: it cleans up after them, caps how much CPU and memory they can use, and shuts down any that run away before they eat your RAM.
Private prototype, case study coming soon
SafeSakhi
An AI-driven women’s safety platform that can detect threats from live audio, movement, and the sentiment of text messages. Runs entirely on serverless AWS.
Private prototype, case study coming soon
📂 All Other Repos
🐞 Manual Bugs Log
Critical persistent TypeError in FunctionTool init
Why: Blocked multi-agent orchestration until worked around; reported for maintainer review.
Status: ✅ Reported
View Report (opens in new tab)ADK documentation inconsistencies for FunctionTool
Why: Causes confusion and misuse, contributing to the TypeError.
Status: ✅ Reported
View Report (opens in new tab)Google ADK version incompatibility with Python 3.13
Why: Blocks using the latest Python versions — must be tracked & fixed.
Status: ✅ Reported
View Report (opens in new tab)Gemini function call usage quotas undocumented
Why: Can surprise developers with sudden costs or throttling — needs clear quotas in docs.
Status: ✅ Reported
View Report (opens in new tab)FunctionTool inconsistencies with required vs default params
Why: Related to #826 but worth tracking as a separate edge case if you find more patterns.
Status: 🚫 Not Reported
Inconsistent or unclear rate limit errors in Assistant API
Why: Makes it hard to handle throttling gracefully in production.
Status: ✅ Reported
View Report (opens in new tab)Assistant API sometimes loses context in multi-step workflows
Why: Breaks multi-turn conversations, reducing user experience.
Status: ✅ Reported
View Report (opens in new tab)Assistant API returns malformed JSON despite response_format=json_object
Why: Causes JSON parsing errors, complicating automation.
Status: ✅ Reported
View Report (opens in new tab)Prompt injection YAML blocks left in public repos
Why: Found during a self-audit of my own GitHub profile — removed before they became someone else's problem.
Status: ✅ Fixed
Cross-model jailbreak/prompt-injection vulnerabilities
Why: Cross-model security evaluation across Claude, ChatGPT, and Bedrock uncovered real issues, not just theoretical ones.
Status: ✅ Documented
GitLab Orbit knowledge graph edge cases
Why: Hit while building a dead-code finder on GitLab's AI Catalog for a hackathon — some graph relationships didn't resolve cleanly.
Status: ✅ Worked around
Have a technical problem, AI or otherwise, that needs a second pair of eyes?
Let's talk.