Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Cart Transfer & Redirect MVP - "סל חכם" מערכת להרכבת סל קניות אחיד, השוואת מחירים בזמן אמת בין רשתות השיווק (שופרסל, רמי לוי, קרפור, יוחננוף) והעברה בלחיצה אחת לאתר הרשת המשתלמת - כשהעגלה שם כבר מלאה, ונותר רק לבחור חלון אספקה ולשלם. המסמך המלא של האיפיון נמצא ב-docs/SPEC.md; הארכיטקטורה ב-docs/ARCHITECTURE.md; מנגנון ההעברה (Handoff) והרחבתו לרשתות נוספות ב-docs/HANDOFF.md. דרישות: Node.js 20 ומעלה. אין תלויות חיצוניות (npm install לא נדרש).README 전문 보기 ↗
מערכת להרכבת סל קניות אחיד, השוואת מחירים בזמן אמת בין רשתות השיווק (שופרסל, רמי לוי, קרפור, יוחננוף) והעברה בלחיצה אחת לאתר הרשת המשתלמת - כשהעגלה שם כבר מלאה, ונותר רק לבחור חלון אספקה ולשלם.
המסמך המלא של האיפיון נמצא ב-docs/SPEC.md; הארכיטקטורה ב-docs/ARCHITECTURE.md;
מנגנון ההעברה (Handoff) והרחבתו לרשתות נוספות ב-docs/HANDOFF.md.
דרישות: Node.js 20 ומעלה. אין תלויות חיצוניות (npm install לא נדרש).
npm start # http://localhost:3000
npm test # 56 בדיקות (יחידה + אינטגרציה מקצה לקצה מול חנות ההדגמה)
npm run seed # יצירה מחדש של קטלוגי הרשתות המדומים (data/catalogs/*.json)
npm run build:extension # מעתיק את ה-injector לתוך תיקיית התוסף
מסכים:
| כתובת | מה יש שם |
|---|---|
/ | אפליקציית הלקוח: חיפוש, סל, כתובת, טבלת השוואה, כפתורי "הזמן ברשת X" |
/demo-store/ | "רשת שיווק" מדומה עם עגלת אורח, CSRF ו-checkout - להדגמת ההזרקה ללא תלות ברשת אמיתית |
/bookmarklet | דף עם ה-Bookmarklet לגרירה לשורת הסימניות |
/api/health | בריאות השרת |
http://localhost:3000, חפש מוצרים והוסף לסל (למשל חלב, מלפפון, במבה ×3).#cart_id=...; הסקריפט המוזרק
(בדמו הוא נטען בדף, במציאות ע"י התוסף) מוסיף את הפריטים לעגלה, מציג "העגלה נטענה בהצלחה,
כעת בחר מועד משלוח ובצע תשלום" ומעביר ל-checkout. באפליקציה הסטטוס מתעדכן ל"הושלם".סביבה חיה (Vercel): https://cart-transfer-redirect.vercel.app - חנות ההדגמה ב-/demo-store/.
הריפו מוכן לפריסה בלחיצה אחת. הענף claude/cart-transfer-redirect-mvp-wyxm2l הוא ענף ברירת המחדל של הריפו.
vercel.json מנתב כל בקשה ל-api/index.js. הגדר את משתנה הסביבה HANDOFF_SECRET.railway.json מריץ npm start; PORT מסופק אוטומטית. מומלץ להגדיר HANDOFF_SECRET.פרטים מלאים, כולל מה נשמר איפה בכל סביבה, ב-docs/DEPLOY.md.
src/
catalog/priceXml.js פרסר לקובצי שקיפות מחירים (PriceFull / PromoFull XML)
catalog/matching.js נרמול עברית, Fuzzy Matching למוצרים שקילים, חיפוש בקטלוג
catalog/mapping.js מנוע מיפוי: override ידני -> GTIN -> fuzzy; מזהה storeItemId לכל רשת
pricing/promotions.js שקלול מבצעי כמות ("3 ב-10"), אחוזי הנחה, מחירי מבצע
pricing/compare.js טבלת ההשוואה: סניף לפי כתובת, סכומים, חוסרים, תחליפים, משלוח, "המשתלם ביותר"
geo/branches.js זיהוי עיר מכתובת חופשית ובחירת סניף מספק
cart/cart.js סלים, רשימות קבועות, מוצרים תחליפיים
handoff/adapters/*.js תיאור (כ-JSON) של API העגלה של כל רשת
handoff/injector.cjs הסקריפט שרץ באתר הרשת ומבצע את ההזרקה (משותף לתוסף / bookmarklet / WebView)
handoff/handoffService.js יצירת handoff (cart_id), payload לתוסף, קליטת תוצאות
handoff/alerts.js מנגנון התרעה על שינוי מבנה API / שיעור כשלונות + probe יזום
server/ שרת HTTP ללא תלויות: API, קבצים סטטיים, חנות הדגמה, persistence
public/ אפליקציית הלקוח (Vanilla JS, RTL)
extension/ תוסף Chrome (MV3)
bookmarklet/, mobile/ חלופות להזרקה: bookmarklet ו-In-App WebView
data/ קטלוג מוצרים, רשתות וסניפים, קטלוגי רשתות, דוגמאות XML, overrides
scripts/ seed, ייבוא קובצי מחירים, בניית התוסף, probe לרשתות
test/ node:test
| Method | Path | תיאור |
|---|---|---|
| GET | /api/products?q=&category= | חיפוש מוצרים (substring + fuzzy) |
| GET | /api/categories, /api/chains | קטגוריות; רשתות וסניפים, עם דגלי pickupOnly / inStoreOnly / parent ו-priceList (תאריך וחנות המחירון) |
| GET | /api/health | בריאות; data = מקור הנתונים (disk / url), מתי נטענו, generatedAt ו-store לכל רשת; handoffStore = memory / redis |
| POST | /api/data/refresh | טעינה מחדש של הקטלוגים עכשיו (מ-CATALOGS_URL כשמוגדר, אחרת מהדיסק) |
| POST | /api/carts | סל חדש |
| PUT | /api/carts/:id/lines | { productId, qty, substituteProductId? } (qty 0 מסיר) |
| PUT | /api/carts/:id/address | { address: "הרצל 12, תל אביב" } |
| GET | /api/carts/:id/compare | טבלת ההשוואה; לכל שורה priceList ודגלי הרשת, ובראש unknownProducts (מוצרים שכבר לא בקטלוג) |
| GET/POST | /api/lists, /api/lists/:id/load | רשימות קבועות |
| POST | /api/handoffs | { cartId, chainId } → { url: "https://.../#cart_id=…" } |
| GET | /api/handoffs/:id | ה-payload לתוסף: פריטים + adapter + reportUrl |
| POST | /api/handoffs/:id/results | דיווח תוצאות ההזרקה מהדפדפן |
| GET | /api/handoffs/:id/status, /api/handoffs/:id/script | סטטוס; סקריפט מלא ל-WebView |
| GET | /api/alerts, POST /api/alerts/probe | התראות עמידות; בדיקה יזומה של ה-endpoints |
| GET | /api/mapping/stats | כיסוי המיפוי לכל רשת (איטי עם הקטלוגים המלאים - לניפוי שגיאות) |
data/products.json ו-data/catalogs/*.json נבנים מקובצי שקיפות המחירים של סניפי האונליין של הרשתות
(המחירון של האונליין שונה לפעמים מזה של הסניפים). המחירון והקטלוג נבנים אך ורק מהקבצים המפורסמים, ובריצה היומית אין שום פנייה לאתרי הרשתות. (כלי הביקורת הידניים audit:online-check ו-audit:shufersal-codes משווים קובץ לאתר לפי בקשה בלבד):
npm run prices:fetch # מוריד PriceFull/PromoFull של החנות המקוונת מכל פורטל -> data/prices/<chain>/ (לא ב-git)
npm run products:build # קטלוג מאוחד לפי ברקוד (מוצרים שנמכרים ב-3 רשתות לפחות) + קטלוגים רזים לכל רשת + קטלוג הדמו
| רשת | מקור | סניף |
|---|---|---|
| שופרסל | prices.shufersal.co.il | 413 "שופרסל ONLINE" |
| קרפור, יינות ביתן, קוויק | prices.carrefour.co.il | 471 / 472 / 473 (סניפי האונליין) |
| טיב טעם | publishedprices.co.il | 502 ליקוט אונליין |
| רמי לוי | publishedprices.co.il + /api/catalog של האתר | סניף האינטרנט לא מפרסם קובץ; המחירים נלקחים מה-API של האתר (סניף 331) |
| יוחננוף | publishedprices.co.il + GraphQL של האתר | אין סניף אונליין בקבצים; המחירים מה-API של האתר |
| חצי חינם | shop.hazi-hinam.co.il/prices + ה-API של האתר | המחסן 219 מפרסם חלקית; המלאי המלא מה-API |
| קשת טעמים | publishedprices.co.il | הסניף הגדול (014); סניף האונליין לא מפרסם |
| ויקטורי, מחסני השוק | laibcatalog.co.il | 097 "אינטרנט" (סניף האונליין של כל אחת; ה-API של Laib עונה מה-runner, 17.9.2026) |
| שוק העיר, אקספרס מהדרין | לא נמצא פורטל | מחוץ להשוואה |
רשת ללא קטלוג אמיתי לא מוצגת בהשוואה (אין יותר מחירי דמו לרשתות אמיתיות). קובצי הבדיקות משתמשים בעותק קפוא של
נתוני הדמו ב-test/fixtures/data. ייבוא קובץ בודד: node scripts/import-prices.js --chain <id> --price PriceFull.xml.
13 רשתות מאומתות מול האתרים החיים (8.9.2026) ומסומנות verified: true:
| רשת | מנגנון | זיהוי פריט |
|---|---|---|
| שופרסל | Hybris, POST /online/he/cart/add (JSON + CSRFToken) | קוד אתר P_<code> (לרוב P_<ברקוד>) |
| רמי לוי | עגלת אורח ב-localStorage + תמחור ב-/api/v2/cart | ברקוד → id דרך /api/catalog |
| קרפור | Self Point, carts + PATCH lines | ברקוד → retailerProductId דרך /products |
| יוחננוף | Magento GraphQL AddProductsToCart | ברקוד (= SKU) |
| ויקטורי, טיב טעם, יינות ביתן, מחסני השוק, קשת טעמים, קוויק, שוק העיר, אקספרס מהדרין | Self Point (כמו קרפור), src/handoff/adapters/selfPoint.js | ברקוד → retailerProductId |
| חצי חינם | /proxy/api/item/addItemToCart | ברקוד → Id דרך getItemsBySearch |
הטעינה באתר הרשת נעשית עם סימניית "טען עגלה" (/bookmarklet) - בלי תוסף ובלי התקנה. ההקלטות ב-recon/, ההוכחות מקצה לקצה ב-recon/e2e-<chain>.json, הפרטים והמגבלות ב-docs/HANDOFF.md,
ומה שעדיין פתוח (מוצרים שקילים, משתמש מחובר ברמי לוי, סניפים, קטלוגים אמיתיים) ב-docs/TODO.md.
בייבוא קובצי מחירים: --store-item-id "{code}" (ברקוד) לרמי לוי, קרפור ויוחננוף; "P_{code}" לשופרסל.