尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Dilz is a community platform for sharing deals. Any user who spots an
interesting promotion — in a store, online, anywhere — posts it to the
Dilz feed, where the community can see it, vote on it, comment and share it.
Deals are geolocated, so people find what is worth their time near them.
The Capacitor 8 iOS shell lives in ios/ and loads the production Dilz application from https://dilz.vercel.app. App Store preparation, remaining blockers and the Mac release procedure are documented in docs/app-store/.檢視完整 README ↗Dilz is a community platform for sharing deals. Any user who spots an interesting promotion — in a store, online, anywhere — posts it to the Dilz feed, where the community can see it, vote on it, comment and share it.
Deals are geolocated, so people find what is worth their time near them.
The Capacitor 8 iOS shell lives in ios/ and loads the production Dilz application from https://dilz.vercel.app. App Store preparation, remaining blockers and the Mac release procedure are documented in docs/app-store/.
Run npm run ios:sync after changing Capacitor configuration or native plugins. Opening and signing the Xcode project requires macOS with Xcode 26 or later.
Dilz also still carries a legacy Israeli supermarket price-comparison feature (product/price/promotion imports). It is not the product — see Legacy: price comparison below.
npm install..env.example to .env.local and fill in the Supabase values.supabase-core-setup.sqlsupabase-product-images-setup.sqlsupabase-deal-images-setup.sqlsupabase-votes-setup.sqlsupabase-alerts-setup.sqlsupabase-safety-setup.sqlsupabase-native-push-setup.sqlsupabase-deal-promotion-setup.sqlnpm run dev.The service-role key is server-only. Never prefix it with NEXT_PUBLIC_ or expose it to browser code.
npm run dev: start the development servernpm test: run the unit testsnpm run build: create a production buildnpm run check: run tests followed by the production buildnpm run ios:sync: copy Capacitor configuration and plugins into the iOS projectnpm run ios:open: open the iOS project on a Mac with XcodeAuthenticated users can publish deals with an image, vote, comment, edit their own deals, and create alerts. The API derives the author identity from the Supabase access token rather than trusting request bodies.
scripts/deal-bot.js (Dilz Scout) fetches candidate deals from the web — KSP, public Telegram channels, authorized Facebook pages and RSS feeds — and inserts them with pending status for review. It does not compare prices; it discovers deals to add to Dilz. Approve or reject one with a server-to-server request:
$headers = @{ Authorization = "Bearer $env:ADMIN_BOT_TOKEN" }
$body = @{ id = 123 } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://localhost:3000/api/admin/approve -Headers $headers -ContentType application/json -Body $body
Use /api/admin/reject to reject it. Admin tokens must be sent in a header, never in the URL.
Dilz began as an Israeli supermarket price-comparison tool. That product is dead; Dilz today is the community deal-sharing platform described above. The price-comparison data pipeline and UI below are still present in the codebase — not deleted, since the local setup instructions above still depend on them — but they are not maintained or promoted as a feature.
The product comparison modal (components/deals/PromoModal.js) is no longer opened from anywhere
in the app — it and the barcode scanner it was paired with (pages/scan.js) were disconnected from the
UI in issue #15. When live, it listed each store's price for a product, highlighted the cheapest one,
and showed the amount saved. The component remains in the codebase, unreferenced, per the note above.
Imports write with SUPABASE_SERVICE_KEY; public clients only receive read access to catalog data.
node scripts/import-magasins.js
node scripts/import-prix.js
node scripts/import-images.js
The import order matters because prices and promotions reference products, while city search reads normalized stores.
Run supabase-product-images-setup.sql once before image enrichment. Images are matched only by exact barcode:
npm run images:stats
npm run images:import -- --source=shufersal --limit=500
npm run images:import -- --source=open-food-facts --limit=500
Shufersal pages are checked first because they cover many Israeli products. Open Food Facts is used as a secondary source and is intentionally rate-limited. Set OPENFOODFACTS_CONTACT to a real contact email before running bulk enrichment. Products with short internal produce codes keep the neutral application placeholder instead of receiving an approximate or misleading photo.
Open Food Facts images are attributed in the product comparison modal and remain subject to the source's CC BY-SA terms. Review retailer terms before relying on retailer-hosted images in production.
.env.example in the hosting environment.npm run check.