JeshwanthAnthony

Based in Arlington, Virginia↓

What I’m building right now

A host that knows
the restaurant

hireMaitre

Your restaurant.
A little more conversational.

I’m the founder and solo engineer behind an AI host that helps guests find answers, right on a restaurant’s website.

Explore hireMaitre

Chat today
Voice next

What the host does for guests now, and the ordering and voice work I’m building in beta development.

Illustration. It moves with scrolling, not sound.
  1. Restaurant-specific chatLive

    An embeddable host on the restaurant’s own website, answering from that restaurant’s information.

  2. Menu, allergy, hours and parkingLive

    The questions guests ask before they visit, answered from the restaurant’s imported menu and details.

  3. Square integrationBeta development

    Restaurants connect Square from the dashboard. It is the path the beta ordering flow is designed to take.

  4. AI orderingBeta development

    Orders taken inside the conversation, with prices resolved on the server rather than by the model.

  5. Voice conversationsBeta development

    Real-time voice with live transcription. The intended flow goes from a spoken request to a validated order.

Spice Kraft uses the live chat. Voice and ordering are not live there.

A better welcome
Before the first visit

Meet the idea behind hireMaitre: turn everyday questions into a more helpful restaurant experience.

For the guest
Ask, then order

A guest asks in their own words and gets an answer from the restaurant’s real menu, then builds the order in the same conversation. Product demonstration; ordering is in beta development.

See the guest side

For the owner
Every question, seen

The restaurant sees what guests are asking and answers once, in its own words, so the host gets it right the next time.

See the restaurant side

From a website
To a host that knows it

Watch the setup experience, from bringing in restaurant information to preparing the assistant. This is a product demonstration; voice and ordering remain in beta development.

Hospitality,
with intelligence

Product engineering

What happens between a guest’s question and a reply the restaurant can stand behind.

Example guest question

Which dishes are nut-free?

Follow the question through the system
REQUEST PATHRestaurant knowledge
Example guest question

Which dishes are nut-free?

Restaurant website
Direct fetchFirecrawlHeadless browser
MenuAllergensHoursParking
Menu pages, embedded PDFs and scanned menus
This restaurant
MenuAllergensHoursParking
Other restaurantsNot readable here
Postgres row-level security
MenuAllergensHoursParking
Host reply
Composed from the highlighted records
Ordering, beta development
  1. Order proposed in conversation
  2. Price resolved on the server
  3. Webhook signature verified
  4. Duplicate events ignored
React, TanStack Start, SupabaseOne Cloudflare Worker
Knowledge

Start from the restaurant’s own information

Setup begins with the restaurant’s website. A multi-strategy importer tries a direct fetch, Firecrawl and then a headless browser, finds menu pages and embedded PDFs, and reads scanned menus with GPT vision. Every outbound request passes SSRF and DNS-rebinding guards.

Boundary

Answer inside one restaurant’s walls

Each restaurant is its own tenant. Postgres row-level security, service-only RPCs and column-scoped update grants keep one restaurant’s menu and settings out of every other conversation.

Answer

Build the reply from retrieved records

The host replies from the records retrieved for that restaurant: its menu, allergy notes, hours and parking.

Action

Let the server make the final call

Ordering is in beta development. A conversation can propose an order, but prices resolve on the server and payment webhooks are signature-verified and deduplicated.

AI-native,
not AI-added

Product and business thinking

Why the host lives in the page instead of behind a contact form, and what that decision costs to run.

Why the website has to answer
75%of restaurant traffic happens off-premises
94%of consumers say speed is critical
84%would order through a restaurant website
National Restaurant Association, 2024 and 2025
THE BUSINESS SIDEWhere the guest already is
A guest question, on the site
An answer from the restaurant’s own approved information
Reserve, order, call or directions
  • What is soldOne useful answer to a guest
  • Billable unitA public widget request that produces a useful answer
  • AllowanceSet by plan, resets each billing period, does not roll over
  • Runaway costSpend budgets fail closed
  • Request pathOne Cloudflare Worker, global edge network
  • Per callerDurable per-IP quota
  • Whole systemDurable global quota
  • AI and crawl costFail-closed spend budget
  • First to scaleShared Postgres behind row-level security
  • BasisDesigned ceilings read off the implementation, not a published load test
  • Guest conversationsDeleted 90 days after they are created, by a scheduled job
  • Between restaurantsSeparate tenants at the database level
  • Every commit2,000+ automated security and behavior checks
  • StageControlled beta, a limited number of restaurants
The bet

The website is where the guest already is

