This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 2 - Side Hustle.

A small restaurant owner has hundreds of reviews and no time to read them. The star average says 4.1. It doesn't say what to fix this week.

I built Perforvisor to answer that one question: what should I fix first? It reads every review with a small open-weight model, turns what customers say into a knowledge graph and gives the owner a verdict, up to three concrete actions and the reviews behind each one.

The review that made it click

While testing on a real café in Indore (Indian Coffee House, DAVV, synced live from Google Maps), Perforvisor flagged this one:

★★★★★ "Needs to be more clean."

Five stars. One complaint. A star-average dashboard counts that as a happy customer.

Perforvisor reads the words, not the stars. The model read the text as negative and the Trust page flagged it as "Star rating contradicts the text". Because it's flagged, it can't inflate the praise list or the advice either.

I had tested this on purpose earlier: I added a 5★ review that was really a complaint and asked "What do users complain about most?" The answer counted it as a complaint, with the review cited. Seeing the same thing happen on a real review, unprompted, is when I knew the idea worked.

Citation of the rogue review

What I Built

Connect a business (search Google Maps, load a sample or paste reviews from any platform, one per line with an optional rating) and Perforvisor:

  • Reads every review. For each one, Qwen3-4B pulls out the aspects people talk about (food, service, value, wait time, cleanliness…), the sentiment for each aspect and short concrete claims ("staff were rude at the counter").
  • Builds a knowledge graph of claims. Claims that say the same thing in different words merge into one node. On the café, "The service staff members were exceptionally polite and attentive" and "staff was very polite" became one claim backed by two reviews.
  • Writes the advice. A verdict under 40 words and up to three actions for the owner, most-mentioned complaint first.
  • Shows trends. Rating and sentiment over time and review bursts: days with at least 3 reviews and 3× the usual daily volume, labelled as a 5★ burst, a 1★ burst, or a volume spike.
  • Flags reviews you shouldn't trust. Near-copy-paste text and ratings that contradict the words. Flagged reviews are kept out of praise, complaints and advice.
  • Compares you with competitors on the same aspects, side by side.
  • Answers questions like "Is the wait long on weekends?" from the reviews it retrieves, with those reviews cited.

Who pays and why

The buyer is the owner of one location: a restaurant, café, salon, clinic or shop with a few hundred reviews. They know reviews matter. They don't read all of them every week and reputation-management suites are priced and built for chains.

What they get for the money is a weekly to-do list grounded in their own customers' words, plus an early warning when something changes.

Pricing (a proposal, not live yet):

Plan Price What's in it
Free $0 One business, samples or pasted reviews, manual sync
Owner $9/month (around ₹499 in India) Daily sync from Google Maps, up to 3 competitors, Trust page, Ask

Demo

GitHub logo KrAG2000 / perforvisor

A review analyser app for your location, product or anything that contains publically available reviews and provide a detailed feedback based on those reviews and ratings. Additional analytics for comparison

How It Works

Application Workflow Diagram

Vercel runs the app, the API and background syncs. Two vLLM servers share one L4 GPU on GKE. MongoDB Atlas holds the records and the knowledge graph; Tiger Data holds vectors and time series.

Part What runs it
Review extraction, claim-merge judge, advice, answers Qwen3-4B (official AWQ 4-bit build) on vLLM, self-hosted, thinking mode off
Embeddings for retrieval and claim matching EmbeddingGemma 2 on vLLM, self-hosted, 768 dimensions
Both models One NVIDIA L4 on a GKE Spot node, split with GPU time-sharing (60% / 15% of the 24 GB)
Orchestration LangGraph.js: an analyse graph (extract → aggregate → summarise) and an ask graph (index → retrieve → answer)
Records and knowledge graph MongoDB Atlas
Vector search and time series Tiger Data: pgvector plus a TimescaleDB hypertable
Google Maps search and reviews SerpApi, behind a cache and a monthly budget guard
App, API, background sync Vercel: Vite frontend, Fastify backend, Vercel Queues + a jobs service, daily Vercel Cron

