Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,11 @@ The canonical production endpoints are [lamplitlabs.com](https://lamplitlabs.com
## Connect

- [GitHub](https://github.com/lamplitlabs)
- [X](https://x.com/lamplitlabs)
- [Facebook](https://www.facebook.com/lamplitlabs)
- [Instagram](https://www.instagram.com/lamplitlabs)
- [Blog](https://blogs.lamplitlabs.com)
- [X](https://x.com/lamplitlabs)
- [LinkedIn](https://www.linkedin.com/company/lamplitlabs)

## License

Expand Down
2 changes: 1 addition & 1 deletion app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ const organizationJsonLd = {
description:
"A technology organization building practical tools that solve real problems - from medical exam prep to developer utilities.",
foundingDate: "2020",
sameAs: [socialLinks.x],
sameAs: Object.values(socialLinks),
contactPoint: {
"@type": "ContactPoint",
email: "hello@lamplitlabs.com",
Expand Down
44 changes: 18 additions & 26 deletions components/home/contact-section.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { BookOpen, Github, Mail } from "lucide-react";
import { XIcon } from "@/components/icons";
import { Github, Mail } from "lucide-react";
import { OutboundLink } from "@/components/outbound-link";
import { socialPlatforms } from "@/components/social-platforms";
import { Button } from "@/components/ui/button";
import { RevealSection } from "@/components/home/reveal-section";
import { socialLinks } from "@/lib/site-data";
Expand Down Expand Up @@ -42,30 +42,22 @@ export function ContactSection() {
<Github className="h-4 w-4" />
GitHub
</OutboundLink>
<OutboundLink
href={socialLinks.x}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 rounded-lg border px-4 py-2 text-sm text-muted-foreground transition-colors hover:border-foreground/20 hover:text-foreground"
trackingTarget="x"
trackingContext="contact_link"
trackingUrl={socialLinks.x}
>
<XIcon className="h-4 w-4" />
X
</OutboundLink>
<OutboundLink
href="https://blogs.lamplitlabs.com"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 rounded-lg border px-4 py-2 text-sm text-muted-foreground transition-colors hover:border-foreground/20 hover:text-foreground"
trackingTarget="blog"
trackingContext="contact_link"
trackingUrl="https://blogs.lamplitlabs.com"
>
<BookOpen className="h-4 w-4" />
Blog
</OutboundLink>
{socialPlatforms.map(({ key, label, icon: Icon }) => (
<OutboundLink
key={key}
href={socialLinks[key]}
target="_blank"
rel="noopener noreferrer"
aria-label={label}
className="inline-flex items-center gap-2 rounded-lg border px-4 py-2 text-sm text-muted-foreground transition-colors hover:border-foreground/20 hover:text-foreground"
trackingTarget={key}
trackingContext="contact_link"
trackingUrl={socialLinks[key]}
>
<Icon className="h-4 w-4" />
{label}
</OutboundLink>
))}
</div>
</RevealSection>
</div>
Expand Down
25 changes: 8 additions & 17 deletions components/home/footer.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
import type { ComponentType } from "react";
import { XIcon } from "@/components/icons";
import { OutboundLink } from "@/components/outbound-link";
import { socialPlatforms } from "@/components/social-platforms";
import { navLinks, products, socialLinks } from "@/lib/site-data";
import { Logo } from "@/components/logo";

const footerSocialLinks: {
href: string;
icon: ComponentType<{ className?: string }>;
label: string;
}[] = [
{ href: socialLinks.x, icon: XIcon, label: "X" },
];

export function Footer() {
return (
<footer className="border-t">
Expand Down Expand Up @@ -72,19 +63,19 @@ export function Footer() {
<div>
<h4 className="mb-3 text-sm font-semibold">Connect</h4>
<div className="flex flex-wrap gap-2">
{footerSocialLinks.map((item) => (
{socialPlatforms.map(({ key, label, icon: Icon }) => (
<OutboundLink
key={item.label}
href={item.href}
key={key}
href={socialLinks[key]}
target="_blank"
rel="noopener noreferrer"
aria-label={item.label}
aria-label={label}
className="rounded-lg border p-2 text-muted-foreground transition-colors hover:border-foreground/20 hover:text-foreground"
trackingTarget={item.label.toLowerCase()}
trackingTarget={key}
trackingContext="footer_social"
trackingUrl={item.href}
trackingUrl={socialLinks[key]}
>
<item.icon className="h-4 w-4" />
<Icon className="h-4 w-4" />
</OutboundLink>
))}
</div>
Expand Down
32 changes: 17 additions & 15 deletions components/social-bar.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { XIcon } from "@/components/icons";
import { socialPlatforms } from "@/components/social-platforms";
import { Button } from "@/components/ui/button";
import { OutboundLink } from "@/components/outbound-link";
import type { SocialLinks } from "@/lib/site-data";
Expand All @@ -11,20 +11,22 @@ interface SocialBarProps {
export function SocialBar({ links, context = "social_bar" }: SocialBarProps) {
return (
<div className="flex flex-wrap items-center justify-center gap-1">
<Button variant="ghost" size="icon" asChild>
<OutboundLink
href={links.x}
target="_blank"
rel="noopener noreferrer"
aria-label="X"
className="transition-transform hover:scale-110"
trackingTarget="x"
trackingContext={context}
trackingUrl={links.x}
>
<XIcon className="h-5 w-5" />
</OutboundLink>
</Button>
{socialPlatforms.map(({ key, label, icon: Icon }) => (
<Button key={key} variant="ghost" size="icon" asChild>
<OutboundLink
href={links[key]}
target="_blank"
rel="noopener noreferrer"
aria-label={label}
className="transition-transform hover:scale-110"
trackingTarget={key}
trackingContext={context}
trackingUrl={links[key]}
>
<Icon className="h-5 w-5" />
</OutboundLink>
</Button>
))}
</div>
);
}
18 changes: 18 additions & 0 deletions components/social-platforms.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { BookOpen, Facebook, Instagram, Linkedin } from "lucide-react";
import type { ComponentType } from "react";
import { XIcon } from "@/components/icons";
import type { SocialLinks } from "@/lib/site-data";

interface SocialPlatform {
key: keyof SocialLinks;
label: string;
icon: ComponentType<{ className?: string }>;
}

export const socialPlatforms: SocialPlatform[] = [
{ key: "facebook", label: "Facebook", icon: Facebook },
{ key: "instagram", label: "Instagram", icon: Instagram },
{ key: "blog", label: "Blog", icon: BookOpen },
{ key: "x", label: "X", icon: XIcon },
{ key: "linkedin", label: "LinkedIn", icon: Linkedin },
];
10 changes: 9 additions & 1 deletion lib/site-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,19 @@ export interface NavLink {
}

export interface SocialLinks {
facebook: string;
instagram: string;
blog: string;
x: string;
linkedin: string;
}

export const socialLinks: SocialLinks = {
facebook: "https://www.facebook.com/lamplitlabs",
instagram: "https://www.instagram.com/lamplitlabs",
blog: "https://blogs.lamplitlabs.com",
x: "https://x.com/lamplitlabs",
linkedin: "https://www.linkedin.com/company/lamplitlabs",
};

export const products: Product[] = [
Expand Down Expand Up @@ -204,7 +212,7 @@ export const products: Product[] = [
export const navLinks: NavLink[] = [
{ label: "Products", href: "#products" },
{ label: "About", href: "#about" },
{ label: "Blog", href: "https://blogs.lamplitlabs.com", external: true },
{ label: "Blog", href: socialLinks.blog, external: true },
{ label: "Contact", href: "#contact" },
];

Expand Down
Loading