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
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
- Simple business brief form (name, category, location, phone, services, optional extras, language mix)
- Structured listing pack with stable Markdown headings
- Copy per section (
navigator.clipboard.writeText) - Copy-all Markdown + download
.md - 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-llmfor 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)