尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证支持您喜爱的班加罗尔街头摊位,并与它们共同成长。
AI 翻译
Back the Bengaluru street stalls you love, and grow with them.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Back the street stalls you love. Grow with them.
Hissa means "share". Rate Bengaluru's street food, find hidden stalls, and back the vendors you love. When their stall grows, you get a share of it, plus treats at their counter.
Every Bengaluru regular has that stall: the benne dosa cart with a 20-minute queue, the chaat corner on Food Street, the momo lady who ran out by 8 PM. The food is great, but the vendor can't grow. A second tawa, a covered counter or a food truck costs ₹30,000 to ₹2,50,000, and banks don't lend to carts.查看完整 README ↗Hissa means "share". Rate Bengaluru's street food, find hidden stalls, and back the vendors you love.When their stall grows, you get a share of it, plus treats at their counter.
Every Bengaluru regular has that stall: the benne dosa cart with a 20-minute queue, the chaat corner on Food Street, the momo lady who ran out by 8 PM. The food is great, but the vendor can't grow. A second tawa, a covered counter or a food truck costs ₹30,000 to ₹2,50,000, and banks don't lend to carts.
Hissa connects the two:
| 🧑🍳 Vendors | Post a small growth goal: "Help Manjunath get a second tawa" |
| 🤝 Neighbours | Chip in from ₹500 |
| 🎁 Milestones | Each one unlocks food-credit treats for every backer |
| 🌱 Growth | Backers get a share of the extra sales until they've received up to 1.5× back |
| ⭐ Critics | Rate stalls, find unlisted ones, and climb the leaderboard |
No dataset lists Bengaluru's street stalls. The best carts are invisible online. Hissa's critics build the map that doesn't exist yet.
flowchart LR
A["🔍 Discover<br/>rate & find stalls"] --> B["🤝 Back<br/>chip in from ₹500"]
B --> C["🔒 Held safely<br/>released per milestone"]
C --> D["🎁 Treats<br/>food credit at the stall"]
C --> E["🌱 Share of growth<br/>monthly, up to the cap"]
D --> F["🧑🍳 Vendor accepts<br/>the code at the counter"]
Stories from vendors come first, then Bengaluru's best-rated stalls, then 1,280+ real food spots pulled live from OpenStreetMap that nobody on Hissa has tasted yet.
Every campaign shows the vendor's own words, updates, a milestone journey, and why neighbours believe in it: rating trends, what reviews keep mentioning, and honest risks. Pick an amount and you're part of the story.
Found a cart nobody knows about? Snap its menu board. The AI reads the dishes and prices, including handwritten Kannada boards, and fills in the listing. Three critics vouch, and it goes live with your name on it.
The GIF shows the built-in demo result. Add an ANTHROPIC_API_KEY and Claude reads your actual photo.
Milestones turn into food credit at that stall. Tap Redeem to get a 6-digit code, show it at the counter, and the vendor accepts it. The credit is only spent once the vendor accepts it.
A worked example: you back Manjunath's ₹60,000 second-tawa campaign with ₹1,000.
flowchart TD
A["You back ₹1,000"] --> B{"Goal of ₹60,000 reached<br/>before the deadline?"}
B -- "No" --> R["↩️ Full refund"]
B -- "Yes" --> M1["🎯 Fully funded<br/>40% released · ₹100 treat"]
M1 --> M2["🛒 Second tawa live<br/>40% released · ₹200 treat"]
M2 --> M3["📈 Sales up 25%<br/>last 20% released · ₹300 treat"]
M3 --> G["🌱 You get 8% of the extra sales, shared by stake<br/>≈ ₹70 a month, until you've received ₹1,500 (1.5×)"]
| Concern | How Hissa handles it |
|---|---|
| "Will they run off with the money?" | Money is held and released only as milestones are verified |
| "What if the goal isn't met?" | Full refund |
| "Is the revenue reported honestly?" | Backers share only in sales growth above a baseline, so there's less reason to misreport |
| "Is ₹500 even worth it?" | Treats at every milestone, so you always get something back |
| "How do I pick a stall?" | Rating trends, review signals and critics' taste scores on every campaign |
🧪 Hissa is a hackathon prototype. All money is play money. New players get ₹10,000 to back stalls with, and a "Simulate a month of sales" button shows revenue share arriving.
Vendors sign in like everyone else and claim their stall (or add a new one). Their dashboard has everything for running the stall on Hissa:
Bottom tabs and swipeable stories on phones. On laptops, a top bar, 3-column grids, and a campaign column that stays in view next to the vendor's story.
A Demo / ● Live switch sits on the home and profile screens.
| 🎬 Demo | ● Live | |
|---|---|---|
| Data | A hand-made sample Bengaluru | Real players in Supabase |
| Sign-in | Not needed | Email and password, with forgot-password |
| Money | Nothing is saved | ₹10,000 of play money per player |
| Best for | Showing the idea in 60 seconds | Letting friends actually play |
A 60-second tour of the live site:
flowchart LR
U["📱 Browser"] --> N["▲ Next.js 16 on Vercel<br/>App Router · Server Actions"]
N -->|"auth, data, actions"| S[("🟢 Supabase<br/>Postgres + Auth<br/>row-level security")]
N -->|"live food spots"| O["🗺️ OpenStreetMap<br/>Overpass API"]
U -->|"map tiles"| F["🗺️ OpenFreeMap"]
N -->|"Snap-to-list"| C["✨ Claude<br/>vision + structured output"]
| Layer | What it uses |
|---|---|
| App | Next.js 16 (App Router, Server Components, Server Actions), React 19, TypeScript |
| Design | Tailwind CSS v4 · Yatra One (signboard headings) and Hind (body) · a turmeric, chilli and curry-leaf palette |
| Data | Supabase Postgres and Auth. Every write goes through a security definer function that checks the rules (balance, deadlines, caps, ownership), and row-level security blocks direct writes |
| Maps | Leaflet with the OpenFreeMap "Liberty" style via MapLibre (no API key) · live spots from the OpenStreetMap Overpass API, cached for a day |
| AI | Claude vision with structured output for Snap-to-list (optional; there's a demo result without a key) |
| Photos | Hand-picked, freely licensed dish photos from Wikimedia Commons, always labelled "Representative photo" |
src/
├─ app/ Pages (Discover, stall, Support, Critics, Me, wallet, vendor…)
│ ├─ actions.ts Server Actions: auth, backing, rating, vouching, vendor tools
│ └─ api/snap/ Snap-to-list endpoint (Claude vision)
├─ components/ UI pieces (StallCard, BackSheet, WalletView, vendor/…)
└─ lib/
├─ data/ One data layer, two sources: demo.ts (mock) and live.ts (Supabase)
├─ mock-data.ts The demo world: stalls, campaigns, critics
├─ osm.ts Live OpenStreetMap spots
└─ dish-photos.ts Photo credits and licences
supabase/
├─ migrations/ 0001 core schema · 0002 vendor side
└─ seed.sql Live mode's starting stalls (generated from the demo data)
back_campaign: enough play money, campaign still open, amount within limitswithdraw_earnings and redeem_credit: never more than the balancesimulate_month: never beyond each backing's 1.5× capaccept_redeem_code: only the owner of that stall, only unexpired and unused codesvouch_stall: one vouch per player, and the stall goes live at 3These rules are covered by 57 automated database checks (row-level security, limits, caps, codes, vouching).
git clone https://github.com/Pratyush1427/Hissa.git
cd Hissa
npm install
cp .env.example .env.local
npm run dev # → http://localhost:3000 (Demo mode works with no setup)
.env.local:
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
npm run dev. The ● Live switch appears.To regenerate the seed from the demo data, run node scripts/gen-seed.mts.
NEXT_PUBLIC_SUPABASE_* environment variables.https://<your-app>.vercel.app/** to the redirect URLs, so password-reset links work.The map needs no key, and every push to main redeploys automatically.
Add ANTHROPIC_API_KEY=sk-ant-... to .env.local (or to Vercel's environment variables). Each photo costs roughly ₹3–4. Without a key, Snap-to-list returns a clearly labelled demo result.
src/lib/dish-photos.ts and shown in the appMade with 🌶️ in Bengaluru