From 511629b4e6048e3142f28def7a0cc21e780fbce1 Mon Sep 17 00:00:00 2001 From: Kelly Date: Mon, 1 Dec 2025 16:29:21 -0700 Subject: [PATCH] Rename WordPress plugin from Dutchie Menus to Crawlsy Menus v1.3.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Renamed plugin to avoid WordPress.org naming conflict causing false update notifications - Added /downloads static route to serve plugin zip file - Updated all CSS classes from dutchie- to crawlsy- prefix - Added plugin zip to backend/public/downloads for hosting - Plugin available at: https://dispos.crawlsy.com/downloads/crawlsy-menus-1.3.0.zip 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- backend/Dockerfile | 4 + .../public/downloads/crawlsy-menus-1.3.0.zip | Bin 0 -> 11531 bytes backend/src/index.ts | 4 + .../{dutchie-menus.css => crawlsy-menus.css} | 98 +++++++------- .../js/{dutchie-menus.js => crawlsy-menus.js} | 6 +- .../{dutchie-menus.php => crawlsy-menus.php} | 93 +++++++------ wordpress-plugin/templates/product-grid.php | 26 ++-- wordpress-plugin/templates/single-product.php | 42 +++--- wordpress-plugin/widgets/product-grid.php | 112 ++++++++-------- wordpress-plugin/widgets/single-product.php | 126 +++++++++--------- 10 files changed, 264 insertions(+), 247 deletions(-) create mode 100644 backend/public/downloads/crawlsy-menus-1.3.0.zip rename wordpress-plugin/assets/css/{dutchie-menus.css => crawlsy-menus.css} (74%) rename wordpress-plugin/assets/js/{dutchie-menus.js => crawlsy-menus.js} (91%) rename wordpress-plugin/{dutchie-menus.php => crawlsy-menus.php} (70%) diff --git a/backend/Dockerfile b/backend/Dockerfile index 047904a7..fb64ee84 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,4 +1,5 @@ # Build stage +# Image: code.cannabrands.app/creationshop/dispensary-scraper FROM node:20-slim AS builder WORKDIR /app @@ -49,6 +50,9 @@ COPY --from=builder /app/dist ./dist # Create local images directory for when MinIO is not configured RUN mkdir -p /app/public/images/products +# Copy static downloads (plugin files, etc.) +COPY public/downloads /app/public/downloads + EXPOSE 3010 CMD ["node", "dist/index.js"] diff --git a/backend/public/downloads/crawlsy-menus-1.3.0.zip b/backend/public/downloads/crawlsy-menus-1.3.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..2f92c50d8a6c1b19074342dcd2a61da787194a02 GIT binary patch literal 11531 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 wlmE { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); diff --git a/wordpress-plugin/assets/css/dutchie-menus.css b/wordpress-plugin/assets/css/crawlsy-menus.css similarity index 74% rename from wordpress-plugin/assets/css/dutchie-menus.css rename to wordpress-plugin/assets/css/crawlsy-menus.css index 01e3e1a9..3a9c924f 100644 --- a/wordpress-plugin/assets/css/dutchie-menus.css +++ b/wordpress-plugin/assets/css/crawlsy-menus.css @@ -1,53 +1,53 @@ /** - * Dutchie Menus - WordPress Plugin Styles + * Crawlsy Menus - WordPress Plugin Styles */ /* Product Grid */ -.dutchie-product-grid { +.crawlsy-product-grid { display: grid; gap: 24px; margin: 20px 0; } -.dutchie-grid-cols-2 { +.crawlsy-grid-cols-2 { grid-template-columns: repeat(2, 1fr); } -.dutchie-grid-cols-3 { +.crawlsy-grid-cols-3 { grid-template-columns: repeat(3, 1fr); } -.dutchie-grid-cols-4 { +.crawlsy-grid-cols-4 { grid-template-columns: repeat(4, 1fr); } -.dutchie-grid-cols-6 { +.crawlsy-grid-cols-6 { grid-template-columns: repeat(6, 1fr); } @media (max-width: 1024px) { - .dutchie-grid-cols-4, - .dutchie-grid-cols-6 { + .crawlsy-grid-cols-4, + .crawlsy-grid-cols-6 { grid-template-columns: repeat(3, 1fr); } } @media (max-width: 768px) { - .dutchie-grid-cols-3, - .dutchie-grid-cols-4, - .dutchie-grid-cols-6 { + .crawlsy-grid-cols-3, + .crawlsy-grid-cols-4, + .crawlsy-grid-cols-6 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { - .dutchie-product-grid { + .crawlsy-product-grid { grid-template-columns: 1fr; } } /* Product Card */ -.dutchie-product-card { +.crawlsy-product-card { background: #fff; border-radius: 8px; overflow: hidden; @@ -57,32 +57,32 @@ flex-direction: column; } -.dutchie-product-card:hover { +.crawlsy-product-card:hover { transform: translateY(-4px); box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15); } -.dutchie-product-image { +.crawlsy-product-image { width: 100%; aspect-ratio: 1; overflow: hidden; background: #f5f5f5; } -.dutchie-product-image img { +.crawlsy-product-image img { width: 100%; height: 100%; object-fit: cover; } -.dutchie-product-content { +.crawlsy-product-content { padding: 16px; flex: 1; display: flex; flex-direction: column; } -.dutchie-product-title { +.crawlsy-product-title { font-size: 18px; font-weight: 600; margin: 0 0 8px 0; @@ -90,48 +90,48 @@ line-height: 1.4; } -.dutchie-product-brand { +.crawlsy-product-brand { font-size: 14px; color: #666; margin-bottom: 8px; } -.dutchie-product-description { +.crawlsy-product-description { font-size: 14px; color: #666; line-height: 1.6; margin: 0 0 12px 0; } -.dutchie-product-meta { +.crawlsy-product-meta { display: flex; flex-wrap: wrap; gap: 12px; margin: 12px 0; } -.dutchie-meta-item { +.crawlsy-meta-item { font-size: 13px; padding: 4px 10px; border-radius: 4px; background: #f0f0f0; } -.dutchie-meta-item strong { +.crawlsy-meta-item strong { color: #333; } -.dutchie-thc { +.crawlsy-thc { background: #e8f5e9; color: #2e7d32; } -.dutchie-cbd { +.crawlsy-cbd { background: #e3f2fd; color: #1565c0; } -.dutchie-product-price { +.crawlsy-product-price { font-size: 20px; font-weight: 700; color: #2e7d32; @@ -139,7 +139,7 @@ padding-top: 12px; } -.dutchie-out-of-stock { +.crawlsy-out-of-stock { display: inline-block; padding: 6px 12px; background: #ffebee; @@ -151,7 +151,7 @@ } /* Single Product */ -.dutchie-single-product { +.crawlsy-single-product { background: #fff; border-radius: 8px; padding: 24px; @@ -159,25 +159,25 @@ margin: 20px 0; } -.dutchie-layout-horizontal { +.crawlsy-layout-horizontal { display: grid; grid-template-columns: 400px 1fr; gap: 32px; } -.dutchie-layout-vertical { +.crawlsy-layout-vertical { display: flex; flex-direction: column; gap: 24px; } @media (max-width: 768px) { - .dutchie-layout-horizontal { + .crawlsy-layout-horizontal { grid-template-columns: 1fr; } } -.dutchie-single-product-image { +.crawlsy-single-product-image { width: 100%; aspect-ratio: 1; overflow: hidden; @@ -185,19 +185,19 @@ background: #f5f5f5; } -.dutchie-single-product-image img { +.crawlsy-single-product-image img { width: 100%; height: 100%; object-fit: cover; } -.dutchie-single-product-details { +.crawlsy-single-product-details { display: flex; flex-direction: column; gap: 16px; } -.dutchie-single-product-title { +.crawlsy-single-product-title { font-size: 28px; font-weight: 700; margin: 0; @@ -205,22 +205,22 @@ line-height: 1.3; } -.dutchie-single-product-brand { +.crawlsy-single-product-brand { font-size: 16px; color: #666; } -.dutchie-single-product-brand strong { +.crawlsy-single-product-brand strong { color: #333; } -.dutchie-single-product-description { +.crawlsy-single-product-description { font-size: 16px; line-height: 1.6; color: #555; } -.dutchie-single-product-info { +.crawlsy-single-product-info { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; @@ -229,44 +229,44 @@ border-radius: 8px; } -.dutchie-info-item { +.crawlsy-info-item { display: flex; flex-direction: column; gap: 4px; } -.dutchie-info-item strong { +.crawlsy-info-item strong { font-size: 14px; color: #333; text-transform: uppercase; letter-spacing: 0.5px; } -.dutchie-info-item span { +.crawlsy-info-item span { font-size: 16px; color: #555; } -.dutchie-info-item.dutchie-terpenes span, -.dutchie-info-item.dutchie-effects span, -.dutchie-info-item.dutchie-flavors span { +.crawlsy-info-item.crawlsy-terpenes span, +.crawlsy-info-item.crawlsy-effects span, +.crawlsy-info-item.crawlsy-flavors span { font-size: 14px; } -.dutchie-single-product-price { +.crawlsy-single-product-price { font-size: 32px; font-weight: 700; color: #2e7d32; } /* Loading State */ -.dutchie-loading { +.crawlsy-loading { text-align: center; padding: 40px; color: #666; } -.dutchie-loading:after { +.crawlsy-loading:after { content: "..."; animation: dots 1.5s steps(4, end) infinite; } @@ -293,7 +293,7 @@ } /* Error State */ -.dutchie-error { +.crawlsy-error { padding: 16px; background: #ffebee; color: #c62828; diff --git a/wordpress-plugin/assets/js/dutchie-menus.js b/wordpress-plugin/assets/js/crawlsy-menus.js similarity index 91% rename from wordpress-plugin/assets/js/dutchie-menus.js rename to wordpress-plugin/assets/js/crawlsy-menus.js index 33394bc5..4d225889 100644 --- a/wordpress-plugin/assets/js/dutchie-menus.js +++ b/wordpress-plugin/assets/js/crawlsy-menus.js @@ -1,5 +1,5 @@ /** - * Dutchie Menus - WordPress Plugin JavaScript + * Crawlsy Menus - WordPress Plugin JavaScript */ (function($) { @@ -24,7 +24,7 @@ }); }); - document.querySelectorAll('.dutchie-product-image img[data-src]').forEach(img => { + document.querySelectorAll('.crawlsy-product-image img[data-src]').forEach(img => { imageObserver.observe(img); }); } @@ -48,7 +48,7 @@ threshold: 0.1 }); - document.querySelectorAll('.dutchie-product-card').forEach(card => { + document.querySelectorAll('.crawlsy-product-card').forEach(card => { cardObserver.observe(card); }); } diff --git a/wordpress-plugin/dutchie-menus.php b/wordpress-plugin/crawlsy-menus.php similarity index 70% rename from wordpress-plugin/dutchie-menus.php rename to wordpress-plugin/crawlsy-menus.php index 36fa3122..f4ce3585 100644 --- a/wordpress-plugin/dutchie-menus.php +++ b/wordpress-plugin/crawlsy-menus.php @@ -1,13 +1,13 @@ register(new \Dutchie_Menus_Product_Grid_Widget()); - $widgets_manager->register(new \Dutchie_Menus_Single_Product_Widget()); + $widgets_manager->register(new \Crawlsy_Menus_Product_Grid_Widget()); + $widgets_manager->register(new \Crawlsy_Menus_Single_Product_Widget()); } /** @@ -67,17 +70,17 @@ class Dutchie_Menus_Plugin { */ public function enqueue_scripts() { wp_enqueue_style( - 'dutchie-menus-styles', - DUTCHIE_MENUS_PLUGIN_URL . 'assets/css/dutchie-menus.css', + 'crawlsy-menus-styles', + CRAWLSY_MENUS_PLUGIN_URL . 'assets/css/crawlsy-menus.css', [], - DUTCHIE_MENUS_VERSION + CRAWLSY_MENUS_VERSION ); wp_enqueue_script( - 'dutchie-menus-script', - DUTCHIE_MENUS_PLUGIN_URL . 'assets/js/dutchie-menus.js', + 'crawlsy-menus-script', + CRAWLSY_MENUS_PLUGIN_URL . 'assets/js/crawlsy-menus.js', ['jquery'], - DUTCHIE_MENUS_VERSION, + CRAWLSY_MENUS_VERSION, true ); } @@ -87,10 +90,10 @@ class Dutchie_Menus_Plugin { */ public function add_admin_menu() { add_menu_page( - 'Dutchie Menus', - 'Dutchie Menus', + 'Crawlsy Menus', + 'Crawlsy Menus', 'manage_options', - 'dutchie-menus', + 'crawlsy-menus', [$this, 'admin_page'], 'dashicons-products', 30 @@ -101,7 +104,13 @@ class Dutchie_Menus_Plugin { * Register Plugin Settings */ public function register_settings() { - register_setting('dutchie_menus_settings', 'dutchie_api_token'); + register_setting('crawlsy_menus_settings', 'crawlsy_api_token'); + + // Migrate old setting if exists + $old_token = get_option('dutchie_api_token'); + if ($old_token && !get_option('crawlsy_api_token')) { + update_option('crawlsy_api_token', $old_token); + } } /** @@ -110,19 +119,19 @@ class Dutchie_Menus_Plugin { public function admin_page() { ?>
-

Dutchie Menus Settings

-

Version by Creationshop

+

Crawlsy Menus Settings

+

Version by Creationshop

- - + + - + @@ -141,8 +150,8 @@ class Dutchie_Menus_Plugin {
-

Your authentication token from the admin dashboard. The token includes your store configuration.