Most of the decision happens before anyone walks in: someone opens the site at nine at night with a question about the menu, the hours or the parking. An AI-native product answers it there, in the page, and then hands the guest to the next step, whether that is reserving a table, starting a Square pickup order, calling or getting directions. Adding a chatbot to a contact form would have kept the wait; removing the wait was the whole point.

The unit

Decide what one answer is worth

Every answer costs money, so the product meters the thing it actually sells. One billable guest message is a public widget request that produces a useful answer for the restaurant. Allowances come with the plan, reset once per billing period and do not roll over. Deciding that unit early is what lets a price exist at all.

The ceiling

What actually limits how much it can take

The whole app, including SSR, APIs, the crawler, cron and the AI pipelines, compiles into one Cloudflare Worker on the global edge network, so a guest message is answered near the guest and there is no single machine to outgrow. The real ceiling is deliberate: durable per-IP and global quotas, plus fail-closed spend budgets that stop the system rather than let it run up a bill. Behind them sits Postgres with row-level security, which is the first piece I would scale. These are the designed limits, not a load-test result.

The trust

Earn the data you keep

Guest conversations, including voice transcripts, are deleted ninety days after they are created by a scheduled job. Restaurants are separate tenants at the database level rather than by convention. More than 2,000 automated security and behavior checks run on every commit, covering tenant isolation and cost abuse among others. The product runs as a controlled beta with a limited number of restaurants, which is the honest stage to be at.

Currently building

What I’ve been shipping
into hireMaitre recently

  1. Sep 8, 2026
    Performance

    Warm chat replies, three to six times faster

    Tenant-scoped caching, in-flight request deduplication, parallel database reads and stage-level timing. A diagnosis, not a model swap.

    Warm response time11–15s → 2.5–3.5s
  2. Aug 31, 2026
    Data pipeline

    Menu import that finishes the job

    Malformed-field recovery, browser fallbacks, PDF compatibility and rejection of irrelevant page content, measured on a ten-restaurant benchmark on a normal network.

    Benchmark imports4 of 10 → 10 of 10
  3. Sep 2, 2026
    Ordering correctness

    One resolver decides what a dish is

    Exact names, aliases, typo matching, variations and ambiguity checks, shared by chat, voice and ordering. Interpretation stays separate from the transaction.

    Fuzzy selection floor0.84 score, 0.12 margin
  4. Sep 14, 2026
    Real-time voice

    Voice sessions that do not grow forever

    Context truncation, tool-result eviction, token and cache telemetry, and on-demand cart reads keep a long call inside its budget.

    Local history buffer24 turns
  5. Sep 18, 2026
    Security

    Defenses against prompt abuse and fake history

    Assistant history reconciled against server logs, credential-shaped output redacted, links restricted, and repeat off-topic requests stopped before paid inference.

    Checks across three suites113 + 41 + 80
  6. Sep 3, 2026
    Testing

    A regression platform for API, browser and voice

    An in-process PostgREST, Square and OpenAI test backend, Chromium lifecycle tests, property tests and structured timing reports. The count below is a test result, not a production rate.

    Generated resolver cases265 cases, zero wrong
  7. Sep 2, 2026
    Integrations

    Square catalogs that stay in sync

    Webhook cursors, idempotent upserts, deletion handling and duplicate-event checks, with full reconciliation when the structure changes.

    Sync modelIncremental, reconciled
  8. Sep 20, 2026
    AI knowledge

    Unanswered questions become reviewed answers

    Owners review the extracted questions and supply the answers, so the assistant is not learning from its own wrong replies. Embeddings batch in groups of 64.

    Indexing capRemoved, 500 covered

Each card is one change from the private hireMaitre repository, written from its commit history. The figures are recorded measurements and test results from the time of the work, not fresh benchmarks and not production rates.

Before hireMaitre

My experience

Asymmetrica
Investments

Full-stack developer internOctober 2025 to April 2026

Financial systems. Structured data. Work with reach.

Outreach project on GitHub
Mountain landscape from Asymmetrica InvestmentsAsymmetrica Investments AG
2M+market-data events processed per day

Event-driven pipelines at 99.9% service availability.

Order request
Position and exposure checks
Idempotent commit and audit log
Websites and REST APIs
Extract and classify in Python
Structured for AI and RAG
Personalized with OpenAI
Delivered with SendGrid
Engagement tracked
1,000+targeted emails delivered

Confirmed in Francisco Escobar’s recommendation.

The platform

Building across the stack

I worked across React, TypeScript, Python, PostgreSQL, Redis and AWS on an internal financial platform that connects real-time market data with portfolio information and risk workflows. Its event-driven pipelines process more than 2 million market-data events a day while maintaining 99.9% service availability.

The safeguards

Check every order before it counts

