Problem
Recruiters and clients have specific questions ("has he used NestJS in production?", "is he in Riyadh?") that a static portfolio makes them dig for.
My role
Designed and built it end to end: the chat UI, the serverless endpoint, the prompt and the fact sheet.
Architecture & key decisions
- React chat panel in the site; questions go to a Vercel serverless function (/api/chat).
- The function builds the fact sheet from the same JSON data that renders the site, so the bot and the pages never disagree.
- OpenRouter with DeepSeek as the primary model and a fallback model; the system prompt, model list and token limits live only on the server.
- Per-IP rate limiting and limits on question and history length.
Visitors
Desktop & mobile
App
ReactAPI & server
NodeExternal services
OpenRouter
Challenges
Keeping answers factual: the bot only knows what the site's data says, and says so when it doesn't know.
Results
Live on every page of moiez.dev, in English and Arabic.
Stack
Used for: Backends and REST APIsUsed in: TWLM - POS, BotFolio, SCM Borba, Design DynamoUsed for: TWLM web apps and dashboardsUsed in: TWLM - POS, BotFolio, Design Dynamo, Portfolio WebsiteUsed for: Smart menu search at TWLM and this site's BotFolioUsed in: TWLM - POS, Company Support Chatbot (AI), BotFolioUsed for: The model behind TWLM's menu search and BotFolioUsed in: TWLM - POS, Company Support Chatbot (AI), BotFolioUsed in: BotFolio, AATourism, SCM Borba, Ain SaasUsed in: BotFolio