Compare commits

...

5 Commits

Author SHA1 Message Date
akash
f0d1cf08ac portfolio loading updated 2025-12-15 18:22:28 +05:30
4a8a46f3d9 2 blogs updated 2025-12-15 17:41:06 +05:30
akash
626ad80ee8 new images updated 2025-12-13 12:01:03 +05:30
akash
a960f2a6c1 new blogs updated 2025-12-12 15:55:37 +05:30
akash
72e588b3a7 new 2 blogs are updated 2025-12-06 13:07:47 +05:30
25 changed files with 2306 additions and 7 deletions

View File

@ -9464,12 +9464,20 @@ ul.social-box li a:hover {
.blogbanner-shape {
width: 45%;
width: 60%;
}
}
@media only screen and (min-width: 320px) and (max-width: 1600px){
.blogbanner-shape {
display: none;
}
}
@media only screen and (min-width: 320px) and (max-width: 992px){

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 KiB

File diff suppressed because one or more lines are too long

View File

@ -39,7 +39,7 @@ const staticLinks = [
{ url: '/services-digital-solutions/', changefreq: 'daily', priority: 0.7 },
{ url: '/about/', changefreq: 'weekly', priority: 0.7 },
{ url: '/careers/', changefreq: 'weekly', priority: 0.7 },
{ url: '/portfolio/', changefreq: 'weekly', priority: 0.7 },
{ url: '/portfolio/', changefreq: 'weekly', priority: 0.7 },
{ url: '/blog/', changefreq: 'weekly', priority: 0.7 },
{ url: '/contact/', changefreq: 'monthly', priority: 0.5 },
{ url: '/faq/', changefreq: 'monthly', priority: 0.5 },
@ -82,6 +82,12 @@ const blogPosts = [
{ slug: 'mastering-omnichannel-marketing-strategies-for-2026' },
{ slug: 'how-metatroncube-solutions-improve-local-seo-waterloo' },
{ slug: 'why-metatroncube-solutions-top-choice-social-media-marketing-waterloo' },
{ slug: 'how-does-metatroncube-solutions-help-businesses-get-more-local-customers-through-search-engines' },
{ slug: 'can-metatroncube-solutions-optimize-my-google-business-profile' },
{ slug: 'seo-services-waterloo-small-businesses-metatroncube' },
{ slug: 'boost-google-maps-ranking-waterloo-metatroncube' },
{ slug: 'how-metatroncube-solutions-uses-ai-tools-to-boost-your-marketing-in-toronto' },
{ slug: 'what-types-of-social-media-ads-does-metatroncube-solutions-recommend-for-small-businesses-in-toronto' },
];

View File

@ -1,6 +1,6 @@
"use client";
import { useState } from "react";
import { useState, useEffect, useRef } from "react";
import Image from "next/image";
import Link from "next/link";
import { PortfolioData } from "@/utils/constant.utils";
@ -11,18 +11,46 @@ const tabs = [
{ label: "Graphic Design", value: "graphic" },
{ label: "Google Meta Ads", value: "meta" },
{ label: "Shopify Store", value: "shopify" },
{ label: "WordPress", value: "wordpress" },
{ label: "Logo Branding", value: "logo" },
{ label: "Video Editing", value: "video" },
];
const CaseStudies = () => {
const [activeTab, setActiveTab] = useState("*");
const [visibleCount, setVisibleCount] = useState(6);
const observerRef = useRef(null);
const filteredItems =
activeTab === "*"
? PortfolioData
: PortfolioData.filter((item) => item.category === activeTab);
useEffect(() => {
setVisibleCount(6);
}, [activeTab]);
useEffect(() => {
const observer = new IntersectionObserver(
(entries) => {
if (entries[0].isIntersecting) {
setVisibleCount((prev) => prev + 6);
}
},
{ threshold: 0.1 }
);
if (observerRef.current) {
observer.observe(observerRef.current);
}
return () => {
if (observerRef.current) {
observer.unobserve(observerRef.current);
}
};
}, [filteredItems]);
return (
<>
{/* Title Section */}
@ -81,7 +109,7 @@ const CaseStudies = () => {
{/* Portfolio Grid */}
<div className="row image_load">
{filteredItems.map((item) => (
{filteredItems.slice(0, visibleCount).map((item) => (
<div
key={item.id}
className={`${item.colClass} grid-item ${item.category} ${item.itemClass || ""}`}
@ -187,6 +215,12 @@ const CaseStudies = () => {
</div>
))}
</div>
{/* Sentinel Element for Infinite Scroll */}
<div
ref={observerRef}
style={{ height: "20px", marginBottom: "20px" }}
></div>
</>
);
};

File diff suppressed because it is too large Load Diff