From 67ee2b49d7aad2ed4003dab7de1e5dd21ac03699 Mon Sep 17 00:00:00 2001 From: mawkone Date: Sat, 16 May 2026 11:10:05 -0700 Subject: [PATCH] feat(ui): build session viewer to read raw AI transcripts and tool calls --- .../project/[projectId]/(home)/plan/page.tsx | 404 +++++++++++++++--- .../(home)/sessions/[sessionId]/page.tsx | 146 +++++++ 2 files changed, 495 insertions(+), 55 deletions(-) create mode 100644 vibn-frontend/app/[workspace]/project/[projectId]/(home)/sessions/[sessionId]/page.tsx diff --git a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page.tsx b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page.tsx index c6949e6e..ef29b273 100644 --- a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page.tsx +++ b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/plan/page.tsx @@ -411,8 +411,15 @@ function SectionTile({ // Vision // ────────────────────────────────────────────────── - -function BriefPanel({ plan, projectId, onChange }: { plan: Plan; projectId: string; onChange: (p: Plan) => void; }) { +function BriefPanel({ + plan, + projectId, + onChange, +}: { + plan: Plan; + projectId: string; + onChange: (p: Plan) => void; +}) { const [draft, setDraft] = useState(plan.brief ?? ""); const [saving, setSaving] = useState(false); const [editing, setEditing] = useState(!plan.brief); @@ -445,7 +452,7 @@ function BriefPanel({ plan, projectId, onChange }: { plan: Plan; projectId: stri const handleFileUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; - + // For now we just read text files (txt, md, csv). // In the future you can send PDFs to an extraction API. const reader = new FileReader(); @@ -463,20 +470,106 @@ function BriefPanel({ plan, projectId, onChange }: { plan: Plan; projectId: stri
-

, - h1: ({ node, ...props }) =>

, - h2: ({ node, ...props }) =>

, - h3: ({ node, ...props }) =>

, - ul: ({ node, ...props }) =>
    , - ol: ({ node, ...props }) =>
      , - li: ({ node, ...props }) =>
    1. , - }}> + ( +

      + ), + h1: ({ node, ...props }) => ( +

      + ), + h2: ({ node, ...props }) => ( +

      + ), + h3: ({ node, ...props }) => ( +

      + ), + ul: ({ node, ...props }) => ( +
        + ), + ol: ({ node, ...props }) => ( +
          + ), + li: ({ node, ...props }) => ( +
        1. + ), + }} + > {plan.brief}

@@ -488,15 +581,48 @@ function BriefPanel({ plan, projectId, onChange }: { plan: Plan; projectId: stri
{!plan.brief && (
-

- No project brief uploaded. You can paste your PRD, requirements document, or notes below. The AI will read this to understand the full scope of your project. +

+ No project brief uploaded. You can paste your PRD, requirements + document, or notes below. The AI will read this to understand the + full scope of your project.

-
-