ShopNex
ShopNex는 관리·결제·스토어 API·웹훅·앱 마켓을 갖춘 즉시 사용 가능한 자체 호스팅 상거래 플랫폼으로, 개발자 없이도 운영 가능합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.