All work

BotFolio

An AI assistant on every page of this portfolio that answers questions about my work from the site's own data, through OpenRouter (DeepSeek).

Year
2026
Status
Live
Stack
Node · React · OpenRouter · DeepSeek
Visit site
BotFolioNode · React · OpenRouter · DeepSeek

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.
How it's builtA request, from the visitor's screen to the data
  1. Visitors

    Desktop & mobile

  2. App

    React
  3. API & server

    Node
  4. External 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