cmux/web/app/components/site-footer.tsx
Lawrence Chen be9b994a79
Add homepage wall of love, FAQ, blog post, footer redesign, and SEO improvements
## Summary
- Add Community (testimonials) section to homepage with inline avatars
- Add FAQ section sourced from HN discussion questions
- Add hero screenshot with next/image optimization
- Add Show HN blog post with react-tweet embeds, star history chart, and HN quotes
- Redesign footer with 4-column grid layout (Product, Resources, Legal, Social)
- Add Download/GitHub CTA buttons at bottom of homepage and blog post
- Add dev spacing controls for features, FAQ, and community sections
- Fix hydration error (JSON-LD moved to head)
- SEO: full metadata on blog posts, robots.txt, blog pages in sitemap, canonical URLs
- Replace em dashes site-wide, fix notification descriptions

## Testing
- `bun tsc --noEmit` passes clean
- Dev server verified on port 3001

## Related
- Task: Add wall of love to main web page + landing screenshot
2026-02-21 06:16:38 -08:00

85 lines
2.4 KiB
TypeScript

import Link from "next/link";
const columns = [
{
heading: "Product",
links: [
{ label: "Blog", href: "/blog" },
{ label: "Community", href: "/community" },
],
},
{
heading: "Resources",
links: [
{ label: "Docs", href: "/docs/getting-started" },
{ label: "Changelog", href: "/docs/changelog" },
],
},
{
heading: "Legal",
links: [
{ label: "Privacy", href: "/privacy-policy" },
{ label: "Terms", href: "/terms-of-service" },
{ label: "EULA", href: "/eula" },
],
},
{
heading: "Social",
links: [
{ label: "GitHub", href: "https://github.com/manaflow-ai/cmux" },
{ label: "X / Twitter", href: "https://twitter.com/manaflowai" },
{ label: "Discord", href: "https://discord.gg/xsgFEVrWCZ" },
{ label: "Contact", href: "mailto:founders@manaflow.com" },
],
},
];
function isExternal(href: string) {
return href.startsWith("http") || href.startsWith("mailto:");
}
export function SiteFooter() {
const year = new Date().getFullYear();
return (
<footer className="mt-16">
<div className="max-w-2xl mx-auto px-6 py-12">
<div className="grid grid-cols-2 sm:grid-cols-4 gap-8">
{columns.map((col) => (
<div key={col.heading}>
<h3 className="text-xs font-medium text-muted tracking-tight mb-3">
{col.heading}
</h3>
<ul className="space-y-2">
{col.links.map((link) => (
<li key={link.href}>
{isExternal(link.href) ? (
<a
href={link.href}
target="_blank"
rel="noopener noreferrer"
className="text-sm text-muted hover:text-foreground transition-colors"
>
{link.label}
</a>
) : (
<Link
href={link.href}
className="text-sm text-muted hover:text-foreground transition-colors"
>
{link.label}
</Link>
)}
</li>
))}
</ul>
</div>
))}
</div>
<p className="text-xs text-muted mt-10">
&copy; {year} Manaflow
</p>
</div>
</footer>
);
}