'use client' /** * @file Integrations overview page with search, grouped by category. * * Displays all 50 integrations in a filterable grid. * When the search query returns no results, a "Missing something?" card is shown. */ import { useState, useMemo } from 'react' import Link from 'next/link' import { motion, AnimatePresence } from 'framer-motion' import { ArrowRightIcon } from '@ciphera-net/ui' import { integrations, categoryLabels, categoryOrder, type IntegrationCategory, } from '@/lib/integrations' export default function IntegrationsPage() { const [query, setQuery] = useState('') // * Filter integrations by name, description, or category label const filteredGroups = useMemo(() => { const q = query.toLowerCase().trim() const filtered = q ? integrations.filter( (i) => i.name.toLowerCase().includes(q) || i.description.toLowerCase().includes(q) || categoryLabels[i.category].toLowerCase().includes(q), ) : integrations return categoryOrder .map((cat) => ({ category: cat as IntegrationCategory, label: categoryLabels[cat], items: filtered.filter((i) => i.category === cat), })) .filter((g) => g.items.length > 0) }, [query]) const hasResults = filteredGroups.length > 0 return (
{/* * --- ATMOSPHERE (Background) --- */}

Integrations

Connect Pulse with your favorite frameworks and platforms in minutes.

{/* * --- Search Input --- */}
setQuery(e.target.value)} placeholder="Search integrations..." className="w-full pl-12 pr-10 py-3 bg-white/70 dark:bg-neutral-900/70 backdrop-blur-sm border border-neutral-200 dark:border-neutral-800 rounded-xl text-neutral-900 dark:text-white placeholder:text-neutral-400 focus:outline-none focus:ring-2 focus:ring-brand-orange/50 focus:border-brand-orange/50 transition-all" /> {query && ( )}
{hasResults ? ( {filteredGroups.map((group) => (
{group.label}
{group.items.map((integration, i) => (
{integration.icon}

{integration.name}

{integration.description}

View Guide
))}
))}
) : ( // * --- No Results: "Missing something?" card ---

Missing something?

No integrations found for “{query}”.

Let us know which integration you'd like to see next.

Request Integration
)}
{/* * Request Integration Card — always shown when there ARE results */} {hasResults && (

Missing something?

Let us know which integration you'd like to see next.

Request Integration
)}
) }