← back to AbramsEgo
spend-reviews: remove from AbramsEgo (moved to personal AbramsOS) — TK-11433
c5fe399787be59826c1fee1d0f57d82afc3af173 · 2026-09-11 10:23:29 -0700 · Steve
Feature belongs in AbramsOS (~/Projects/AbramsOS /reviews), not AbramsEgo. Unmounted the /api/spend router + removed the #spend-card panel from the dashboard. lib/spend-reviews/ left on disk (unmounted, harmless) for history.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QA2Se1HgCv8KSZbUQD6w2p
Files touched
M public/index.htmlM server.js
Diff
commit c5fe399787be59826c1fee1d0f57d82afc3af173
Author: Steve <steve@designerwallcoverings.com>
Date: Fri Sep 11 10:23:29 2026 -0700
spend-reviews: remove from AbramsEgo (moved to personal AbramsOS) — TK-11433
Feature belongs in AbramsOS (~/Projects/AbramsOS /reviews), not AbramsEgo. Unmounted the /api/spend router + removed the #spend-card panel from the dashboard. lib/spend-reviews/ left on disk (unmounted, harmless) for history.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QA2Se1HgCv8KSZbUQD6w2p
---
public/index.html | 32 --------------------------------
server.js | 14 ++++----------
2 files changed, 4 insertions(+), 42 deletions(-)
diff --git a/public/index.html b/public/index.html
index 48784fb4..2fb312e6 100644
--- a/public/index.html
+++ b/public/index.html
@@ -408,38 +408,6 @@
<div id="crongrid" style="display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;max-height:560px;overflow:auto"></div>
</section>
- <!-- SPEND → REVIEWS (panel 9, TK-11433) — auto-review businesses Steve buys from -->
- <section class="card span12" id="spend-card">
- <h2>🧾 Spend → Reviews <span class="muted" id="spend-sub">· thank the businesses you buy from · <b style="color:var(--gold)">every post/send is per-item gated</b></span></h2>
- <div style="display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px">
- <button type="button" data-ingest="amazon">⬇ Ingest Amazon</button>
- <button type="button" data-ingest="gmail">✉ Scan Gmail receipts</button>
- <label class="btnlike" style="cursor:pointer;padding:6px 10px;border:1px solid var(--line,#2a2f3a);border-radius:6px;font-size:12px">⬆ Upload statement CSV<input type="file" id="spend-csv" accept=".csv,text/csv" style="display:none"></label>
- <button type="button" id="spend-resolve">↻ Resolve + Draft all</button>
- <button type="button" id="spend-memo">📝 Draft approval memo</button>
- <span class="muted" id="spend-note" style="font-size:11px"></span>
- </div>
- <div id="spend-ctl"></div>
- <div id="spendgrid" style="max-height:640px;overflow:auto"></div>
-
- <!-- BATCH REVIEW LENS (added, not a replacement for the card grid) -->
- <div style="margin-top:12px;border-top:1px solid var(--line,#242a35);padding-top:10px">
- <div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center">
- <button type="button" id="spend-batch-toggle">▤ Batch review</button>
- <span class="muted" style="font-size:11px">review every draft on one screen · select · approve in one pass · posting stays per-item & paced</span>
- </div>
- <div id="spend-batch" style="display:none;margin-top:10px">
- <div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:8px">
- <label style="font-size:12px"><input type="checkbox" id="spend-batch-all"> select all</label>
- <select id="spend-batch-filter" style="font-size:12px"><option value="draftable">Needs approval</option><option value="approved">Approved (ready to post)</option><option value="all">All draftable</option></select>
- <button type="button" id="spend-batch-approve">✔ Approve selected</button>
- <button type="button" id="spend-batch-post">📤 Post approved (paced, gated)</button>
- <span class="muted" id="spend-batch-note" style="font-size:11px"></span>
- </div>
- <div id="spend-batch-list" style="max-height:560px;overflow:auto;display:grid;gap:8px"></div>
- </div>
- </div>
- </section>
<!-- AI CHAT -->
<section class="card span12 chat">
diff --git a/server.js b/server.js
index bda668a5..1738a23c 100644
--- a/server.js
+++ b/server.js
@@ -987,8 +987,7 @@ async function doBuild() {
wins: summarizeWins(wins),
officers: summarizeOfficers(officers),
cost, budgets, revenue, pnl, usage,
- // Spend → Reviews panel summary (counts only; full items via /api/spend/items)
- spendReviews: (() => { try { return require('./lib/spend-reviews/router').summary(); } catch (e) { return { error: e.message }; } })(),
+ // Spend → Reviews moved to the personal AbramsOS app (/reviews) — TK-11433. Panel removed here.
// compact form folded into the snapshot for at-a-glance headers
usageSummary: {
activeSessions: usage.sessions && usage.sessions.active,
@@ -1182,14 +1181,9 @@ app.post('/api/dispatch', async (req, res) => {
});
// ── Spend → Reviews (TK-11433) ───────────────────────────────────────────────
-// Mounted AFTER the Basic-Auth middleware, so every /api/spend/* route is gated.
-// Ingestion + resolver + drafts + queue are reversible LOCAL code; the post/send
-// executors are per-item human-gated inside the module (executors.js). Loaded
-// defensively so a module error can never take down the dashboard.
-try {
- const spendReviews = require('./lib/spend-reviews/router');
- app.use('/api/spend', spendReviews.router);
-} catch (e) { console.error('[spend-reviews] router mount failed:', e.message); }
+// Spend → Reviews was MOVED to the personal AbramsOS app (~/Projects/AbramsOS,
+// /reviews) — TK-11433. Router intentionally NOT mounted here anymore; the
+// lib/spend-reviews/ files remain on disk (unmounted, harmless) for history.
const REVENUE_ENGINES = ['sell_product', 'affiliate', 'billable_work', 'ads', 'licensing'];
app.post('/api/revenue/record', async (req, res) => {
← 79d5a95a auto-data-snapshot: 2026-09-11T10:08:53 (1 data files) — dat
·
back to AbramsEgo
·
scripts: .env cleanup launcher (spend-reviews moved to Abram 7462db51 →