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.