I built a modular order-management and risk-validation engine. Exposure limits and position checks validate each transaction, idempotent processing keeps retries from becoming duplicates, and immutable audit logs record every decision. Docker, GitHub Actions, automated tests, structured logging and alerting support each release.

The data

Turn research into a workflow

I built Python workflows that collect company and investment data from websites and REST APIs, then extract, classify and structure it for AI and RAG processing.

The outreach

Personal messages, measured

The structured profiles feed personalized outreach generated with OpenAI. SendGrid automates delivery, and structured tracking follows investor engagement and campaign activity.

The impact

Work that reached people

The outreach work delivered more than 1,000 targeted emails. My manager also highlighted my contributions to the commodity exchange platform.

From the person I worked with
“A sharp, proactive contributor who gets things done.”
Francisco Escobar
Francisco EscobarCEO, Asymmetrica InvestmentsManaged me directly, July 2026
Read the LinkedIn recommendation

KapitalGPT
& FinPal

AI data internSeptember to November 2025

Exploring what makes an AI product reliable.

Personal finance with AIFinPal.

Research. Build. Listen. Improve.

React, Supabase, PostgreSQL, Vercel
Personal finance with AIFinPal.

Research. Build. Listen. Improve.

React, Supabase, PostgreSQL, Vercel
Conversation consistency
Session reliability
Knowledge freshness
Response quality
The product

Contributing to FinPal

I contributed to the development and deployment of FinPal, an AI-enabled personal-finance application built with React, Supabase, PostgreSQL and Vercel, supporting implementation, backend integration, testing and release workflows.

The evaluation

Beyond a convincing answer

I tested voice and video agents through scenario-based testing, documenting issues in conversational consistency, session reliability, knowledge freshness, identity continuity and response quality, then translated the findings into product recommendations.

The research

Understand the system behind it

I researched agent frameworks and integration patterns, including LangGraph, LangChain, real-time speech processing and multimodal interfaces, and co-authored the published report below.

ResearchGate Co-authored research, KapitalGPT

KapitalGPT Report: An Analysis of the AI Agent Ecosystem

How multimodal AI agents are built and run: LLM orchestration, memory and tool use, voice and video interfaces, speech-to-text and text-to-speech, deployment and scaling.

Read the report on ResearchGate
Selected projects

A question
An experiment
Something built

Four explorations in how systems think,
organize, predict and protect.

Keep scrolling. See the logic unfold. ↓

Movie Mood
Machine

Machine learning, NLP

Type a review. Watch a model decide, and see the words it decided on.

Try the live appRead the code on GitHub

Hosted on a free instance, so the first request after it sleeps can take about a minute to wake.

SENTIMENT PIPELINELabeled reviews
Illustrative examplesTF-IDF, logistic regression
Split

Decide what the model may see

Every review arrives as free text with one human label, positive or negative. When the labeled set is big enough, the trainer holds back a stratified slice, scores itself on reviews it did not fit, then refits on everything. The deployed demo ships with ten sample reviews and fits on all of them, so what it shows you is behavior, not a benchmark.

Vectorize

TF-IDF turns words into weight

A classifier cannot read. TF-IDF scores each term by how often it appears in one review against how common it is everywhere, so filler words weigh almost nothing. I fit two vectorizers side by side: word unigrams and bigrams, so “was bad” counts as its own feature, and character three to five grams, which keep working through typos and odd spacing.

Place

Similar reviews land near each other

Plotted, those vectors give the picture the rest of this chapter is built on. Reviews worded alike sit close together and the two labeled groups pull apart. The two axes stand in for a space with one dimension per feature, far wider than any screen; the geometry is the point, not the picture.

Compare

The simplest honest answer first

You can classify a new review without training anything: find the five nearest labeled reviews and let them vote. k-nearest neighbors is the clearest way to see what similarity means in this space, and it is where my data mining coursework started. It keeps every example instead of learning from them, which is exactly why it is not what I shipped.

Weigh

The shipped model draws a line

Movie Mood Machine does not take a vote. Logistic regression learns one weight per term and adds them up, and that sum is a single boundary through the whole space. A prediction becomes two facts: which side of the line a review falls on, and how far from it.

Decide

A label, and how sure it is

That distance goes through a logistic curve, which turns it into a probability. The app reports both sides rather than a bare verdict, because a review sitting on the line and one sitting far from it should not look the same to the person reading the result.

Ship

Show the words, then serve it

The same weights say which terms pushed a prediction, so the app lists them instead of asking for trust. The fitted pipeline is saved with joblib, the container is a slim Python image, and one small JSON endpoint answers the page: post a review, get the label, both probabilities and the signals behind them.

An image
Rebuilt as a tree

Java, data structures

Store detail only where detail exists.

Academic project. Source code available on request.

