Skip to content

Chat UI improvements: markdown tables, job links, list numbering#16

Merged
creativereason merged 3 commits into
mainfrom
fix/chat-job-links-and-tables
Jul 7, 2026
Merged

Chat UI improvements: markdown tables, job links, list numbering#16
creativereason merged 3 commits into
mainfrom
fix/chat-job-links-and-tables

Conversation

@creativereason

Copy link
Copy Markdown
Owner

Summary

Chat UI fixes surfaced while polishing marketing screenshots — the assistant's replies about job lists were rendering incorrectly or awkwardly in both the board chat (ChatDrawer) and the inline job-detail chat (JobChat).

  • Markdown tables weren't rendering at all. MarkdownContent had no pipe-table support, so any table reply (e.g. "show me my strong-fit prospects") showed raw | Company | Role | text instead of an actual table.
  • Jobs the assistant listed had no link back to the board. list_jobs didn't return a detailUrl, so there was nothing to link to, and the model would occasionally hallucinate a placeholder link like [Anthropic](/) that rendered as broken raw markdown.
  • Ordered/unordered lists showed "1." for every item. The list parser ended a list at the first blank line. LLMs commonly emit "loose" lists (blank line between each item), so what should've been one list became several one-item lists — each fresh <ol> restarts its own counter at 1.
  • Job tables wrapped badly in the narrow chat panel. A 4-column Company/Role/Salary/Link table wrapped the role text mid-word. Tables now default to 2 columns — Job (company + linked role) and one status field (Status for applied, Fit for prospects) — with salary/date moved to prose highlights unless specifically asked about.

Also expanded scripts/screenshots.mjs with a second board-chat example, a job-detail-chat capture, and deviceScaleFactor: 2 for sharper marketing screenshots (unrelated to the chat fixes but bundled from the same session).

Changes

  • components/MarkdownContent.tsx: pipe-table rendering; list parser tolerates blank lines between items instead of splitting into separate lists.
  • lib/chat-tools.ts: list_jobs now attaches detailUrl to every job it returns.
  • app/api/chat/route.ts: system prompt now links the role name (never the company, never a placeholder URL) and formats job tables as compact 2-column tables.
  • components/__tests__/MarkdownContent.test.tsx: new ZOMBIES-ordered test suite covering the list/table/link fixes.
  • scripts/screenshots.mjs: extra chat examples, job-detail chat capture, 2x device scale.

Test plan

  • pnpm tsc --noEmit clean
  • pnpm lint clean (pre-existing coverage-artifact warning unrelated)
  • pnpm test — 116/116 passing (8 new tests added)
  • Verified live via direct /api/chat calls: prospects table, June-applied stats list, and the compact 2-column table all render correctly with working role links and no placeholder/broken links
  • Verified the reported "1." repeat bug is fixed via a test reproducing the exact blank-line-separated list shape

creativereason and others added 3 commits July 7, 2026 02:57
Chat replies were showing raw pipe-table syntax instead of tables, and
list_jobs gave the model no URL to link jobs it names. Add table
parsing to MarkdownContent, attach detailUrl to list_jobs results, and
tighten the system prompt so the role name itself becomes the link
(no separate link column, no invented/placeholder URLs).

Also expand screenshots.mjs with a second board-chat example and a
job-detail-chat capture, and capture at deviceScaleFactor 2 for sharper
marketing screenshots.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…g to 1

MarkdownContent stopped collecting list items at the first blank line,
so a "loose" list (blank line between items, which LLMs commonly emit)
became several one-item lists instead of one. Every fresh <ol> restarts
its own count, so every item rendered as "1." regardless of position.

Fix: collectListItems now tolerates a single blank line between items,
only ending the list when the next non-blank line isn't a list item.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Company/Role/Salary/Link tables wrapped the role column badly in the
narrow chat panel, especially with long titles. Collapse job tables to
two columns by default — "Job" (company + linked role) and one
status-like field (Status for applied, Fit for prospects) — and push
salary/date into prose highlights instead, only surfacing them as
columns when the user specifically asks about comp or timing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
deckhand-ai Ready Ready Preview, Comment Jul 7, 2026 7:08pm

@creativereason
creativereason merged commit 83dd539 into main Jul 7, 2026
3 checks passed
@creativereason
creativereason deleted the fix/chat-job-links-and-tables branch July 7, 2026 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant