DEV Community

Cover image for Local Listing Nepal: Bilingual Google/Facebook listing packs with Gemma in the browser
Arjan kc
Arjan kc

Posted on Fully Autonomous

Local Listing Nepal: Bilingual Google/Facebook listing packs with Gemma in the browser

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

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

What I Built

Local Listing Nepal turns a short Nepal small-business brief into a ready-to-paste listing pack for the places local shops actually need to show up:

  • Google Business short + full descriptions
  • Suggested categories and services
  • Facebook About / Intro
  • 3–5 low-hype Facebook starter captions
  • Hamrobazar / marketplace title + description when it fits
  • Nepali (Devanagari) short + full descriptions
  • Honest local search phrases
  • Assumptions / questions instead of invented “facts”

Who would pay: shop owners, cafes, clinics, tutors, and service businesses in Nepal who currently pay an agency or freelancer for listing rewrites; freelancers who want a productized micro-service; agencies that need a faster first draft before human polish.

The problem: a lot of Nepal SMBs have weak or empty Google Business and Facebook listings — missing categories, generic English-only copy, no Nepali text, weak local keywords, no clear call-to-action, inconsistent name/address/phone. A full marketing retainer is expensive when they only need a strong listing pack.

I run client work through Gurkha Technology in Kathmandu and teach business/IT subjects. This is the reusable draft tool I wanted for that work: something I can operate from Nepal without depending on a paid API card for every generation.

How it works for the user: fill in business name, category, location, phone, services, optional differentiators, and language mix (English / Nepali / bilingual). Generate. Copy any section, copy all Markdown, or download a .md file. The UI states clearly that briefs are processed locally in the browser — nothing goes to a paid API by default.

Demo

Live demo (GitHub Pages): https://arjankc.github.io/local-listing-nepal/

Use a recent Chrome or Edge on desktop (WebGPU required). The first generate downloads ~1–1.5 GB of open model weights into the browser cache; after that it can work offline.

Try a brief like:

  • Business: Lakuri Hills Cafe
  • Category: cafe
  • Location: Lakuri Phedi, Lalitpur
  • Phone: your real number
  • Services: filter coffee, brunch, hiking snacks, outdoor seating
  • Language mix: bilingual

Watch the pack stream in under the fixed section headings, then copy what you need into Google Business or Facebook.

Repo: https://github.com/arjankc/local-listing-nepal

Code

GitHub logo arjankc / local-listing-nepal

Nepal SMB listing packs (Google/Facebook/marketplace) with Gemma in the browser via WebLLM

Local Listing Nepal

Turn a Nepal small-business brief into ready-to-paste Google Business Profile, Facebook Page, and Hamrobazar / marketplace listing copy in English and Nepali.

Open-weight Gemma runs in your browser via WebLLM + WebGPU. No backend. No paid API by default.

Live demo: https://arjankc.github.io/local-listing-nepal/

Who would pay

  • Shop owners, cafes, clinics, tutors, and service businesses in Nepal who currently pay for listing rewrites
  • Freelancers who productize listing packs for clients
  • Agencies that want a faster first draft before human polish

Features

  1. Simple business brief form (name, category, location, phone, services, optional extras, language mix)
  2. Structured listing pack with stable Markdown headings
  3. Copy per section (navigator.clipboard.writeText)
  4. Copy-all Markdown + download .md
  5. Privacy note: briefs stay on-device; model loads into browser cache

Requirements

  • Recent Chrome or Edge on desktop with WebGPU
  • First generate downloads ~1–1.5 GB model weights into browser cache
  • Modest integrated GPUs work; pick…

Stack in short:

  • Vite + React + TypeScript + Tailwind (static SPA, no backend)
  • @mlc-ai/web-llm for in-browser inference
  • Default open model: Gemma 2 2B (Qwen 2.5 1.5B and Llama 3.2 1B as lighter fallbacks)
  • Temperature 0.15 and a fixed Markdown heading schema so each section gets its own Copy button
  • MIT license

The WebLLM load/progress pattern (quantization probe, Gemma user-turn prompting) was proven earlier on a different product, Nepali String Localizer. This is a new repo and a new job: SMB listing packs, not UI string localization.

How I Built It

Open-source AI is not a badge on the landing page — it is the product. Without an open-weight model running locally, there is no listing pack.

I built this on modest hardware (aging integrated graphics). That constraint shaped every choice: smallest viable Gemma in the WebLLM catalog by default, clear download progress, streaming output, and a lightweight UI so the tab does not fall over.

In-browser inference with WebLLM + WebGPU. On first generate, the app loads Gemma 2 2B into the tab. It checks whether the GPU supports 16-bit float shaders and picks q4f16_1 or q4f32_1. There is no server of mine in the loop: GitHub Pages serves the static app; the visitor’s machine does the inference.

One strict prompt, one fixed output schema. The model is instructed to act as a Nepal SMB listing copywriter: never invent amenities, prices, awards, or hours; preserve name/address/phone and brand spelling exactly; use [Ask the business] for gaps; avoid marketing fluff; write natural written Nepali for business listings, not awkward literal translation. Output must use stable ## headings so the UI can parse sections for per-section clipboard copy (navigator.clipboard.writeText).

Gemma as the core model. Nepali + English listing copy is the hard part on a 2B-class model. Gemma 2 2B was the best of the small WebLLM options I could ship for Devanagari and bilingual packs. Gemma’s chat template has no system role, so the instructions travel in the user message — same practical detail as my earlier browser tool, applied here to a different prompt and product.

What I deliberately did not build: auth, CRM, billing, auto-posting to Google/Facebook APIs, image generation, ads builders, or competitor scraping. The MVP is a listing pack writer someone would actually pay a freelancer for — not an unfinished platform.

flowchart LR
  brief["Business brief"] --> prompt["Listing prompt"]
  prompt --> webllm["WebLLM"]
  webllm --> gemma["Gemma 2 2B"]
  gemma --> pack["Markdown pack"]
  pack --> export["Copy / export"]

Top comments (0)