'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 (
Connect Pulse with your favorite frameworks and platforms in minutes.
{/* * --- Search Input --- */}{integration.description}
View GuideNo integrations found for “{query}”.
Let us know which integration you'd like to see next.
Request IntegrationLet us know which integration you'd like to see next.
Request Integration