Perforvisor: a 5★ review said "Needs to be more clean." Open models caught it. A developer built Perforvisor, an open-source review-analysis tool that uses a self-hosted Qwen3-4B model on vLLM to extract claims from customer reviews, merge them into a knowledge graph, and surface a weekly list of fixes for single-location businesses. Testing on a live café in Indore, the tool flagged a five-star review reading "Needs to be more clean" as a complaint, with a Trust page marking it "Star rating contradicts the text" so it cannot inflate the praise list or advice. The stack runs on Vercel with LangGraph.js orchestration, MongoDB Atlas for records and graph data, and Tiger Data for pgvector and time-series storage, with both models sharing one L4 GPU on a GKE Spot node. This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 2 - Side Hustle https://dev.to/challenges/hf26 . 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. 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. Connect a business search Google Maps, load a sample or paste reviews from any platform, one per line with an optional rating and Perforvisor: 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 | 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. 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: 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. 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. 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. EmbeddingGemma 2 is the retrieval and matching layer, served with vLLM on GKE Google Cloud : 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. Atlas is the source of truth and the knowledge graph behind an app built on open-weight models: 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. Tiger Data holds everything that's vectors or time: 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. 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. SerpApi keeps the advice grounded in fresh reviews: 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. . bash $ 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: What did you have in mind? https://dev.to/challenges/hacktoberfest-week2-2026-10-12 https://dev.to/challenges/hacktoberfest-week2-2026-10-12 You can use devrelay to get more info on this. { "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 { } {"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 { "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. 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. hf26challenge . It must be a new project built during the challenge window, and you get one entry. 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. 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 { "query": "select:mcp devrelay-gateway search dev to semantic", "max results": 1 } image { "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. 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. | 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. 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. 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 ; bash $ 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/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" }} { "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 { "file path": "~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/hf26-week2-project.md", "content": "---\nname: hf26-week2-project\ndescription: This repo is an entry for DEV Hacktoberfest Open-Source AI Challenge Week 2 \"Side Hustle\" , due 2026-10-18 11:59 PM PDT\nmetadata:\n type: project\n---\n\nBuilding a cloud-hosted product using open-weight models that someone would pay for, for the DEV challenge id 80, tag hf26challenge, submit via DEV post with the Side Hustle template . Deadline 2026-10-18 23:59 PDT. Writing quality is judged most heavily; a real first user is a bonus.\n\nProposed idea 2026-10-13 : \"ReplyDesk\" — review-reply agent for small local businesses, built across many cloud platforms Vertex AI/DigitalOcean for model hosting, Tinker, Mastra, Backboard, Temporal, SerpApi, MongoDB Atlas, Tiger Data, ElevenLabs, Sentry, Render, .tech domain .\n\n Why: user wants max cloud platforms, no local app — see user-cloud-builder .\n How to apply: keep the open-weight model central to the story; check the user has confirmed the idea/stack before assuming it's final.\n" } File created successfully at: ~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/hf26-week2-project.md bash $ cat ~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory/MEMORY.md <<'EOF' - User: cloud builder user-cloud-builder.md — confident debugger, wants max cloud platforms, prior Vertex AI hosting experience - HF26 Week 2 project hf26-week2-project.md — DEV Hacktoberfest "Side Hustle" entry, due 2026-10-18; ReplyDesk idea EOF Bash completed with no output Fair enough, I'll drop the caution and build the full thing. Since you've hosted on Vertex AI before, let's add Google Cloud to the list. That's one more platform and a chance at a cleaner run on Vertex this time. This gives the post a strong "why open" section that a closed API can't match: the same weights run on two clouds, and you can switch between them whenever you like. If you remember what went wrong on Vertex last time quota, endpoint scaling, region, auth? , tell me and I'll plan around it. That brings the stack to 13 platforms: Vertex AI, DigitalOcean, Tinker, Mastra, Backboard, Temporal, SerpApi, MongoDB Atlas, Tiger Data, ElevenLabs, Sentry, Render and a .tech domain. fnm or nvm , or do you want to upgrade it yourself? I will use node 24. You can set default to 24 now using nvm bash $ export NVM DIR="$HOME/.nvm"; if -s "$NVM DIR/nvm.sh" ; then echo "nvm not installed"; exit 0; fi; . "$NVM DIR/nvm.sh"; nvm --version; nvm ls 2 &1 | head -20 php 0.40.3 0;32m- v20.19.4 0m 0;34m v22.21.1 0m 0;34m v22.23.3 0m 0;34m v24.21.0 0m 0;33m system 0m 0;32mdefault 0m 0;90m- 0m 0;32m20 0m 0;90m- 0m 0;32mv20.19.4 0m 0;31miojs 0m 0;90m- 0m 0;31mN/A 0m 0;37m default 0m 0;31munstable 0m 0;90m- 0m 0;31mN/A 0m 0;37m default 0m 0;34mnode 0m 0;90m- 0m 0;34mstable 0m 0;90m- 0m 0;34mv24.21.0 0m 0;37m default 0m 0;34mstable 0m 0;90m- 0m 0;34m24.21 0m 0;90m- 0m 0;34mv24.21.0 0m 0;37m default 0m 1;33mlts/ 0m 0;90m- 0m 1;33mlts/krypton 0m 0;90m- 0m 0;34mv24.21.0 0m 1;33mlts/argon 0m 0;90m- 0m 0;31mv4.9.1 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/boron 0m 0;90m- 0m 0;31mv6.17.1 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/carbon 0m 0;90m- 0m 0;31mv8.17.0 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/dubnium 0m 0;90m- 0m 0;31mv10.24.1 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/erbium 0m 0;90m- 0m 0;31mv12.22.12 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/fermium 0m 0;90m- 0m 0;31mv14.21.3 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/gallium 0m 0;90m- 0m 0;31mv16.20.2 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/hydrogen 0m 0;90m- 0m 0;31mv18.20.8 0m 0;90m- 0m 0;31mN/A 0m 1;33mlts/iron 0m 0;90m- 0m 0;31mv20.20.2 0m 0;90m- 0m 0;31mN/A 0m Node 24.21.0 is already installed, so I just need to make it the default. bash $ export NVM DIR="$HOME/.nvm"; . "$NVM DIR/nvm.sh"; nvm alias default 24 && nvm use default /dev/null && node -v && npm -v && echo "24" ~/Personal Projects/lets-make-osp-that-someone-will-actually-pay-for/.nvmrc && bash -lc 'node -v' php 0;34mdefault 0m 0;90m- 0m 0;34m24 0m 0;90m- 0m 0;34mv24.21.0 0m v24.21.0 12.0.2 v24.21.0 Node 24 is now your default v24.21.0, with npm 12.0.2 . A fresh login shell picks it up, so new terminals will use it. I also added a .nvmrc with 24 to the project folder, so running nvm use there selects the same version. Your already-open terminals are still on Node 20 until you run nvm use 24 or open a new one. Should I go ahead and scaffold ReplyDesk in TypeScript? That's the Next.js dashboard on Render, the Temporal worker, the Mastra agent, and the model router for Vertex AI and DigitalOcean. Or did you want a different idea? Reply desk is a great idea. I actually have a better idea than auto reply. I reserached and came to know that google and amazon exposes apis to get the reveiw and customer feedback data. We can make an app that processes this feedback and review data and our AI processes this data to give insights about how the product is performing. In case of google map, it will be restaurants review, for amazon, a prodcut psoted by the seller will be the one. On a broader level, we can make an app that can connect to any service having review system specially if they expose the feedback or review api for automation and we can actually automate the process of assessment of our restaurants, our grocery shop, product being sold on amazon, flipkart, blinkit like platforms. Even amazon can use this to get customer's rating for a particular product or seller to analyse and review fake products and their delisting, removing fraud sellers. Wow. I am liking it. Its name should be different. Reply desk is good for the original idea but not for something i have in my mind right now. { "query": "select:WebSearch", "max results": 1 } image { "query": "Amazon Selling Partner API Customer Feedback API reviews brand owners", "mode": "standard" } Web search results for query: "Amazon Selling Partner API Customer Feedback API reviews brand owners" Links: {"title":"Customer Feedback API","url":"https://developer-docs.amazon.com/sp-api/docs/customer-feedback-api"},{"title":"Customer Feedback API","url":"https://developer-docs.amazon.com/sp-api/docs/customer-feedback-api-v2024-06-01-use-case-guide"},{"title":"Select your preferred language","url":"https://developer.amazonservices.com/start/customer-feedback-insights-api"},{"title":"Select your preferred language","url":"https://developer.amazonservices.com/start/customer-feedback-api"},{"title":"New: Introducing the Customer Feedback API v2024-06-01","url":"https://developer-docs.amazon.com/sp-api/changelog/new-introducing-the-customer-feedback-api-v2024-06-01"},{"title":"New: Introducing the Customer Feedback API v2024-06-01","url":"https://developer-docs.amazon/sp-api/lang-us/changelog/new-introducing-the-customer-feedback-api-v2024-06-01"},{"title":"Selling Partner API BlogVideos","url":"https://developer-docs.amazon.com/sp-api-blog/docs/enhancing-user-reviews-and-feedback"},{"title":"New: Introducing the Customer Feedback API v2024-06-01","url":"https://developer-docs.amazon/sp-api/changelog/new-introducing-the-customer-feedback-api-v2024-06-01"},{"title":"New: Introducing the Customer Feedback API v2024-06-01","url":"https://developer-docs.amazon/sp-api/lang-US/changelog/new-introducing-the-customer-feedback-api-v2024-06-01"},{"title":"new blog post enhancing user reviews and feedback","url":"https://developer-docs.amazon.com/sp-api/v2.0/changelog/new-blog-post-enhancing-user-reviews-and-feedback"} Here are the search results for Amazon Selling Partner API Customer Feedback API reviews brand owners: Key Information: The Selling Partner API for Customer Feedback Customer Feedback API provides insights from customer reviews and returns. This API provides the same information as the Product Opportunity Explorer OX on Seller Central and Vendor Central. Functionality and Features: Review insights are available at the ASIN and browse node level, while return insights are only available at the browse node level. The Customer Feedback API gives developers programmatic access to customer signals, enabling you to build tools that help sellers understand what customers love, what frustrates them, and where to focus next, whether you're building a product analytics dashboard, a listing optimization tool, or an automated quality monitoring s … 489 more characters truncated { "query": "Google Business Profile API list reviews accounts.locations.reviews owner", "mode": "standard" } Web search results for query: "Google Business Profile API list reviews accounts.locations.reviews owner" Links: {"title":"Google Business Reviews","url":"https://docs.upload-post.com/api/google-business-reviews"},{"title":"truto.one","url":"https://truto.one/integrations/detail/googlereviews.md"},{"title":"truto.one","url":"https://truto.one/integrations/detail/googlereviews/"},{"title":"Google Business Profile एपीआई में","url":"https://developers.google.cn/my-business/reference/rest/v4/accounts.locations.reviews/list?hl=hi"},{"title":"REST Resource: accounts.locations.reviews","url":"https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews"},{"title":"For Agents","url":"https://jentic.com/apis/googleapis.com/my-business"},{"title":"REST Resource: accounts.locations.reviews","url":"https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews?authuser=1"},{"title":"How to Reply to Google Business Reviews via API","url":"https://postproxy.dev/how-to/reply-google-business-reviews-api/"},{"title":"Google Business Reviews API","url":"https://bundle.social/google-business-profile-reviews-api"} Based on the search results, here's what I found about the Google Business Profile API's accounts.locations.reviews.list endpoint: Overview The accounts.locations.reviews.list method returns the paginated list of reviews for the specified location. Response Structure A successful response returns a JSON object containing a list of reviews , averageRating , totalReviewCount , and optionally nextPageToken for pagination. Review Resource A Review resource has the form accounts/{accountId}/locations/{locationId}/reviews/{reviewId} and includes fields like name, reviewId, reviewer object, starRating, comment, createTime, updateTime, and reviewReply. Review Data The API provides: - The author of the review reviewer object - The star rating of the review - The body of the review as plain text with markups comment - The owner/manager of the location's reply to the review reviewReply The documentation indicates that authorization requires specific OAuth scopes, but the exact scopes aren't detailed in these search results. REMINDER: You MUST include the sources above in your response to the user using markdown hyperlinks. { "query": "Flipkart seller API product reviews ratings endpoint", "mode": "standard" } Web search results for query: "Flipkart seller API product reviews ratings endpoint" Links: {"title":"Flipkart API","url":"https://www.openwebninja.com/request-apis/flipkart"},{"title":"docs.anysite.io","url":"https://docs.anysite.io/api-reference/flipkart/flipkartproductsreviews"},{"title":" Flipkart Scraper - Products, Prices, Specs & Reviews scrapesage/flipkart-scraper Actor","url":"https://apify.com/scrapesage/flipkart-scraper.md"},{"title":"docs.anysite.io","url":"https://docs.anysite.io/api-reference/flipkart/flipkartsellers"},{"title":" Flipkart Reviews ikmal suzali atr/flipkart-reviews Actor","url":"https://apify.com/ikmal suzali atr/flipkart-reviews.md"},{"title":"www.itechguides.com","url":"https://www.itechguides.com/?p=863860"},{"title":"api.apify.com","url":"https://api.apify.com/v2/acts/OKiJ0vq9IJeGhBbzP/builds/NwY9w3qA5F3ciwVel/openapi.json"},{"title":" Flipkart Reviews Scraper solidcode/flipkart-scraper Actor","url":"https://apify.com/solidcode/flipkart-scraper.md"},{"title":" Documentation Index","url":"https://docs.anysite.io/api-reference/flipkart/flipkartsellers.md"},{"title":" Flipkart Product Scraper datascrapers/flipkart-scraper Actor","url":"https://apify.com/datascrapers/flipkart-scraper.md"} Based on the search results, here's information about Flipkart seller API product reviews and ratings endpoints: Official Flipkart Seller API For authorized seller integration, use the authenticated Marketplace Seller API, whose documented product-search operation can return seller-listing names, identifiers, prices, dimensions, and weight—but the response reference does not list ratings. Ratings are not listed in the documented response fields, and the endpoint documentation does not establish rating access. Third-Party API Solutions If you need product reviews and ratings data, there are third-party APIs available: Anysite.io API: The /flipkart/products/reviews endpoint is a POST request that takes a Flipkart product item ID or URL and returns reviews with rating, title, text, author, date, location, certified-buyer status, helpful counts, and images. There's also a /flipkart/sellers endpoint that returns seller information including name, rating, years with Flipkart, products sold, quality scores, and service-quality ratings. General Flipkart Data APIs: A reviews endpoint returns individual reviews with rating, title, text, and certified-buyer status. Important Note Flipkart's publis … 297 more characters truncated That's a stronger product than auto-reply. Review insights are something a business keeps paying for every month, while auto-reply is a feature competitors can copy easily. Before we lock the plan, here's what I checked on your API research, because it changes the design. | Platform | Official API? | What you actually get | |---|---|---| | Google Maps Business Profile API | Yes | Full review text, star rating, reviewer and the owner's reply. Only for locations the user owns or manages , and Google requires you to apply for API access. | | Google Maps any place | Partly | The Places API returns at most 5 reviews per place. SerpApi's Google Maps Reviews endpoint returns the full list, which is useful for comparing against competitors. | | Amazon Customer Feedback API | Yes | Aggregated insights, not raw reviews: topics customers mention, sentiment and trends per product, refreshed weekly. It requires the Brand Analytics role, which effectively means brand-registered sellers, and covers only the US, UK, France, Italy, Germany, Spain and Japan. India is not on that list. | | Flipkart | No reviews | The official seller API doesn't return ratings. Third-party scrapers exist, but Flipkart's terms forbid scraping. | | Blinkit, Swiggy, Zomato | None I know of | Data would have to come from the seller's own exports. | So the "connect to any review system" idea works, but the app needs a connector layer with three kinds of source : 1. Official APIs: Google Business Profile and the Amazon Customer Feedback API. 2. Data providers: SerpApi for public Google Maps and Amazon reviews, mainly to compare against competitors. 3. Universal import: CSV upload and a webhook for any platform without an API, such as Flipkart and Blinkit seller exports, Shopify or survey tools. All three feed into one standard review format , and the AI works only on that format. That's what lets you say "any platform" honestly. Building a detector that Amazon itself would buy is too much for this week, but fake-review detection for the business owner is buildable and a strong selling point. It would flag: - Bursts: 40 five-star reviews in two days. - Coordinated attacks: a sudden run of one-star reviews, possibly from a competitor. - Copy-paste reviews: near-identical text across reviews. - Rating–text mismatches: a one-star rating with praising text, or the reverse. Tiger Data Timescale fits naturally here because burst detection is a time-series problem. Marketplace-scale fraud detection, such as getting sellers delisted, works as the "where this goes next" section of your post. Two decisions for you: Sources: - Amazon SP-API: Customer Feedback API https://developer-docs.amazon.com/sp-api/docs/customer-feedback-api - Customer Feedback API v2024-06-01 use case guide https://developer-docs.amazon.com/sp-api/docs/customer-feedback-api-v2024-06-01-use-case-guide - Google Business Profile API: accounts.locations.reviews https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews - Anysite Flipkart API docs official seller API lacks ratings; Flipkart terms on scraping https://docs.anysite.io/api-reference/flipkart/flipkartproductsreviews { "questions": { "question": "What should the product be called?", "header": "Name", "multiSelect": false, "options": { "label": "Verdikt", "description": "The verdict on your product or shop, taken from every platform. Short, and works as a .tech domain verdikt.tech ." }, { "label": "Chorus", "description": "Every customer voice, from every platform, in one place. Friendly and easy to remember." }, { "label": "ReviewRadar", "description": "Says exactly what it does. Fits the anomaly and fraud-detection angle." }, { "label": "Sift", "description": "Sifts real feedback from noise and fake reviews. Minimal and modern." } }, { "question": "Which connectors should the first version ship with? The universal CSV/webhook import is always included. ", "header": "Connectors", "multiSelect": true, "options": { "label": "Google Maps via SerpApi", "description": "Public reviews for any restaurant or shop. Works for the demo with no approval wait." }, { "label": "Google Business Profile", "description": "The official owner API. Needs Google to approve API access, which may not arrive by Oct 18." }, { "label": "Amazon via SerpApi", "description": "Public product reviews for any listing ASIN . Good for the demo." }, { "label": "Amazon Customer Feedback API", "description": "The official seller API. Needs a brand-registered seller account in a supported marketplace." } } } The user answered: "What should the product be called?"="I feel more like, its will act as an advisor. Isnt it? I also want to have a consumer facing interface too. where consumers can ask about anything that exists. For this reason, I need a graph DB as well to store a lot of unique information blocks. Also, I am dropping the idea for auto reply from this. For now, lets list down the requriements. Start by lsitign down, what can be done within 3 days first.", "Which connectors should the first version ship with? The universal CSV/webhook import is always included. "="1 and 3 sounds great. serpAPI can acatually help in extending this from amazon and google to other products as well.". Read the answers carefully — they may request clarification, changes, or that you not proceed — and follow what they actually say. { "file path": "~/Personal Projects/lets-make-osp-that-someone-will-actually-pay-for/docs/REQUIREMENTS.md", "content": " Requirements\n\nWorking name: TBD advisor-themed . Challenge deadline: Sun 2026-10-18, 11:59 PM PDT.\n\n Product in one paragraph\n\nAn AI advisor built on open-weight models that reads customer reviews and feedback from any platform with reviews Google Maps and Amazon first, via SerpApi , turns them into a knowledge graph, and gives advice to two kinds of user:\n\n- Business owners and sellers : how is my restaurant, shop or product actually doing, what are customers praising or complaining about, what is changing, which reviews look fake, and what should I fix first?\n- Consumers : ask about anything that has reviews \"Is the biryani at X worth it?\", \"Do people say this power bank overheats?\", \"Are this seller's 5-star reviews real?\" and get an answer that cites the evidence.\n\nOut of scope: auto-replying to reviews.\n\n Users\n\n| ID | User | Main need |\n|---|---|---|\n| U1 | Business owner or seller restaurant, grocery shop, Amazon seller | Ongoing insight and advice about their own listings, and how they compare with competitors |\n| U2 | Consumer | Trustworthy answers about any place or product before buying or visiting |\n\n Scope tiers\n\n- P0, first 3 days Oct 14–16 : a working end-to-end product, deployed.\n- P1, days 4–5 Oct 17–18 : remaining platform integrations, polish, first real user, DEV post.\n- P2, after the challenge: the vision section of the post.\n\n---\n\n P0: what can be done in 3 days\n\n Data ingestion\n| ID | Requirement |\n|---|---|\n| ING-\n… 7480 more characters truncated " } File created successfully at: ~/Personal Projects/lets-make-osp-that-someone-will-actually-pay-for/docs/REQUIREMENTS.md file state is current in your context — no need to Read it back bash $ cd ~/.claude/projects/-home-life-workstation-Personal-Projects-lets-make-osp-that-someone-will-actually-pay-for/memory && python3 - <<'EOF' p='hf26-week2-project.md' s=open p .read s=s.replace """Proposed idea 2026-10-13 : "ReplyDesk" — review-reply agent for small local businesses, built across many cloud platforms Vertex AI/DigitalOcean for model hosting, Tinker, Mastra, Backboard, Temporal, SerpApi, MongoDB Atlas, Tiger Data, ElevenLabs, Sentry, Render, .tech domain .""", """Idea pivoted 2026-10-14 user's own idea : AI advisor over review/feedback data from any platform Google Maps + Amazon via SerpApi first; CSV import for others , with an owner-facing advisor AND a consumer-facing "ask about anything" Q&A, backed by a graph DB knowledge graph of entities/claims/aspects plus fake-review trust signals. Auto-reply explicitly dropped. Name TBD, should be advisor-themed ReplyDesk rejected . Requirements live in docs/REQUIREMENTS.md P0 = first 3 days Oct 14–16 . Cloud stack: Vertex AI + DigitalOcean Gemma , Tinker, Mastra, Backboard, Temporal, SerpApi, MongoDB Atlas, Neo4j AuraDB, Tiger Data, ElevenLabs, Sentry, Render, .tech domain. Node 24 via nvm.""" open p,'w' .write s EOF sed -i 's/ReplyDesk idea/review-advisor idea owner + consumer, graph DB /' MEMORY.md Shell cwd was reset to ~/Personal Projects/lets-make-osp-that-someone-will-actually-pay-for The full requirements list is in docs/REQUIREMENTS.md . Auto-reply is out, the product is now an advisor with two kinds of user, and a graph database sits at the center. | Day | Goal | |---|---| | Day 1 | Data flows end to end. SerpApi pulls Google Maps and Amazon reviews, they're converted to one standard review record and stored in MongoDB Atlas, Gemma on Vertex AI pulls out what each review discusses food, service, quality… , how positive or negative it is, and the specific claims it makes, and the results go into the Neo4j AuraDB graph. | | Day 2 | Both interfaces work. Owner dashboard: rating trend, positives and negatives per topic, top 3 things to fix and top 3 to promote, comparison with competitors, and an "ask the advisor" chat. Consumer search: paste a link or search for anything, get a verdict with pros and cons, and ask questions answered from the graph with cited reviews. Also CSV import. | | Day 3 | Production features. Review trust signals rating bursts, copy-paste reviews, star ratings that contradict the text, and a trust score per place or product , automatic failover from Vertex AI to DigitalOcean, scheduled background syncing with Temporal, trend data in Tiger Data, Sentry tracing, and deployment to Render. | Days 4–5: Tinker fine-tuning, Backboard memory, ElevenLabs audio briefing, the .tech domain, more SerpApi sources Walmart, Yelp, app stores… , your first real user, and the DEV post. Once you've reviewed the list, I can start Day 1 by scaffolding the project and setting up a free connection to each service. You'd then add the API keys for SerpApi, MongoDB Atlas, Neo4j AuraDB and Google Cloud. Are there any free or opensource alternatives to serp api? { "query": "SerpApi free plan searches per month 2026", "mode": "standard" } Web search results for query: "SerpApi free plan searches per month 2026" Links: {"title":"free serp api","url":"https://www.octoparse.com/blog/free-serp-api"},{"title":"serpapi pricing","url":"https://scrapegraphai.com/blog/serpapi-pricing"},{"title":"All SerpApi Plans & Pricing","url":"https://costbench.com/software/web-scraping/serpapi/"},{"title":"SerpApi Free Plan 2026: What's Included & What's Not","url":"https://costbench.com/software/web-scraping/serpapi/free-plan/"},{"title":"SerpApi Free Tier 2026 stable","url":"https://agentdeals.dev/vendor/serpapi"},{"title":"SerpApi Pricing Explained 2026 : What 1,000 Searches Really Cost","url":"https://apiserpent.com/blog/serpapi-pricing-explained"},{"title":"Free Google Search API in 2026: 7 Free Tiers Tested Honestly","url":"https://apiserpent.com/blog/free-google-search-api-tested"},{"title":"SerpAPI Pricing 2026","url":"https://costbench.com/software/ai-search-apis/serpapi-search/"},{"title":"toolradar.com","url":"https://toolradar.com/tools/serpapi/pricing"} Based on the search results, SerpApi's free plan includes 250 searches per month. This information has been verified from multiple sources as of 2026, with pricing verified as of August 2026. REMINDER: You MUST include the sources above in your response to the user using markdown hyperlinks. { "query": "open source Google Maps reviews scraper github gosom", "mode": "standard" } Web search results for query: "open source Google Maps reviews scraper github gosom" Links: {"title":"google maps scraper","url":"https://ossinsight.io/analyze/gosom/google-maps-scraper"},{"title":"Ecosyste.ms: Awesome","url":"https://awesome.ecosyste.ms/topics/google-maps?keyword=cx"},{"title":"google-maps-scraper by gosom","url":"https://www.sourcepulse.org/projects/1419906"},{"title":"trendshift.io","url":"https://trendshift.io/repositories/5640"},{"title":"google maps scraper","url":"https://gittrend.io/repo/gosom/google-maps-scraper"},{"title":"Toggle navigation","url":"https://www.jsdelivr.com/package/npm/gm-review-scraper"},{"title":"Toggle navigation","url":"https://www.jsdelivr.com/package/npm/gm-review-scraper?tab=files"},{"title":"google maps scraper github guide","url":"https://www.thunderbit.com/pt/blog/google-maps-scraper-github-guide"},{"title":"github.com%2Fgaspa93%2Fgooglemaps scraper","url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaspa93%2Fgooglemaps-scraper"},{"title":"Google Maps reviews scraping","url":"https://gittrend.io/repo/gaspa93/googlemaps-scraper"} Here are the search results for "open source Google Maps reviews scraper github gosom": Main Project: gosom/google-maps-scraper gosom/google-maps-scraper is a Go open source project on GitHub for scraping data from Google Maps. It extracts data such as the name, address, phone number, website URL, rating, reviews number, latitude and longitude, reviews, email and more for each place. Key Features: - This is a free, open-source tool for scraping data from Google Maps that offers both command-line and web UI interfaces, allowing users to extract detailed business information such as names, addresses, ratings, reviews, contact details, and geographic coordinates - The scraper utilizes the scrapemate web crawling framework and can be run via Docker or as a compiled binary - It supports configurable concurrency, proxy usage SOCKS5/HTTP/HTTPS , and offers a "Fast Mode" for quicker data retrieval - For scalability, it integrates with PostgreSQL via docker-compose and supports deployment on Kubernetes, enabling distributed scraping - Supports CSV, JSON, and PostgreSQL output formats, with custom exporter plugin capability Project Stats: The project has 3.9k stars and 567 forks on GitHub, and is licensed under the MIT License. REMINDER: You MUST include the sources above in your response to the user using markdown hyperlinks. { "query": "Amazon Reviews 2023 dataset McAuley lab open dataset", "mode": "standard" } Web search results for query: "Amazon Reviews 2023 dataset McAuley lab open dataset" Links: {"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/minto1234/Amazon-Reviews-2023"},{"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/Pratik4570/Amazon-Reviews-2023"},{"title":"hyper.ai","url":"https://hyper.ai/en/datasets/30267"},{"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/Kkkkksy/Amazon-Reviews-2023"},{"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/VoidZai/Amazon-Reviews-2023"},{"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/du09/Amazon-Reviews-2023"},{"title":"Amazon Reviews 2023","url":"https://huggingface.co/datasets/Ahmadhaiwala/Amazon-Reviews-2023"},{"title":"Hugging Face's logo Hugging Face","url":"https://huggingface.co/datasets/McAuley-Lab/Amazon-Reviews-2023/tree/main/benchmark"},{"title":"Hugging Face's logo Hugging Face","url":"https://huggingface.co/datasets/McAuley-Lab/Amazon-Reviews-2023/tree/8625e87e5ec693ccba0a00931016df5e8884cab7"} Based on the search results, here's what I found about the Amazon Reviews 2023 dataset from McAuley Lab: Overview This is a large-scale Amazon Reviews dataset collected in 2023 by McAuley Lab that includes rich features such as user reviews ratings, text, helpfulness votes, etc. , item metadata descriptions, price, raw image, etc. , and links user-item / bought together graphs . Dataset Scale The dataset contains more than 570 million reviews and 48 million products, covering 33 different categories. Key Features Compared with the previous version, the data volume of this version has increased by 245.2%, the interaction data has been updated to September 2023, the product metadata is more detailed, the timestamp accuracy has been improved to the second level, and standard data partitioning is performed to promote the benchmarking of recommendation systems. Access The dataset is available on Hugging Face under the McAuley-Lab organization, and you can load it using the datasets library. For more details, loading scripts, and preprocessed benchmark files, you can visit amazon-reviews-2023.github.io/. REMINDER: You MUST include the sources above in your response to the user using markdown hyperlinks. { "query": "free alternatives to SerpApi for scraping Google Maps and Amazon reviews", "per page": 6 } {"Ok": {"id":4834722,"title":"Introducing Review Audit: An open-source tool to check how real a Google Maps rating is","description":"Review Audit reads a Google Maps place's newest reviews and its reviewers' history, and shows how much of the rating the place's own reviewers can explain. Open source, runs locally on your SerpApi key.","tags": "analysis","github","opensource","tools" ,"path":"/serpapi/introducing-review-audit-an-open-source-tool-to-check-how-real-a-google-maps-rating-is-2p65","url":"https://dev.to/serpapi/introducing-review-audit-an-open-source-tool-to-check-how-real-a-google-maps-rating-is-2p65","score":1.0},{"id":3627766,"title":"How to scrape Google Maps without code: a REST API tutorial","description":"Disclosure: I run basedonb, the API I'm using in this tutorial. The technique works with any Google...","tags": "api","google","tutorial","webscraping" ,"path":"/ilyas yldrm 72e3216f68/how-to-scrape-google-maps-without-code-a-rest-api-tutorial-p67","url":"https://dev.to/ilyas yldrm 72e3216f68/how-to-scrape-google-maps-without-code-a-rest-api-tutorial-p67","score":1.0},{"id":3081651,"title":"Best SERP API Comparison 2025: SerpAPI vs Exa vs Tavily vs ScrapingDog vs ScrapingBee","description":"We tested five SERP APIs with standardized benchmarks to find which performs best for different use...","tags": "ai","api","tooling" ,"path":"/ritza/best-serp-api-comparison-2025-serpapi-vs-exa-vs-tavily-vs-scrapingdog-vs-scrapingbee-2jci","url":"https://dev.to/ritza/best-serp-api-comparison-2025-serpapi-vs-exa-vs-tavily-vs-scrapingdog-vs-scrapingbee-2jci","score":1.0},{"id":4493636,"title":"How to Scrape App Store & Google Play Reviews with Sentiment Analysis 2026","description":"If you are trying to scrape app reviews - from the Apple App Store, Google Play, or both - to feed a...","tags": "webscraping","python","javascript","api" ,"path":"/robertokerber/how-to-scrape-app-store-google-play-reviews-with-sentiment-analysis-2026-27e2","url":"https://dev.to/robertokerber/how-to-scrape-app-store-google-play-reviews-with-sentiment-analysis-2026-27e2","score":1.0},{"id":3410250,"title":"Google Maps Scraping: Extract Places, Reviews, and Business Hours in 2026","description":"Google Maps is one of the richest sources of local business data on the web. Whether you're building...","tags": "python","webdev","tutorial","webscraping" ,"path":"/agenthustler/google-maps-scraping-extract-places-reviews-and-business-hours-in-2026-cfp","url":"https://dev.to/agenthu … 487 more characters truncated Not a true drop-in replacement. Google and Amazon don't offer free, complete review APIs, which is why paid services like SerpApi exist. A mix of free sources gets close, though. | Option | Type | Covers | Catch | |---|---|---|---| | SerpApi free plan | Paid service, free tier | Google Maps, Amazon and more | 250 searches a month. That's enough if we cache everything and only call it for things not already stored. | | gosom/google-maps-scraper | Open source MIT, about 3.9k GitHub stars | Google Maps places and reviews; outputs CSV, JSON or Postgres; Docker image; supports proxies | Breaks Google's terms. It'll get blocked faster from a cloud server than from your laptop, so expect to need proxies. | | Google Places API | Official | Place details for any place | Only 5 reviews per place. Good for details like name, hours and rating, not for analysis. | | Amazon Reviews 2023 dataset McAuley Lab, UCSD | Open dataset | 570M+ reviews, 48M products, 33 categories, with ratings, text, helpful votes, product details and "bought together" links | It's a snapshot up to September 2023 and licensed for research, so you can't build a paid product on it. | | Yelp Open Dataset | Open dataset | Restaurant and local-business reviews | Non-commercial license, so the same limitation. | | Self-hosted Amazon scraping | Open source tools Playwright, Crawlee | Amazon | Amazon blocks scrapers aggressively. I wouldn't spend any of your 3 days on this. | | SearXNG | Open source | Web search only | No review data, so it doesn't help here. | All three still feed the same standard review format, so the rest of the app doesn't care where a review came from. From DEV: SerpApi recently published an open-source tool, Introducing Review Audit https://dev.to/serpapi/introducing-review-audit-an-open-source-tool-to-check-how-real-a-google-maps-rating-is-2p65 https://dev.to/serpapi/introducing-review-audit-an-open-source-tool-to-check-how-real-a-google-maps-rating-is-2p65 . It checks how genuine a Google Maps rating is by looking at the reviewers' history. That overlaps with our review trust signals, so it's worth reading for ideas and to see what we'd do differently. Best SERP API Comparison 2025 by ritza https://dev.to/ritza/best-serp-api-comparison-2025-serpapi-vs-exa-vs-tavily-vs-scrapingdog-vs-scrapingbee-2jci https://dev.to/ritza/best-serp-api-comparison-2025-serpapi-vs-exa-vs-tavily-vs-scrapingdog-vs-scrapingbee-2jci compares the paid options in case you outgrow the free plan. Should I add these as data sources in docs/REQUIREMENTS.md : the open datasets as a seed and evaluation source, and the gosom scraper as an optional connector? Sources: - SerpApi Free Plan 2026 costbench https://costbench.com/software/web-scraping/serpapi/free-plan/ - gosom/google-maps-scraper OSS Insight https://ossinsight.io/analyze/gosom/google-maps-scraper - McAuley-Lab/Amazon-Reviews-2023 on Hugging Face https://huggingface.co/datasets/McAuley-Lab/Amazon-Reviews-2023/tree/main/benchmark Tech stack to use: Nodejs for backend, React for frontend, Langgraph for agent runtime This flow cannot be handled solely by n AI call , docker for containers and kubernetes for scaling the deployed containers I want to start small here. I am not hosting and scaling on day 1 but I need to prepare a base version beforehand and lastly, an AI model opensource that I will find and let you know. We will use vLLM for model inference and serving engine. Anything that is missing? bash $ for p in @langchain/langgraph @langchain/langgraph-checkpoint-mongodb @langchain/langgraph-checkpoint-postgres @langchain/openai neo4j-driver fastify bullmq; do echo "$p: $ npm view $p version 2 /dev/null "; done; corepack --version 2 /dev/null || echo "no corepack"; pnpm -v 2 /dev/null || echo "no pnpm"; bun -v 2 /dev/null @langchain/langgraph: 1.5.0 @langchain/langgraph-checkpoint-mongodb: 1.5.0 @langchain/langgraph-checkpoint-postgres: 1.1.0 @langchain/openai: 1.6.2 neo4j-driver: 6.2.0 fastify: 5.12.7 bullmq: 6.3.15 0.32.0 no pnpm 1.4.2 { "query": "deploying vLLM on Kubernetes GPU autoscaling lessons learned", "per page": 5 } {"Ok": {"id":4572316,"title":"Scale Before the Spike: Predictive Autoscaling for GPU Workloads on Kubernetes","description":"Also published on the CNCF blog. Cross-post with canonical link to the CNCF version. The 3...","tags": "kubernetes","autoscaling","gpu","devops" ,"path":"/ramkumar nagaraj 38541938/scale-before-the-spike-predictive-autoscaling-for-gpu-workloads-on-kubernetes-5eok","url":"https://dev.to/ramkumar nagaraj 38541938/scale-before-the-spike-predictive-autoscaling-for-gpu-workloads-on-kubernetes-5eok","score":1.0},{"id":4525035,"title":"Standing Up a GPU Cluster on AKS for vLLM","description":"This article is Part 1 of a 3-Part series on running vLLM on AKS and walks through creating an AKS...","tags": "azure","devops","kubernetes","llm" ,"path":"/josef doornink 930b2caf1c/standing-up-a-gpu-cluster-on-aks-for-vllm-bif","url":"https://dev.to/josef doornink 930b2caf1c/standing-up-a-gpu-cluster-on-aks-for-vllm-bif","score":1.0},{"id":4515453,"title":"Self-Hosting vLLM on Cloud GPUs in 2026: Sub-180ms LLM Inference for Autonomous AI Agents Full Production Guide ","description":"A comprehensive 2026 production guide to deploying self-hosted vLLM with EAGLE-3 speculative decoding, PagedAttention v2, and prefix caching on RunPod/Vast.ai to achieve sub-180ms TTFT and cut LLM inference costs by 45-74%.","tags": "ai","llm","mlops","python" ,"path":"/shubhanshu shrimali/how-i-self-host-vllm-on-cloud-gpus-for-sub-180ms-inference-and-saved-45-on-costs-4cm5","url":"https://dev.to/shubhanshu shrimali/how-i-self-host-vllm-on-cloud-gpus-for-sub-180ms-inference-and-saved-45-on-costs-4cm5","score":1.0},{"id":4596101,"title":"Inside vLLM: Following One Request from the API to GPU Execution","description":"Follow one vLLM V1 request through scheduling, paged KV-cache management, GPU execution, and output delivery.","tags": "vllm","llm","inference","python" ,"path":"/yuan lei e631e36865ed370b/inside-vllm-following-one-request-from-the-api-to-gpu-execution-1ja6","url":"https://dev.to/yuan lei e631e36865ed370b/inside-vllm-following-one-request-from-the-api-to-gpu-execution-1ja6","score":1.0},{"id":4355869,"title":"Self-Hosting Your First LLM: What the Tutorials Skip About GPU Memory","description":"Why a model that \"fits\" in your GPU still OOMs — the KV cache, overhead, and quantization math self-hosting tutorials leave out.","tags": "llm","ai","machinelearning","devops" ,"path":"/libme/self-hosting-your-first-llm-what-the-tutorials-skip-about-gpu-memo … 126 more characters truncated { "query": "LangGraph.js production agent Node.js checkpointer persistence", "per page": 5 } { "Ok": { "id": 4591743, "title": "Adding AgentInspect to LangGraph Without Changing Production", "description": "What I learned from adding an environment-gated local trace to a NestJS, LangGraph, and...", "tags": "agents", "debugging", "llm", "typescript" , "path": "/abhilaksharora/adding-agentinspect-to-langgraph-without-changing-production-3p7p", "url": "https://dev.to/abhilaksharora/adding-agentinspect-to-langgraph-without-changing-production-3p7p", "score": 1.0 }, { "id": 4822466, "title": "Pause a LangGraph Agent Mid-Run for Human Approval with interrupt and a Checkpointer", "description": "A hands-on guide to stopping a LangGraph agent in the middle of a node, waiting for a human decision, and resuming exactly where it left off.", "tags": "ai", "agents", "python", "tutorial" , "path": "/royalpinto007/pause-a-langgraph-agent-mid-run-for-human-approval-with-interrupt-and-a-checkpointer-536g", "url": "https://dev.to/royalpinto007/pause-a-langgraph-agent-mid-run-for-human-approval-with-interrupt-and-a-checkpointer-536g", "score": 1.0 }, { "id": 4333254, "title": "Checkpointing Multi-Step Agents in Node So a Crash Doesn't Cost You", "description": "Book: AI That Plans The series: AI in TypeScript — 5 books, from your first LLM call to agents in...", "tags": "typescript", "node", "agents", "ai" , "path": "/gabrielanhaia/checkpointing-multi-step-agents-in-node-so-a-crash-doesnt-cost-you-3icf", "url": "https://dev.to/gabrielanhaia/checkpointing-multi-step-agents-in-node-so-a-crash-doesnt-cost-you-3icf", "score": 1.0 }, { "id": 4023818, "title": "Why my LangGraph agent throws away its checkpoint on every request", "description": "The problem Wingman is a worker-evaluator agent. A worker LLM tries to satisfy a success...", "tags": "agents", "architecture", "aws", "serverless" , "path": "/akashpersetti/why-my-langgraph-agent-throws-away-its-checkpoint-on-every-request-21ff", "url": "https://dev.to/akashpersetti/why-my-langgraph-agent-throws-away-its-checkpoint-on-every-request-21ff", "score": 1.0 }, { "id": 4611375, "title": "How to Catch and Replay Production Agent Failures: Trace-Native CI/CD in Practice", "description": "How to Catch and Replay Production Agent Failures: Trace-Native CI/CD in Practice ...", "tags": "ai", "agenticai", "machinelearning", "llm" , "path": "/priyeshdave6/how-to-catch-and-replay-production-agent-failures-trace-native-cicd-in-practice-335k", "url": "https://dev.to/priyeshdave6/how-to-catch-and-replay-production-agent-failures-trace-native-cicd-in-practice-335k", "score": 1.0 } } That's a solid core. LangGraph is the right call: ingestion, then extraction, then building the graph, then deciding whether to fetch more reviews before answering, is a multi-step, branching flow, not a single AI call. It also replaces Mastra in the earlier plan. Here's what I'd add. Language and project layout - TypeScript across the backend, frontend and shared types. LangGraph.js v1.5 is fully typed. - One repo with npm workspaces: apps/api , apps/web , apps/worker , and packages/shared for the standard review format and Zod schemas used by both sides. pnpm isn't installed; npm workspaces on Node 24 work fine. Backend - Fastify as the API framework. It's fast, has built-in schema validation, and handles streaming well. - Server-sent events SSE to stream agent progress to the browser "fetching reviews… analysing 214 reviews…" , which the consumer flow for things not yet in the database needs. - Zod to validate every model output before it touches a database. Agent runtime - A LangGraph checkpointer to save each run's state. Without one, a crashed or restarted pod loses the run halfway. @langchain/langgraph-checkpoint-mongodb already exists, so it can reuse MongoDB Atlas. - A job queue for background work scheduled re-syncs, batch extraction . LangGraph runs the agent flow but doesn't schedule or retry jobs. Options: - BullMQ + Redis: simple, and it scales cleanly on Kubernetes with KEDA, which adds workers based on queue length. - Temporal: the earlier plan; more robust, more setup. I'd go with BullMQ unless you want Temporal as one of the cloud platforms. - Redis , which BullMQ needs anyway. It can also cache SerpApi responses and rate-limit the public consumer endpoint, which protects your 250 free searches a month. AI serving - An embedding model, also served by vLLM , for merging duplicate claims and for search over the graph. vLLM serves one model per server, so that's two deployments: the chat model and the embedding model. - What to look for when you pick the model. Things to check: - Its license allows commercial use. - It supports tool calling and JSON-schema output in vLLM, which LangGraph and our extraction step depend on. - It fits your GPU's memory, including the KV cache that vLLM reserves for running requests. - A context window of about 16k tokens is enough for batches of reviews. - The app talks to vLLM through @langchain/openai pointed at vLLM's OpenAI-compatible endpoint. Switching models or providers then means changing a URL, not code. - Where the GPU runs. vLLM needs one. The base Kubernetes setup should put vLLM on its own GPU node pool on GKE or DigitalOcean's Kubernetes so the rest of the cluster can stay on cheap CPU nodes. Data stores from the earlier plan; confirm you're keeping them - MongoDB Atlas: stores reviews, places and products, users, and LangGraph's saved state. - Neo4j AuraDB: the graph. It has built-in vector indexes, so no separate vector database is needed. - Tiger Data: time series, for trends and burst detection. Frontend - Vite + React + TypeScript for the app itself. - TanStack Query for fetching and caching API data. - React Router for pages. - Tailwind + shadcn/ui for styling and components. - Recharts for the trend charts. - Auth for owners: Better Auth open source, runs in your API or a hosted service like Clerk. Consumers stay anonymous. Containers and Kubernetes a base version you can build on later - Docker Compose for local development: the API, worker, web app and Redis, plus an optional vLLM container if you have a GPU. - Kubernetes manifests with Kustomize simpler than Helm to start : a base/ folder plus overlays/dev and overlays/prod . It would include: - Deployments, Services and an Ingress - A Horizontal Pod Autoscaler HPA to scale the API on load - A KEDA scaler to add workers as the queue grows - Health checks and resource limits - The vLLM Deployment with a GPU node selector - Kind to test the manifests on your machine before deploying anywhere. - A container registry such as GitHub Container Registry GHCR or Google's Artifact Registry. - GitHub Actions to lint, test, build and push the images. Observability - Sentry for errors. - Langfuse for LangGraph traces. It's open source, which suits the open-AI theme of the post. - vLLM's built-in /metrics endpoint , scraped later by Prometheus. Testing - Vitest for unit and integration tests. - A small labelled evaluation set about 100 reviews from the Amazon Reviews 2023 dataset to measure how well your chosen model pulls out topics and claims. From DEV, two posts worth reading before you pick the model: - Self-Hosting Your First LLM: What the Tutorials Skip About GPU Memory by libme https://dev.to/libme/self-hosting-your-first-llm-what-the-tutorials-skip-about-gpu-memory-50pc https://dev.to/libme/self-hosting-your-first-llm-what-the-tutorials-skip-about-gpu-memory-50pc explains why a model that "fits" on paper still runs out of GPU memory under vLLM because of the KV cache. That's likely what bit you on Vertex. - Why my LangGraph agent throws away its checkpoint on every request by akashpersetti https://dev.to/akashpersetti/why-my-langgraph-agent-throws-away-its-checkpoint-on-every-request-21ff https://dev.to/akashpersetti/why-my-langgraph-agent-throws-away-its-checkpoint-on-every-request-21ff covers how agents lose their saved state across requests, which is the reason for the checkpointer above. Should I add this as a Tech Stack section in docs/REQUIREMENTS.md once you've answered the three questions? Typescript it is. Install pnpm. we will use that as the package manager. Fastify for backend, SSE can be used for streaming and Definately Zod for schema validation. OpenAI officially encourages in its docs. We can use it for our AI as well. Also, rename the workspaces as backend for backend , frontend consumer for consumer and client for seller/owner/admin view: Separate hyper minimalist themes for both Dark and light mode . Refer https://plane.so https://plane.so for reference , plugins for external dynamic dependencies. common for anything that will be used by everythng from FE, BE, plugins or in general anything like simple utilities or anything for that matter. Any questions and you ask me right away bash $ export NVM DIR="$HOME/.nvm"; . "$NVM DIR/nvm.sh" /dev/null; nvm use 24 /dev/null; corepack enable pnpm && COREPACK ENABLE DOWNLOAD PROMPT=0 corepack prepare pnpm@latest --activate && pnpm -v && which pnpm && bash -lc 'pnpm -v' Preparing pnpm@latest for immediate activation... Downloading the pnpm 12.11.2 binary for linux-x64... 12.11.2 ~/.nvm/versions/node/v24.21.0/bin/pnpm 12.11.2 { "questions": { "question": "How should plugins/ be organized?", "header": "Plugins", "multiSelect": false, "options": { "label": "One package per plugin Recommended ", "description": "plugins/serpapi-google-maps, plugins/serpapi-amazon, plugins/csv-import, plugins/neo4j, plugins/vllm… Each one implements a shared Plugin interface defined in common, and the backend loads the enabled ones from config at startup. Adding a platform means adding a folder." }, { "label": "Single plugins package", "description": "One @app/plugins package with a module per integration. Simpler, but every plugin's dependencies get installed together and you can't version or disable them independently." }, { "label": "Runtime-installable", "description": "Plugins are published as separate npm packages and loaded dynamically by name at runtime like a marketplace . Most flexible, but more machinery than the first version needs." } }, { "question": "Where should the background worker live? It runs ingestion and extraction jobs and the long LangGraph runs.", "header": "Worker", "multiSelect": false, "options": { "label": "Inside backend Recommended ", "description": "Same package and code, built into one Docker image with two start commands api and worker . In Kubernetes they become two Deployments that scale independently." }, { "label": "Its own workspace", "description": "A separate worker/ package. Cleaner separation, but it duplicates config and has to import the backend's job logic through common." } }, { "question": "Which background job system should the worker use?", "header": "Jobs", "multiSelect": false, "options": { "label": "BullMQ + Redis Recommended ", "description": "Simple, Node-native, and scales on Kubernetes with KEDA based on queue length. Redis also handles SerpApi caching and rate limiting." }, { "label": "Temporal", "description": "Durable workflows with built-in retries and scheduling. More robust for long-running jobs, but needs a Temporal server or Temporal Cloud and has a steeper setup." } }, { "question": "Where should shared React code live, such as UI primitives and the theme system that both frontends use?", "header": "Shared UI", "multiSelect": false, "options": { "label": "common split into packages Recommended ", "description": "common/core types, Zod schemas, utilities, used everywhere and common/ui React components and theme tokens, used only by the frontends . The backend never pulls in React." }, { "label": "One common package", "description": "Everything in a single @app/common package, including the React code. Simplest layout, but the backend's dependency tree would include React." }, { "label": "No shared UI", "description": "Each frontend owns all of its components. Fits 'separate themes for each', at the cost of duplicating basic components like buttons and inputs." } } } Your questions have been answered: "How should plugins/ be organized?"="One package per plugin Recommended ", "Where should the background worker live? It runs ingestion and extraction jobs and the long LangGraph runs."="Inside backend Recommended ", "Which background job system should the worker use?"="BullMQ + Redis Recommended ", "Where should shared React code live, such as UI primitives and the theme system that both frontends use?"="common split into packages Recommended ". You can now continue with these answers in mind. Locking in: one package per plugin, the worker inside backend , BullMQ + Redis, and common/core plus common/ui . I'll check Plane's design before setting up the theme tokens. { "query": "select:WebFetch", "max results": 1 } image bash $ cd ~/Personal Projects/lets-make-osp-that-someone-will-actually-pay-for/docs 2 /dev/null; curl -sL https://plane.so -A "Mozilla/5.0" -o