ShopNex
A ready-to-use, self-hostable commerce platform: admin, hosted checkout, Storefront API, webhooks and an app marketplace. No developers required to run a shop.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A website for one town: a directory where every business gets its own subdomain, plus a jobs board, a professionals directory, appointment booking, and online ordering paid straight into each business's own account.
It runs ourdahanu.in for Dahanu, Maharashtra (65 businesses, around 500 residents signed up), and it is built so you can run the same thing for your town: OurPune, OurNashik, OurWherever.
You need Node.js 24 and Docker. No accounts, no keys.
git clone https://github.com/soham24/ourdahanusite.git ourtown
cd ourtown
npm install
npm run setup # starts a local database with sample data, writes .env.local
npm run dev
Open http://localhost:3000. You get the full site with sample businesses, events and tradespeople.
To sign in as admin: go to /login, type [email protected] under
"Local development only", then click the link in the local inbox at
http://127.0.0.1:54324.
Something not working? Run npm run doctor. It checks your setup and
tells you what to fix, in plain words.
Use a free Supabase project instead: paste the files in
supabase/migrations/ into its SQL editor in filename order (then
supabase/seed.sql for sample data), copy .env.local.example to
.env.local, and fill in the project's URL, anon key and service-role key.
Signing in that way needs Google set up first: SETUP.md, steps 1–5.
Three files, then one check:
src/lib/site-config.ts: the name, town,
domain and nearby places. Every page, email and link reads from here.
name: 'OurDahanu', // -> 'OurPune'
town: 'Dahanu', // -> 'Pune'
domain: 'ourdahanu.in', // -> 'ourpune.in'
Then run npm run sync:proxy, which copies the new domain into the
subdomain routing (Next.js can't read it from the config).
src/content/local.ts: your town's emergency
numbers, flood zones and contact details. Do this one carefully: a
wrong emergency number is the worst bug this site can have.
The rest of the local content: guides, the homepage team, the about page and a few others. SETUP.md step 8 lists every file.
Then run npm run doctor again. On a copy with its own domain, it lists
anything still carrying Dahanu's content, and fails while the emergency
numbers are still Dahanu's.
On Vercel (easiest):
The button copies this repository, creates a Supabase database for it, asks for three values and deploys. Then:
npm run db:link -- --project-ref <id>,
then npm run db:push (or paste supabase/migrations/ into the SQL
editor).vercel env pull .env.local, then npm run doctor.Anywhere else, with Docker:
docker compose --env-file .env.local up --build -d
SETUP.md → Hosting without Vercel covers the scheduled jobs and business subdomains.
Optional services (payments with Razorpay, email with Resend, Telegram,
WhatsApp, analytics) each switch on when their keys are set, and nothing
breaks without them. .env.local.example lists every setting with a comment;
SETUP.md walks through each service.
Running in production for one town since March 2026, so the parts below marked working are working with real businesses and real money — not demos.
Working: the business directory and per-business subdomains; reviews and owner replies; a professionals directory; appointment booking; a jobs board; guides; emergency contacts; item catalogues with online ordering paid into each business's own Razorpay account; owner and admin dashboards; email, Telegram and WhatsApp notifications.
Not built yet: a basket — one payment covers one item, not several. An owner can mark an order fulfilled or cancelled (cancelling gives the stock back), but there are no steps in between — no accepted, ready or out-for-delivery — and cancelling does not refund the money, which has to be returned through Razorpay by hand. Delivery fees and pickup options exist in the database but not in checkout.
Known limitations. It is built for one town per deployment, not many towns in one. Everything is in English with some Marathi in the branding. Payments and the phone-number handling assume India. Adoption is uneven — most businesses use the directory, far fewer have switched on payments — so the commerce paths have had much less real-world traffic than the rest.
Using it for your town means running your own copy: your domain, your Supabase project, your Razorpay account. There is no hosted multi-town service. Section 2 above and SETUP.md cover it.
npm run setup # local database + sample data, and .env.local to match
npm run dev # development server
npm run doctor # check your setup and leftover Dahanu content; changes nothing
npm run sync:proxy # after changing `domain` in site-config.ts
npm test # unit and security tests
npm run test:e2e # browser smoke test (needs `npm start` running)
npm run build # production build
npm run lint # eslint
npx tsc --noEmit # types
npm run db:reset # local database back to migrations + sample data
npm run db:stop # stop the local database
npm run db:link -- --project-ref <id> # point at a hosted Supabase project
npm run db:push # apply new migrations to it
| Read | When |
|---|---|
| SETUP.md | Setting up a real deployment, step by step |
| ARCHITECTURE.md | Before changing how something works |
| CONTRIBUTING.md | Before opening a pull request |
| docs/EMAIL-AND-NOTIFICATIONS.md | Setting up email, Telegram or WhatsApp |
| docs/DATABASE-MIGRATIONS.md | Changing the database, or applying changes automatically |
| SECURITY.md | Reporting a vulnerability (privately, please) |
Next.js 16 · React 19 · Tailwind v4 · Supabase (Postgres, Auth, Storage) · Razorpay · Vercel
⚠️ Next.js 16 differs from earlier versions in ways that catch people out; read AGENTS.md first. The most common one:
export const dynamicis not allowed.
bakery.ourdahanu.in is served by the same app;
src/proxy.ts routes it. find., jobs. and
appointments. are separate products with their own layout.supabase/migrations/, applied in order.
Change it by adding a new file, never by editing one that has shipped.MIT © Soham Railkar.
The code is open. The name "OurDahanu", the logo, and the live site's content (business listings, reviews, photos and guides) are not covered by the licence. Build your own town's; don't copy ours.