2026-05-22-client-scope-lock

activetype/meeting

Client meeting — scope lock (Friday night, 2026-05-22)

TL;DR

Scope lock did not happen. Meeting with [[Resources/People/Andi Gani Nena Wea|Andi Gani]] ended early after a seating etiquette incident (mg crossed legs; client read it as angkat kaki toward him). He cited his Kapolri-linked standing, asked mg to stop, and closed with “sudah-sudah, nanti saja saya kabari.” No §1–§11 decisions captured. 2026-05-25 handoff should be treated as not committed until client reopens. One formal apology message sent or pending; do not chase.

Logistics

| Field | Value | | -------------------- | --------------------------------------------------------------- | | When | Friday 2026-05-22 night (confirm time) — not Sat 2026-05-23 | | Calendar | Thu 21 prep → Fri 22 scope lock → Sun 25 handoff | | Format | TBD (call / in-person / chat) | | Attendees (client) | [[Resources/People/Andi Gani Nena Wea|Andi Gani Nena Wea]] (confirm) | | Attendees (LumenDev) | mg | | Goal | Scope lock for Sunday 2026-05-25 handoff |

Context to show client (if useful)

  • Base build already started: Next.js + Auth.js (admin / user, Google + email/password) in ~/Project/lumendev-core.
  • Engineering baseline: [[Projects/lumendev-museum-ibu-marsinah/context/rumah-singgah-booking-rules|Rumah Singgah rules (draft)]] — 1 night per user per calendar month, ID-only UI.
  • Stack locked: [[Projects/lumendev-museum-ibu-marsinah/decisions/adr-2026-05-21-nextjs-mongodb-authjs-stack|ADR — Next.js + MongoDB + Auth.js]].
  • Out of scope until they say otherwise: payment, multi-language, email notifications, rich CMS, analytics.
  • Research-backed content (verify Friday): [[Projects/lumendev-museum-ibu-marsinah/context/museum-visit-facts|museum hours/address]], [[Projects/lumendev-museum-ibu-marsinah/context/marsinah-subject-profile|biography]], [[Projects/lumendev-museum-ibu-marsinah/context/content-ia-editorial|full IA vs v0 subset]].

Suggested call order

  1. §1 Client & contacts → §2 Product & webapp fundamentals → §3 Auth → §4 Sitemap → §5 Content sign-off → §6–§8 Rumah Singgah → §9 Admin → §10 Launch → §11 Commercial (if time) → Acceptance checklist → Backlog triage

Pre-meeting confidence map (before call)

Status labels:

  • Enough: baseline already clear enough to implement v0
  • Need more info: direction exists, but still needs client confirmation
  • Clueless: still too open, cannot lock scope/pricing safely

| Area | Status | Current read before meeting | | --------------------------------- | ------------------ | ------------------------------------------------------------------------------------- | | §1 Client & contacts | Clueless | Entity legal name, sign-off PIC, and contact channels still blank | | §2 Product & webapp fundamentals | Need more info | Core intent is understood, but target users, maintainer, and ownership are not locked | | §3 Auth & accounts | Need more info | Auth stack exists, but registration policy and account governance are open | | §4 Public site sitemap | Need more info | Strong draft exists, final page set and legal/SEO items not approved | | §5 Content sign-off & brand | Need more info | Research exists, approval and rights usage still pending | | §6 Rumah Singgah what it is | Clueless | Physical stay definition and eligibility not confirmed | | §7 Rumah Singgah capacity/rules | Clueless | Global capacity and operational booking constraints still unknown | | §8 Rumah Singgah UX/notifications | Need more info | Candidate UX exists, but waitlist/notifications/status flow not decided | | §9 Admin bookings/content/users | Need more info | Admin baseline known, CMS depth and provisioning policy still open | | §10 Launch/domain/environment | Need more info | Handoff date fixed, but domain readiness and launch mode still open | | §11 Commercial | Need more info | Pricing model drafted, final number depends on scope lock decisions | | Acceptance checklist | Need more info | Structure is ready, final pass criteria need client sign-off |

Agenda

1. Client & contacts

  • Official entity / museum name for site footer and invoices
  • Primary sign-off contact (name, role, channel)
  • Who provides copy and images (client vs LumenDev)
  • Secondary contact for Rumah Singgah operations (on-site access, emergencies)
  • Content delivery deadline: final copy/images by when? (before vs after 2026-05-25)
  • If copy late: placeholder / research draft OK for handoff, or launch blocked?

