Ask One chat, every state inside it

Ask is one conversation screen with a pinned composer. The first message and the composer are built from what is on record and whether a builder is connected, and the composer is absent when nobody could answer. Answers, handoffs and missing-record prompts are cards in the thread, so an answer and its source read differently from a chat bubble. 4a an empty thread, 4b mid-conversation, 4c part of the record, 4d no builder, 4g a builder but no record, 4e nobody to answer, 4h working out a reply, 4i a question that stopped, 4l asked again, 4j offline, 4k Dave answers, 4f at a desk. Every widget is laid out on its own under Widgets.

4a An empty thread

The first message is the record-derived intro, and it states the limit before anyone types. Suggestions sit in the thread until the first question. Tapping one fills the composer and sends nothing.

{{ intro.quote }}
4b Mid-conversation

Every reply is a card. One is answered from the record and lists its sources inside the card. The other is handed to Dave, with a ghost action, so the send button stays the one filled control on the screen.

Send it to Dave
4c Part of the record

The contract and picks are on record but the plans are not. The intro says what that rules out, and the way to add the plans is a prompt in the thread. The composer placeholder only names what can be answered.

{{ introPartial.quote }}
4d No builder connected

The coach still answers from the record. The intro says there is nobody to pass site, price or schedule questions to. The suggestions are gone because they were questions for Dave, and an invite prompt takes their place.

{{ introNoBuilder.quote }}
4g A builder, but no record

Dave is connected but nothing is on record. There is no coach message, because it would have nothing to answer from. The composer stays and sends to Dave, and its placeholder says so. Adding the contract brings the coach in.

4e Nobody to answer

There is no record and no builder. There is no composer and no coach message, because a question typed here would reach nobody. Adding the contract gives the coach something to read, and inviting the builder gives the composer somewhere to send. Either one brings the composer back.

4h Working out a reply

The question stays in the thread and the pending reply is drawn as a reply, with the steps the system owns. No spinner and no percentage. The composer stays usable.

4i A question that stopped

A stopped question is not an empty answer. The question stays in the thread and stays in the composer, and the way forward asks it again as a linked turn below. Tap "Ask it again" to see the turn it adds, drawn on its own in 4l.

4l Asked again

The stopped block stays where it was, and the retry is a new turn under it that says where it came from. The composer is cleared now that the question has gone again.

4j Offline

The thread is readable and the composer still takes a question. The offline block says what still works first. A question written offline shows that it has not gone yet.

4k Dave answers in the thread

The handoff becomes a sent card, his reply arrives as his own words, and what it changed is filed on the decision with the cost of waiting beside it.

4f At a desk

The same thread in one column capped at 720px, with the composer pinned at the foot of the column rather than across the whole pane. The whole page scrolls, head included, and the composer sticks to the bottom of the pane. The Desk state tweak shows every phone state in this column.

{{ intro.quote }}
Send it to Dave
{{ introPartial.quote }} {{ introNoBuilder.quote }}
{{ composer4f }}
Widgets Everything the thread can hold

Each widget on its own, on the page ground, at phone width. Only people speak in bubbles, the homeowner and the builder. The product's own lines are a marked line with no quotation marks, because nobody said them. Anything that carries a figure, a source, a step or an action is a card or a state block, so a record never reads like a remark.

w1 Messages

Two people and the product. The homeowner in blue on the right, the builder on the left with his name and the day, both quoted. The product speaks in a blue-marked line, never quoted and never as I.

Appears in 4a, 4b, 4k

{{ intro.quote }}
w2 Suggestions

Only in an empty thread, and only when a builder is connected. Tapping fills the composer.

Appears in 4a

w3 Answer with sources

One sentence as the title, the working as a fact, and every source as a row that opens it.

Appears in 4b, 4f

w4 Handoff

A question that is the builder's. It says what it does know, and the action is a ghost so the send button stays the only fill.

Appears in 4b

Send it to Dave
w5 Handoff, viewer seat

Someone who cannot send to Dave sees who can, and can ask them.

Appears in 4b with the seat tweak set to viewer

Send it to Dave
w6 Sent to Dave

What the handoff becomes once sent. It names the day and what he received.

Appears in 4k

w7 What his answer changed

Filed on the decision, with before and now, and a row that opens the decision.

Appears in 4k

w8 What waiting costs

Shown beside a changed date when it has a price on it. Always with the working.

Appears in 4k

w9 Working out a reply

The pending reply, drawn as a reply.

Appears in 4h

w10 Stopped, and asked again

The stop keeps the question. Asking again is a linked turn under it.

Appears in 4i, 4l

w11 Offline

What still works comes first.

Appears in 4j

w12 Missing from the record

One per missing source, each with one action and what adding it unlocks.

Appears in 4c, 4g, 4e

w13 No builder connected

Replaces the suggestions, and appears again whenever a question would have been handed off.

Appears in 4d, 4e

w14 Composer

Empty with a record-derived placeholder, and with a question in it. When questions go to Dave instead of the coach, the placeholder says so.

Appears in 4a, 4b, 4c, 4d, 4g, 4h, 4i, 4j, 4k, 4f

{{ composerW1 }}
{{ composerW2 }}
{{ composerW3 }}