Public: anyone can read this; the crew can change it.

Each new README walkthrough step names the sample listing where the realtor sees it, and the steps are numbered once each #105

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

mason/listing-launch:mason/102-each-new-readme-walkthrough-step-names-t → main 1 commit fork

  • Merged. mason/102-each-new-readme-walkthrough-step-names-t was merged into main as 0cc8da2.

Review

Sign in to review this change.
2 files changed +47 −14
README.md +18 −14
@@ -137,7 +137,7 @@ to make a listing of your own.
137137 link and a row per asset, each with "Approved by … on …" and its words, or
138138 "Draft — not approved yet" with no words. Print it at the end of the meeting. In the terminal, `R` on an open
139139 listing shows the same report, approved words only.
140 14. **See the launch week.** Press **Launch week** on a listing: a day-by-day
140 15. **See the launch week.** Press **Launch week** on a listing: a day-by-day
141141 plan of which asset goes out when — the Coming soon teaser, launch day (MLS,
142142 social posts, email blast), price and status posts, and for each open house
143143 a reminder post the day before and the open house itself. Each row links to
@@ -147,40 +147,44 @@ to make a listing of your own.
147147 time, no time zones), launch day being the day the listing was created.
148148 Nothing is sent; the app only drafts. In the terminal, `w` on an open
149149 listing shows the same plan as text.
150 15. **Draft the seller update.** Open the **Seller update** tab on a listing: a
150 16. **Draft and approve the seller update.** Open the **Seller update** tab on *412 Alder Lane* to read one, then use
151 the listing you made in step 3 to approve one: the sample listings belong
152 to the sample agent, and only a listing's own agent can approve its words.
153 It is a
151154 weekly email to the seller, written in the agent's name from what the app
152155 knows — the address and status, every asset approved in the last seven
153156 days (who and when), what the launch week has in the next seven days, the
154157 open house dates and the property page link. Edit it, read the Fair Housing
155 check, then **Approve** it like any asset; until then it wears "Draft — not
158 check, then press **Approve** like any asset; until then it wears "Draft — not
156159 approved". It follows approvals while it is an unedited draft, and editing
157160 the facts or the status clears its approval. An assistant cannot approve it.
158161 In the terminal it is the last asset of the listing: `j` to it, `a` to approve
159162 or withdraw. The seller report leaves it out; it is a note, not something
160163 that goes out.
161 16. **See the coming week.** Press **This week** above the list on the first
164 17. **See the coming week.** Press **This week** above the list on the first
162165 screen: the next seven days, a section for each day, with every listing's
163166 posts, emails and open houses that go out that day, and who approved each
164167 (or Draft). At the top, **Still needs approval** names each listing with
165168 some of its words not yet approved, such as "3 of 7 approved". *412 Alder
166 Lane* shows its open house there. **Add to calendar** puts the same week
169 Lane* is on this page now: its launch day rows, each marked "Approved by
170 Morgan Reyes (sample)". *27 Birchwood Court* and *88 Meridian Street* are
171 under **Still needs approval**, with their drafts. (Alder Lane's open house
172 is in March, so it joins the week when that date comes within seven days.) **Add to calendar** puts the same week
167173 in your calendar. Nothing is sent from this page.
168 17. **Write down a showing.** On your own listing, scroll to **Showings**.
174 18. **Write down a showing.** Use the listing you made in step 3: a showing log is only
175 visible to the listing's own agent, so the sample listings, which belong to
176 the sample agent, show you none. Scroll to **Showings**.
169177 Leave the day as today, type the buyer's agent if you know them, pick how
170178 interested they were (Not interested, Maybe, Interested or Offer likely),
171179 write one line of what they said and press **Log showing**. It lands at the
172180 top of the list, newest first, and the first screen now shows "1 showing"
173181 beside your listing. **Remove** takes it back out. Only you see this log:
174 it is not on the property page, the flyer or the email. (The sample
175 listings belong to the sample agent, so their showings are hers to see.)
176 18. **Approve the seller update.** On your listing open the **Seller update**
177 tab: the weekly email to your seller, already written, with what you
178 approved this week in it. Read it, then press **Approve**. Until you do, it says "Draft — not approved".
179 19. **Paste the property page link.** On a listing, copy the property page
180 link (the **Copy** button) and paste it into a text or a post: the phone
182 it is not on the property page, the flyer or the email.
183 19. **Paste the property page link.** Open *412 Alder Lane* and copy its property page
184 link (the **Copy** button), or just open it on a phone, and paste it into a text or a post: the phone
181185 shows a preview with the address, the price, the beds and baths and the
182186 first photo. *412 Alder Lane* is approved, so its link works for anyone;
183 yours shows a page only once you approve the MLS description.
187 the listing you made shows a page only once you approve its MLS description.
184188
185189 `src/walkthrough.test.ts` walks these steps on every `bun test`, so this
186190 list cannot drift from the app.
src/walkthrough.test.ts +29
@@ -272,6 +272,35 @@ test("the week, a showing, the seller update and the link preview, as the sectio
272272 const sample = idOf(home, "412 Alder Lane");
273273 const mine = `/listings/${idOf(home, "9 Walkthrough Way")}`;
274274
275 // The numbering counts up once each: no number repeats, none is skipped.
276 const numbers = [...readme.slice(readme.indexOf("## Try it in five minutes"), readme.indexOf("## For the agent")).matchAll(/^(\d+)\. \*\*/gm)].map((m) => Number(m[1]));
277 expect(numbers.length).toBeGreaterThan(10);
278 expect(numbers).toEqual(numbers.map((_, i) => i + 1));
279 // Steps that name a sample say where it is seen, and the agent-only ones send the realtor to their own listing.
280 for (const step of ["seller update", "showing"])
281 expect(section).toMatch(new RegExp(`${step}[^]*?the listing you made in step 3`, "i"));
282 expect(section).toContain("Open the **Seller update** tab on *412 Alder Lane*");
283 // The seller update step is one step.
284 expect(section.match(/\*\*(?:Draft and approve|Approve) the seller update/g)?.length).toBe(1);
285 expect(section).not.toContain("**Approve the seller update.**");
286 // The samples the coming-week step names are on the week as it says: Alder Lane approved, the others waiting.
287 const sampleWeek = await (await get("/week")).text();
288 const [, waiting, days] = /^([^]*?)<ol class="schedule-days">([^]*)$/.exec(sampleWeek)!;
289 expect(section).toContain("Approved by Morgan Reyes (sample)");
290 expect(days).toMatch(/412 Alder Lane[^]*?Approved by Morgan Reyes \(sample\)/);
291 expect(waiting).not.toContain("412 Alder Lane");
292 for (const name of ["27 Birchwood Court", "88 Meridian Street"]) {
293 expect(section).toContain(name);
294 expect(waiting).toContain(name);
295 }
296 // Its open house is shown where a visitor sees it now: the flyer, in March.
297 expect(section).toContain("open house is in March");
298 expect(await (await get(`/listings/${sample}/flyer`)).text()).toContain("March 7");
299 // The sample's seller update can be read where the step says, but approving it is the sample agent's.
300 const aldersUpdate = await (await get(`/listings/${sample}`)).text();
301 expect(aldersUpdate).toContain('id="email_update"');
302 expect(/<section class="asset" id="email_update"[^]*?<\/section>/.exec(aldersUpdate)![0]).not.toMatch(/formaction="[^"]*email_update\/approve"/);
303
275304 // 16. The coming week.
276305 for (const label of ["This week", "Still needs approval", "Add to calendar"]) expect(section).toContain(label);
277306 expect(home).toMatch(control("This week"));

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs