The business track's wedge — the council's unanimous #1 reason users come. Governed by build/place-pages/master-plan/B4-brief.md + B-UX-PLAN §3-B4 (field/notification/card specs BINDING, followed verbatim) + DECISIONS #17 (voice v1 · privacy ON · expiry tiers · trafficking gate · equipment exception) · #19 (Message-first) · #22d (close = poster-only). The track's character: a Need is a printed notice, not a social post (L6) — apply = call/message, never a form, never a fee. Every number is measured (L7); every loop closes from the notification shade (L8); distance is place-based, never GPS. B4·A is the open owner fork (IA-1) — three home-entry variants side by side, trade-offs annotated honestly, Variant A recommended. Frames are English-only (owner review rule; cultural nouns romanized); B4·G is the one hi-locale reference.
THE OWNER FORK (IA-1, DECISIONS #17: B4 council brings frames + recommendation). Variant A puts a "Work near you" rail at the top of Explore/Search — jobs discovery lands where browse intent already lives, ONE tap from home. For: zero risk to the home timeline · browse is a pull surface (right mental mode for "what work is going?") · rail is server-toggleable per district · rail cards deep-link into the place Feed "Work" segment so ONE canonical job surface stays. Against (honest): Search is the app's 3rd tab — weaker daily footfall than the home feed; workers who never search never see it (C's notifications cover them). Below the rail beat: the BASELINE that ships in EVERY variant — place Feed tab segment chips "All / Work / Offers" (S6 chip pattern, §2 IA: zero new tabs; Need cards amber-striped within the same scroll).
One nearby Need card spliced 1-in-N into the HOME timeline (news-splice pattern; capped, dismissible-by-category). For (honest): the home feed is the only surface EVERY user sees daily — this is the strongest reach of the three, and the worker lens's original ask. Against (honest, the lead's flag): ⚠️ this brushes the timeline-deferral decision — the home timeline's composition is owner-territory under active policy (freshness caps, news Phase-1 splice slot already reserved); a SECOND splice class needs an explicit owner OK and a combined splice budget, or the feed becomes a notice-board. Mis-targeting also burns trust fastest here (a teacher shown mason work daily = ad-feel). If picked: respect serviceArea/trade matching where known, 1-in-8 max shared with news, one-tap "less of this".
No home-screen surface at all: matched Needs arrive as notifications only (the b4d matching pipe), browse lives solely in the place Feed "Work" segment. For (honest): cheapest to ship — the matching pipe is mandatory for ALL variants anyway; zero timeline risk; precision-first feels respectful. Against (honest — why this is the WEAKEST browse): notifications only reach providers with a matching trade/serviceArea ON FILE — day-1 workers with no profile get nothing, forever (cold-start death); a push is ephemeral — swipe it away and the job is gone with no place to re-find it from home; no serendipity ("mason work" never reaches the man who'd take 2 days of loading work). The worker lens's verdict stands: jobs discovery dies two taps deep — C alone re-creates exactly that. Viable only as a COMPANION layer (it ships inside A and B regardless), not as the answer to IA-1.
Rides the S6 one-composer precedent. Beat ① type entry = 3 pictogram tiles Hire / Offer my work / Need a service (tap advances, b1 grammar). Beat ② service-request compose: PRIVACY toggle at the TOP, default ON (#17: "Only matching providers see this — not the public feed"; R5: the destination chip dims + carries the lock for the whole session) · voice-note record LEADS (L2: guided prompts on screen; transcript lands in fields below w/ field-level re-record) · rate ₹ prefilled from the trade's local going entry · date · place auto · SECOND-CONTACT field ("Second contact — who'll be at home?", provider-eyes-only behind the locked sheet) + auto remote-context label "Poster is in Gurgaon" (from registered city — THE migrant unlock). Beat ③ equipment variant (farmer spec: crop / dates / area in bigha; block-first reach, auto-expand to district if <3 operators — never state). Beat ④ post-confirm: real reach "Reached 47 people in Bheldi + block" (L7) + the zero-match honest line w/ auto-widen (R12).
§3-B4 field spec VERBATIM, visible untapped, in order (worker lens — contractual): ① trade BIG ② ₹ rate BOLD ③ when ④ place + km (place-based distance from the registered village, never GPS) ⑤ poster identity — business badge w/ name+category OR "Individual post" + new-member chip (the thekedar filter: poster TYPE always visible) ⑥ still-open dot + responder count ⑦ small fraud footer. SHARE button mandatory (Priya's family-vetting path: WhatsApp card forward, number hidden — R7). Card = S7 issue-wrapper variant (R2): s7post shell + amber stripe, but the social header is deliberately broken — no avatar-first, no like/comment/views (L6 printed notice). Amber placement per the binding spec: full-screen interstitial ONCE at first Jobs entry + small footer line per card; the FULL banner only on a fraud-signal post (banner blindness + section-fear otherwise). Images FORBIDDEN on Need cards (§5 2G + address protection).
No real job asks for a fee, a deposit or "registration money" — not before, not after. If anyone asks, report the post; we remove it and warn others.
Matching delivery (§3-B4, Ravi's spec): Need(category) → providers whose trade + serviceArea match — NEAREST notified FIRST, others +2–3 min stagger (the early-bird advantage rewards proximity, the stagger stops a 12-phone pile-on). Notification line order EXACT and BINDING: trade · village NAME · km · urgency · age · poster chip — never the full post text. The request screen puts the still-open banner + responder count BEFORE the contact buttons (a dead or crowded job must be visible before the dial, not after) — contact ladder per #19: Message primary, Call via the locked sheet, WhatsApp inside the sheet only (R6). Third beat: the gated-post seeker state — queued/trafficking-gated posts show "Under review — don't contact yet" (the E2E safety gap, closed).
The dignity test governs every pixel: a visiting card, not a begging bowl. Manoj is a professional with 15 years of work — the card says what he does, what he charges, and that he's available; it never says "looking for work", never pleads. Record flow = voice-first, 5 on-screen prompts (§3-B4: guided cues), transcript lands in fields w/ FIELD-LEVEL re-record chips (L2: transcription errors are fixed by saying it again, never "type to correct"). Published card: trade badge · years as a CREDENTIAL · professional day rate · serviceArea · Available toggle (pulse dot, same state machine as B2 available-now — R8). Directory home = People tab "Workers" segment (S9 person-row + chips, §4 reuse). The maintenance hook is the human signal, ≤1/week: "One person viewed your card · Rampur" (L7 viewed-honesty — viewed, never "called" unless measured).
L8 binding: every loop closes from the notification shade. ① "Still open?" — inline YES/NO on the +2 h nudge (service-request tier; jobs get it day 3 of 7). NO closes the post; silence lets the expiry tier do it (#22d: close = POSTER-only — providers never close, R10). ② "Found someone — close" + the optional "who did the work?" pick (R11: one-tap skippable; feeds village-level operator proof — "2 Bheldi households hired him" — never names). ③ 24 h no-response → reach-expand offer ("Show to nearby villages?") — one tap widens ONE hop, mirrors the composer's auto-widen. ④ scam report = 2 taps (flag → the one option "Asking money for the job" → submitted) + the 24 h outcome push w/ social proof: "Removed — 3 others reported it too" — the report loop that earns the next report.
DECISIONS #8: one language per screen — this frame renders B4·B's service-request composer fully in the hi locale as a translation check, NOT a design pattern (chosen because the composer is B4's string-heaviest screen). It carries the §3-B4 binding Devanagari strings verbatim: the privacy explainer "सिर्फ़ plumbers को notification — feed में नहीं" (trade word stays Latin-romanized in the binding string) · the second-contact label "दूसरा संपर्क — घर पर कौन मिलेगा" · the reach line "47 लोगों तक पहुंची". Devanagari titles use the .sp-hi metrics (21.5/700); body strings ride Noto Sans Devanagari from the shared stack. Proper nouns (Bheldi, Gurgaon) stay Latin per the S1·F precedent.
B4 position in the track: the WEDGE — B1 gives it accountable accounts, B2 helps matching, but B4 runs lean without either. Flow: home-entry door (IA-1, owner picks) → place Feed "Work" segment (the canonical surface, every variant) → Need composer (voice-led, privacy-ON service requests) → contractual card → match notification (nearest-first stagger) → request screen (still-open + count before contact) → close loops from the shade. RULING LOG (R1–R12, full text in the header comment): R1 IA-1 recommendation = Variant A explore rail (B = strongest reach but brushes the owner's timeline-deferral territory — flagged, not buried; C = weakest browse, viable only as the companion layer it already is) · R2 Need card = S7 shell, contractual §3-B4 field order, social header + action row deliberately broken (L6) · R3 .b4-ktile/.b4-inp/.b4-mic/.b4-tg re-declare b1/b2 file-local patterns 1:1 for lead consolidation · R4 Need amber rides the existing --s7-amber theme pair, no new token · R5 privacy lock = the destination chip dims + locks for the whole composing session · R6 request-screen ladder = #19 Message-first; the §3-B4 "before the call button" order binds banner+count above BOTH CTAs (same fork-shape as P1-8 — lead's eye) · R7 SHARE = quiet bordered pill, number-hidden WhatsApp card forward (#17 share-OUT) · R8 worker Available = the approved pulse-dot, one state machine grammar with B2 available-now · R9 expiry tiers = quiet L4 facts, never countdowns · R10 close control poster-only (#22d) · R11 "who?" pick optional + skippable, feeds village-level proof, never names · R12 zero-match honesty + one-hop auto-widen on the confirm screen itself. en UI strings (binding set): "All / Work / Offers" · Hire / Offer my work / Need a service · "Only matching electricians get a notification — this never shows in the public feed" · "Second contact — who'll be at home?" · "Poster is in Gurgaon" · "Reached 47 people in Bheldi + block" · "Never pay money for a job" · "Under review — don't contact yet" · "Still open?" YES/NO · "Found someone — close" · "Show to nearby villages" · "Removed — 3 others reported it too" · "One person viewed your card · Rampur". hi equivalents live in b4g only, carrying the §3-B4 binding Devanagari verbatim. Net-new widgets used: 3 of the approved 4 (voice tile · pulse dot · fraud banner; the mandi sparkline is B5's). App-only/build-phase (cited, not designed): matching fan-out Need(category) × serviceArea regionIds + centroid km (#22a) + nearest-first stagger queue · async voice transcription, search-indexed · trafficking gate = server category×poster-type rule → admin queue · advance-fee string hard-block · expiry schedulers (4–6 h / 7 d) + still-open nudges · WhatsApp share card = rendered number-stripped image · trade labels = server-driven domain vocabulary (§6) · fraud warning = ARB, all 12 locales, offline. For the lead's gate: ① the IA-1 fork needs the OWNER's pick from B4·A (recommendation = A) ② R6's Message-vs-Call weighting on the request screen rhymes with open fork P1-8 — settle both together ③ if Variant B is picked, the combined home-feed splice budget (news + jobs) is an owner decision before build.