From 00731715165b1cee1202c7ff5e89458d3d2184a4 Mon Sep 17 00:00:00 2001 From: ashwin Date: Wed, 28 May 2025 21:56:13 +0530 Subject: [PATCH 1/3] Enhance SEO and structured data across site pages - Updated meta titles, descriptions, and keywords for better search visibility on customization, FAQ, features, account management, contact management, lead management, sales pipeline, migration, pricing, privacy policy, and terms of service pages. - Improved Open Graph and Twitter Card metadata for enhanced social sharing. - Added structured data (JSON-LD) for SoftwareApplication and Service types to relevant pages to improve search engine understanding and rich results. - Ensured canonical links are correctly pointing to the new domain (bottlecrm.io). --- src/lib/newsletter.js | 14 +- src/routes/(site)/+layout.svelte | 2 +- src/routes/(site)/+page.svelte | 700 ++++++++++-------- src/routes/(site)/contact/+page.svelte | 54 +- src/routes/(site)/customization/+page.svelte | 61 +- src/routes/(site)/faq/+page.svelte | 59 +- src/routes/(site)/features/+page.svelte | 77 +- .../features/account-management/+page.svelte | 48 +- .../features/contact-management/+page.svelte | 61 +- .../features/lead-management/+page.svelte | 46 +- .../features/sales-pipeline/+page.svelte | 45 +- src/routes/(site)/migration/+page.svelte | 54 +- src/routes/(site)/pricing/+page.svelte | 36 +- src/routes/(site)/privacy-policy/+page.svelte | 52 +- .../(site)/terms-of-service/+page.svelte | 62 +- 15 files changed, 889 insertions(+), 482 deletions(-) diff --git a/src/lib/newsletter.js b/src/lib/newsletter.js index dbf04f0..38e47c0 100644 --- a/src/lib/newsletter.js +++ b/src/lib/newsletter.js @@ -6,7 +6,7 @@ * @param {string} baseUrl - Base URL of the application * @returns {string} Unsubscribe URL */ -export function generateUnsubscribeLink(token, baseUrl = 'https://bottlecrm.com') { +export function generateUnsubscribeLink(token, baseUrl = 'https://bottlecrm.io') { return `${baseUrl}/unsubscribe?token=${token}`; } @@ -54,14 +54,14 @@ export function generateWelcomeEmail(email, unsubscribeLink) {
- Try BottleCRM Free + Try BottleCRM Free

You're receiving this email because you subscribed to BottleCRM newsletter.

Unsubscribe | - Visit Website + Visit Website

BottleCRM by MicroPyramid
@@ -81,14 +81,14 @@ export function generateWelcomeEmail(email, unsubscribeLink) { • Industry Insights: Stay ahead with the latest CRM trends and strategies • Exclusive Content: Guides and resources available only to subscribers - Try BottleCRM Free: https://bottlecrm.com/demo + Try BottleCRM Free: https://bottlecrm.io/demo You're receiving this email because you subscribed to BottleCRM newsletter. To unsubscribe, visit: ${unsubscribeLink} BottleCRM by MicroPyramid The free, open-source CRM for startups - https://bottlecrm.com + https://bottlecrm.io ` }; } @@ -100,7 +100,7 @@ export function generateWelcomeEmail(email, unsubscribeLink) { * @returns {object} Newsletter template with subject and body */ export function generateNewsletterTemplate(content, unsubscribeLink) { - const { subject, headline, articles = [], ctaText = 'Learn More', ctaLink = 'https://bottlecrm.com' } = content; + const { subject, headline, articles = [], ctaText = 'Learn More', ctaLink = 'https://bottlecrm.io' } = content; const articlesHtml = articles.map(article => `

@@ -137,7 +137,7 @@ export function generateNewsletterTemplate(content, unsubscribeLink) {

You're receiving this email because you subscribed to BottleCRM newsletter.

Unsubscribe | - Visit Website + Visit Website

BottleCRM by MicroPyramid
diff --git a/src/routes/(site)/+layout.svelte b/src/routes/(site)/+layout.svelte index 649f415..d11e14a 100644 --- a/src/routes/(site)/+layout.svelte +++ b/src/routes/(site)/+layout.svelte @@ -75,7 +75,7 @@ - + diff --git a/src/routes/(site)/+page.svelte b/src/routes/(site)/+page.svelte index 91fcc12..e8010ee 100644 --- a/src/routes/(site)/+page.svelte +++ b/src/routes/(site)/+page.svelte @@ -1,7 +1,7 @@ - BottleCRM | Free Open-Source CRM Software for Startups & Small Businesses - No Subscription Fees - - - + BottleCRM: Free Open Source CRM for Startups & Small Business + + + + + - - - - + + + + - - - - - + + + + + @@ -312,37 +162,179 @@

- {#each features as feature, index} - {#if mounted} -
- - {#if feature.comingSoon} -
- - Coming Soon - -
- {/if} - -
- -
- -

{feature.title}

-

{feature.description}

- -
    - {#each feature.benefits as benefit} -
  • - - {benefit} -
  • - {/each} -
-
- {/if} - {/each} + +
+
+ +
+ +

Smart Contact Management System

+

Centralize customer data with our intuitive contact management system. Track customer interactions, manage qualified leads, and build stronger customer relationships. Perfect for startups, small businesses, and growing enterprises looking for efficient CRM software.

+ +
    +
  • + + 360° Customer View +
  • +
  • + + Lead Scoring +
  • +
  • + + Contact Segmentation +
  • +
+
+ + +
+
+ + Coming Soon + +
+ +
+ +
+ +

Visual Sales Pipeline Management

+

Streamline your sales process with our drag-and-drop sales pipeline. Track deals from lead qualification to closing, forecast revenue accurately, and implement powerful sales automation workflows to boost your conversion rates.

+ +
    +
  • + + Deal Tracking +
  • +
  • + + Sales Forecasting +
  • +
  • + + Automation Workflows +
  • +
+
+ + +
+
+ +
+ +

Advanced Task & Project Management

+

Never miss a follow-up with integrated task management and project tracking. Set reminders, assign tasks to team members, track project milestones, and ensure maximum productivity across your sales and marketing teams.

+ +
    +
  • + + Task Automation +
  • +
  • + + Team Collaboration +
  • +
  • + + Deadline Tracking +
  • +
+
+ + +
+
+ + Coming Soon + +
+ +
+ +
+ +

Real-time Analytics & Reporting

+

Make data-driven decisions with comprehensive CRM analytics and business intelligence. Track sales performance, monitor marketing campaign effectiveness, and generate detailed reports to optimize your customer acquisition strategies.

+ +
    +
  • + + Custom Dashboards +
  • +
  • + + Performance Metrics +
  • +
  • + + ROI Tracking +
  • +
+
+ + +
+
+ + Coming Soon + +
+ +
+ +
+ +

Automated Invoice & Billing Management

+

Streamline your billing process with integrated invoicing software. Create professional invoices, track payments, manage recurring billing, and integrate with popular payment gateways. Perfect for service-based businesses and SaaS startups.

+ +
    +
  • + + Payment Tracking +
  • +
  • + + Recurring Billing +
  • +
  • + + Payment Integration +
  • +
+
+ + +
+
+ + Coming Soon + +
+ +
+ +
+ +

Mobile CRM & Cloud Access

+

Access your CRM data anywhere with our responsive, mobile-optimized interface. Work offline, sync data automatically, and manage your business on-the-go. Perfect for sales teams, remote workers, and field service management.

+ +
    +
  • + + Offline Access +
  • +
  • + + Real-time Sync +
  • +
  • + + Cross-platform Support +
  • +
+
@@ -373,33 +365,65 @@ - {#each competitors as competitor, index} - - -
- {competitor.name} - {#if index === 0}Recommended{/if} -
- - {competitor.price} - - {#if competitor.openSource} - - {:else} - - {/if} - - - {#if competitor.selfHosted} - - {:else} - - {/if} - - {competitor.customizable} - {competitor.userLimit} - - {/each} + + +
+ BottleCRM + Recommended +
+ + Free + + + + + + + Yes + Unlimited + + + + Enterprise CRM Solutions + + $25-300+/user/month + + + + + + + Yes + Per seat pricing + + + + Popular Cloud CRMs + + $50-3200+/month + + + + + + + Limited + Contact-based pricing + + + + Traditional CRM Platforms + + $15-99+/user/month + + + + + + + Limited + Per seat pricing + @@ -418,57 +442,6 @@ - - -
@@ -482,26 +455,119 @@
- {#each faqs as faq, index} -
- - - {#if activeFaq === index} -
-

{faq.answer}

-
- {/if} -
- {/each} +
+ + + {#if activeFaq === 0} +
+

Yes! BottleCRM is 100% free and open-source. You can download, install, customize, and use it without any subscription fees or hidden costs. We also offer optional paid support services for hosting and customization.

+
+ {/if} +
+ +
+ + + {#if activeFaq === 1} +
+

BottleCRM offers many of the same core features as enterprise CRM platforms but without the high monthly costs. While some commercial CRMs might have more advanced features, BottleCRM provides everything most startups and small businesses need to manage customer relationships effectively.

+
+ {/if} +
+ +
+ + + {#if activeFaq === 2} +
+

Absolutely! BottleCRM is designed to be self-hosted. You have complete control over your data and can deploy it on your own servers, cloud infrastructure, or local environment. This ensures data privacy and eliminates vendor lock-in.

+
+ {/if} +
+ +
+ + + {#if activeFaq === 3} +
+

BottleCRM is built with modern web technologies: SvelteKit 2.21.x for the frontend, Prisma for database management, TailwindCSS for styling, and includes integration capabilities with various third-party services.

+
+ {/if} +
+ +
+ + + {#if activeFaq === 4} +
+

Yes! While the software is free, we offer paid professional services including hosting setup, custom development, data migration, training, and ongoing technical support to help you get the most out of BottleCRM.

+
+ {/if} +
+ +
+ + + {#if activeFaq === 5} +
+

BottleCRM is industry-agnostic and works well for most businesses including SaaS startups, consulting firms, e-commerce businesses, real estate agencies, and service-based companies. Its customizable nature allows adaptation to various industry-specific needs.

+
+ {/if} +
diff --git a/src/routes/(site)/contact/+page.svelte b/src/routes/(site)/contact/+page.svelte index ca1557a..78e6079 100644 --- a/src/routes/(site)/contact/+page.svelte +++ b/src/routes/(site)/contact/+page.svelte @@ -68,24 +68,52 @@ - Contact BottleCRM | Get Professional CRM Setup, Hosting & Custom Development Services - - - + Contact BottleCRM | Free CRM & Professional Services + + + + - - - - - + + + `} diff --git a/src/routes/(site)/customization/+page.svelte b/src/routes/(site)/customization/+page.svelte index 4013dd8..8e885bf 100644 --- a/src/routes/(site)/customization/+page.svelte +++ b/src/routes/(site)/customization/+page.svelte @@ -43,34 +43,73 @@ - BottleCRM Customization | Custom CRM Development & Professional Services - - - + BottleCRM Customization: Free Open Source CRM & Custom Development + + + + + - - - - + + + + + + + + + + + + + + diff --git a/src/routes/(site)/faq/+page.svelte b/src/routes/(site)/faq/+page.svelte index 73671e3..b2b9374 100644 --- a/src/routes/(site)/faq/+page.svelte +++ b/src/routes/(site)/faq/+page.svelte @@ -31,39 +31,68 @@ - BottleCRM FAQ | Frequently Asked Questions About Free Open-Source CRM Software - - - + BottleCRM FAQ | Free Open Source CRM for Startups & SMBs + + + + + - - - - - + + `} diff --git a/src/routes/(site)/features/+page.svelte b/src/routes/(site)/features/+page.svelte index 93a6bc1..ff7c5e1 100644 --- a/src/routes/(site)/features/+page.svelte +++ b/src/routes/(site)/features/+page.svelte @@ -43,15 +43,78 @@ - BottleCRM Features | Complete Free CRM Software Feature List - Contact Management, Sales Pipeline & More - - + BottleCRM Features: Free & Open Source CRM Software + + - - + + - + + {/* Add a relevant image URL */} + + @@ -1208,7 +1271,7 @@
  • Full source code access -
  • +
  • Custom integrations diff --git a/src/routes/(site)/features/account-management/+page.svelte b/src/routes/(site)/features/account-management/+page.svelte index 53cb5f8..efce663 100644 --- a/src/routes/(site)/features/account-management/+page.svelte +++ b/src/routes/(site)/features/account-management/+page.svelte @@ -46,15 +46,39 @@ - Account Management | BottleCRM - Free Contact & Customer Account Management Software - - + Free Account Management CRM | Unlimited Contacts & Customer Database + + - - + + - + + + + @@ -327,27 +351,27 @@
    • - + Personal & professional details
    • - + Multiple contact methods
    • - + Communication preferences
    • - + Custom field support
    • - + Photo & document storage
    • - + Social media integration
    diff --git a/src/routes/(site)/features/contact-management/+page.svelte b/src/routes/(site)/features/contact-management/+page.svelte index 7b84246..28e092d 100644 --- a/src/routes/(site)/features/contact-management/+page.svelte +++ b/src/routes/(site)/features/contact-management/+page.svelte @@ -58,29 +58,48 @@ - Free Contact Management Software | BottleCRM - Unlimited Contacts, Zero Cost - - - + Free Contact Management Software | Unlimited CRM - BottleCRM + + + + - - - - - + + `} diff --git a/src/routes/(site)/features/lead-management/+page.svelte b/src/routes/(site)/features/lead-management/+page.svelte index 959ecd5..7659cc9 100644 --- a/src/routes/(site)/features/lead-management/+page.svelte +++ b/src/routes/(site)/features/lead-management/+page.svelte @@ -50,18 +50,50 @@ onMount(() => { mounted = true; }); + + // JSON-LD schema for SoftwareApplication + const schema = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + "name": "BottleCRM Lead Management", + "url": "https://bottlecrm.io/features/lead-management", + "applicationCategory": "CRM Application", + "operatingSystem": "All", + "offers": { + "@type": "Offer", + "price": "0", + "priceCurrency": "USD", + "availability": "https://schema.org/InStock" + }, + "description": "Free, open-source CRM lead management software for startups and small businesses. Capture, score, nurture, and convert leads with automated workflows.", + "publisher": { + "@type": "Organization", + "name": "BottleCRM" + } + }; - Lead Management Software | Free CRM Lead Generation & Nurturing - BottleCRM - - - + Free CRM Lead Management Software | BottleCRM + + + + + - - + + - + + + + + + + + + + diff --git a/src/routes/(site)/features/sales-pipeline/+page.svelte b/src/routes/(site)/features/sales-pipeline/+page.svelte index 45fca05..0e2c4bc 100644 --- a/src/routes/(site)/features/sales-pipeline/+page.svelte +++ b/src/routes/(site)/features/sales-pipeline/+page.svelte @@ -61,18 +61,49 @@ maximumFractionDigits: 0 }).format(value); } + + // JSON-LD schema for SaaS CRM SoftwareApplication + const schema = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + "name": "BottleCRM", + "image": "https://bottlecrm.io/logo.png", + "url": "https://bottlecrm.io/features/sales-pipeline", + "applicationCategory": "BusinessApplication", + "operatingSystem": "All", + "offers": { + "@type": "Offer", + "price": "0", + "priceCurrency": "USD" + }, + "description": "Free open-source CRM with visual sales pipeline management, deal tracking, sales forecasting, and workflow automation.", + "publisher": { + "@type": "Organization", + "name": "BottleCRM" + } + }; - Sales Pipeline Management | BottleCRM - Visual Deal Tracking & Sales Forecasting - - - + Free Sales Pipeline CRM | Visual Deal Tracking & Forecasting + + + - - + + - + + + + + + + + + + + {@html ``} diff --git a/src/routes/(site)/migration/+page.svelte b/src/routes/(site)/migration/+page.svelte index 64ddd7c..ed295ac 100644 --- a/src/routes/(site)/migration/+page.svelte +++ b/src/routes/(site)/migration/+page.svelte @@ -50,27 +50,43 @@ - Migrate to BottleCRM | Free CRM Migration Tools & Professional Migration Services - - - + Migrate to BottleCRM – Free CRM Migration Tools & Service + + + + - - - - - + + `} diff --git a/src/routes/(site)/pricing/+page.svelte b/src/routes/(site)/pricing/+page.svelte index a587450..839d2fa 100644 --- a/src/routes/(site)/pricing/+page.svelte +++ b/src/routes/(site)/pricing/+page.svelte @@ -45,28 +45,42 @@ - BottleCRM Pricing | 100% Free CRM Software with Optional Professional Support - - - + BottleCRM Pricing – Free Open Source CRM & Affordable Support + + + - - - + + + + + + + + + + + + diff --git a/src/routes/(site)/privacy-policy/+page.svelte b/src/routes/(site)/privacy-policy/+page.svelte index 784b029..1b27c06 100644 --- a/src/routes/(site)/privacy-policy/+page.svelte +++ b/src/routes/(site)/privacy-policy/+page.svelte @@ -16,18 +16,50 @@ } from '@lucide/svelte'; let lastUpdated = "June 2025"; + const schema = { + "@context": "https://schema.org", + "@type": "WebPage", + "name": "Privacy Policy | BottleCRM", + "description": "Read the privacy policy for BottleCRM, the free and open-source CRM. Learn how your data is protected, your privacy rights, and how self-hosting ensures full control.", + "url": "https://bottlecrm.io/privacy-policy", + "dateModified": "2025-06-01", + "publisher": { + "@type": "Organization", + "name": "BottleCRM", + "url": "https://bottlecrm.io", + "logo": { + "@type": "ImageObject", + "url": "https://bottlecrm.io/logo.png" + } + } + }; - Privacy Policy | BottleCRM - Protecting Your Data & Privacy Rights - - - + Privacy Policy | BottleCRM - Free Open Source CRM for Data Privacy + + + + + - - + + - + + + + + + + + + + + + @@ -145,7 +177,7 @@ -

    Website Analytics (bottlecrm.com only)

    +

    Website Analytics (bottlecrm.io only)

    • @@ -228,7 +260,7 @@

      Website Security

      - Our website (bottlecrm.com) is protected with industry-standard security measures including SSL encryption, + Our website (bottlecrm.io) is protected with industry-standard security measures including SSL encryption, regular security audits, and secure hosting infrastructure.

      @@ -315,7 +347,7 @@
      • - privacy@bottlecrm.com + privacy@bottlecrm.io
      • diff --git a/src/routes/(site)/terms-of-service/+page.svelte b/src/routes/(site)/terms-of-service/+page.svelte index 104603c..e368576 100644 --- a/src/routes/(site)/terms-of-service/+page.svelte +++ b/src/routes/(site)/terms-of-service/+page.svelte @@ -24,37 +24,51 @@ - Terms of Service | BottleCRM - Free Open Source CRM Software - - - + Terms of Service | Free Open Source CRM - BottleCRM + + + + + - - - + + + + + - - - - + + + + + - + + `} From e8db11dee255ad9407135d7af4d1fdd1e1c5d386 Mon Sep 17 00:00:00 2001 From: ashwin Date: Wed, 28 May 2025 22:08:18 +0530 Subject: [PATCH 2/3] refactor: remove unused Flowbite dependencies and clean up CSS --- package.json | 4 - pnpm-lock.yaml | 225 ------------------------ src/app.css | 21 --- src/routes/(site)/features/+page.svelte | 2 +- 4 files changed, 1 insertion(+), 251 deletions(-) diff --git a/package.json b/package.json index 0aa5c9a..6686683 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,6 @@ "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^3.0.0", - "flowbite": "^3.1.2", - "flowbite-svelte": "^0.48.6", "globals": "^16.0.0", "prettier": "^3.5.3", "prettier-plugin-svelte": "^3.3.3", @@ -50,8 +48,6 @@ "@prisma/client": "6.5.0", "axios": "^1.8.4", "date-fns": "^4.1.0", - "flowbite-svelte-blocks": "^1.1.4", - "flowbite-svelte-icons": "^2.1.1", "marked": "^15.0.8", "svelte-fa": "^4.0.3", "svelte-highlight": "^7.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb91ac3..531fe3c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,12 +26,6 @@ importers: date-fns: specifier: ^4.1.0 version: 4.1.0 - flowbite-svelte-blocks: - specifier: ^1.1.4 - version: 1.1.4(rollup@4.39.0)(svelte@5.27.0) - flowbite-svelte-icons: - specifier: ^2.1.1 - version: 2.1.1(svelte@5.27.0)(tailwind-merge@3.2.0) marked: specifier: ^15.0.8 version: 15.0.8 @@ -81,12 +75,6 @@ importers: eslint-plugin-svelte: specifier: ^3.0.0 version: 3.5.1(eslint@9.24.0(jiti@2.4.2))(svelte@5.27.0) - flowbite: - specifier: ^3.1.2 - version: 3.1.2(rollup@4.39.0) - flowbite-svelte: - specifier: ^0.48.6 - version: 0.48.6(rollup@4.39.0)(svelte@5.27.0) globals: specifier: ^16.0.0 version: 16.0.0 @@ -328,15 +316,6 @@ packages: resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.6.9': - resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - - '@floating-ui/dom@1.6.13': - resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - - '@floating-ui/utils@0.2.9': - resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@fortawesome/fontawesome-common-types@6.7.2': resolution: {integrity: sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==} engines: {node: '>=6'} @@ -395,9 +374,6 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@prisma/client@6.5.0': resolution: {integrity: sha512-M6w1Ql/BeiGoZmhMdAZUXHu5sz5HubyVcKukbLs3l0ELcQb8hTUJxtGEChhv4SVJ0QJlwtLnwOLgIRQhpsm9dw==} engines: {node: '>=18.18'} @@ -446,15 +422,6 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.3.1': - resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-node-resolve@16.0.1': resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} engines: {node: '>=14.0.0'} @@ -714,9 +681,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@yr/monotone-cubic-spline@1.0.3': - resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -734,9 +698,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - apexcharts@3.54.1: - resolution: {integrity: sha512-E4et0h/J1U3r3EwS/WlqJCQIbepKbp6wGUmaAwJOMjHUP4Ci0gxanLa7FR3okx6p9coi4st6J853/Cb1NP0vpA==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -977,32 +938,6 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - flowbite-datepicker@1.3.2: - resolution: {integrity: sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==} - - flowbite-svelte-blocks@1.1.4: - resolution: {integrity: sha512-+5CuefgXKmAGvnI3AqG5wKTQme2zum/DRrVeYtZ1rM6+t91e1aWDKvM358ij7irdjNLQ619ezjHqqJYKQPWZWg==} - engines: {node: '>=16.0.0', npm: '>=7.0.0'} - peerDependencies: - svelte: ^4.0.0 || ^5.0.0 - - flowbite-svelte-icons@2.1.1: - resolution: {integrity: sha512-VNNMcekjbM1bQEGgbdGsdYR9mRdTj/L0A5ba0P1tiFv5QB9GvbvJMABJoiD80eqpZUkfR2QVOmiZfgCwHicT/Q==} - peerDependencies: - svelte: ^5.0.0 - tailwind-merge: ^3.0.0 - - flowbite-svelte@0.48.6: - resolution: {integrity: sha512-/PmeR3ipHHvda8vVY9MZlymaRoJsk8VddEeoLzIygfYwJV68ey8gHuQPC1dq9J6NDCTE5+xOPtBiYUtVjCfvZw==} - peerDependencies: - svelte: ^3.55.1 || ^4.0.0 || ^5.0.0 - - flowbite@2.5.2: - resolution: {integrity: sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==} - - flowbite@3.1.2: - resolution: {integrity: sha512-MkwSgbbybCYgMC+go6Da5idEKUFfMqc/AmSjm/2ZbdmvoKf5frLPq/eIhXc9P+rC8t9boZtUXzHDgt5whZ6A/Q==} - follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -1245,10 +1180,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mini-svg-data-uri@1.4.4: - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} - hasBin: true - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1528,43 +1459,6 @@ packages: resolution: {integrity: sha512-Uai13Ydt1ZE+bUHme6b9U38PCYVNCqBRoBMkUKbFbKiD7kHWjdUUrklYAQZJxyKK81qII4mrBwe/YmvEMSlC9w==} engines: {node: '>=18'} - svg.draggable.js@2.2.2: - resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} - engines: {node: '>= 0.8.0'} - - svg.easing.js@2.0.0: - resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} - engines: {node: '>= 0.8.0'} - - svg.filter.js@2.0.2: - resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} - engines: {node: '>= 0.8.0'} - - svg.js@2.7.1: - resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - - svg.pathmorphing.js@0.1.3: - resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} - engines: {node: '>= 0.8.0'} - - svg.resize.js@1.4.3: - resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} - engines: {node: '>= 0.8.0'} - - svg.select.js@2.1.2: - resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} - engines: {node: '>= 0.8.0'} - - svg.select.js@3.0.1: - resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} - engines: {node: '>= 0.8.0'} - - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - - tailwind-merge@3.2.0: - resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} - tailwindcss@4.1.4: resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} @@ -1804,17 +1698,6 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 - '@floating-ui/core@1.6.9': - dependencies: - '@floating-ui/utils': 0.2.9 - - '@floating-ui/dom@1.6.13': - dependencies: - '@floating-ui/core': 1.6.9 - '@floating-ui/utils': 0.2.9 - - '@floating-ui/utils@0.2.9': {} - '@fortawesome/fontawesome-common-types@6.7.2': {} '@fortawesome/free-brands-svg-icons@6.7.2': @@ -1861,8 +1744,6 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@popperjs/core@2.11.8': {} - '@prisma/client@6.5.0(prisma@6.5.0(typescript@5.8.3))(typescript@5.8.3)': optionalDependencies: prisma: 6.5.0(typescript@5.8.3) @@ -1914,16 +1795,6 @@ snapshots: optionalDependencies: rollup: 4.39.0 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.39.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.39.0) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.39.0 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.39.0)': dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.39.0) @@ -2134,8 +2005,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@yr/monotone-cubic-spline@1.0.3': {} - acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -2153,16 +2022,6 @@ snapshots: dependencies: color-convert: 2.0.1 - apexcharts@3.54.1: - dependencies: - '@yr/monotone-cubic-spline': 1.0.3 - svg.draggable.js: 2.2.2 - svg.easing.js: 2.0.0 - svg.filter.js: 2.0.2 - svg.pathmorphing.js: 0.1.3 - svg.resize.js: 1.4.3 - svg.select.js: 3.0.1 - argparse@2.0.1: {} aria-query@5.3.2: {} @@ -2431,53 +2290,6 @@ snapshots: flatted@3.3.3: {} - flowbite-datepicker@1.3.2(rollup@4.39.0): - dependencies: - '@rollup/plugin-node-resolve': 15.3.1(rollup@4.39.0) - flowbite: 2.5.2(rollup@4.39.0) - transitivePeerDependencies: - - rollup - - flowbite-svelte-blocks@1.1.4(rollup@4.39.0)(svelte@5.27.0): - dependencies: - flowbite: 2.5.2(rollup@4.39.0) - svelte: 5.27.0 - tailwind-merge: 2.6.0 - transitivePeerDependencies: - - rollup - - flowbite-svelte-icons@2.1.1(svelte@5.27.0)(tailwind-merge@3.2.0): - dependencies: - svelte: 5.27.0 - tailwind-merge: 3.2.0 - - flowbite-svelte@0.48.6(rollup@4.39.0)(svelte@5.27.0): - dependencies: - '@floating-ui/dom': 1.6.13 - apexcharts: 3.54.1 - flowbite: 3.1.2(rollup@4.39.0) - svelte: 5.27.0 - tailwind-merge: 3.2.0 - transitivePeerDependencies: - - rollup - - flowbite@2.5.2(rollup@4.39.0): - dependencies: - '@popperjs/core': 2.11.8 - flowbite-datepicker: 1.3.2(rollup@4.39.0) - mini-svg-data-uri: 1.4.4 - transitivePeerDependencies: - - rollup - - flowbite@3.1.2(rollup@4.39.0): - dependencies: - '@popperjs/core': 2.11.8 - flowbite-datepicker: 1.3.2(rollup@4.39.0) - mini-svg-data-uri: 1.4.4 - postcss: 8.5.3 - transitivePeerDependencies: - - rollup - follow-redirects@1.15.9: {} form-data@4.0.2: @@ -2667,8 +2479,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mini-svg-data-uri@1.4.4: {} - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -2899,41 +2709,6 @@ snapshots: magic-string: 0.30.17 zimmerframe: 1.1.2 - svg.draggable.js@2.2.2: - dependencies: - svg.js: 2.7.1 - - svg.easing.js@2.0.0: - dependencies: - svg.js: 2.7.1 - - svg.filter.js@2.0.2: - dependencies: - svg.js: 2.7.1 - - svg.js@2.7.1: {} - - svg.pathmorphing.js@0.1.3: - dependencies: - svg.js: 2.7.1 - - svg.resize.js@1.4.3: - dependencies: - svg.js: 2.7.1 - svg.select.js: 2.1.2 - - svg.select.js@2.1.2: - dependencies: - svg.js: 2.7.1 - - svg.select.js@3.0.1: - dependencies: - svg.js: 2.7.1 - - tailwind-merge@2.6.0: {} - - tailwind-merge@3.2.0: {} - tailwindcss@4.1.4: {} tapable@2.2.1: {} diff --git a/src/app.css b/src/app.css index e9f78c8..a596c08 100644 --- a/src/app.css +++ b/src/app.css @@ -1,24 +1,3 @@ @import 'tailwindcss'; @plugin '@tailwindcss/typography'; -@plugin 'flowbite/plugin'; - -@custom-variant dark (&:where(.dark, .dark *)); -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - --color-primary-50: #fff5f2; - --color-primary-100: #fff1ee; - --color-primary-200: #ffe4de; - --color-primary-300: #ffd5cc; - --color-primary-400: #ffbcad; - --color-primary-500: #fe795d; - --color-primary-600: #ef562f; - --color-primary-700: #eb4f27; - --color-primary-800: #cc4522; - --color-primary-900: #a5371b; -} - -@source "../node_modules/flowbite-svelte/dist"; \ No newline at end of file diff --git a/src/routes/(site)/features/+page.svelte b/src/routes/(site)/features/+page.svelte index ff7c5e1..c0d5444 100644 --- a/src/routes/(site)/features/+page.svelte +++ b/src/routes/(site)/features/+page.svelte @@ -52,7 +52,7 @@ - {/* Add a relevant image URL */} + - -
        -
        -
        selectLeadList(item.id)}>{item.title}
        - -
        - -
        - {item.country} - source {item.source} - status {item.status} -
        - -
        - {#each item.tags as tag} - {tag} - {/each} -
        - -
        - Created {FormateTime(item.created_at)} by - {item.first_name} - {item.first_name} {item.last_name} -
        -
        - \ No newline at end of file diff --git a/src/lib/components/TaskModal.svelte b/src/lib/components/TaskModal.svelte deleted file mode 100644 index c9f0f9c..0000000 --- a/src/lib/components/TaskModal.svelte +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - diff --git a/src/routes/(admin)/admin/blogs/[id]/+page.svelte b/src/routes/(admin)/admin/blogs/[id]/+page.svelte index 871306e..3cbdfda 100644 --- a/src/routes/(admin)/admin/blogs/[id]/+page.svelte +++ b/src/routes/(admin)/admin/blogs/[id]/+page.svelte @@ -5,94 +5,160 @@ import Highlight from "svelte-highlight"; import python from "svelte-highlight/languages/python"; import "svelte-highlight/styles/github-dark.css" - import Fa from "svelte-fa"; - import { - faTwitter, - faFacebook, - faLinkedin, - } from "@fortawesome/free-brands-svg-icons"; + import { Edit, Facebook, Twitter, Linkedin, Share2 } from "@lucide/svelte"; /** @type {{ data: import('./$types').PageData }} */ let { data } = $props(); - // console.log(data.category) - - - +
        + +
        +
        +
        + + + + Edit Blog + +
        +
        +
        -
        -
        -
        -
        - {data.blog.category} -

        {data.blog.title}

        -
        + +
        + +
        + +

        + {data.blog.title} +

        +
        -
        -
        -
        - {#each data.blog.contentBlocks as block} -
        - {#if block.type == "MARKDOWN"} + +
        + +
        +
        + {#each data.blog.contentBlocks as block} +
        + {#if block.type == "MARKDOWN"} +
        + {@html marked(block.content)} +
        + {/if} -
        {@html marked(block.content)}
        - {/if} + {#if block.type == "CODE"} +
        + +
        + {/if} +
        + {/each} +
        - {#if block.type == "CODE"} -
        - {/if} + +
        +
        +
        +
        + + Share this post
        - {/each} + +
        +
        +
        +
        -
        - Share this Blog post -
        - Facebook - X - Linkedin + +
        +
        -
        + +
        - +