Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
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.