[object Object]

← back to Commercialrealestate

Daily 6am top-10 report -> steve-office via George (launchd)

c09a42658f732d5d7f6506ba3f7820bc0ab25296 · 2026-06-21 18:07:31 -0700 · Steve

- scripts/run-morning-report.sh: re-rank (analyze.js) + build (morning-report.js) + email via George CLI
- deploy/com.steve.cre-morning-report.plist: launchd 6:00 America/Los_Angeles (loaded + verified send)
- recipient steve-office = steve@designerwallcoverings.com

Files touched

Diff

commit c09a42658f732d5d7f6506ba3f7820bc0ab25296
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun Jun 21 18:07:31 2026 -0700

    Daily 6am top-10 report -> steve-office via George (launchd)
    
    - scripts/run-morning-report.sh: re-rank (analyze.js) + build (morning-report.js) + email via George CLI
    - deploy/com.steve.cre-morning-report.plist: launchd 6:00 America/Los_Angeles (loaded + verified send)
    - recipient steve-office = steve@designerwallcoverings.com
---
 data/ranked.json                          |  2 +-
 deploy/com.steve.cre-morning-report.plist | 26 ++++++++++++++++++++++++++
 scripts/run-morning-report.sh             | 20 ++++++++++++++++++++
 3 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/data/ranked.json b/data/ranked.json
index ae405d1..9132657 100644
--- a/data/ranked.json
+++ b/data/ranked.json
@@ -21,7 +21,7 @@
     "amortYears": 30,
     "closingPct": 2.5
   },
-  "generated": "2026-06-21",
+  "generated": null,
   "ranked": [
     {
       "id": "canby7304",
diff --git a/deploy/com.steve.cre-morning-report.plist b/deploy/com.steve.cre-morning-report.plist
new file mode 100644
index 0000000..87acdb3
--- /dev/null
+++ b/deploy/com.steve.cre-morning-report.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>Label</key>
+  <string>com.steve.cre-morning-report</string>
+  <key>ProgramArguments</key>
+  <array>
+    <string>/bin/zsh</string>
+    <string>/Users/stevestudio2/Projects/commercialrealestate/scripts/run-morning-report.sh</string>
+  </array>
+  <key>StartCalendarInterval</key>
+  <dict>
+    <key>Hour</key>
+    <integer>6</integer>
+    <key>Minute</key>
+    <integer>0</integer>
+  </dict>
+  <key>RunAtLoad</key>
+  <false/>
+  <key>StandardOutPath</key>
+  <string>/tmp/cre-morning-report.out</string>
+  <key>StandardErrorPath</key>
+  <string>/tmp/cre-morning-report.err</string>
+</dict>
+</plist>
diff --git a/scripts/run-morning-report.sh b/scripts/run-morning-report.sh
new file mode 100755
index 0000000..667bd18
--- /dev/null
+++ b/scripts/run-morning-report.sh
@@ -0,0 +1,20 @@
+#!/bin/zsh
+# Daily SFV CRE Top-10 report -> emailed to steve-office (steve@designerwallcoverings.com) via George.
+# Wired to launchd com.steve.cre-morning-report (06:00 America/Los_Angeles).
+# Local + free: analyze.js re-ranks (Qwen local), morning-report.js builds the HTML; one George email out.
+export PATH="/usr/local/bin:/opt/homebrew/bin:$HOME/.npm-global/bin:$HOME/.claude/local:$PATH"
+cd "$HOME/Projects/commercialrealestate" || exit 1
+LOG=/tmp/cre-morning-report.log
+echo "===== run $(date) =====" >> "$LOG"
+
+/usr/local/bin/node scripts/analyze.js >> "$LOG" 2>&1
+REPORT_DATE="$(date +%Y-%m-%d)" /usr/local/bin/node scripts/morning-report.js > data/morning-report.html 2>> "$LOG"
+
+TODAY="$(date +%Y-%m-%d)"
+PROMPT="Read /Users/stevestudio2/Projects/commercialrealestate/data/morning-report.html and send its FULL contents as the HTML body of an email using the mcp__george__gmail_send tool with account 'steve-office' to steve@designerwallcoverings.com. Subject: 'SFV CRE - Top 10 Opportunities ($TODAY)'. Send the HTML exactly as-is; do not summarize, truncate, or modify it. Sending that one email is the ONLY action to take."
+
+"$HOME/.npm-global/bin/claude" -p "$PROMPT" \
+  --allowedTools "Read" "mcp__george__gmail_send" \
+  --dangerously-skip-permissions >> "$LOG" 2>&1
+
+echo "===== done $(date) =====" >> "$LOG"

← de42fa5 Add daily morning-report generator (top 10 SFV CRE opportuni  ·  back to Commercialrealestate  ·  Weekly Crexi refresh job + 38 new SFV listings (62 total) fc9d273 →