MVP-1: helpdesk core with dashboard, Telegram channel, customer portal

Next.js 16 + Drizzle/SQLite (matching ~/project-claude conventions), SSE-based
realtime updates, admin dashboard with status columns, ticket thread view,
Telegram long-polling integration (inbound + outbound), token-based customer
portal, Docker Compose packaging.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QcXH24ky6zjk2UyK5oZUPH
This commit is contained in:
ogrechkoandClaude Sonnet 5 committed 2026-07-26 12:40:56 +00:00
1 parent 888b7b82ba
commit cf0b6cf58e
59 files changed
+12556

No files matched your search

+24
View File
@@ -0,0 +1,24 @@
"use client";
import { useEffect, useLayoutEffect, useRef } from "react";
import type { TicketEvent } from "@/lib/events/bus";
/** Subscribes to a ticket-events SSE endpoint for the lifetime of the component. */
export function useTicketEvents(url: string, onEvent: (event: TicketEvent) => void) {
const handlerRef = useRef(onEvent);
useLayoutEffect(() => {
handlerRef.current = onEvent;
});
useEffect(() => {
const source = new EventSource(url);
source.onmessage = (e) => {
try {
handlerRef.current(JSON.parse(e.data) as TicketEvent);
} catch {
// malformed payload — ignore rather than crash the subscription
}
};
return () => source.close();
}, [url]);
}