Skip to content

Biodata reading: one presentation, every surface (correction prompt) ​

Purpose: one Claude Design correction round that makes the approved design say what the owner decided on 2026-09-27, and fixes every artboard defect the build found. The owner pastes the block below into the "QR setu prototype" project as is. Whatever is not inside the block does not reach the design, so the block is complete on its own.

Why it exists: the in-app Preview and the shared link showed the same biodata two different ways, because the design held two approved presentations of one reading (BiodataView in the app, BiodataPage on the web) and every check compared each surface with its own artboard. The owner decided the web page is canonical and the app shows that page (ADR-0033, decisions.md D9). The evidence is consumer/biodata-preview-public-parity-rca.md; every defect below was measured by check:biodata-presentation or by a parity signoff, and each has a tracker row.

When this round lands: pull the artboards fresh, re-run npm run check:biodata-presentation, and delete every allowance it reports STALE (each is an artboard defect or an owner removal the design has now absorbed). Then re-measure the three parity contracts.

The prompt ​

text
You are extending the existing QR setu prototype, not starting a new one. The marriage biodata is
already designed, in these files:
- prototype/setu-card/BiodataPage.dc.html (the default design, Parichay)
- prototype/setu-card/BiodataChitra.dc.html and prototype/setu-card/BiodataPatrika.dc.html
- prototype/setu-card/open-in-app.js, prototype/setu-card/image-slot.js, prototype/setu-card/icons.js
- prototype/consumer/BiodataView.dc.html (the in-app reader)
- prototype/consumer/biodata-core.js, prototype/consumer/biodata-view.js,
  prototype/consumer/biodata-family.js, prototype/consumer/biodata-templates.js (shared by all)
Reuse those modules and the folders' chrome (ds-base.js, icons.js, image-slot.js). Do not fork any
file and do not add a parallel screen. This round changes existing files only.

THE DECISION THIS ROUND ENCODES (product owner, 2026-09-27)

A marriage biodata is drawn ONCE, by the public page, and every place that shows it shows that page.
The page as it renders in a phone browser is the one presentation. The in-app Preview and a family
reading the biodata inside the app both show that same page. When someone with QR setu installed
scans the QR, the app opens that same page. There must be no second drawing of the reading anywhere.

1. ONE PRESENTATION: BiodataView frames the real page for EVERY design
   - biodata-view / BiodataView.dc.html currently sets `isFramed = !TPLS.isDefault(tpl)`, so the
     DEFAULT design (Parichay) is drawn by BiodataView's own reading blocks instead of the page. That
     exemption is the reason the Preview and the shared link looked different. Remove it: BiodataView
     frames the real page (`?embed=1`) for parichay, chitra and patrika alike.
   - BiodataView keeps ONLY the in-app chrome around the framed page: the header (back, title, the
     address), the owner band, and the reader switch (Anyone with the link / A family you released /
     Owner preview). Its own reading blocks (the name card, the "Education and work · 5 lines" cards,
     the looking-for card, the family list, the photographs block, "The page this profile lives on",
     the growth card) are deleted; the framed page already draws all of them.
   - Draw what the page looks like inside the frame (`?embed=1`): no site header of its own (the
     app's header replaces it), everything else identical to the phone-browser page.

2. THE CLOSING IS THE SAME ON ALL THREE DESIGNS, AND NOTHING PROMOTIONAL
   On BiodataPage, BiodataChitra and BiodataPatrika, on live pages AND on the closed pages (expired,
   withdrawn, concluded), remove:
   - Parichay's footnotes, all three: "Written in <language> by the family. QR setu never translates
     a person's own words." · "Kept current by the family. There is no version two of this profile..."
     · "Date of birth, income and home address are never shared on QR setu..." (and the basic-tier
     variant "Exact date of birth, contact number, income and home address are never shared...").
   - Parichay's app strip (QROpenInApp): "QR setu, in your browser or on your phone" · "Keep the
     profiles shared with you in one place..." · Download · its dismiss.
   - Parichay's growth pitch on the live page: "Free to create" · "Make one for someone in your
     family" · "One link that stays current, that you can take back..." · "Start a marriage
     profile" · "Takes about ten minutes. Nothing is public until you send the link."
   - Parichay's closed-page pitch: "For someone you love" / "If your family is searching too" · "Someone
     in your family is looking? Make them a profile worth sending" · the three points (One link,
     always current · You decide who sees what · It knows when the search is over) · "Start one,
     free" / "Make one, free" · "Free to create. Nothing is public until you send the link." · the
     "Or ask us first" divider.
   - Chitra's closing card: the wordmark, "One profile, one link, and the family decides who sees
     what." and "Make yours free on QR setu".
   - Patrika's closing: the wordmark, the growth line and its "Make yours free" CTA. Keep the 2px
     closing rule so the sheet still ends where it ends today.
   - BiodataView's growth card: the badge, "Make one for someone (else) in your family", its body and
     "Start a marriage profile".
   KEEP, on every design and on the closed pages: QR setu's support row, "Ask on WhatsApp ·
   +91 92703 73367" with its note "A real person, 9 am to 9 pm. We can set the profile up with you
   over one call.", each in that design's own visual language.