Decision:

2. Product & webapp fundamentals

Lock who the app is for, why it exists, and who runs it after launch before feature detail.

Users & audiences

| Question | Options / notes | Answer | | -------------------------------- | ---------------------------------------------------------------------------------------------- | ------ | | Primary visitors (read-only) | General public · students/researchers · labor-movement community · press/media · museum guests | | | Who books Rumah Singgah | Same as visitors · members/supporters only · invited guests · staff-assisted only | | | Geography / language | Indonesia · diaspora · ID-only UI (confirm) | | | Devices | Mobile-first · desktop equal · old phones / low bandwidth concern | | | Accessibility (v0) | Basic readable contrast + keyboard · formal WCAG · defer | | | Expected scale (v0) | Low (tens/month) · moderate · unknown | |

Goals & success

| Question | Answer | | ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | Main purpose of the website | Inform about museum & Marsinah · drive physical visits · enable Rumah Singgah stays · archival/education · other: ___ | | What “success” looks like by handoff (2026-05-25) | Live URL · X pages with real copy · working booking · admin trained · other: ___ | | Success 1–3 months after launch | Visitor count · bookings/month · content freshness · other: ___ | | Non-goals for v0 (confirm) | Payments · EN/JV · email automation · full archive IA · other: ___ |

Operations & maintenance

| Question | Answer | | ------------------------------------- | ----------------------------------------------------------------------------- | | Who maintains the site day-to-day | Name(s), role, organization (KSPSI / museum staff / volunteer / LumenDev) | | Who is admin in the app | Same as maintainer · separate ops vs content roles · count: ___ | | Technical comfort | Comfortable editing in admin UI · needs written guide · LumenDev does updates | | Post-launch ownership | Client self-serve · LumenDev on retainer (LumenCare) · hybrid | | Content update cadence | Rare (events only) · monthly · weekly | | Who handles booking issues | On-site contact · admin panel · WhatsApp to ___ | | Training / handoff | 30-min walkthrough · written runbook · defer until after 2026-05-25 |

Technical & data expectations

| Question | Answer | | ------------------------ | ---------------------------------------------------------------------------- | | Hosting owner | LumenDev (Vercel + Mongo) — confirm client OK | | Data ownership | Client owns booking/user data · export on request | | Privacy sensitivity | Names/emails/phones in bookings — any consent text needed on signup/booking? | | Integrations (v0) | Google sign-in · Google Maps embed · YouTube/embed · none | | Reporting (v0) | Admin list only · CSV export · analytics dashboard · defer | | Uptime / support SLA | Best effort · business hours · formal SLA (LumenCare) |

  • Single maintainer identified with backup contact if primary unavailable

Decision:

3. Auth & accounts

Baseline shipped: Google + email/password; roles **admin** / **user**. Confirm policy:

| Question | Options / notes | Answer | | ----------------------------- | -------------------------------------------------- | ------ | | Who can register | Open signup · invite-only · admin creates accounts | | | Google sign-in | Required · optional · not needed | | | Email + password | Required · optional · admin-only | | | Email verification | Required at signup · defer | | | Password reset | In-app reset email · manual admin reset · defer | | | Profile fields before booking | Name only · phone · org · ID number · none | | | User management (v0) | Admin can disable/delete users · defer | |

  • Confirm no transactional email for v0 (booking confirm, reminders) unless client insists → likely new backlog

Decision:

4. Public site — sitemap (ID)

Proposed starter pages (confirm, rename, add, drop):

