add favicon and create links page component

This commit is contained in:
Alaguraj0361 2026-06-27 12:04:08 +05:30
parent bb0a217a39
commit ec0837aa73
3 changed files with 565 additions and 0 deletions

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,550 @@
"use client";
import React, { useState } from "react";
import favicon from "../favicon.ico";
// ── Metatroncube brand colours (matched to metatroncubesolutions.com white theme) ──
const C = {
bg: "#f4f6fc", // very light gray-blue background
card: "#ffffff", // pure white for cards
cardAlt: "#f8fafc", // slate 50 for card hover
border: "rgba(55, 121, 185, 0.12)", // subtle brand blue border
blue: "var(--theme-color, #3779b9)", // primary brand blue
purple: "#6f42c1", // theme purple
pink: "#d63384", // theme pink
green: "#198754", // theme green
amber: "#ffc107", // theme amber
teal: "#0dcaf0", // theme teal
white: "#ffffff",
dark: "var(--theme-color-1, #1a1f2b)", // main text color from site theme
muted: "#595959", // secondary text color from site theme
sub: "#64748b", // slate 500 for subtext
};
const LOGO = favicon.src;
interface LinkItem {
label: string;
sub: string;
icon: string;
href: string;
accent: string;
glow: string;
solid: boolean;
dimText?: boolean;
}
const links: LinkItem[] = [
{
label: "Book a Free Consultation",
sub: "30-min call · No commitment",
icon: "📅",
href: "https://calendly.com/metatroncubeswsolutions/request-consultation",
accent: "var(--theme-color, #3779b9)",
glow: "rgba(55, 121, 185, 0.25)",
solid: true,
},
{
label: "WhatsApp Us Now",
sub: "We reply within 1 hour",
icon: "💬",
href: "https://wa.me/16476797651",
accent: "#25D366",
glow: "rgba(37, 211, 102, 0.25)",
solid: true,
},
{
label: "View Our Portfolio",
sub: "Websites · Apps · ERP projects",
icon: "🎨",
href: "https://metatroncubesolutions.com/portfolio/",
accent: C.pink,
glow: "rgba(214, 51, 132, 0.12)",
solid: false,
},
{
label: "ERP Development & Implementation",
sub: "Custom ERP to automate your operations",
icon: "⚙️",
href: "https://metatroncubesolutions.com/service/erp-development-implementation/",
accent: C.purple,
glow: "rgba(111, 66, 193, 0.12)",
solid: false,
},
{
label: "Website Development",
sub: "Fast, responsive & scalable websites",
icon: "🌐",
href: "https://metatroncubesolutions.com/service/website-development-company/",
accent: "var(--theme-color, #3779b9)",
glow: "rgba(55, 121, 185, 0.12)",
solid: false,
},
{
label: "Mobile App Development",
sub: "iOS · Android · Flutter",
icon: "📱",
href: "https://metatroncubesolutions.com/service/mobile-application-development/",
accent: C.teal,
glow: "rgba(13, 202, 240, 0.12)",
solid: false,
},
{
label: "Digital Marketing",
sub: "Social media · SEO · Content strategy",
icon: "📈",
href: "https://metatroncubesolutions.com/service/digital-marketing-agency-in-canada/",
accent: C.amber,
glow: "rgba(255, 193, 7, 0.12)",
solid: false,
},
{
label: "UI / UX & Graphic Design",
sub: "Brand identity · Interface design",
icon: "✏️",
href: "https://metatroncubesolutions.com/service/ui-ux-designing/",
accent: C.pink,
glow: "rgba(214, 51, 132, 0.10)",
solid: false,
},
{
label: "SEO & Content Writing",
sub: "Rank higher · Drive organic traffic",
icon: "🔍",
href: "https://metatroncubesolutions.com/service/search-engine-optimization-seo-content-writing/",
accent: C.green,
glow: "rgba(25, 135, 84, 0.12)",
solid: false,
},
{
label: "Contact Us",
sub: "info@metatroncubesolutions.com",
icon: "✉️",
href: "https://metatroncubesolutions.com/contact/",
accent: "rgba(26, 31, 43, 0.25)",
glow: "rgba(26, 31, 43, 0.05)",
solid: false,
dimText: true,
},
];
// ── Brand SVG icons ─────────────────────────────────────────────────────────
const IconInstagram = () => (
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="ig-grad" cx="30%" cy="107%" r="150%">
<stop offset="0%" stopColor="#fdf497"/>
<stop offset="10%" stopColor="#fdf497"/>
<stop offset="50%" stopColor="#fd5949"/>
<stop offset="68%" stopColor="#d6249f"/>
<stop offset="100%" stopColor="#285AEB"/>
</radialGradient>
</defs>
<rect x="2" y="2" width="20" height="20" rx="6" fill="url(#ig-grad)"/>
<circle cx="12" cy="12" r="4.5" stroke="white" strokeWidth="1.8" fill="none"/>
<circle cx="17.2" cy="6.8" r="1.2" fill="white"/>
</svg>
);
const IconLinkedIn = () => (
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="5" fill="#0A66C2"/>
<path d="M6.5 10H8.5V18H6.5V10ZM7.5 9C6.84 9 6.5 8.56 6.5 8C6.5 7.44 6.95 7 7.5 7C8.05 7 8.5 7.44 8.5 8C8.5 8.56 8.05 9 7.5 9Z" fill="white"/>
<path d="M10.5 10H12.4V11C12.8 10.4 13.6 10 14.5 10C16.4 10 17.5 11.2 17.5 13.2V18H15.5V13.5C15.5 12.4 15 11.8 14 11.8C13 11.8 12.5 12.5 12.5 13.5V18H10.5V10Z" fill="white"/>
</svg>
);
const IconFacebook = () => (
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="5" fill="#1877F2"/>
<path d="M15.5 8H13.5C13.2 8 13 8.2 13 8.5V10H15.5L15.1 12H13V19H11V12H9V10H11V8.5C11 7 12 6 13.5 6H15.5V8Z" fill="white"/>
</svg>
);
const IconYouTube = () => (
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="5" fill="#FF0000"/>
<path d="M20.5 8.5C20.5 8.5 20.3 7.2 19.7 6.6C18.9 5.8 18.1 5.8 17.7 5.7C15.3 5.5 12 5.5 12 5.5C12 5.5 8.7 5.5 6.3 5.7C5.9 5.8 5.1 5.8 4.3 6.6C3.7 7.2 3.5 8.5 3.5 8.5C3.5 8.5 3.3 10 3.3 11.5V12.9C3.3 14.4 3.5 15.9 3.5 15.9C3.5 15.9 3.7 17.2 4.3 17.8C5.1 18.6 6.1 18.6 6.5 18.7C8 18.8 12 18.8 12 18.8C12 18.8 15.3 18.8 17.7 18.6C18.1 18.5 18.9 18.5 19.7 17.7C20.3 17.1 20.5 15.8 20.5 15.8C20.5 15.8 20.7 14.3 20.7 12.8V11.4C20.7 10 20.5 8.5 20.5 8.5ZM10.2 14.5V9.5L15.2 12L10.2 14.5Z" fill="white"/>
</svg>
);
const IconX = () => (
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="5" fill="#000000"/>
<path d="M17.5 5H19.9L14.6 11.1L20.8 19H15.9L12.1 14L7.7 19H5.3L11 12.5L5 5H10L13.4 9.6L17.5 5ZM16.6 17.5H17.9L9.3 6.4H7.9L16.6 17.5Z" fill="white"/>
</svg>
);
const socials = [
{ label: "Instagram", Icon: IconInstagram, href: "https://www.instagram.com/metatron_digitalagency" },
{ label: "LinkedIn", Icon: IconLinkedIn, href: "https://www.linkedin.com/company/metatroncube-software-solutions/" },
{ label: "Facebook", Icon: IconFacebook, href: "https://www.facebook.com/metatroncubecanada" },
{ label: "YouTube", Icon: IconYouTube, href: "https://www.youtube.com/@metatron_digitalagency" },
{ label: "X/Twitter", Icon: IconX, href: "https://x.com/MetatroncubeDA" },
];
const stats = [
{ v: "100+", l: "Projects" },
{ v: "50+", l: "Clients" },
{ v: "10+", l: "Years" },
{ v: "20+", l: "Experts" },
];
export default function MetatroncubeLinks() {
const [active, setActive] = useState<number | null>(null);
return (
<div style={s.root}>
{/* Soft ambient glows behind cards */}
<div style={{ ...s.blob, top: -160, left: -160, background: "radial-gradient(circle, rgba(55,121,185,0.10) 0%, transparent 70%)" } as React.CSSProperties} />
<div style={{ ...s.blob, bottom: -120, right: -120, background: "radial-gradient(circle, rgba(55,121,185,0.07) 0%, transparent 70%)" } as React.CSSProperties} />
<div style={{ ...s.blob, top: "40%", right: -80, background: "radial-gradient(circle, rgba(55,121,185,0.05) 0%, transparent 70%)" } as React.CSSProperties} />
<div style={s.wrap}>
{/* ── Logo ── */}
<div style={s.logoWrap}>
<div style={s.logoRing}>
<div style={s.logoBox}>
<img
src={LOGO}
alt="Metatroncube Software Solution"
style={s.logoImg}
onError={(e) => {
const target = e.currentTarget;
target.style.display = "none";
const fallback = target.nextSibling as HTMLElement | null;
if (fallback) {
fallback.style.display = "flex";
}
}}
/>
{/* Fallback if image fails */}
<div style={{ ...s.logoFallback, display: "none" } as React.CSSProperties}>
<span style={s.logoFallbackText}>MC</span>
</div>
</div>
</div>
</div>
{/* ── Name & tagline ── */}
<h1 style={s.name}>Metatroncube</h1>
<p style={s.sub}>Software Solution</p>
<p style={s.tagline}>Web · App · ERP · Marketing · SEO · Design</p>
{/* ── Location pill ── */}
<div style={s.pill}>
<span>🇨🇦 Waterloo, Ontario</span>
<span style={{ color: "rgba(26, 31, 43, 0.25)", margin: "0 8px" }}>·</span>
<span>🇺🇸 USA</span>
</div>
{/* ── Stats ── */}
<div style={s.statsRow}>
{stats.map((st, i) => (
<div key={i} style={{ ...s.stat, borderRight: i < stats.length - 1 ? `1px solid ${C.border}` : "none" } as React.CSSProperties}>
<span style={s.statV}>{st.v}</span>
<span style={s.statL}>{st.l}</span>
</div>
))}
</div>
{/* ── Links ── */}
<div style={s.linksCol}>
{links.map((lk, i) => {
const isActive = active === i;
return (
<a
key={i}
href={lk.href}
target={lk.href.startsWith("mailto") ? "_self" : "_blank"}
rel="noopener noreferrer"
onMouseEnter={() => setActive(i)}
onMouseLeave={() => setActive(null)}
onTouchStart={() => setActive(i)}
onTouchEnd={() => setTimeout(() => setActive(null), 300)}
style={{
...s.btn,
background: lk.solid
? lk.accent
: isActive ? lk.glow : C.card,
border: lk.solid
? "1px solid transparent"
: `1px solid ${isActive ? lk.accent : C.border}`,
boxShadow: isActive
? `0 12px 20px -8px ${lk.glow === "rgba(26, 31, 43, 0.05)" ? "rgba(0,0,0,0.08)" : lk.glow}`
: `0 4px 6px -1px rgba(0, 0, 0, 0.03), 0 2px 4px -2px rgba(0, 0, 0, 0.03)`,
transform: isActive ? "translateY(-2px)" : "none",
} as React.CSSProperties}
>
<span style={s.btnIcon}>{lk.icon}</span>
<div style={s.btnText}>
<span style={{
...s.btnLabel,
color: lk.solid
? C.white
: lk.dimText ? C.muted : C.dark
} as React.CSSProperties}>
{lk.label}
</span>
<span style={{
...s.btnSub,
color: lk.solid ? "rgba(255,255,255,0.75)" : C.sub
} as React.CSSProperties}>{lk.sub}</span>
</div>
<span style={{
...s.arrow,
color: lk.solid
? C.white
: isActive ? lk.accent : C.muted
} as React.CSSProperties}></span>
</a>
);
})}
</div>
{/* ── Phone ── */}
<a href="tel:+16476797651" style={s.phone}
onMouseEnter={(e) => e.currentTarget.style.color = "var(--theme-color, #3779b9)"}
onMouseLeave={(e) => e.currentTarget.style.color = C.muted}
>
📞 +1-647-679-7651
</a>
{/* ── Socials ── */}
<div style={s.socialsRow}>
{socials.map((sc, i) => (
<a key={i} href={sc.href} target="_blank" rel="noopener noreferrer"
title={sc.label} style={s.socialBtn}
onMouseEnter={e => {
e.currentTarget.style.background = C.cardAlt;
e.currentTarget.style.borderColor = "var(--theme-color, #3779b9)";
}}
onMouseLeave={e => {
e.currentTarget.style.background = C.card;
e.currentTarget.style.borderColor = C.border;
}}
>
<sc.Icon />
</a>
))}
</div>
{/* ── Footer ── */}
<p style={s.footer}>
© {new Date().getFullYear()} Metatroncube Software Solution Inc.
<br />
<a href="https://metatroncubesolutions.com/privacy-policy/" target="_blank"
rel="noopener noreferrer" style={{ color: C.muted, fontSize: 10 }}>
Privacy Policy
</a>
</p>
</div>
</div>
);
}
const s: Record<string, React.CSSProperties> = {
root: {
minHeight: "100vh",
background: "radial-gradient(circle at top, #f4f6fc 0%, #ffffff 100%)",
display: "flex",
justifyContent: "center",
padding: "48px 16px 64px",
position: "relative",
overflow: "hidden",
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
WebkitFontSmoothing: "antialiased",
},
blob: {
position: "fixed",
width: 460,
height: 460,
borderRadius: "50%",
pointerEvents: "none",
zIndex: 0,
},
wrap: {
width: "100%",
maxWidth: 480,
display: "flex",
flexDirection: "column",
alignItems: "center",
position: "relative",
zIndex: 1,
},
logoWrap: { marginBottom: 18 },
logoRing: {
padding: 2.5,
borderRadius: "50%",
background: "linear-gradient(135deg, var(--theme-color, #3779b9) 0%, #e2e8f0 100%)",
},
logoBox: {
width: 96,
height: 96,
borderRadius: "50%",
background: C.card,
border: `3px solid #f4f6fc`,
display: "flex",
alignItems: "center",
justifyContent: "center",
overflow: "hidden",
},
logoImg: { width: 56, height: 56, objectFit: "contain" },
logoFallback: {
width: "100%",
height: "100%",
alignItems: "center",
justifyContent: "center",
},
logoFallbackText: {
fontSize: 28,
fontWeight: 900,
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
background: "linear-gradient(135deg, var(--theme-color, #3779b9), var(--theme-color-1, #1a1f2b))",
WebkitBackgroundClip: "text",
WebkitTextFillColor: "transparent",
},
name: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "28px",
fontWeight: 700,
color: "var(--theme-color-1, #1a1f2b)",
margin: "0 0 2px",
letterSpacing: "-0.5px"
},
sub: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "13px",
color: "var(--theme-color, #3779b9)",
margin: "0 0 6px",
textTransform: "uppercase",
letterSpacing: "1.5px",
fontWeight: 600
},
tagline: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "14px",
color: "#595959",
margin: "0 0 16px",
textAlign: "center",
fontWeight: 400
},
pill: {
display: "flex",
alignItems: "center",
background: "rgba(55, 121, 185, 0.06)",
border: `1px solid rgba(55, 121, 185, 0.15)`,
borderRadius: 20,
padding: "5px 16px",
fontSize: "13px",
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontWeight: 500,
color: "var(--theme-color-1, #1a1f2b)",
marginBottom: 22,
},
statsRow: {
display: "flex",
width: "100%",
background: C.card,
border: `1px solid ${C.border}`,
borderRadius: 14,
marginBottom: 28,
overflow: "hidden",
boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px -2px rgba(0, 0, 0, 0.02)",
},
stat: {
flex: 1,
display: "flex",
flexDirection: "column",
alignItems: "center",
padding: "14px 6px",
},
statV: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "22px",
fontWeight: 700,
color: "var(--theme-color, #3779b9)"
},
statL: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "11px",
color: "#595959",
textTransform: "uppercase",
letterSpacing: "0.8px",
marginTop: 3,
fontWeight: 500
},
linksCol: {
width: "100%",
display: "flex",
flexDirection: "column",
gap: 10,
marginBottom: 22,
},
btn: {
display: "flex",
alignItems: "center",
gap: 14,
padding: "15px 16px",
borderRadius: 13,
textDecoration: "none",
cursor: "pointer",
transition: "transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, border 0.18s ease",
width: "100%",
boxSizing: "border-box",
},
btnIcon: { fontSize: 21, flexShrink: 0, lineHeight: 1 },
btnText: { display: "flex", flexDirection: "column", flex: 1, minWidth: 0 },
btnLabel: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "15px",
fontWeight: 600,
lineHeight: 1.4
},
btnSub: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "12px",
marginTop: 2,
fontWeight: 400,
lineHeight: 1.4
},
arrow: { fontSize: 15, flexShrink: 0, transition: "color 0.18s" },
phone: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "14px",
color: C.muted,
textDecoration: "none",
marginBottom: 20,
letterSpacing: "0.3px",
transition: "color 0.2s ease",
fontWeight: 500,
},
socialsRow: {
display: "flex",
gap: 10,
marginBottom: 28,
},
socialBtn: {
width: 48,
height: 48,
borderRadius: 12,
background: C.card,
border: `1px solid ${C.border}`,
display: "flex",
alignItems: "center",
justifyContent: "center",
textDecoration: "none",
transition: "background 0.2s, border-color 0.2s",
cursor: "pointer",
},
footer: {
fontFamily: "var(--primary-font, 'Inter', sans-serif)",
fontSize: "12px",
color: C.sub,
textAlign: "center",
margin: 0,
lineHeight: 1.8,
},
};

15
src/app/links/page.tsx Normal file
View File

@ -0,0 +1,15 @@
import React from "react";
import type { Metadata } from "next";
import MetatroncubeLinksClient from "./MetatroncubeLinksClient";
export const metadata: Metadata = {
title: "Connect with Us | Metatroncube Software Solution",
description: "Book a free consultation, WhatsApp us, view our portfolio, or explore our services. Find all Metatroncube links in one place.",
alternates: {
canonical: "/links",
},
};
export default function LinksPage() {
return <MetatroncubeLinksClient />;
}