3. ADD "Report this profile" AS THE LAST LINE OF EVERY PAGE
   Every design, live and closed: a quiet text link after the support row, the page's last element,
   min 44px target, that opens a report (today a mail to report@qrsetu.com, subject "Report a
   marriage profile"). It exists so a misused or fake profile can be acted on. Draw it in each
   design's own language; none of the three artboards has it today.

4. PARICHAY FOLLOWS THE DESIGN'S OWN READING ORDER
   biodata-view.js READING_ORDER is opening, identity, photos, intro, facts, story, family,
   community, kundli, custom, looking, talk, and `orderOk` forbids looking above family. BiodataPage
   breaks it: the family's own words come AFTER the fact tiles, "What <name> is looking for" comes
   straight after Education and work (above Family), and Kundli and "More about <name>" come after
   Who to talk to. Reorder BiodataPage to READING_ORDER. Chitra and Patrika already follow it.

5. LANGUAGE AND LAYOUT DEFECTS FOUND BY MEASURING THE BUILD AGAINST THE ARTBOARDS
   a. biodata-core.js formatValue for expectAge writes the Marathi connector for every language
      (`.replace(/\bto\b/gi, 'ते')`), so Hindi reads "27 ते 32". Hindi is "27 से 32"; Marathi stays
      "27 ते 32"; English "27 to 32".
   b. biodata-family.js scales the Devanagari wrap budget TWICE: tree() computes
      `pChars = budget(22 or 38, lang)` and `cChars = budget(15 or 22, lang)`, then label() applies
      `budget(chars, lang)` again, so a Marathi or Hindi parent's detail is cut at about 12
      characters and ellipsised ("निवृत्त / बीएसईनएल…", losing "अभियंता"). Apply the budget once.
      Latin is unaffected (its scale is 1).
   c. BiodataPage education timeline: `sub: eduInst || L('education')` prints the word "Education"
      under its own "Education" kicker whenever the education value has no institution after a comma
      ("B.E. / B.Tech"). Use `sub: eduInst` only; an education with no institution has no sub-line.
   d. BiodataPage hero: the photo count chip sits inside the photograph block and reads before the
      tier chip; keep that order in the markup (it is the screen-reader order).

6. EARLIER DEFECTS STILL OPEN IN THE ARTBOARDS (from the build's parity signoffs)
   BiodataPage (Parichay):
   - The surname reaches a basic reader through the hero attribution ("Shared by the <surname>
     family") and the link-preview sender, while the full name is released-tier. Do not show the
     surname at basic; show "Shared by the family".
   - The intro ignores the family's hide switch; it must disappear when hidden.
   - The basic-tier lightbox shows the UNCROPPED cover; at basic only the cropped cover exists.
   - States mix languages: the status banner, the closed and removal states and the pending card
     are hardcoded English; every state follows the reading language.
   - The ask form has no error state and no OTP step drawn; draw both.
   - Props do not drive the render in places (the scenario is read from its own prop instead of the
     shared state grammar); every state must come from readState / the link.
   - The carousel dots sit under the name overlay; they must stay visible and tappable.
   BiodataChitra:
   - The family's chosen accent never reaches the page: every accent element uses the product
     --accent instead of --bio-accent.
   - Share sends the FULL name; it must send the first name only.
   - "Link copied" shows even when copying failed.
   - The held-back line reads "The family shares the family, the kundli ..." (a doubled "family", and
     no "and" before the last item).
   - Empty kundli grid cells render as blank boxes; an empty value draws no cell.
   - A double rule appears inside "What they are looking for".
   - "1 people": singular for one.
   - A full name that does not lead is printed twice.
   - Filled slots are dropped: the family's own custom fields in the family and expectations groups,
     and the talk/contact group.
   - The gallery never holds more than one photograph even at the 4-photograph cap.
   - Latin letter-spacing is applied to Devanagari; Devanagari takes no tracking.
   - No lang attributes on mixed-script text.
   - An editor label ("Languages known" style editor copy) appears on the public page.
   - The framed card sits flush to the top of the frame.
   - The lit chip in the section strip scrolls out of view.
   BiodataPatrika:
   - Expectation fields vanish when filled in some combinations; an orphan map (a place with no
     address) is dropped; duplicate facts are not de-duplicated against the standfirst.
   - The script follows the UI language instead of the content language; Devanagari metrics
     (line height, size) are not applied.
   - No visible focus styles.
   - The request copy names a field twice.
   - The closed states (expired, withdrawn, concluded) are not designed for Patrika; they use
     Parichay's closed pages, which is correct, but say so in the artboard.
   Chitra and Patrika, basic tier:
   - "Ask the family" is a one-tap button, but asking needs the asker's name, their relationship and
     a WhatsApp number (as Parichay's form has). Draw those fields, or reuse Parichay's ask form.

WHAT NOT TO CHANGE
- The tier model: a link shows the basics; family details, kundli, contact and the full photographs
  go only to families the owner releases by name. No field moves tier in this round.
- Parichay remains the default design; Chitra and Patrika remain optional.
- The data model and field ids in biodata-core.js (only the expectAge formatter in 5a changes).
- Do not add any new promotional, explanatory or reassurance copy to the page.

DELIVER
Edit the existing files in place (BiodataPage.dc.html, BiodataChitra.dc.html, BiodataPatrika.dc.html,
BiodataView.dc.html, biodata-core.js, biodata-family.js, biodata-view.js if needed). Add a short note
at the top of each edited artboard listing what this round changed, and update SCREENS.md. Keep every
existing tweak (subject, viewer, content, theme, family layout, language) working.

What is deliberately NOT in the prompt ​

These are open owner calls, so the design must not decide them:

  • The Hindi wording "फिलहाल सुरक्षित" ("safe for now") for "Held back for now" (QRS-1338).
  • Whether the surname may ever be basic-tier (QRS-1362). The prompt only removes the surname at basic, which is the current rule.
  • The point-of-use privacy reassurances that remain after D2, such as "Not listed anywhere and not searchable", "Names and relations only. QR setu never shares their numbers", "Published by the family. QR setu never puts a profile on a map" and "Messaging keeps the conversation on QR setu…". They conflict with QRS-549, and the owner has not ruled on them (QRS-1356).
  • Dark theme for the public page (QRS-1318).
  • The withheld marker, owner-is-subject and timestamps. These are backend projections (QRS-1296, 1303, 1319), not design.

Round 57 addendum: the growth card comes back (owner, 2026-09-27) ​

Round 56 did what the prompt above asked and removed every growth block. The owner then asked for one back, as Chitra's compact card on every design. This block is the follow-up, pasted as is.

text
Round 57, a follow-up to round 56. Extend the existing files only; do not fork any.

Files: prototype/setu-card/BiodataPage.dc.html, prototype/setu-card/BiodataChitra.dc.html,
prototype/setu-card/BiodataPatrika.dc.html.

Round 56 removed every growth block, which was right for the heavy ones. The product owner has since
decided that ONE compact growth card returns, the same on all three designs and on every state (live,
expired, withdrawn, concluded):

  the QR setu mark
  "One profile, one link, and the family decides who sees what."
  a button, "Make yours free on QR setu", to https://qrsetu.com
  then, inside the same card, QR setu's support row "Ask on WhatsApp · +91 92703 73367" and its note
  "A real person, 9 am to 9 pm. We can set the profile up with you over one call."

This is Chitra's own closing card from before round 56, and those are its exact words, in every
language (Marathi: "एकच परिचय, एकच लिंक, आणि कोणाला काय दिसेल हे कुटुंब ठरवते." / "QR setu वर तुमचे
बनवा"; Hindi: "एक ही परिचय, एक ही लिंक, और परिवार तय करता है कि किसे क्या दिखे." / "QR setu पर अपना
बनाएं"). Draw it in each design's own language: Chitra as it was, Parichay as a surface-muted card in
its tokens, Patrika under its 2px closing rule in its own type.

"Report this profile" stays the last line of every page, after the card.

Still removed, do not bring back: the footnotes, the app strip with Download, the long pitch ("Free to
create", "Start a marriage profile", "Takes about ten minutes"), and the closed page's three points.

Update the round note at the top of each artboard and SCREENS.md.