The Hint Bar — We Chose to Ask, Not Answer
A bar that drops a question on each field. The story of a button that clicked but showed nothing, and an AI that kept talking about the title.
The Hint Bar — We Chose to Ask, Not Answer
When you write a task in Fecit, some fields just stare back at you. What am I supposed to put under “Expectation”? And “Obstacle”? Facing an empty box, your hands freeze.
So we built the hint bar. Focus a field and a small bar slides down from the top, handing you one question tuned to that field. On the title field, “What exactly is this task?” On the obstacle field, “What could trip you up?”
A question, not an answer
At first we thought about having AI fill in the answer. But once you’re handed an answer, it stops being your task. A box someone else wrote for you is a box you never look at again.
So we changed direction. A question instead of an answer. Something that points at the stuck spot and makes you think once more. What a person facing a blank box needs isn’t the right answer — it’s a small one-line question that makes them go “oh, that,” and start typing.
Next to the question is a ✨ button. Press it and the AI looks at what you’ve written and crafts a sharper one-line question. (This spends one lumen.)
That was the intent. From there, as always, came the flailing.
Bug 1 — the button clicks, but no hint appears
On desktop I pressed ✨ and nothing happened. To be precise — it didn’t flash and vanish; the whole bar just disappeared.
The cause was a classic web trap. The hint bar is tied to “which field is currently focused.” Lose focus and the bar goes away. But clicking the ✨ button next to the input steals focus from the input itself. The input blurs, the hint bar goes “no focus? bye,” and the AI answer that arrives a moment later has nowhere to land.
The fix was one line.
<button onMouseDown={(e) => e.preventDefault()} onClick={onHint}>
Prevent the default on mousedown and focus stays on the input. It was fine on mobile and only broke on the web — blur behaves differently there.
Bug 2 — the AI keeps talking about the title
I typed “hey” into the description field, pressed ✨, and the AI handed me a question about the title. ”.ㅁ.”
Turns out we were sending the title along as context when generating the hint — meant to tell the AI “here’s what this person is working on.” But when the actual field content is as thin as “hey,” the only thing the AI has to lean on is the title. So it leaned.
We made the priority explicit. Priority one is the content of the field you’re in. The title got dropped from the prompt for now. Bringing it back as secondary context is a problem for later.
# Title intentionally excluded — priority one is the field's own content
prompt = f"content: {content}"
Bug 3 — we were sending <p> tags to the AI
The description and the analysis/review fields are rich-text editors. Which means their value is HTML, like <p>write the report</p>. And we were shipping that straight to the AI. The equivalent of telling a person “your next step is inside a <p> tag.”
We fixed it to strip the tags and send plain text. As a bonus, an empty field (<p></p>) now reads as genuinely empty, so the ✨ button disables itself properly.
Lessons
-
A question is harder than an answer, and a question is better than an answer. One good question moves a person more than a paragraph of correct ones.
-
On the web, a button next to an input steals focus.
onMouseDown+preventDefaultis a one-liner worth memorizing. -
Print what you actually send the AI. What we think we send and what we actually send are often different — a title mixed in, a
<p>stuck on.
To hand over a single good question, we ended up fixing quite a few lines. That’s usually how it goes.