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.
Discover Dahanu businesses, restaurants, hotels, services, and community updates on OurDahanu.
Translation pending
CommerceTypeScript · PLpgSQLGitHub @soham24OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.