/* @component-map * App — Main container, tab navigation [app.jsx] * FeedbackBoard — Main board displaying feature requests sorted by votes [components/FeedbackBoard.jsx] * SubmitRequest — Modal form for submitting new feature requests [components/SubmitRequest.jsx] * RequestCard — Individual feature request card with upvote [components/RequestCard.jsx] * @end-component-map */ // DEPLOY_CONFIG: {"triggers": [{"name": "feature_request_10_upvotes_email_board_owner", "on": "collection.update", "collection": "feature_requests", "actions": [{"type": "email", "to": "{{board_owner_email}}", "subject": "Feature request reached 10 upvotes", "body": "A feature request titled \"{{title}}\" has reached 10 or more upvotes."}]}]} import { useState, useEffect, useMemo } from 'react'; import { useAuth, usePresence } from '@deplixo/sdk'; import { FeedbackBoard } from './components/FeedbackBoard.jsx'; import { SubmitRequest } from './components/SubmitRequest.jsx'; function App() { const { user, loading, logout } = useAuth(); const [showSubmit, setShowSubmit] = useState(false); const presenceUserData = useMemo(() => { if (!user) return null; return { id: user.id, name: user.name, avatar: user.avatar, email: user.email, view: 'feature-requests-board', }; }, [user]); const { users: presentUsers, update: updatePresence } = usePresence(presenceUserData); useEffect(() => { if (!user || !updatePresence) return; updatePresence({ id: user.id, name: user.name, avatar: user.avatar, email: user.email, view: 'feature-requests-board', }); }, [user, updatePresence]); const viewerCount = presentUsers?.length || 0; if (loading) return
Share ideas, vote on what matters most
{viewerCount} {viewerCount === 1 ? 'viewer' : 'viewers'} online