Skip to content
C.W.K.
Stream
Lesson 04 of 04 · published

When Pen Met Paper

~10 min · transcribed-state, explicit-action, timestamps, recovery

Level 0Dry Nib
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"An open page cannot prove handwriting; the hand says when the passage became ink."

Start with the human act

The generated passage and handwritten page are different artifacts. Stored text proves the first. Scroll position, screen time, and browser wakefulness describe a device, not a hand.

Make data carry the promise

An explicit action marks an entry transcribed. Nullable transcribed_at records the transition and permits an honest undo. Clearing it restores current state without inventing browser evidence.

Interrogate failure

“Finish task” sounds like obligation; “pen met paper” names an event. It does not claim beautiful handwriting, complete copying, or earned reward. The system acknowledges contact and leaves quality alone.

Absence is also design

The timestamp anchors Today, search, photos, and restart recovery. Other artifacts can arrive around it without redefining it, and tomorrow's interface reads durable state instead of guessing.

Working principle. Never infer a human act from browser presence when the human can name the act directly.

Follow the promise beyond success

A happy screen cannot prove this boundary. Trace rejection, failure, repeated delivery, cancellation, and next-day reload. Define idempotent mark and unmark endpoints and list device signals they reject as handwriting evidence. If API response, stored row, and button copy disagree, the quiet mismatch becomes the real product.

A question worth carrying

Carry “When Pen Met Paper” as a review question. Look past feature presence to whether any path steals the human role being protected. Missing fields and absent pressure belong to the architecture too.

Code

Make the human transition explicit·sql
UPDATE entries
SET transcribed_at = CASE WHEN :done THEN :utc_now ELSE NULL END,
    updated_at = :utc_now
WHERE id = :entry_id AND status = 'live';

SELECT id, entry_date, transcribed_at
FROM entries
WHERE id = :entry_id AND status = 'live';

External links

Exercise

Define idempotent mark and unmark endpoints and list device signals they reject as handwriting evidence.
Hint
A double tap should not invent a second event.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.