One sync of a business goes: fetch new reviews → store in MongoDB and embed into Tiger Data → extract each review → merge claims into the graph → rebuild the report. The app streams progress the whole way.

Five decisions I'd make again

1. A claim takes its aspect's sentiment, not the review's. "Taste was fine" inside an angry review about the wait isn't a complaint about taste. Each claim is tagged with an aspect and it inherits the sentiment the model gave that aspect. The review's overall sentiment is only the fallback.

2. Claim merging is two-stage, because one threshold can't work. I measured EmbeddingGemma 2 on pairs of claims: same-meaning pairs scored 0.867 to 0.957, different-meaning pairs 0.772 to 0.912. Those ranges overlap, so any single cut-off either merges different things or misses real matches. So:

  • Candidates must share the business, sentiment and aspect.
  • Cosine similarity ≥ 0.93 merges automatically.
  • 0.86 to 0.93 goes to Qwen3-4B as a yes/no question ("If they name different dishes, products or features, answer no").
  • Below 0.86 stays separate.

The cheap path handles the clear cases and the model only judges the grey zone. In testing, the judge leaned towards keeping claims apart, which is the safer mistake for counts.

3. I removed the reranker after measuring it. My first design had a small LLM reranker. On my labelled set it lowered rerank score from 0.86 to 0.63. It scored "overheated on a flight" 2/10 for the question "Does it overheat?". Now retrieval is plain cosine top-8 over EmbeddingGemma 2 and Qwen3-4B, while writing the answer, cites only the reviews that actually support it. Citations are checked against what the model was shown, so it can't cite a review it never saw.

Ranking (12 labelled questions) Reranked score MRR Similarity based score
Keyword overlap (my first version) 0.56 0.69 0.60
Cosine similarity, EmbeddingGemma 2 0.86 0.89 0.98