QUADTREE / RECURSIVE PARTITIONRead the image
8 × 8 imageJava, recursive structure
Read

Start with the whole picture

An 8 × 8 image can be stored as 64 individual pixels. But large areas often contain exactly the same color.

Divide

Four regions. One decision

Check whether a region is uniform. If it is mixed, divide it into four quadrants. The animation follows the pattern in my original project diagram.

Recurse

Let the detail build the structure

Mixed quadrants keep splitting. Uniform ones stop. Watch the image partitions and tree nodes build together as the recursion moves deeper.

Reconstruct

Fewer repeated values. Same picture

My Java image engine supports pixel updates, brightness computation and reconstruction, with a custom dynamic circular queue and recursive restructuring.

See the original Quadtree diagramOriginal eight by eight image and its recursive tree representation

A clearer view
of the next shift

PyTorch, restaurant intelligence

Next Shift: sales forecasting from real restaurant signals.

Explore Next Shift on GitHub
NEXT SHIFT / FORECAST PIPELINEGather the signals
68 → 64 → 32 → 1Illustration, not live sales
Collect

A forecast starts before the model

Read-only Square OAuth brings in orders, payments and refunds. The pipeline deduplicates records and aligns them to the restaurant’s business day.

Prepare

Give yesterday some context

Daily totals become lag values and rolling averages, joined with weather and calendar signals. Pandas transforms the history into model-ready features.

Learn

Let the network connect the signals

A PyTorch network maps 68 inputs through layers of 64 and 32 units to one sales prediction. Chronological splits and early stopping keep evaluation tied to future performance.

Evaluate

An honest range beats false certainty

The forecast includes an 80% range and expected order count. It is compared with last week and a seven-day average, with measured results reported even when a simple baseline wins.

AI infrastructure and security

A safer path
to AI tools

The moment AI can take action,
the boundaries matter.

A useful agent may touch customer records, request refunds or stream sensitive information. Every connection needs a clear answer to three questions: who can act, what can leave, and what happens when something fails?

Useful tools
Explicit boundaries

Secure AI gateway, Python

Four focused services for an AI platform engineering assessment.

View all four services on GitHub
Customer request
Validated refund tool
Explicit response
Customer request
Validated refund tool
Explicit response
task2_mcp_security_gateway.py
123    role = ROLE_BY_TOKEN.get(bearer_token(authorization) or "")124    if role is None:125        return rpc_error(rpc.id, UNAUTHENTICATED, "Authentication required")
130            return rpc_error(rpc.id, -32602, "Invalid params: tool name is missing or malformed")131        if is_admin_tool(name) and role != "admin":132            log.warning("blocked %s for role=%s", name, role)133            return rpc_error(rpc.id, UNAUTHORIZED_TOOL, "Unauthorized Tool Call")
Incoming text stream
PII guardrail
Redacted output
Token-aware rate limit
Provider failure
Controlled fallback
The tool

Expose a narrow operation

The customer refund MCP service defines a focused tool boundary. Structured requests and validation make the operation explicit instead of treating model-generated text as an instruction to execute.

The gateway

Check permission before forwarding

The security gateway validates JSON-RPC, checks the bearer token’s role and blocks restricted administrative tools. The highlighted excerpt is taken directly from the repository.

The output

Protect the stream as it leaves

The streaming PII guardrail handles sensitive information during output. This brings privacy checks into the response path, where partial chunks and boundaries need deliberate handling.

The fallback

Make failure a designed path

A token-aware rate limiter and fallback router explore how a service can respond when capacity or a provider becomes unavailable. Together, the four services cover action, access, output and resilience.

Inside the gateway

The check that stops
an unauthorized tool call

The request is forwarded only after its role and tool name pass validation.

Read the source on GitHub
123    role = ROLE_BY_TOKEN.get(bearer_token(authorization) or "")124    if role is None:125        return rpc_error(rpc.id, UNAUTHENTICATED, "Authentication required")126127    if rpc.method == "tools/call":128        name = (rpc.params or {}).get("name")129        if not isinstance(name, str) or not TOOL_NAME.fullmatch(name):130            return rpc_error(rpc.id, -32602, "Invalid params: tool name is missing or malformed")131        if is_admin_tool(name) and role != "admin":132            log.warning("blocked %s for role=%s", name, role)133            return rpc_error(rpc.id, UNAUTHORIZED_TOOL, "Unauthorized Tool Call")134135    return await forward(request.app.state.http, rpc, payload, role)
The foundation

Still curious
Still building

George Mason University

B.S. Computer Science
Major GPA 3.7, Dean’s List

Python, TypeScript, React, Java, C, SQL
Cloudflare, AWS, PyTorch, OpenAI

Download my resume ↓