"Now" status scan experience — show what you're currently up to
CI / policy (push) Has been cancelled
CI / backend (push) Has been cancelled
CI / profile (push) Has been cancelled
CI / mobile (push) Has been cancelled

Experience #9 (lite): a published card can carry a "Now" line shown with a live
pulsing dot, so a scanned profile reflects what the person is currently doing.

- Backend: demo publish accepts optional `now` -> definition.profile.now; test
  asserts it. Gate green (120 tests).
- Web: renders a "Now: …" block with an animated green dot. astro check clean.
- Mobile: a "Now" field on the publish screen.

Verified live alongside a link payload (CTA button).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-05 21:15:40 -05:00
co-authored by Claude Opus 4.8
parent a61d0221d1
commit b487195def
6 changed files with 60 additions and 1 deletions
+12
View File
@@ -31,6 +31,7 @@ export default function PublishScreen() {
const [payloadKind, setPayloadKind] = useState<"none" | "link" | "code">("none");
const [payloadLabel, setPayloadLabel] = useState("");
const [payloadValue, setPayloadValue] = useState("");
const [now, setNow] = useState("");
const [busy, setBusy] = useState(false);
const [result, setResult] = useState<string | null>(card?.publishedUrl ?? null);
@@ -56,6 +57,7 @@ export default function PublishScreen() {
payloadKind !== "none" && payloadValue.trim()
? { kind: payloadKind, label: payloadLabel.trim(), value: payloadValue.trim() }
: undefined,
now: now.trim() || undefined,
});
// Point the card's QR at the real profile + remember it.
upsert({ ...card, url: profileUrl, publishedUrl: profileUrl, updatedAt: Date.now() });
@@ -101,6 +103,16 @@ export default function PublishScreen() {
</>
)}
<Text style={styles.label}>Now what youre up to (optional)</Text>
<TextInput
style={styles.input}
editable={!busy}
placeholder="e.g. Building CardClaws · open to design partners"
placeholderTextColor="#6b6b70"
value={now}
onChangeText={setNow}
/>
<Text style={styles.label}>Payload drop (optional)</Text>
<View style={styles.kindRow}>
{(["none", "link", "code"] as const).map((k) => (