diff --git a/shipixen/app/tag-data.json b/shipixen/app/tag-data.json index cde850cf..cfa9cede 100644 --- a/shipixen/app/tag-data.json +++ b/shipixen/app/tag-data.json @@ -1 +1 @@ -{"automated-images":1,"marketing":8,"api":1,"design":2,"graphics":1,"browser-privacy":1,"screen-sharing":1,"streaming":1,"productivity":11,"efficiency":10,"tools":14,"ai-models":1,"macos":10,"ai-tools":3,"automation":8,"ai":11,"machine-learning":7,"email-marketing":2,"self-hosted":1,"seo":7,"promotion":5,"event-planning":1,"calendar-integration":1,"chrome-extension":1,"boilerplate":2,"reactjs":1,"tailwindcss":1,"developer-tools":3,"developer":4,"react":5,"hooks":1,"programming":2,"courses":1,"learning":2,"ai-chatbots":1,"customer-engagement":1,"salary-tracker":1,"startup":3,"saas":7,"business":3,"recruitment":1,"candidate-screening":1,"ai-icons":1,"image-generation":1,"voice":2,"text-to-speech":2,"ai-learning":1,"writing":1,"communication":1,"inventory-tracking":1,"ios":1,"ipados":1,"ai-writing-assistant":1,"grammarly-alternative":1,"golang":1,"game-development":1,"books":1,"ngrok-alternative":1,"local-domains":1,"campaigns":1,"developers":2,"designers":1,"marketers":1,"themes":1,"plugins":1,"customization":1,"nextjs":4,"typescript":1,"tailwind-css":2,"dashboards":1,"personal-organization":1,"browser-tabs":1,"tab-management":1,"pdf":1,"chat":1,"privacy":1,"social-media-scheduling":1,"open-source":1,"app-store-reviews":1,"ai-analysis":1,"reddit-marketing":1,"traffic":1,"optimization":2,"sales":1,"directories":1,"backlinks":1,"django":1,"screenshot-api":1,"deployment":1,"codebase":1,"vertical-tabs":1,"browser-management":1,"reddit":1,"traffic-analysis":1,"posting-schedule":1,"swimming":1,"triathlon":1,"workouts":1,"fitness":1,"health":1,"wellness":1,"components":1,"templates":1,"responsive-design":1,"time-tracking":1,"charts":1,"data-organization":1,"uptime-monitoring":1,"real-time":1,"alerts":1,"status-pages":1,"voice-cloning":1,"multilingual":1,"window-management":1} \ No newline at end of file +{"automated-images":1,"marketing":12,"api":1,"design":3,"graphics":2,"browser-privacy":1,"screen-sharing":1,"streaming":1,"productivity":11,"efficiency":10,"tools":14,"ai-models":1,"macos":10,"ai-tools":3,"automation":8,"ai":12,"machine-learning":7,"seo":10,"optimization":3,"email-marketing":2,"self-hosted":1,"promotion":7,"event-planning":1,"calendar-integration":1,"chrome-extension":1,"boilerplate":2,"reactjs":1,"tailwindcss":1,"developer-tools":3,"developer":4,"react":5,"hooks":1,"programming":2,"courses":1,"learning":2,"ai-chatbots":1,"customer-engagement":1,"salary-tracker":1,"recruitment":1,"candidate-screening":1,"ai-icons":1,"image-generation":1,"voice":3,"text-to-speech":3,"ai-learning":1,"writing":1,"communication":1,"inventory-tracking":1,"ios":1,"ipados":1,"ai-writing-assistant":1,"grammarly-alternative":1,"golang":1,"game-development":1,"books":1,"ngrok-alternative":1,"local-domains":1,"campaigns":1,"developers":2,"designers":1,"marketers":1,"themes":1,"plugins":1,"customization":1,"nextjs":4,"saas":7,"typescript":1,"tailwind-css":2,"dashboards":1,"personal-organization":1,"browser-tabs":1,"tab-management":1,"pdf":1,"chat":1,"privacy":1,"social-media-scheduling":1,"open-source":1,"app-store-reviews":1,"ai-analysis":1,"reddit-marketing":1,"traffic":1,"sales":1,"directories":1,"backlinks":1,"django":1,"business":3,"screenshot-api":1,"deployment":1,"codebase":1,"vertical-tabs":1,"browser-management":1,"reddit":1,"traffic-analysis":1,"posting-schedule":1,"swimming":1,"triathlon":1,"workouts":1,"fitness":1,"health":1,"wellness":1,"components":1,"templates":1,"responsive-design":1,"time-tracking":1,"charts":1,"data-organization":1,"voice-cloning":1,"multilingual":1,"window-management":1,"startup":2,"uptime-monitoring":1,"real-time":1,"alerts":1,"status-pages":1} \ No newline at end of file diff --git a/shipixen/components/blog/home/PostItem.tsx b/shipixen/components/blog/home/PostItem.tsx index 435036fe..108d5813 100644 --- a/shipixen/components/blog/home/PostItem.tsx +++ b/shipixen/components/blog/home/PostItem.tsx @@ -66,11 +66,11 @@ export function PostItem({ )} >
- {logo || images?.[0] ? ( + {logo ? ( - {logo || images?.[0] ? ( + {logo ? ( Product Thumbnail Simplify your event planning with **CalGet**. Create shareable “Add to Calendar” links that integrate seamlessly into your social media, newsletters, websites, and emails. category: Marketing Tools diff --git a/shipixen/data/products/chromekit.mdx b/shipixen/data/products/chromekit.mdx index 23bb6568..11c4cb8d 100644 --- a/shipixen/data/products/chromekit.mdx +++ b/shipixen/data/products/chromekit.mdx @@ -10,6 +10,7 @@ tags: - Developer Tools images: - /static/images/product/chromekit/og-image.png +logo: /static/images/product/chromekit/logo.png summary: > The Chrome extension boilerplate with all you need to build and launch your extension fast with ReactJS, TailwindCSS & Vite category: Boilerplates, Startup SaaS/Tools diff --git a/shipixen/data/products/creatorscrown-creators-hub.mdx b/shipixen/data/products/creatorscrown-creators-hub.mdx index 75c68c09..dcfa7296 100644 --- a/shipixen/data/products/creatorscrown-creators-hub.mdx +++ b/shipixen/data/products/creatorscrown-creators-hub.mdx @@ -8,6 +8,7 @@ tags: - Marketing images: - /static/images/product/creatorscrown-creators-hub/og-image.png +logo: /static/images/product/creatorscrown-creators-hub/logo.png summary: > Creators Hub is a platform that helps creators build their brand, grow their audience, and monetize their work. category: Design Tools diff --git a/shipixen/data/products/guidejar.mdx b/shipixen/data/products/guidejar.mdx deleted file mode 100644 index 271e4a32..00000000 --- a/shipixen/data/products/guidejar.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: > - Guidejar -date: 2024-11-17 -tags: - - Startup - - SaaS - - Business -images: - - /static/images/product/guidejar/og-image.png -logo: /static/images/product/guidejar/logo.png -summary: > - Showcase your product's full potential with AI-powered interactive product demos and guides. -category: Startup SaaS/Tools -deal: > - 40% OFF with code **BLACKFRIDAY24** -subcategory: Productivity Tools & Services -website: https://guidejar.com/ -layout: ProductLayout -metaDescription: > - Create AI-powered guides and interactive demos with just a few clicks. Improve user onboarding, reduce support tickets, and ultimately, boost conversion rates. -metaTitle: > - Guidejar | Create AI-powered step-by-step guides and interactive product demos effortlessly ---- -Showcase your product's full potential with AI-powered interactive product demos and guides. - -## Rare Deal - -40% OFF with code **BLACKFRIDAY24** -## Product Details -Guidejar | Create AI-powered step-by-step guides and interactive product demos effortlessly - -Create AI-powered guides and interactive demos with just a few clicks. Improve user onboarding, reduce support tickets, and ultimately, boost conversion rates. diff --git a/shipixen/data/products/hiretool-io.mdx b/shipixen/data/products/hiretool-io.mdx index 880e58e0..bef51dfa 100644 --- a/shipixen/data/products/hiretool-io.mdx +++ b/shipixen/data/products/hiretool-io.mdx @@ -10,6 +10,7 @@ tags: - Tools images: - /static/images/product/hiretool-io/og-image.png +logo: /static/images/product/hiretool-io/logo.png summary: > Cut out unqualified candidates before the interview— save your time and focus on the right talent category: Productivity diff --git a/shipixen/data/products/mindpal.mdx b/shipixen/data/products/mindpal.mdx index 5cb4ec52..27919dfc 100644 --- a/shipixen/data/products/mindpal.mdx +++ b/shipixen/data/products/mindpal.mdx @@ -8,6 +8,7 @@ tags: - Text to Speech images: - /static/images/product/mindpal/og-image.png +logo: /static/images/product/mindpal/logo.png summary: > Build AI agents & multi-agent workflows to automate business processes. category: Other AI tools diff --git a/shipixen/data/products/nextready.mdx b/shipixen/data/products/nextready.mdx index e3b7f1da..6dabcdac 100644 --- a/shipixen/data/products/nextready.mdx +++ b/shipixen/data/products/nextready.mdx @@ -8,6 +8,7 @@ tags: - SaaS images: - /static/images/product/nextready/og-image.png +logo: /static/images/product/nextready/logo.png summary: > A ready-to-use and type-safe components for Next.js, TypeScript, Prisma, LemonSqueezy, shadcn/ui, etc. category: Code Libraries diff --git a/shipixen/data/products/redreach.mdx b/shipixen/data/products/redreach.mdx index ad95be33..115d880f 100644 --- a/shipixen/data/products/redreach.mdx +++ b/shipixen/data/products/redreach.mdx @@ -11,6 +11,7 @@ tags: - Marketing images: - /static/images/product/redreach/og-image.png +logo: /static/images/product/redreach/logo.png summary: > Reddit Marketing: Turn Reddit traffic into customers. Finds high impact Reddit conversations to help you naturally promote your product and get more sales. category: SEO Tools diff --git a/shipixen/data/products/reinspire.mdx b/shipixen/data/products/reinspire.mdx index 48154e64..567bd6ff 100644 --- a/shipixen/data/products/reinspire.mdx +++ b/shipixen/data/products/reinspire.mdx @@ -8,6 +8,7 @@ tags: - Automation images: - /static/images/product/reinspire/og-image.png +logo: /static/images/product/reinspire/logo.png summary: > Transform your Audio/Video Content into Transcripts, Newsletters, Blog Posts, Timestamps and more. Content Repurposing Made Easy! category: AI Tools diff --git a/shipixen/data/products/uptimebeats.mdx b/shipixen/data/products/uptimebeats.mdx deleted file mode 100644 index 8e6b29b3..00000000 --- a/shipixen/data/products/uptimebeats.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: > - UptimeBeats -date: 2024-11-17 -tags: - - Uptime Monitoring - - Real-Time - - Alerts - - Status Pages - - SaaS - - Startup - - Business -images: - - /static/images/product/uptimebeats/og-image.png -summary: > - Real-Time Uptime Monitoring to ensure 24/7 availability, track response times, receive downtime alerts, and create custom status pages. -category: Startup SaaS/Tools -deal: > - 20% OFF on lifetime deal and monthly/yearly subscriptions with code **BLACKFRIDAY** -subcategory: Productivity Tools & Services -website: https://uptimebeats.com/ -layout: ProductLayout -metaDescription: > - Real-Time Monitoring for Maximum Performance, Ensure 24/7 Uptime, Boost User Experience, and Maximize Your Online Presence -metaTitle: > - UptimeBeats | The Easiest Way to Monitor Your Site's Uptime. ---- -Real-Time Uptime Monitoring to ensure 24/7 availability, track response times, receive downtime alerts, and create custom status pages. - -## Rare Deal - -20% OFF on lifetime deal and monthly/yearly subscriptions with code **BLACKFRIDAY** -## Product Details -UptimeBeats | The Easiest Way to Monitor Your Site's Uptime. - -Real-Time Monitoring for Maximum Performance, Ensure 24/7 Uptime, Boost User Experience, and Maximize Your Online Presence diff --git a/shipixen/data/products/wins-brand-new-window-manager.mdx b/shipixen/data/products/wins-brand-new-window-manager.mdx index 9a005f00..5ccb775f 100644 --- a/shipixen/data/products/wins-brand-new-window-manager.mdx +++ b/shipixen/data/products/wins-brand-new-window-manager.mdx @@ -11,6 +11,7 @@ tags: - Tools images: - /static/images/product/wins-brand-new-window-manager/og-image.png +logo: /static/images/product/wins-brand-new-window-manager/logo.png summary: > A New Mac Window Manager. Dock Window Previewer, Aero shake, Mission Control Pro and more. Bring System-level Arrange Window features to Mac category: Developer Tools diff --git a/shipixen/layouts/ProductLayout.tsx b/shipixen/layouts/ProductLayout.tsx index 75a7c50a..cc5c33b1 100644 --- a/shipixen/layouts/ProductLayout.tsx +++ b/shipixen/layouts/ProductLayout.tsx @@ -78,12 +78,12 @@ export default function PostLayout({
-
- {logo || firstImage ? ( +
+ {logo ? ( - {logo || firstImage ? ( + {logo ? ( Product Thumbnail )} -

{title}

+

+ {title} +

{firstImage && ( @@ -129,7 +131,7 @@ export default function PostLayout({ alt={title} width={1240} height={640} - className="rounded-t-lg w-full h-auto relative -mt-12" + className="bg-white rounded-t-lg w-full h-auto relative -mt-12 -z-10" /> )}
diff --git a/shipixen/package-lock.json b/shipixen/package-lock.json index 446919b6..6790553a 100644 --- a/shipixen/package-lock.json +++ b/shipixen/package-lock.json @@ -80,6 +80,7 @@ "remark": "^14.0.2", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", + "sharp": "^0.33.5", "shipixen-contentlayer": "1.0.2", "sonner": "^1.5.0", "tailwind-merge": "^1.14.0", @@ -2274,6 +2275,15 @@ "resolved": "https://registry.npmjs.org/@effect-ts/system/-/system-0.57.5.tgz", "integrity": "sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==" }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", @@ -2858,6 +2868,348 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -8176,6 +8528,18 @@ } } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "license": "MIT", @@ -8190,6 +8554,15 @@ "version": "1.1.4", "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -8792,6 +9165,14 @@ "node": ">=6" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -17257,6 +17638,55 @@ "node": ">= 0.4" } }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -17313,6 +17743,19 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", diff --git a/shipixen/package.json b/shipixen/package.json index be17235e..410104f1 100644 --- a/shipixen/package.json +++ b/shipixen/package.json @@ -84,6 +84,7 @@ "remark": "^14.0.2", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", + "sharp": "^0.33.5", "shipixen-contentlayer": "1.0.2", "sonner": "^1.5.0", "tailwind-merge": "^1.14.0", diff --git a/shipixen/public/static/images/product/calget/logo.png b/shipixen/public/static/images/product/calget/logo.png new file mode 100644 index 00000000..4071a463 Binary files /dev/null and b/shipixen/public/static/images/product/calget/logo.png differ diff --git a/shipixen/public/static/images/product/chromekit/logo.png b/shipixen/public/static/images/product/chromekit/logo.png new file mode 100644 index 00000000..39d5b628 Binary files /dev/null and b/shipixen/public/static/images/product/chromekit/logo.png differ diff --git a/shipixen/public/static/images/product/creatorscrown-creators-hub/logo.png b/shipixen/public/static/images/product/creatorscrown-creators-hub/logo.png new file mode 100644 index 00000000..0e2ebfb5 Binary files /dev/null and b/shipixen/public/static/images/product/creatorscrown-creators-hub/logo.png differ diff --git a/shipixen/public/static/images/product/guidejar/logo.png b/shipixen/public/static/images/product/guidejar/logo.png deleted file mode 100644 index 13338b15..00000000 Binary files a/shipixen/public/static/images/product/guidejar/logo.png and /dev/null differ diff --git a/shipixen/public/static/images/product/guidejar/og-image.png b/shipixen/public/static/images/product/guidejar/og-image.png deleted file mode 100644 index ff14a144..00000000 Binary files a/shipixen/public/static/images/product/guidejar/og-image.png and /dev/null differ diff --git a/shipixen/public/static/images/product/hiretool-io/logo.png b/shipixen/public/static/images/product/hiretool-io/logo.png new file mode 100644 index 00000000..5b7c2d01 Binary files /dev/null and b/shipixen/public/static/images/product/hiretool-io/logo.png differ diff --git a/shipixen/public/static/images/product/mindpal/logo.png b/shipixen/public/static/images/product/mindpal/logo.png new file mode 100644 index 00000000..07d86e00 Binary files /dev/null and b/shipixen/public/static/images/product/mindpal/logo.png differ diff --git a/shipixen/public/static/images/product/nextready/logo.png b/shipixen/public/static/images/product/nextready/logo.png new file mode 100644 index 00000000..9226f7e9 Binary files /dev/null and b/shipixen/public/static/images/product/nextready/logo.png differ diff --git a/shipixen/public/static/images/product/redreach/logo.png b/shipixen/public/static/images/product/redreach/logo.png new file mode 100644 index 00000000..4dd203b8 Binary files /dev/null and b/shipixen/public/static/images/product/redreach/logo.png differ diff --git a/shipixen/public/static/images/product/reinspire/logo.png b/shipixen/public/static/images/product/reinspire/logo.png new file mode 100644 index 00000000..088f0367 Binary files /dev/null and b/shipixen/public/static/images/product/reinspire/logo.png differ diff --git a/shipixen/public/static/images/product/tim-time-tracker/logo.png b/shipixen/public/static/images/product/tim-time-tracker/logo.png index 66cde063..894ff428 100644 Binary files a/shipixen/public/static/images/product/tim-time-tracker/logo.png and b/shipixen/public/static/images/product/tim-time-tracker/logo.png differ diff --git a/shipixen/public/static/images/product/uptimebeats/og-image.png b/shipixen/public/static/images/product/uptimebeats/og-image.png deleted file mode 100644 index 261a096a..00000000 Binary files a/shipixen/public/static/images/product/uptimebeats/og-image.png and /dev/null differ diff --git a/shipixen/public/static/images/product/wins-brand-new-window-manager/logo.png b/shipixen/public/static/images/product/wins-brand-new-window-manager/logo.png new file mode 100644 index 00000000..2f15401a Binary files /dev/null and b/shipixen/public/static/images/product/wins-brand-new-window-manager/logo.png differ diff --git a/shipixen/scripts/parse-app-info.js b/shipixen/scripts/parse-app-info.js index cebb29cc..ee694419 100644 --- a/shipixen/scripts/parse-app-info.js +++ b/shipixen/scripts/parse-app-info.js @@ -7,6 +7,7 @@ const { generateMDXContent } = require('./generate-mdx-content'); const { parseReadme } = require('./parse-readme'); const { sanitizeName } = require('./sanitize-name'); const { outputDir } = require('./settings'); +const sharp = require('sharp'); async function downloadImage(url, outputPath) { try { @@ -78,6 +79,9 @@ async function fetchWebsiteData(website) { '/favicon-16x16.png', '/apple-touch-icon.png', '/favicon.png', + // Get .ico too + $('link[rel="icon"]').attr('href'), + $('link[rel="shortcut icon"]').attr('href'), ] .filter(Boolean) .map((url) => new URL(url, website).href); @@ -91,7 +95,11 @@ async function fetchWebsiteData(website) { }, validateStatus: (status) => status < 400, }); - if (headResponse.status === 200) { + + if ( + headResponse.status === 200 && + headResponse.headers['content-type'].startsWith('image/') + ) { highestResFaviconUrl = url; break; } @@ -163,7 +171,8 @@ async function fetchAssets(app) { if ( highestResFaviconUrl && - highestResFaviconUrl.endsWith('.png') && + (highestResFaviconUrl.endsWith('.png') || + highestResFaviconUrl.endsWith('.ico')) && !override?.logo ) { const logoPath = path.join(appDir, 'logo.png'); @@ -171,7 +180,17 @@ async function fetchAssets(app) { highestResFaviconUrl, logoPath, ); + if (isValidImage) { + if (highestResFaviconUrl.endsWith('.ico')) { + const icoPath = path.join(appDir, 'logo.png'); + await fs.promises.rename(logoPath, icoPath); // Rename the downloaded file to .ico + + await sharp(icoPath).png().toFile(logoPath); // Convert .ico to .png + + await fs.promises.unlink(icoPath); // Remove the .ico file + } + app.logo = `/static/images/product/${productName}/logo.png`; } } else {