Skip to content
back

Proxy

The AI that answers for me.

01

Overview

The AI assistant on this portfolio. It answers questions about my projects, skills and career using only my own notes, through the chat widget on the site and a public API, with layered protection, a capped cost and a red-team test suite behind it.

02

Achievements

  1. 01

    Layered protection for a public AI endpoint

    View full case study

    Combined Tor blocking, Cloudflare Turnstile, per-IP rate limits, a shared daily budget and an owner-only authenticator pass, so a request that should not reach a model never does.

  2. 02

    Evaluation and quality gates

    View full case study

    Limited replies to my own notes and checked them with an evaluation suite that runs the real assistant against realistic questions and adversarial, multi-turn attacks, covering the route taken, the widget shown, required and forbidden wording, answer length, prompt injection, false claims and leaks of its own instructions or tool calls, plus automated tests, so every prompt or routing change is measured before it ships.

  3. 03

    Privacy before the provider

    View full case study

    Redacted personal data such as emails and phone numbers from every visitor message before it reaches an AI provider or the question history, and told visitors in the widget how long questions are kept, so privacy is enforced in the request path instead of promised in a policy.

  4. 04

    Designed to fail safely

    View full case study

    Gave every failure a defined outcome: keyword rules take over if the router model fails, a fixed sentence replaces an empty model reply, canned answers handle abuse and private-life questions without any model call, and the widget shows a clear state when a limit is hit.

  5. 05

    Two-stage routing

    View full case study

    Used a small router model (Jev) to send only the part of the notes a question needs, about 1,000 tokens for a typical question instead of the whole knowledge base.

  6. 06

    Cost and latency you can measure

    View full case study

    Kept a typical answer at about $0.0001 with a computed ceiling of about $7 a month at the 300-requests-a-day cap, added a cost calculator to check any limit before changing it, logged per-stage timings on every request, and measured the effect of the model's reasoning-effort setting.

  7. 07

    Operable in production

    View full case study

    Added question history in D1, email alerts through Cloudflare Email Routing, a version endpoint, release-please releases, a deploy smoke test, and rollback and backup runbooks.

03

Architecture

Interactive: pick an option and tap a step to explore

How a question is answered

A visitor's question first meets the checks (Tor, bot check, limits, daily budget). Greetings, abuse, private-life questions and injection attempts get a fixed reply with no model. Everything else goes to the router, which decides what part of the notes the question needs, and only then does a model write the answer.A visitor types a question in the chat widget on the site, or calls the public API.Question From the chatTor traffic is blocked, a Turnstile bot check runs, each address gets a few questions, and a shared daily budget caps the cost for everyone.Checks At the doorA small decision model (Jev, through OpenRouter) says what the question is about. If it is unsure, slow or over its own limit, keyword rules decide instead.Router Jev + rulesOnly the part of the notes the topic needs is sent: about 1,000 tokens for a typical question instead of the whole knowledge base.Context Needed notesThe main model answers from that context only. Rules tell it to say so when the notes do not cover something instead of guessing.Model Writes replyThe reply streams back to the chat, with project, skill, timeline or contact cards when they help.Answer Text and cardsRefused with a clear error code. The widget shows a short explanation and, where it makes sense, how to reach Arul instead.Refused Blocked earlyGreetings, thanks, abuse, private-life questions, off-topic requests and injection attempts get a prepared reply, so they cost nothing and cannot talk a model into anything.Fixed reply No model callStopped before a model

The question passes the checks, the router picks the part of the notes it needs (a small model, with keyword rules as the fallback), and the main model writes a short answer from only that context. Project cards or a contact card are added when they help.

04

Timeline

CodingSpace IndiaAugment · 2022 – PresentProxy
  • CodingSpace India
  • Augment
  • Proxy
Active
2026 – Present
Where
Side project
How it started
From scratch

05

The stack

Next project