You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(README): bring through v0.14c — manual promote, issue-sync, card UX
User ask: "make sure the Web GH page is accurate and properly
demonstrates what we're doing here". Walked the README against
everything that shipped in this session and patched the gaps.
Corrections:
- Test count badge 1100+ → 1280+ (suite actually runs 1281 cases)
- Version badge 0.14.0 → 0.14c
- Headline blurb: dropped "auto-promote weekly" (autonomous cadence
was removed in v0.14b) → "one click promotes the top money-bot to
a GitHub issue".
- Added "autonomous, human-driven" operating-philosophy callout to
make the gate model explicit: nothing autonomous touches GitHub.
New material:
- Pipeline table row: "Manual promote (v0.14b)" replaces the old
"Auto-promote" row; new "Issue sync (v0.14c)" row underneath.
- Dashboard section: new "Card UX (v0.14c)" subsection — hover
tooltip, in-window modal, per-card Reject button, Churn Now and
Promote buttons each described with what they do and what they
cost.
- API table: added GET /api/ideas/{id}, POST /api/promote/{id},
GET /api/backend-info; marked the rate-limited ingest/scaffold
paths (v0.14b fix).
- Cadence env table: added FORGE_ISSUE_SYNC_INTERVAL_HOURS,
removed FORGE_AUTO_PROMOTE_INTERVAL_HOURS.
- Cadence listing block (the in-process multi-cadence scheduler
section): added issue_sync 1h, removed auto_promote 168h, plus
a paragraph explaining the cadence removal and where the runner
code lives now.
- Money-flipper config subsection retitled "v0.14b — manual" with
a one-line explanation of the change.
- Architecture src/ tree: noted auto_promote_runner.py is now
called from the manual endpoint; added issue_sync_runner.py.
- Status section: explicit list of which cadences are autonomous
(none touch GitHub state) and pointer to ROADMAP.md's top-3
next builds.
GitHub repo metadata (via gh repo edit):
- Description rewritten to highlight LLM-first + fundability +
one-click promotion + cost ($2-3/mo on Haiku, $0 on Pro Max CLI).
- Topics added: monetization, fundability, llm, haiku, sqlite-wal,
dashboard. The repo is now searchable on the relevant facets.
Co-Authored-By: Claude <noreply@anthropic.com>
An autonomous project idea generator. It runs an in-process scheduler inside the FastAPI app, calls an LLM (or falls back to deterministic heuristics), scores ideas for both feasibility and **fundability**, deduplicates aggressively, and stores everything in SQLite. A web dashboard lets a human review, approve, and optionally scaffold approved ideas into GitHub repos. As of v0.14, the engine can also auto-promote its top monetizable idea each week into a real GitHub issue with a full MVP spec — closing the loop from "idea factory" to "weekly MVP candidate shipper."
5
+
An autonomous project idea generator. It runs an in-process scheduler inside the FastAPI app, calls an LLM (or falls back to deterministic heuristics), scores ideas for both feasibility and **fundability**, deduplicates aggressively, and stores everything in SQLite. A web dashboard lets a human review, approve, and — with a single click — promote the top money-bot idea into a real GitHub issue with a full MVP spec. **Promotion is human-gated**: the engine ranks and surfaces, you approve.
6
+
7
+
> Operating philosophy: **autonomous, human-driven**. The engine generates, scores, dedups, sweeps, and audits itself on a schedule. Anything that touches external state (GitHub issues, repos) is one click away — never autonomous. The v0.14 weekly auto-promote cadence was removed in v0.14b after a uvicorn-reload bug fired it three times. Today, the Money Bots page exposes a Promote ➤ button per card; nothing else can flip an idea to `approved` without an operator.
6
8
7
9
This is a personal project that's been running for several months. It's open-sourced because some of the patterns (LLM backend abstraction, multi-stage dedup, persona-driven generation, fundability scoring, in-process multi-cadence scheduling) might be useful to others. It is not a product — there's no support, no roadmap commitment, and no SLA.
8
10
@@ -28,7 +30,8 @@ This is a personal project that's been running for several months. It's open-sou
28
30
|**Compare**| Token-overlap (Jaccard) between an idea and a GitHub repo's README + topics + description. Returns a verdict (new / enhance / duplicate). |
29
31
|**Approval check (v0.11)**| When a human flips an idea to `approved`, a non-blocking think-tank coherence checker runs: empty tech stack? mvp scope drifting from description? super-idea components with no shared theme? fake-perfect feasibility score? Results land in `approval_checks` and surface as a banner on the idea detail page. |
30
32
|**Verdict audit (v0.11)**| A "who watches the watcher" cadence samples recent LLM verdicts (challenge / review) and re-runs them with a flipped tone. Divergences land in `verdict_audits` for inspection. |
31
-
|**Auto-promote (v0.14)**| Weekly money-flipper cadence. Picks the top-`fundability_score` idea in money categories that hasn't been promoted, files a full GitHub issue (MVP spec + market analysis + tech stack), flips it to `approved`, and stamps `auto_promoted_at` so it never fires twice on the same idea. |
33
+
|**Manual promote (v0.14b)**| One click on /money-bots → POST `/api/promote/{id}` → `gh issue create` with the full MVP spec + market analysis + tech stack → idea flips to `approved` and stamps `auto_promoted_at` so re-clicks return the existing issue. The autonomous weekly cadence was removed after a uvicorn-reload bug fired it three times — promotion is human-gated now. |
34
+
|**Issue sync (v0.14c)**| Hourly cadence. Pulls live GitHub state for every approved + promoted idea via `gh issue view --json state,stateReason`. CLOSED + COMPLETED → `contributed`. CLOSED + NOT_PLANNED → `archived`. OPEN → leave alone. Keeps the dashboard honest after an operator closes an issue. |
32
35
|**Scaffold**| Calls `gh repo create`, pushes a language-appropriate template tree (Python / Rust / Go / Node), opens 3–5 starter issues from the idea's MVP scope, applies labels. |
# Start dashboard — the in-process scheduler boots with it
@@ -76,6 +79,16 @@ The "Add Idea" tab has three independent paths:
76
79
-**Text — Quick** — paste a fragment, one LLM call, get an idea.
77
80
-**5-Phase Wizard** — Discover → Differentiate → Audience → Constraints → Synthesize. Each phase asks 2–3 follow-up questions based on prior answers. Final phase produces a draft you can edit before saving.
78
81
82
+
### Card UX (v0.14c)
83
+
84
+
Every idea card across the dashboard, money-bots, super-ideas, and explore pages carries the same triage UX:
85
+
86
+
-**Hover tooltip** — 220 ms after mouse-over, a floating panel shows name + tagline + feasibility / fundability / mode pills + the first 280 chars of the description. Reads from `data-*` attributes for an instant first paint, then lazy-fetches `/api/ideas/{id}` to fill the description. Move off the card and it disappears.
87
+
-**In-window modal** — click anywhere on a card (not on a link/button) and the full idea opens in place: description, market, MVP scope, tech-stack chips, the GitHub issue if promoted, a Reject button, and a "Full page ↗" escape hatch. Backdrop / × / ESC all close. No more page navigations for just-peek-at-an-idea.
88
+
-**Per-card Reject button** — a small red × top-right of every card, invisible until you hover. Confirms via dialog, posts to `/ideas/{id}/reject`, removes the card from the DOM.
89
+
-**Churn Now button** (on /money-bots) — fires `/api/churn` for the current category filter. New idea appears in the grid after a 1.5 s reload. ~$0.003/click at Haiku.
90
+
-**Promote ➤ button** (on /money-bots, only for un-promoted ideas) — confirms, posts to `/api/promote/{id}`, files the GitHub issue, flips status to `approved`. The only path that touches GitHub state.
91
+
79
92
---
80
93
81
94
## API
@@ -88,16 +101,19 @@ A subset of the routes exposed by `web/routes.py`. There are more — see the `@
88
101
|`GET`|`/api/stats`| Aggregate counts |
89
102
|`GET`|`/api/categories`| Category counts + average score |
90
103
|`GET`|`/api/ideas`| Paginated list |
104
+
|`GET`|`/api/ideas/{id}`| JSON detail + recent challenges + 4 related ideas. Powers the hover tooltip and in-window modal (v0.14c) |
91
105
|`GET`|`/api/money-bots/top`| Top monetizable ideas (v0.14) |
92
106
|`POST`|`/api/churn`| On-demand idea generation for the money pipeline (v0.14) |
|`GET`|`/api/backend-info`| Diagnostic: which LLM backend is in use + censored view of the API-key env vars seen by the running process |
93
109
|`POST`|`/api/ideas/{id}/compare`| Compare to a repo |
94
-
|`POST`|`/api/ideas/from-url`| Ingest from URL |
95
-
|`POST`|`/api/ideas/from-text`| Ingest from text fragment |
110
+
|`POST`|`/api/ideas/from-url`| Ingest from URL (rate-limited) |
111
+
|`POST`|`/api/ideas/from-text`| Ingest from text fragment (rate-limited) |
96
112
|`POST`|`/api/ideas/builder/step`| One step of the wizard |
97
113
|`POST`|`/api/ideas/builder/save`| Save the wizard's final draft |
98
114
|`POST`|`/ideas/{id}/approve`| Move to approved (triggers the approval-check) |
99
115
|`POST`|`/ideas/{id}/reject`| Move to rejected |
100
-
|`POST`|`/ideas/{id}/scaffold`| Scaffold to GitHub |
116
+
|`POST`|`/ideas/{id}/scaffold`| Scaffold to GitHub (rate-limited) |
101
117
|`GET`|`/api/ideas/{id}/approval-check`| Read back the coherence-check result |
102
118
103
119
Non-read methods require a Bearer token when `FORGE_API_TOKEN` is set. The dashboard uses an ephemeral per-process token rendered into the page meta tag — see `web/auth.py`.
@@ -133,17 +149,19 @@ All in hours. The in-process scheduler owns these — no systemd timers required
133
149
|`FORGE_VERDICT_AUDIT_INTERVAL_HOURS`| 24 | Verdict meta-audit ("who watches the watcher") |
|`FORGE_ISSUE_SYNC_INTERVAL_HOURS`|1|v0.14c. Sync `auto_promoted_at` ideas with their live GH issue state|
137
153
|`FORGE_CHALLENGE_INTERVAL_HOURS`| 168 | Autonomous adversarial pass on top unchallenged ideas |
138
154
|`FORGE_SCHED_INITIAL_DELAY_SEC`| 60 | Boot grace period before the first tick |
139
155
|`FORGE_FEEDS_DIR`|`<db_dir>/feeds`| Where the NVD / arXiv / IETF caches live |
140
156
141
-
### Money-flipper (v0.14)
157
+
### Money-flipper (v0.14b — manual)
158
+
159
+
These knobs gate the **manual** Promote ➤ button on /money-bots and the underlying `/api/promote/{id}` endpoint. The cadence that used to read them autonomously was removed in v0.14b.
142
160
143
161
| Variable | Default | Purpose |
144
162
|----------|---------|---------|
145
-
|`FORGE_PROMOTE_CATEGORIES`|`automation-income,creator-tools,consumer-app,productivity`| Comma-separated category whitelist for auto-promotion|
146
-
|`FORGE_PROMOTE_MIN_SCORE`|`0.55`| Minimum `fundability_score` to be eligible|
163
+
|`FORGE_PROMOTE_CATEGORIES`|`automation-income,creator-tools,consumer-app,productivity`| Comma-separated category whitelist — only ideas in these categories surface on /money-bots|
164
+
|`FORGE_PROMOTE_MIN_SCORE`|`0.55`| Minimum `fundability_score`for the candidate-picker to consider the idea promotable|
147
165
|`FORGE_PROMOTE_REPO`|`<owner>/<repo>`| Where the promotion issue gets filed. Set this to a dedicated "money-bot board" repo if you want them off your main forge backlog. |
148
166
149
167
---
@@ -208,7 +226,9 @@ src/project_forge/
208
226
review_runner.py Idea-quality review cycle
209
227
challenge_runner.py Autonomous adversarial pass
210
228
verdict_audit_runner.py v0.11. Verdict meta-audit
211
-
auto_promote_runner.py v0.14. Money-flipper loop
229
+
auto_promote_runner.py v0.14. Money-flipper logic. The cadence was removed in v0.14b;
230
+
still used by POST /api/promote/{id} for the manual button.
231
+
issue_sync_runner.py v0.14c. Pulls live GH issue state for promoted ideas → DB.
212
232
scaffold/
213
233
builder.py Project structure
214
234
github.py gh CLI wrapper
@@ -224,17 +244,19 @@ There's no systemd. The original deployment shipped one timer per cron-driven cy
224
244
The defaults are tuned so a single host can run the full engine on roughly **$2–3/month** of LLM spend at Haiku 4.5 prices:
225
245
226
246
```
227
-
expand 1h cross-category + super idea generation
247
+
expand 1h cross-category + super idea generation (LLM-first)
248
+
issue_sync 1h pull live GH state for promoted ideas → DB
fundability 24h score recent ideas for monetization viability
234
-
auto_promote 168h weekly money-flipper
235
255
challenge 168h autonomous adversarial pass on top unchallenged ideas
236
256
```
237
257
258
+
There is no `auto_promote` cadence anymore. The weekly money-flipper was removed in v0.14b after a uvicorn-reload bug fired it three times in one session. The runner code at `cron/auto_promote_runner.py` stays — it's invoked by the manual `/api/promote/{id}` endpoint that the Promote ➤ button on /money-bots POSTs to.
259
+
238
260
Each cadence is overridable via env (see the table above). The scheduler honours per-cadence watermarks (e.g. `expand` consults `MAX(generated_at)` so a manual `forge-generate` resets the clock), so frequent restarts don't double-fire.
239
261
240
262
---
@@ -341,7 +363,9 @@ CI runs the same on a self-hosted runner.
341
363
342
364
## Status
343
365
344
-
Active. The in-process scheduler fires generation hourly, fundability scoring + verdict audits daily, and the money-flipper weekly. The dashboard at the operator's host shows live activity. Issues / PRs welcome but not necessarily merged on any timeline — see `CONTRIBUTING.md` and `SECURITY.md`.
366
+
Active. The in-process scheduler fires generation hourly, issue-sync hourly, fundability scoring + verdict audits + feed refresh daily, and the autonomous challenge cadence weekly. Promotion to GitHub is human-gated via the Promote ➤ button on /money-bots. Issues / PRs welcome but not necessarily merged on any timeline — see `CONTRIBUTING.md` and `SECURITY.md`.
367
+
368
+
See `ROADMAP.md` for the v0.15+ plan — top three: Stripe revenue webhook (so the engine learns which categories actually convert), an edge-finder pre-pass (Haiku-derived "fresh angles" injected as anti-tropes before each generation), and auto-scaffold of the promoted idea into a real starter repo (close the loop from "approved" → "running MVP" without an operator click).
0 commit comments