| Page / section | Include v0? | Notes | | ----------------------------------- | --------------- | --------------------------------------------------------------------------------------- | | Home | propose yes | Tagline + CTAs per [[Projects/lumendev-museum-ibu-marsinah/context/content-ia-editorial | | Sejarah / tentang Marsinah | propose yes | [[Projects/lumendev-museum-ibu-marsinah/context/marsinah-subject-profile | | Lokasi & jam buka | propose yes | [[Projects/lumendev-museum-ibu-marsinah/context/museum-visit-facts | | Kontak | propose stub | Phone/email TBD with KSPSI / family | | Galeri / media | defer? | Rights TBD | | Rumah Singgah (info + link to book) | propose yes | Info page + link to booking flow | | Linimasa, tur virtual, arsip, dll. | defer | Full IA vision — content-ia-editorial | | Other: | | |

  • Navigation pattern (top nav only vs footer links)
  • Footer: social media links (which platforms, URLs)
  • Legal pages for launch: privacy · terms · none for v0
  • SEO / sharing (v0): page titles + meta description · Open Graph image · defer

Decision:

5. Content sign-off & brand

Research-backed drafts exist — client must approve, correct, or replace:

| Item | Source (draft) | Client answer | | -------------------------- | -------------------------------------------------------- | --------------------------------------------- | | Museum address & hours | museum-visit-facts | Approve · Replace: ___ | | Biography / timeline copy | marsinah-subject-profile | Approve · Replace: ___ | | Tone & sensitivity | Labor-history narrative | OK as-is · needs disclaimer · client rewrites | | Portrait / hero image | Iconic photo / archive | OK to use · client supplies · defer | | Gallery / media (if in v0) | — | OK · defer · client supplies only | | Logo & brand | Tokens in content-ia-editorial (#A21F1F, #C9A23B, …) | Use proposed · client provides assets | | Placeholder policy | Lorem / “draft” labels until sign-off | OK for 2026-05-25 · not OK |

Decision:

6. Rumah Singgah — what it is

  • Physical overnight stay at museum / Nglundo site (not symbolic-only)
  • Guest access: key handoff · contact person · rules shown on site
  • Who may book: any registered user · members only · staff-approved guests
  • Relationship to museum visit hours (10:00–17:00) vs overnight rules

Decision:

7. Rumah Singgah — capacity & monthly rules

Cross-check [[Projects/lumendev-museum-ibu-marsinah/context/rumah-singgah-booking-rules|engineering baseline]]. Per-user cap and global inventory are separate — confirm both.

| Question | Options / notes | Answer | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------ | ------ | | Global inventory | One bed/room → max one booking per calendar night (all users) · multiple units · unlimited (only per-user cap) | | | Units count (if multiple) | Number of bookable slots per night | | | Per-user monthly cap | 1 night / calendar month (baseline) · different number · rolling 30 days | | | Timezone for “month” / dates | Default Asia/Jakarta | | | Stay length | One night per booking (v0) · multi-night | | | Check-in / check-out | Times, on-site rules | | | Blackout dates | Holidays, maintenance, ad-hoc closes | | | Cancellation | User can cancel? Re-book same month after cancel? | | | Pricing | Free · paid (if paid → out of v0 / new scope) | | | Admin override | Manual booking · waive cap · block dates | |

Decision:

8. Rumah Singgah — booking UX & notifications

| Question | Options / notes | Answer | | ----------------------------- | ----------------------------------------------------------------------- | ------ | | Date selection | User picks any open future night · only admin-published available dates | | | Availability UI | Calendar · simple date list | | | Waitlist when full | Yes · no · defer | | | My bookings (user) | List upcoming/past · view only latest · defer | | | Admin notified on new booking | Email · WhatsApp/manual check only · in-app list only | | | User booking confirmation | On-screen only · email (likely out of v0) | | | Booking statuses (v0) | e.g. pending / confirmed / cancelled — which needed? | |

Decision:

9. Admin — bookings, content, users

| Question | Answer | | ------------------------------------------------------ | ----------------------------------------------------------------------------------- | | Bookings admin: list + sort by date enough? | | | Filters needed for v0 | By date · status · user email | | Export (CSV) for launch | Yes · no · post-v0 | | “Manage content” means | A) edit text/images in admin UI · B) /public + deploy · C) structured pages in DB | | Which pages/snippets admin-editable in v0 | List: ___ | | Who can be admin | Count · names · how provisioned (manual DB seed / invite) | | Admin user management | Create/disable users · defer | | Rumah Singgah: admin cancel booking on behalf of guest | Yes · no |

Decision:

10. Launch, domain & environment (2026-05-25)

  • Soft launch (Vercel URL + dev preview password) vs public launch
  • Who tests before sign-off (client contacts)
  • Domain: desired hostname, who owns DNS, ready by when
  • If domain not ready: acceptable to hand off on *.vercel.app URL?
  • Post-launch support — [[Projects/lumendev-museum-ibu-marsinah/context/commercial-recurring-budget|recurring budget]] (~Rp 840k/mo Option A or Rp 850k all-in)
  • Explicit out of v0 unless client requests: payment, i18n, analytics, rich CMS, automated emails

Decision:

11. Commercial

Framework: [[Areas/LumenDev/playbooks/project-build-pricing-framework|Project build pricing framework]]. Point anchor for this quote: Rp 500.000/point (UMKM lane — below playbook default 750k–1jt).

Effort points (pre–scope-lock — adjust after §1–§10)

| Block | Scope (known today) | Pts | | ---------------------------------------------------------------- | ------------------------ | ---------- | | Landing ID (~4–5 routes, nav, mobile) | p0-public-landing | 3–5 | | Auth (admin/user, Google + credentials) | shipped | 2 | | Rumah Singgah booking + 1 night/month cap | p0-rumah-singgah | 3 | | Admin bookings + thin CMS | p0-admin | 2–3 | | Scaffold + Vercel/Mongo prod | p0-scaffold (~half done) | 1–2 | | Feature subtotal | | 11–15 | | Requirements (auth med, Google low, light privacy, no migration) | | +5–6 | | Total points (fill Friday) | | ~17–21 |

Multipliers (propose — negotiate only via scope, not margin)

| Factor | Value | Notes | | ------------ | ---------- | -------------------------------------- | | Complexity | 1.15 | Brief incomplete until tonight | | Deadline | 1.30 | Handoff 2026-05-25 | | PM/QA buffer | 12% | Demos, smoke test, 1–2 revision rounds | | Combined | ×1.494 | 1.15 × 1.30 × 1.12 |

Build fee calculator (IDR 500.000 / point)

| Scenario | Points | Base | After multipliers | +12% buffer | Quote (round) | | ----------------------- | ------ | ---------- | ----------------- | ----------- | ----------------- | | Low (tight v0) | 17 | 8,5 jt | 12,7 jt | 14,2 jt | ~14–15 jt | | Mid (working) | 19 | 9,5 jt | 14,2 jt | 15,9 jt | ~16 jt | | High (richer admin/CMS) | 21 | 10,5 jt | 15,7 jt | 17,6 jt | ~17–18 jt |

Formula: Build = points × 500.000 × 1.15 × 1.30 × 1.12

Already delivered (show value, optional credit): auth + local scaffold ≈ 3–5 ptsRp 1,5–2,5 jt at this anchor. Remaining build ≈ 14–16 pts~Rp 13–15 jt with same multipliers.

Separate from build (do not bundle)

| Line | Indicative | | -------------------------------------- | -------------------------------------------------------------------------------------------- | | Biaya server + domain (pass-through) | ~Rp 240k/bulan — client label only; see [[Projects/lumendev-museum-ibu-marsinah/context/commercial-recurring-budget]] | | LumenCare (if client wants mg on call) | Foundation Rp 600k/bulan retainer — see [[Areas/LumenDev/playbooks/lumencare-tier-matrix]] | | Add-ons | Content entry, training, SEO — fixed per item |

Client-facing bands (tonight)

  • One-time build (v0): Rp ___ jt (suggest 14–16 jt at 19 pts + multipliers above)
  • Phase 2 (deferred IA: galeri, linimasa, email, payment): quoted later
  • Payment milestones: e.g. 50% start / 30% staging / 20% handoff
  • Invoice / payment terms
  • Quote valid until: ___

Decision:

Draft acceptance checklist (propose → agree)

Edit live with client after §1–§11. Strike items explicitly deferred.

Product & operations (§2)

  • Primary visitor audience agreed: ___
  • Rumah Singgah booker profile agreed: ___
  • Site purpose & v0 success metric agreed: ___
  • Named maintainer + admin(s): ___ · backup contact: ___
  • Post-launch ownership: self-serve · LumenCare · hybrid
  • Training/handoff plan: ___

Infra & launch

  • Site loads on prod URL (Vercel); HTTPS OK
  • Launch type agreed: soft (preview lock) · public
  • Domain / DNS: ___ (or *.vercel.app acceptable for v0)

Public site (ID)

  • Agreed pages reachable from nav: ___
  • Visitor reads museum info without signing in
  • Facts & bio match client sign-off (§5) or marked draft per agreement
  • Legal/footer items per §4 (social links, privacy if required)

Auth

  • Sign-in works: Google ___ · email/password ___
  • Registration policy works: ___
  • Profile/booking fields enforced: ___

Rumah Singgah

  • Physical stay + access rules documented (§6)
  • Global inventory rule works: ___ (e.g. one guest per night site-wide)
  • Per-user monthly cap works: ___ (e.g. second booking same month blocked, ID message)
  • Date selection / blackouts behave per §7–§8
  • Cancellation behavior per §7
  • User my bookings view: in scope · deferred
  • No payment flow for v0 (confirm)

Admin

  • admin sees bookings list (filters: ___)
  • CSV export: required · not required
  • Content updates per §9 path (demo one edit)
  • Non-admin cannot access /admin

Explicitly out of v0 (confirm with client)

  • Payment
  • Multi-language
  • Automated email (booking, reset, marketing)
  • Analytics dashboard
  • Full CMS / gallery / deferred IA sections: ___

Agreed checklist (final):

Backlog triage (fill after call)

| Backlog item | Must for 2026-05-25 | Nice | Defer / drop | Notes | | -------------------------------------------------------------------------------------------- | -------------------------- | ---- | ------------ | ----- | | [[Projects/lumendev-museum-ibu-marsinah/backlog/p0-scaffold-nextjs-repo-vercel | Scaffold + Vercel/Mongo]] | | | | | [[Projects/lumendev-museum-ibu-marsinah/backlog/p0-public-landing-pages-id | Public landing (ID)]] | | | | | [[Projects/lumendev-museum-ibu-marsinah/backlog/p0-rumah-singgah-booking-one-night-per-month | Rumah Singgah booking]] | | | | | [[Projects/lumendev-museum-ibu-marsinah/backlog/p0-admin-bookings-content | Admin bookings + content]] | | | |

New backlog items to create:

Outcome (post-meeting)

| Result | Detail | |--------|--------| | Scope lock | Not achieved — agenda §1–§11 not worked | | Client stance | Offended by posture; meeting shut down politely | | Next step (client) | “Nanti saja saya kabari” — no date, no alternate PIC named | | Handoff 2026-05-25 | At risk / assume off unless client returns | | Recovery | Single short mohon maaf (WhatsApp or channel TBD); then wait |

Raw notes

Setting: Friday night 2026-05-22 — follow-up with Pak Andi Gani Nena Wea (Presiden KSPSI / Staf Ahli Kapolri bidang ketenagakerjaan per public record).

Incident: mg crossed legs during the conversation. Client perceived this as angkat kaki (foot raised toward him) and took it as kurang hormat, especially given his Kapolri-associated role.

Client quotes (verbatim, Indonesian):

  • “Jangan gitu, saya ini Kapolri, kenapa kamu angkat kaki begitu?”
  • “Sudah-sudah, nanti saja saya kabari.”

Interpretation (vault): Not a technical or pricing objection — protocol / respect failure in his frame. “Nanti kabari” = soft close; treat commercial continuation as unlikely without a clear re-engagement.

Apology draft (for WhatsApp — send once, then stop):

Pak Andi Gani,
Terima kasih atas waktu Bapak pada pertemuan kemarin. Saya mohon maaf yang sebesar-besarnya atas sikap duduk saya yang menyinggung Bapak — sama sekali tidak ada niat kurang hormat. Saya menghormati kedudukan Bapak dan sangat menghargai inisiatif Museum Ibu Marsinah.
Jika Bapak berkenan melanjutkan, saya siap mengikuti arahan Bapak; jika tidak, saya hormati keputusan Bapak.
Hormat saya,
[Nama]

Action items

| Owner | Action | Due | | ----- | ---------------------------------------------------------------------------------------- | ----------------------------- | | mg | Send one formal apology (see Raw notes); no re-pitch / no follow-up calls | 2026-05-23 | | mg | Pause non-trivial build until client or delegated PIC confirms | 2026-05-23 | | mg | Refresh hub Status / Risks (client relationship blocker) | 2026-05-23 | | mg | Mark [[Projects/lumendev-museum-ibu-marsinah/backlog/p1-client-meeting-friday-scope-lock | p1 scope lock]] done (failed) | | mg | ~~Update client brief with decisions~~ — deferred (no decisions from call) | — |

Related

  • [[Projects/lumendev-museum-ibu-marsinah/context/client-brief-initial|Client brief — gaps checklist]]
  • [[Projects/lumendev-museum-ibu-marsinah/backlog/p1-client-meeting-friday-scope-lock|Backlog — Friday scope lock]]
  • [[Projects/lumendev-museum-ibu-marsinah/lumendev-museum-ibu-marsinah|Project hub]]