📍Skutr Docs — Day 10. When the client didn't show up, but the brief is needed

Yesterday — a voice that understands business. Today — two big pieces: full editing of the brief in the web dashboard and a scenario when the client didn't show up for the interview.



📝 The brief is now editable

Previously, the brief in the web dashboard was read-only — AI generated it, freelancer views it. But in practice, the brief always needs tweaking: clarify the target audience, add integration, change deadlines. Now all 9 fields of the brief are editable directly in the dashboard. And after edits — a button "Regenerate TOR" that recreates the technical specification and cost from the updated brief.



💰 Validation: no price — no document

I discovered that a freelancer could save a project and download a PDF without specifying the final cost. This resulted in a document with an empty price field — which cannot be sent to the client.

Now: manual saving is blocked without final_price > 0. PDF generation — also blocked. Both on the frontend (toast notification) and backend (400 error). Meanwhile, auto-save every 30 seconds works without restrictions — so intermediate edits are not lost.



✏️ Small things that matter

The project name is now editable inline — click on the title, type, Enter. PDF renamed to "Brief and TOR" — because it now includes the brief. Prompts updated for all 12 project types.



🔀 When the client didn't show up for the interview

Second part of the day. Freelancer creates a project, chooses path A (AI interview), sends the link to the client. But the client doesn't show up. The freelancer briefed them themselves — by phone, in correspondence — and wants to upload materials to the already created project. But there was no UI for that. The "Waiting for client" screen was spinning a spinner and waiting. Endlessly.

Added a button "Upload materials manually" on the waiting screen. Full form: text + voice + photo + file. Uploaded — clicked "Generate TOR" — pipeline picks it up.

But under the hood — the pipeline was failing. The project was created with brief_source = "interview", pipeline went to the interview branch, interview empty — error. Uploaded materials were lying nearby, but the pipeline didn't see them.

Fixed: now the pipeline determines the source by fact, not by label. If interview data exists — takes it. If not, but uploaded materials exist — upload path.



💡 Insight of the day

The product breaks not on the happy path. The client didn't show up for the interview — this is not an edge case, it's half of the freelancer's reality. If the product can't handle this — it's a toy, not a tool.



🎯 Total for the day: editable brief with TOR regeneration, final cost validation, inline name editing, material upload to existing project, auto-detection of data source in pipeline.



#buildinpublic #skutrdocs #AI #freelance #selfemployed #startup #SaaS #product #UX