import { config, config_p2 } from "@/lib/config"; import { Card, CardHeader } from "@/components/ui/card"; import Image from "next/image"; import { getFollowerCounts } from "@/lib/followers"; import { LinkCard } from "@/components/LinkCard"; import { getRedisClient } from "@/lib/redis"; import { headers } from "next/headers"; import { Users } from "lucide-react"; import { Kbd } from "@/components/ui/kbd"; export default async function Home() { const { counts, tiktokProfile } = await getFollowerCounts(); const headersList = await headers(); const ip = headersList.get("x-forwarded-for") || headersList.get("x-real-ip") || "unknown"; let visitorCount = 0; try { const redis = await getRedisClient(); if (ip !== "unknown") { const added = await redis.sadd("erika:unique_visitors", ip); if (added > 0) { // New visitor — refresh the count visitorCount = await redis.scard("erika:unique_visitors"); } else { // Existing visitor — use cached count or fetch visitorCount = await redis.scard("erika:unique_visitors"); } } else { visitorCount = await redis.scard("erika:unique_visitors"); } } catch (e) { console.error("Failed to track visitor:", e); } // Use TikTok profile data with config fallbacks const profileName = tiktokProfile.displayName || config.profile.name; const profileAvatar = config.profile.avatar; const links1 = [...config.links]; const jsonLd = { "@context": "https://schema.org", "@type": "ProfilePage", name: profileName, description: config.profile.desc, url: "https://erika.sudloh.com", mainEntity: { "@type": "Person", name: profileName, image: profileAvatar.startsWith("/") ? `https://erika.sudloh.com${profileAvatar}` : profileAvatar, sameAs: links1.map((l) => l.link), }, }; return (