Property Dossier — Delivery Pipeline
Goal: €299 dossier, 48-hour turnaround, under 2 hours of Joshua’s time per dossier. Everything else is agent work.
Overview
Intake (Tally) ──> Payment (self-serve, on Tally thank-you page for Berlin/Paris)
──> Kickoff check (5 min) ──> Agent research pass (0 min human)
──> Joshua review + verdict (60-75 min) ──> Polish + render (agent) ──> Delivery (10 min)
──> Optional 15-min call
(city = "Other" only: manual triage + emailed payment link, <2h SLA 08:00–22:00 CET)
Joshua’s time budget per dossier: ~90-105 minutes.
Stage 1 — Intake (client, 5 min; Joshua, 0 min)
- Client fills the Tally form (14 questions — spec is in the HTML comment at the bottom of
index.html). - Tally sends a notification email + (later) webhook.
- The
sourcehidden field tells us which channel converted.
Stage 2 — Payment & kickoff check (Joshua, ~5 min)
Payment is self-serve for Berlin/Paris: the Tally thank-you page conditionally embeds the Stripe Payment Link when Q3 = Berlin or Paris (the city dropdown already screens scope — no reason to make a hot buyer wait hours for a human). Spec: index.html HTML comment, “AFTER-SUBMIT”.
- On payment notification: send the Order confirmation / kickoff email (template in
OUTREACH.md) to EVERY paying client — it restates the immediate-performance request, the
withdrawal acknowledgment, and the guarantee on a durable medium (§ 312f BGB / Art. 8(7) CRD;
Stripe’s receipt doesn’t do this). Then the 5-minute kickoff check — listing link alive?
goal coherent? intake complete? Listing count matches the product paid? (€299 = 1 listing;
€749 bundle = 2-3 listings in Q4. Bundle payment with fewer links → the kickoff email’s bundle
paragraph asks for the rest; each dossier’s clock starts when its listing lands.) If anything
is broken (dead listing, gibberish intake, out-of-scope after all), refund in full before
any work starts — that right is stated on the thank-you page and in the terms
(
impressum.html#agb). - Confirm the Q13b immediate-performance/withdrawal checkbox is ticked (Tally requires it, but verify on the first few — it’s the legal basis for starting inside the 14-day window).
- Capacity toggle: if this payment makes 2 dossiers in flight, edit the Berlin/Paris Tally thank-you pages NOW (2 minutes, live instantly): remove the Stripe buttons, show “At capacity — your slot opens [DATE]; we’ll email your payment link the moment it does, and your 48-hour clock starts then.” Flip back when a slot frees. (Exact copy in the index.html intake-spec comment, “CAPACITY TOGGLE”.)
- Drop the intake answers into a new dossier working directory:
dossiers/YYYY-MM-DD-<city>-<slug>/intake.md
city = “Other” only: manual triage. Reply within 2 hours (08:00–22:00 CET) with yes/no; if yes, send the payment-link email (template in OUTREACH.md → “Payment email”). If no → polite decline, nothing charged.
Stage 3 — Agent research pass (Claude Code, 0 min human)
Kick off a single Claude Code session with the intake file. One prompt, five research jobs, all output to research.md in the dossier directory:
- Listing extraction — pull every fact from the listing URL/exposé: price, m², rooms, floor, year, energy class (DPE/Energieausweis), charges/Hausgeld, taxe foncière/Grundsteuer, features. Note what the listing conspicuously omits.
- Comparables & price/m² — 6-10 genuinely comparable units (same district, ±20% size, similar condition/floor) from: - Paris: DVF (demandes de valeurs foncières — actual closed sales, free public data), MeilleursAgents/SeLoger/PAP for current asks, notaires de Paris quarterly price/m² by quartier. - Berlin: Gutachterausschuss Kaufpreissammlung (actual sales), ImmoScout24/Immowelt current asks, Guthmann market reports by Ortsteil, current Mietspiegel. - Output: closed-sale price/m² range, current-ask range, where this listing sits, price history of this listing if findable (reductions = leverage).
- Rental yield model — three rent scenarios (conservative/base/optimistic) grounded in actual comparable rental listings; full operating-cost stack (charges, property tax, insurance, management %, vacancy, maintenance reserve); gross and net yield. Flag rent-control exposure: Mietpreisbremse/Milieuschutz coverage for the Berlin address, encadrement des loyers reference rents for the Paris quartier — and the legal structures that route around them where applicable (bail civil for corporate tenants, furnished vs. unfurnished).
- Red-flag scan — - Energy class + coming rental restrictions (FR: DPE G/F/E ban timeline; DE: GEG/heating replacement exposure). - Building: year, facade/roof works cycle, elevator, known planned works, plausibility of stated charges (too-low = underfunded reserves). - Legal: Milieuschutz district? Vorkaufsrecht risk? copropriété procedures / WEG-Protokolle to request. - Seller dynamics: developer flip? estate sale? how long listed? price cuts? - District: noise, construction projects, transit changes (BVG/Grand Paris Express lines can move value both ways).
- Tax & structure notes — the 2-3 structures locals commonly consider for this property type (DE: private vs. GmbH, 10-year speculation period, AfA depreciation, Grunderwerbsteuer by Land; FR: LMNP réel, SCI, bail civil, frais de notaire ancien/neuf), each with one paragraph of general information — pros, cons, and the questions to ask your advisor. Never phrase as a personal recommendation (“you should use LMNP réel” is forbidden; “buyers with a corporate-tenant strategy commonly evaluate LMNP réel — ask your fiscaliste about X and Y” is the register). This keeps the product clearly on the market-research side of §§ 2, 5 StBerG (unauthorized Steuerberatung) and the French conseil-juridique rules. Keep the “verify with your advisor” flag on every item.
Agent rules: every number carries a source URL; anything unverifiable is marked ESTIMATE; no invented comps — fewer honest comps beat ten fabricated ones. The agent also drafts the full dossier HTML from the template (see Stage 5) so Joshua reviews a rendered document, not raw notes.
Stage 4 — Joshua review + verdict (Joshua, 60-75 min)
This is the product. The agent produces evidence; Joshua produces judgment.
Checklist: - [ ] Spot-check the 5 most load-bearing numbers (price/m² claims, top comp, base-case rent, biggest cost line, energy-class fact) against their source links. - [ ] Kill anything that smells like hallucination; downgrade weak comps. - [ ] Score the client’s must-haves (intake Q8) → green/amber/red scorecard with one-line reasoning each. - [ ] Write the negotiation section personally: target price, the 2-3 arguments that justify it, the exact questions to send the agent/seller. - [ ] Write the verdict personally: buy / negotiate / walk, in Joshua’s voice. This paragraph is why the product costs €299 instead of €0. - [ ] Fill the follow-up checklist (documents to request before notary: AG minutes / WEG-Protokolle, Teilungserklärung, diagnostics, garantie décennale, Energieausweis, etc.).
Anything Joshua can’t verify in the time budget gets moved to “Follow-up items” rather than stated as fact. That’s a feature: the checklist is deliverable value.
Stage 5 — Polish + render (agent, 0 min human)
- Agent applies Joshua’s edits, renders final HTML from the dossier template (same skeleton as
sample-dossier.html— cover, inspection/listing analysis, overview, scorecard, financials, risks, verdict) and prints to PDF (A4, the template is print-ready). - File naming:
Unicorn.Land-Dossier-<City>-<YYYY-MM-DD>.pdf. - Agent drafts the delivery email (template in OUTREACH.md).
Stage 6 — Delivery (Joshua, ~10 min)
- Final skim of the PDF (2 min — formatting, no placeholder text, client name correct).
- Send delivery email with PDF + HTML attached, offer the 15-min call with a scheduling link (Cal.com free tier).
- Log in
dossiers/LEDGER.md: date, city, source channel, payment, delivery time vs. 48h promise, guarantee invoked Y/N. - T+7 days: one-line follow-up email — “Did you make an offer? Reply if anything in the dossier needs a second look.” (Doubles as testimonial farming.)
Stage 7 — Optional call (Joshua, 15 min, only when booked)
15 minutes, hard stop. Walk the verdict, answer questions, do not do live re-research. New questions that need research → one follow-up note by email (10 min cap) or a paid second dossier.
Time accounting (per dossier)
| Stage | Owner | Time |
|---|---|---|
| Kickoff check (payment is self-serve) | Joshua | 5 min |
| Research pass + draft | Agent | 0 min (≈1-2 h wall clock) |
| Review + verdict | Joshua | 60-75 min |
| Polish + render | Agent | 0 min |
| Delivery + log | Joshua | 10 min |
| Call (if booked) | Joshua | 15 min |
| Total Joshua | ~90-105 min |
Effective rate at €299 (gross; see README VAT note for the net column decision): €170-200/hour. Bundle (3 × dossier at €749) improves this — shared district research across finalists.
Capacity & failure modes
- Capacity: review is the bottleneck → max 2 dossiers/day, ~10/week comfortably alongside other work. At 2 in flight, flip the Tally thank-you capacity toggle (Stage 2 step 3) so the FAQ’s “we tell you before work starts” promise stays true.
- 48h at risk: tell the client before the deadline, offer 24h extension + €50 refund, or full refund. Never deliver thin to hit the clock.
- Listing goes offline mid-research: proceed from cached exposé; note it in the dossier (an offline listing is itself signal — ask the agent why).
- Guarantee invoked: refund fast and without argument, ask one question — “what did you already know that we told you?” — and feed the answer back into the research prompt.
- Out-of-scope city sneaks through: refund, apologize, offer a best-effort dossier at no charge only if Joshua actually knows the market.
Assets to build after the first 3 paid dossiers (not before)
dossier-template.htmlextracted fromsample-dossier.htmlwith{{placeholders}}.- A reusable research prompt file per city (
research-prompt-berlin.md,research-prompt-paris.md). - Tally → webhook → auto-create dossier directory (skip while volume is low; manual is fine).