Answers: citation precision 0.79, recall 0.79, median 1.0 s per answer (measured on my laptop's RTX 4060). It's a small test set, so I treat it as a direction, not a benchmark. You can rerun it with pnpm --filter @perforvisor/backend eval:retrieval.

4. Only extreme mismatches count as suspicious. On real reviews, 4★ with "the gravy could be better" is normal. So a review is flagged only at the extremes: 5★ with negative text, or 1★ with positive text. Copy-paste detection compares word 3-grams (Jaccard ≥ 0.7) and skips reviews under 5 words, because lots of genuine people just write "Nice place".

5. Code decides the facts, the model writes the words. Small models mixed up strengths and weaknesses when I asked them to list both. Now strengths and weaknesses come straight from the classified claims in code and the model only writes the verdict and actions, with the rule "never suggest fixing something customers praise". Thinking mode is off for every call: each one is schema-constrained JSON and thinking would multiply latency for little gain.

Two problems that took longest

Serverless time limits. A first sync reads dozens of reviews with a model and a Vercel function stops at 300 s. Each run stops starting new reviews at 240 s and queues a continuation. Every step skips finished work (analysed reviews, reviews already in the graph), so the next run picks up exactly where the last one stopped. Failed runs retry with backoff and an idempotency key per business per minute collapses double-clicks and overlapping crons into one sync.

EmbeddingGemma 2 crashed vLLM on the L4. vLLM sizes its prefill attention tiles for A100/H100 shared memory. The L4 has about 99 KB per block, so the embedding server died at startup. I patched the kernel file and mount it into the container with a ConfigMap until it's fixed upstream.

Why Open Innovation Matters Here

The cost has to be flat, because the product re-reads everything. Every review gets extracted, every new review gets embedded, every grey-zone claim pair gets a judge call and every question gets an answer. With per-token pricing, each of those is a line on the bill and the bill grows with every owner and every sync. With my own models, the GPU is a fixed cost that every business shares. The only thing left to do for me is to make sure that models are available and can handle requests from the growing clientele.

Here is the real arithmetic, from public prices (estimates, October 2026, us-central1):

Cost Price Per month
L4 GPU, g2-standard-4 Spot $0.423/hour ~$309 if always on; I scale it to zero when I'm not using it
GKE load balancer (one forwarding rule) $0.025/hour ~$18
SerpApi, daily re-sync (1 review page/day) $25 per 1,000 searches (Starter plan) ~$0.75 per business

So at the proposed $9/month, even an always-on GPU and load balancer are covered by about 40 paying owners and each owner after that mostly adds SerpApi cost. The GPU doesn't charge me more when the model reads more. I'll be honest about the other side: with only a few businesses, a cheap hosted API would cost less than an idle GPU. The open setup wins once the volume is steady and it keeps the cost predictable either way.

Small models are enough when the job is narrow. Pulling aspects, sentiment and claims out of one review is a well-defined task. A 4B model with schema-constrained output does it and a 0.74B embedding model handles retrieval and claim matching. Both fit on one 24 GB GPU with room to spare.

I control the knobs. I could switch Qwen3's thinking mode off, pin exact model versions, patch vLLM's kernel for my GPU and use EmbeddingGemma 2's task prefixes and Matryoshka truncation. Chat, extraction and embeddings are separate roles with their own URL and model name, so swapping the extraction model for a fine-tuned one later is a config change.

No model provider sees the data. Reviews and owners' questions go to models running on infrastructure I control. No third-party model provider gets them and no one can deprecate my model out from under me.

Prize Categories

Best Use of Gemma

EmbeddingGemma 2 is the retrieval and matching layer, served with vLLM on GKE (Google Cloud):

  • It embeds every review and every owner question. Cosine top-8 over these vectors beat keyword ranking on reranker picks (0.86 vs 0.56) and was good enough that I deleted the reranker.
  • It decides which claims merge in the knowledge graph. I measured its similarity ranges for same and different claims and set the 0.93 / 0.86 thresholds from them.
  • I use it the way it was trained: task: question answering | query: for questions, title: … | text: for reviews and task: sentence similarity for claim-to-claim comparison. Vectors are 768-d, with Matryoshka truncation built in for smaller sizes.
  • Getting it onto an L4 meant patching vLLM's prefill attention kernel (above).

Best Use of MongoDB Atlas

Atlas is the source of truth and the knowledge graph behind an app built on open-weight models:

  • Collections for businesses, reviews, per-review analyses (with the model name) and reports.
  • The knowledge graph lives in nodes (business, aspect, claim) and edges (HAS_ASPECT, HAS_CLAIM, ABOUT, COMPETES_WITH). Merged claims keep every wording as variants and every supporting review id, with first/last-seen dates. The café's graph has 62 nodes and 114 edges after one sync.
  • The SerpApi cache is a collection with a TTL index, so expired responses delete themselves, plus a per-month usage counter for the budget guard.
  • Sync progress is written to the business document and streamed to the app.

Best Use of Tiger Data

Tiger Data holds everything that's vectors or time:

  • pgvector: review_search (one embedding per review) for retrieval and claim_vectors for finding merge candidates. Retrieval is always scoped to one business, so a btree on the business key plus an exact vector scan is fast and it avoids HNSW's recall problems under filters at this scale.
  • I tested hybrid search and dropped it. Full-text plus vectors scored MRR 0.81 on my set; cosine alone scored 0.89.
  • TimescaleDB: review_events is a hypertable (30-day chunks). Trends use time_bucket (day, week or month depending on the range) and burst detection is one query over daily buckets.

Best Use of SerpApi

SerpApi keeps the advice grounded in fresh reviews:

  • Google Maps search to find a business, then Google Maps reviews with pagination: up to 3 pages on the first sync, 1 page on each daily re-sync.
  • Every call goes through a guard: identical requests within 24 h are served from the MongoDB cache and a monthly budget (default 200 of the free plan's 250) makes calls fail cleanly instead of overspending.
  • The Ask flow answers from those freshly synced reviews, with citations.

What's Next

  • A consumer side: "is this place actually good at X?" lookups. I've designed it to be location-aware, because there are a lot of restaurants called "Paradise" and the answer has to be about the one near you.
  • More sources: Amazon products and CSV import with column mapping.
  • Alerts when a burst of complaints starts.
  • A fine-tuned extractor: extraction is already its own model role, so a small fine-tuned model can replace it without touching the rest.

First User

Wrapping up

Perforvisor is a small, specific tool: one owner, one location, one question. Open models make it work as a business. They're cheap enough to read every review, I could tune them to the job and the data stays on infrastructure I run. A 5★ review that says "Needs to be more clean." is exactly what an owner needs to hear about and now they will.

Building Perforvisor: an AI review advisor on open-weight models
You

.

Agent
▸ Bash ls -la ~/Personal_Projects/lets-make-osp-that-someone-will-actually-pay-for
$ ls -la ~/Personal_Projects/lets-make-osp-that-someone-will-actually-pay-for
total 0 drwxr-xr-x. 1 life-workstation life-workstation 0 Oct 13 03:23 . drwxr-xr-x. 1 life-workstation life-workstation 638 Oct 13 03:23 ..

Looks like your message came through as just "." and the project folder is empty.

From the folder name (lets-make-osp-that-someone-will-actually-pay-for), I'm guessing you want to build an open-source project with a real path to revenue. Here are some ways I could start:

  1. Brainstorm ideas. I'd come up with open-source project ideas that have proven ways to make money, such as open-core, a hosted SaaS version, dual licensing or paid support.
  2. Check the market. I'd look at what developers say they'd pay for and where current tools fall short.
  3. Scaffold a project. If you already have an idea, I'll set up the repo, license, README and a first version.

What did you have in mind?

Show more
You

https://dev.to/challenges/hacktoberfest-week2-2026-10-12 You can use devrelay to get more info on this.

Agent
▸ ToolSearch {"query": "select:mcp__devrelay-gateway__get_challenges,mcp__devrelay-gateway...
{ "query": "select:mcp__devrelay-gateway__get_challenges,mcp__devrelay-gateway__get_challenge_details,mcp__devrelay-gateway__get_knowledge_document", "max_results": 3 }
[image] [image] [image]
▸ devrelay-gateway__get_challenges {}
{ }
{"Ok":[{"id":82,"title":"Hacktoberfest Open-Source AI Challenge: Week 4","slug":"hacktoberfest-week4-2026-10-26","description":"Register now to be notified as details drop.","details":null,"full_details":"","type_of":"challenge","starts_at":"2026-10-26T16:00:00.000Z","ends_at":"2026-10-31T06:59:00.000Z","published":true,"cover_image":"https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/events/cover_image/82/2dc6f675-b1e1-4f3f-b542-79b3677c2651.png","location_url":null},{"id":81,"title":"Hacktoberfest Open-Source AI Challenge: Week 3","slug":"hacktoberfest-week3-2026-10-19","description":"Register now to be notified as details drop.","details":null,"full_details":"","type_of":"challenge","starts_at":"2026-10-19T16:00:00.000Z","ends_at":"2026-10-25T06:59:00.000Z","published":true,"cover_image":"https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/events/cover_image/81/3599abf1-d96c-4e0c-bb18-89b345c3b5d0.png","location_url":null},{"id":80,"title":"Hacktoberfest Open-Source AI Challenge: Week 2","slug":"hacktoberfest-week2-2026-10-12","description":"The Hacktoberfest Open-Source AI Challenge: Week 2 runs October 12 to October 18. This week's theme is Side Hustle: build something with open-weight models or open-source AI that someone would actually pay for. $2,550 in prizes across 18 winners.\r\n\r\nThis year's Hacktoberfest is all about building brand-new projects with open-source AI and open-weight models. Every week brings a new theme, and every challenge is a fresh start, so you're competing on the same footing as everyone else.","details":null,"full_details":"The Hacktoberfest Open-Source AI Challenge: Week 2 runs October 12 to October 18. Build something with open-weight models or open-source AI that someone would actually pay for. $2,550 in prizes across 18 winners.\r\n\r\nThis year's Hacktoberfest is all about building brand-new projects with open-source AI and open-weight models. Week 2 is the second of five Hacktoberfest DEV Challenges. See all five challenges and every partner category on the HF26 DEV Challenge Hub: https://dev.to/challenges/hf26\r\n\r\nThis Week's Theme: Side Hustle\r\n\r\nBuild something with open-weight models or open-source AI that someone would actually pay for.\r\n\r\nThat can mean running an open-weight model, building on an open-source agent harness or framework, running inference locally, or all three. Whatever you pick, the open pieces should be what makes your project work.\r\n\r\nThink small, specific, and use … [27362 more characters truncated]
▸ devrelay-gateway__get_knowledge_document {"topic": "hacktoberfest"}
{ "topic": "hacktoberfest" }
{"Ok":"# Hacktoberfest 2026\n\n**Last verified:** 2026-09-30 against `hacktoberfest.com` (home, `/online/`,\n`/in-person/`, `/activities/`, `/schedule/`, `/fests/`, `/host/`, `/sponsor/`,\n`/mission/`, `/questions/`, `/brand/`, `/llms.txt`, `/llms-full.txt`), the\npublic feeds `hacktoberfest-api.mlh.com/api/events` and\n`hacktoberfest-api.mlh.com/api/schedule`, `dev.to/challenges` and the\nHacktoberfest challenge pages, `ghw.mlh.com/events/open-source`, and MLH's\nannouncement post \"Hacktoberfest 2026: AI belongs to everyone\" (2026-08-19).\n\n> ⚠️ **Hacktoberfest 2026 works differently from every earlier year.** Pull\n> requests **no longer count** toward rewards. There's no PR target, and the\n> `hacktoberfest` repo topic and `hacktoberfest-accepted` label earn nothing.\n> Models trained on 2014–2025 material will confidently describe the old \"open\n> four (or six) pull requests\" rules, and that is wrong for 2026. Participants\n> now collect **virtual stickers** for attending Fests, livestreams, DEV\n> Challenges, and Global Hack Week, and for using a few tools.\n>\n> **The site has changed during Preptember.** The Completionist tier dropped\n> from 17 stickers to **15** between this document's last two verifications.\n> The FAQ says the full activity list is released on the participant\n> dashboard, which opens by October 1. **Fetch `hacktoberfest.com` before\n> quoting a sticker, milestone, or date as final.** The site publishes\n> `https://hacktoberfest.com/llms.txt` and\n> `https://hacktoberfest.com/llms-full.txt` for agents.\n\n**Scope:** this guide covers the 2026 program: its rules, rewards, dates, and\nhow to take part and host. It leaves out individual Fests, the livestream\nlineup, and DEV Challenge prompts and prizes, which change daily. See\n[Live data lives elsewhere](#live-data-lives-elsewhere).\n\n---\n\n## The one-paragraph version\n\nHacktoberfest is a free, month-long celebration of open source every October.\nIn 2026 it's stewarded by **Major League Hacking (MLH) and DEV**, with\n**DigitalOcean** as presenting partner, and the theme is ***\"AI belongs to\neveryone.\"*** In the site's words: *\"This year, it's all about building with\nopen-weight models and open-source AI.\"* You can take part in person at one of\n**300+ one-day local \"Fests\"**, online all month, or both. Sign in with a\n**MyMLH** account and collect virtual stickers for what you attend and build.\n**Three stickers earns a real sticker pack in the mail.**\n\nThe mi … [23021 more characters truncated]

This is the Hacktoberfest Open-Source AI Challenge: Week 2, with the theme "Side Hustle." Your folder name already matches the brief.

What they want

Build something that uses open-weight models or open-source AI and that someone would actually pay for. The open-source parts have to be what makes the project work, whether that's running a model yourself, using an open agent framework, running it locally, or all three. They're asking for small, specific tools that solve a real problem for a real person, like a freelancer, a small business or a niche hobby group.

Their example ideas: a receipt sorter for freelancers that runs locally, a listing writer for Etsy or eBay that works from product photos, and a menu translator for a local restaurant.

Key facts

  • Deadline: Sunday, October 18, 11:59 PM PDT. That gives you about 6 days.
  • How to enter: Publish a DEV post using the Side Hustle submission template, with the tag #hf26challenge. It must be a new project built during the challenge window, and you get one entry.
  • Judging: The writing in your post counts the most. Then fit with the theme (is open AI central, and would someone pay for it?), creativity, how well it works, and optionally how well you use a partner's technology.
  • Bonus: Get a first real user and describe how it went: did they pay, would they, and what did they ask for next?
  • Prizes ($2,550 total):
    • Overall winner: $250, plus a DEV++ membership and a badge
    • 6 featured categories at $200 each: Render, TabPFN, Tinker, Arduino, DigitalOcean, Gemma
    • 11 partner categories at $100 each: Backboard, ElevenLabs, Entire, GitHub Copilot, Mastra, MongoDB Atlas, Sentry, SerpApi, Temporal, Tiger Data, and a .tech domain
    • One project can enter every category it really uses, but you can only win once.
  • Free credits from Tinker, Render, Backboard and ElevenLabs are at hacktoberfest.com/my. Submitting also earns a Hacktoberfest sticker.
  • In your post, explain why open-source AI matters for your project: lower costs, private data, fine-tuning for a niche, or not being stuck with another company's pricing.

Ideas that fit well and could enter several categories

  1. Local-first bookkeeping helper for freelancers. Gemma runs locally to pull data out of receipts and invoices, then sorts them into tax categories. Tiger Data or Postgres stores the records. The pitch is that client data never leaves the laptop. Fits Gemma, Tiger Data and Render.
  2. Contract and scope checker for freelancers. Paste in a client agreement or statement of work, and a local model flags risky clauses, unpaid-scope traps and missing payment terms. The pitch is privacy, plus it's cheap enough to sell for about $5 a month.
  3. Listing writer for small online sellers. A vision-capable Gemma model turns product photos into SEO-friendly listings for Etsy, eBay or Shopify, with SerpApi checking what similar products are priced at. Fits Gemma, SerpApi and Render.
  4. Review responder for local businesses. It pulls in a business's Google and Yelp reviews and drafts replies in that owner's voice, using a cheap fine-tune on Tinker. Fits Tinker, a featured category.

I'd lean toward #1 or #3. Both have an obvious buyer and a strong reason to use open models, and they fit the Gemma category ($200) plus a couple of $100 categories without forcing anything.

Want to pick one, or bring your own idea? I can then scaffold the project and plan the build so you have time left for the write-up, since that's what's judged most heavily.

Show more
You

Cut the prize but this tie, I realy want to use as many cloud platforms as possible. Not making a locally running app this time

Agent
▸ ToolSearch {"query": "select:mcp__devrelay-gateway__search_dev_to_semantic", "max_result...
{ "query": "select:mcp__devrelay-gateway__search_dev_to_semantic", "max_results": 1 }
[image]
▸ devrelay-gateway__search_dev_to_semantic {"query": "serving open-weight LLM in the cloud for a paid SaaS side project"...
{ "query": "serving open-weight LLM in the cloud for a paid SaaS side project", "per_page": 6 }
{"Ok":[{"id":4805262,"title":"The Real Post-Mortem: Serving Open LLMs on AWS (SageMaker vLLM vs. Bedrock Custom Models)","description":"Running an open-source LLM on AWS sounds straightforward at first. Pick a model, deploy it, send...","tags":["ai","machinelearning","llm","aws"],"path":"/rahul_r15/the-real-post-mortem-serving-open-llms-on-aws-sagemaker-vllm-vs-bedrock-custom-models-216b","url":"https://dev.to/rahul_r15/the-real-post-mortem-serving-open-llms-on-aws-sagemaker-vllm-vs-bedrock-custom-models-216b","score":1.0},{"id":3651259,"title":"What I learned from going 'cloud-optional' with my side projects.","description":"My AI is local, my code is hand-rolled: Why I'm falling in love with building small again It was 2...","tags":["cloud","sideprojects","showdev","ai"],"path":"/rexthony/what-i-learned-from-going-cloud-optional-with-my-side-projects-1af7","url":"https://dev.to/rexthony/what-i-learned-from-going-cloud-optional-with-my-side-projects-1af7","score":1.0},{"id":3491819,"title":"The Developer's Guide to Running LLMs Locally: Ollama, Gemma 4, and Why Your Side Projects Don't Need an API Key","description":"Every tutorial about building with LLMs starts the same way: \"First, get your OpenAI API key.\" But...","tags":["ai","llm","sideprojects","tutorial"],"path":"/kennedyraju55/the-developers-guide-to-running-llms-locally-ollama-gemma-4-and-why-your-side-projects-dont-54oe","url":"https://dev.to/kennedyraju55/the-developers-guide-to-running-llms-locally-ollama-gemma-4-and-why-your-side-projects-dont-54oe","score":1.0},{"id":4773770,"title":"The LLM Portability Drill: Redeploy an Open Model on a Second GPU Cloud","description":"Access to open weights gives a team the right to operate a model in its own environment. I test...","tags":["ai","cloud","infrastructure","llm"],"path":"/ihopkins/the-llm-portability-drill-redeploy-an-open-model-on-a-second-gpu-cloud-439g","url":"https://dev.to/ihopkins/the-llm-portability-drill-redeploy-an-open-model-on-a-second-gpu-cloud-439g","score":1.0},{"id":4596279,"title":"Comparing Open-Source LLM Gateways in 2026 to Run Enterprise AI at Scale","description":"If your applications are already using multiple AI providers, the next problem is usually not model...","tags":["opensource","llm","ai","devops"],"path":"/elsie-rainee/comparing-open-source-llm-gateways-in-2026-to-run-enterprise-ai-at-scale-4h4p","url":"https://dev.to/elsie-rainee/comparing-open-source-llm-gateways-in-2026-to-run-enterprise-ai-at-scale-4h4p" … [428 more characters truncated]

Got it: no more prize talk, and a cloud-hosted app this time. The rules still need the AI to be open-weight models or open-source AI, so the plan is to run open models on cloud infrastructure rather than calling a closed API like OpenAI's.

Pitch: ReplyDesk, a review-reply manager for small local businesses

Restaurants, salons and dentists know they should answer every Google review, but they rarely have time. ReplyDesk:
1. Pulls in new reviews every day.
2. Drafts replies in the owner's own voice.
3. Flags angry or urgent reviews.
4. Sends the owner a short weekly briefing they can listen to.

A plausible price is $15–30 a month per location. That's a real market (Birdeye and Podium charge far more), and you could pitch it to an actual local business for the "first user" bonus.

Why open models matter: at a few dollars a month, closed-API costs would eat the margin, while cheap open-model inference keeps it profitable. You can also fine-tune a small open model on each owner's past replies so the drafts sound like them, and your pricing isn't tied to another company's.

Cloud stack: every platform has a real job

Layer Platform What it does
Model hosting DigitalOcean (serverless inference or a GPU server) Runs the open-weight model (Gemma or Llama)
Voice fine-tuning Tinker Trains a small adapter on each owner's past replies
Agent logic Mastra Agent that sorts reviews (sentiment, urgency) and drafts replies
Memory Backboard Remembers each business's tone and facts (hours, staff names, policies)
Background jobs Temporal Cloud Daily review check, draft → owner approval → post, and retries
Review data SerpApi Pulls Google Maps reviews
Main database MongoDB Atlas Businesses, reviews, drafts
Analytics Tiger Data (Timescale) Ratings and sentiment over time for the dashboard
Audio ElevenLabs Weekly spoken briefing ("3 new reviews, 1 needs you")
Monitoring Sentry Traces each agent run (model calls, tool use, failures)
Web app Render Hosts the dashboard and API
Domain .tech replydesk.tech

That's 12 platforms, and none of them is there just to be on the list.

The risk: with 6 days left, 12 integrations can fail in a lot of places. I'd build it in rings and only add the next ring once the previous one works:
- Ring 1 (must work): SerpApi → model on DigitalOcean → MongoDB → web app on Render.
- Ring 2: Temporal jobs, Mastra agent, Sentry tracing.
- Ring 3: Tinker fine-tuning, Backboard memory, Tiger Data analytics, ElevenLabs briefing.

What other DEV posts say

Should I go with ReplyDesk, or do you want me to pitch a different idea on the same stack? Also, TypeScript or Python? Mastra is TypeScript, so I'd go with TypeScript unless you have a strong preference.

Show more
You

Failure is not an issue. I can debug and solve in no time. And I am aware of hosting an AI on a cloud service. I have hosted one on GCP vertex AI and messed everything up tbh. So, hopefully, i will use that expereince to make AI part better at least ;)

Agent
▸ Bash node -v; npm -v; pnpm -v 2>/dev/null; bun -v 2>/dev/null; git --version; pyth...
$ node -v; npm -v; pnpm -v 2>/dev/null; bun -v 2>/dev/null; git --version; python3 --version; gcloud --version 2>/dev/null | head -1; doctl version 2>/dev/null; docker --version 2>/dev/null
v20.19.4 10.8.2 1.4.2 git version 2.55.0 Python 3.14.6 Docker version 29.6.2, build 1.fc44
▸ Bash for p in @mastra/core @temporalio/client mongodb @sentry/node @elevenlabs/ele...
$ for p in @mastra/core @temporalio/client mongodb @sentry/node @elevenlabs/elevenlabs-js serpapi next; do echo "$p: $(npm view $p version engines --json 2>/dev/null | tr -d '\n' | head -c 200)"; done
@mastra/core: { "version": "1.76.0", "engines": { "node": ">=22.13.0" }} @temporalio/client: { "version": "1.24.0", "engines": { "node": ">= 20.3.0" }} mongodb: { "version": "7.7.0", "engines": { "node": ">=20.19.0" }} @sentry/node: { "version": "11.7.0", "engines": { "node": ">=20.19.0 <22.0.0 || >=22.12.0 <23.0.0 || >=23.2.0" }} @elevenlabs/elevenlabs-js: { "version": "2.71.0", "engines": { "node": ">=18.0.0" }} serpapi: "2.2.1" next: { "version": "16.4.0", "engines": { "node": ">=20.9.0" }}
▸ Write {"file_path": "~/.claude/projects/-home-life-workstation-Personal-Projects-le...
{ "file_path": "~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/user-cloud-builder.md", "content": "---\nname: user-cloud-builder\ndescription: User is a confident debugger who wants cloud-heavy builds; has prior (messy) GCP Vertex AI model-hosting experience\nmetadata:\n type: user\n---\n\n- Says failure risk isn't a concern: \"I can debug and solve in no time\". Don't pad plans with risk caveats or \"build in rings\" hedging.\n- Has hosted a model on GCP Vertex AI before and \"messed everything up\"; wants to apply that lesson to do the AI-hosting part better.\n- For this project, explicitly wants as many cloud platforms as possible and NOT a locally running app.\n- Doesn't want prize/competition talk foregrounded (\"cut the prize bit\").\n\nRelated: [[hf26-week2-project]]\n" }
File created successfully at: ~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/user-cloud-builder.md
▸ Write {"file_path": "~/.claude/projects/-home-life-workstation-Personal-Projects-le...
{ "file_path": "~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/hf26-week2-project.md", "content": Source:https://dev.to/kartik_agnihotri_b7c42298/perforvisor-a-5-review-said-needs-to-be-more-clean-open-models-caught-it-38pn

Related posts