"use client"; import React, { useEffect, useState } from "react"; import Image from "next/image"; import { motion } from "framer-motion"; import { Code2, Disc3, Gamepad2, Zap, BookOpen, Quote } from "lucide-react"; interface StatusData { status: { text: string; color: string; }; music: { isPlaying: boolean; track: string; artist: string; album: string; albumArt: string; url: string; } | null; gaming: { isPlaying: boolean; name: string; image: string | null; state?: string | number; details?: string | number; } | null; coding: { isActive: boolean; project?: string; file?: string; language?: string; stats?: { time: string; topLang: string; topProject: string; }; } | null; customActivities?: Record; } export default function ActivityFeed({ onActivityChange, idleQuote }: { onActivityChange?: (active: boolean) => void; idleQuote?: string; }) { const [data, setData] = useState(null); const [hasActivity, setHasActivity] = useState(false); useEffect(() => { const fetchData = async () => { try { const res = await fetch("/api/n8n/status"); if (!res.ok) throw new Error(); const json = await res.json(); const activityData = Array.isArray(json) ? json[0] : json; setData(activityData); const isActive = Boolean( activityData.coding?.isActive || activityData.gaming?.isPlaying || activityData.music?.isPlaying || Object.values(activityData.customActivities || {}).some((act: any) => act?.enabled) ); setHasActivity(isActive); onActivityChange?.(isActive); } catch (error) { setHasActivity(false); onActivityChange?.(false); } }; fetchData(); const interval = setInterval(fetchData, 30000); return () => clearInterval(interval); }, [onActivityChange]); if (!hasActivity) { return (

“{idleQuote || "Gerade am Planen des nächsten großen Projekts."}”

Currently Idle
); } return (
{data?.coding?.isActive && (
Coding Now

{data.coding.project}

{data.coding.file}

)} {data?.gaming?.isPlaying && (
Gaming
{data.gaming.image &&
}

{data.gaming.name}

In Game

)} {data?.music?.isPlaying && (
Listening

{data.music.track}

{data.music.artist}

)}
); }