The idea: run your job search like a founder runs growth
Status: vision only — not started
Gate: begins after oll.in's first stranger franc
Read this first — honesty framing. Platform 3.0 is a future north-star, not in-progress work. Nothing here starts until oll.in takes its first stranger franc (the CHF 29 Bewerbungsfoto on-ramp). It is not a second vertical — it's the same technique deepening the oll.in job vertical. The current single priority remains the first franc; everything below waits behind that line. One exception worth pulling forward: the always-warm job corpus below is also a conversion mechanic — land → see real matched jobs — so its front door earns an early look.
The always-warm job corpus the beating heart of 3.0
Every pillar below serves one concrete mechanism: a continuously-scouted, RAG-indexed corpus of real, live job postings that is always fresh and always warm. Because a cron keeps it pre-loaded, a visitor lands and immediately sees real, relevant, matched jobs they can apply to in a few clicks — Ollie prepares the dossier, you approve and send. That kills the cold-start "empty app" problem that murders job tools: the product is alive on arrival.
① scout & warm the corpus — on cron, always
Act · cron
Scout
fresh postings
OpenCLAW · legal job APIs
→
embed
Vectorize
every posting
Model · nomic-embed-text
→
RAG store
Job corpus
live & warm
Memory · pgvector
② match against you — two corpora, RAG on both sides
live
Job corpus
the postings
⇄
semantic match
⇄
yours
Experience corpus
CV · history
③ instant value on arrival → apply
landing
Matched jobs
real, on arrival
→
apply
Ollie prepares
CV + letter dossier
→
you
Approve & send
final submit is yours
↺ every view · skip · apply is an interaction signal that re-scores ranking & suggestion — feeding the Measure substrate so recall improves the more you use it.
- Continuous scout (cron). OpenCLAW runs on a schedule (hourly / daily) and pulls fresh postings from legal job APIs — Adzuna, Arbeitnow, Jooble — never scraping ToS-restricted boards (LinkedIn, jobs.ch). Cache minimally, attribute the source, link out to it, delete stale listings.
- RAG the jobs. Each scouted posting is embedded (Model ·
nomic-embed-text) and stored in the Memory spine (pgvector) as a live JOB corpus that's always fresh and warm — not fetched on demand.
- Two corpora, RAG on both sides. Memory now holds (1) the user's experience corpus (CV / history — grounding for applications) and (2) the live jobs corpus (recall + suggestion). Matching = retrieve postings semantically relevant to the person's own corpus — fast recall + personalized suggestion that sharpens as they interact.
- Instant value — the killer UX. Because cron pre-warms the corpus, the visitor doesn't wait: they arrive to real matched jobs. Alive on arrival kills cold-start. It's also a conversion mechanic — which is why, though the full machine is 3.0, land → see real matched jobs is worth pulling forward.
- Signals feed back. Interactions re-score ranking and suggestion — this is where the corpus becomes Measure's substrate and the loop starts to learn.
Where this lands on the pillars. The scout concretizes Act — it isn't on-demand, it runs proactively on cron — and the RAG corpus + interaction signals give Measure its substrate. Distribute (Postiz "get found") and Prove (verified track record) stay exactly as framed below.
Honesty, kept. Legal-API-sourced postings only; minimal caching; every listing attributes + links out to its source; stale listings are deleted. No scraping of ToS-restricted boards. And the apply step stays prepares → you approve → you send: Ollie assembles the dossier; the final submit is the user's wherever a platform requires it. Full 3.0 is still deferred behind the CHF 29 first franc — only the instant-jobs-on-landing front door is flagged as the pull-forward-worthy conversion piece.
The pieces this rides on already exist and compose: the Memory spine (pgvector + nomic embeddings), the agent seam (OpenCLAW cron + scout), and Model (embeddings + generation). The genuinely-new bits are small and additive — see the reuse-vs-build ledger.
The 1.0 → 2.0 → 3.0 arc where 3.0 sits
oll.am's story is three moves. Each earned the next. 3.0 is the one that hasn't started.
1.0
stateless tools
Two frozen spines — Core (identity + billing) and Model (any model behind one seam) — serving stateless tools. Competent, generic, done.
Live
2.0
it knows you & acts
+ the Memory spine + the agent seam. The platform now knows you and can act — proven live: OpenCLAW → oll-mcp → products.
Live
3.0
the closed growth loop
The product measures its own results, proves them, and distributes them autonomously — a founder's growth stack, pointed at a person's career.
Future — deferred
Platform 2.0 made a platform that knows you and acts. Platform 3.0 makes it measure its own results and grow itself.
— the one-line difference
The technique is not new — it's exactly what the indie-founder growth stack does to a product. 3.0 points that same machine at a person's career: run your job search like a founder runs growth. Siblings: Platform 2.0 (the spines & seam that make this possible) · The Agent Seam · The Constellation (what's already on the box).
The four pillars the growth machine, decomposed
The indie-founder growth stack is four moves — Measure what makes money, Prove it un-fakeably, Act on it autonomously, Distribute the result. Each has a reference product. For each, here's what it is, its signature move, and its job-search equivalent.
MeasureDataFastdatafa.st · Marc Lou
Revenue-first analytics: attributes every dollar to the exact traffic source — not pageviews — with funnels, a live purchase-probability score, and an "AI analyst" reachable over CLI + MCP. Stack: ShipFast/Next.js + Tinybird (managed ClickHouse) event store; per-event pricing ($9–19/mo).
"Which marketing actually makes money."
→ oll.in: job-search analytics — applications sent, response/ghost rate, interview-conversion %, and which CV variant / role-type / channel converts. Its substrate is the live job corpus + interaction signals above (every view/skip/apply re-scores ranking). A DataFast-style dashboard for a career funnel.
ProveTrustMRRtrustmrr.com · Marc Lou
Un-fakeable revenue verification: founders paste a read-only payment key, it syncs aggregate only, refreshed hourly. Public MRR leaderboard, an embeddable auto-updating badge, a directory with a DR-67 dofollow backlink; doubles as an acquisition marketplace. Free listing + paid add-ons.
Verified — not self-reported — revenue as a trust primitive.
→ oll.in: a verified track record — a seeker's third-party-verifiable progress (real interviews, offers, shipped work) as a credential recruiters trust; plus oll.in's own build-in-public traction as proof the machine works. (oll-am is already TrustMRR-listed, Stripe-verified.)
ActOpenCLAWgithub.com/openclaw · MITLive on the box
A local-first, always-on agent gateway: one daemon fans one agent across ~25 chat channels, made proactive by cron + webhooks + Gmail push, with skills (SKILL.md), browser automation, and MCP both directions (client + mcp serve). Node/TS, Docker sandbox, provider-agnostic.
Turns a coding-agent loop into an always-on, multi-channel, proactive gateway.
→ oll.in: the job agent's brain — the continuous scout that warms the corpus above: on cron it pulls postings from legal job APIs (Adzuna / Arbeitnow / Jooble), then match → prepare CV + letter + interview prep; proactive on cron (new postings) + webhook (recruiter reply). Not on-demand — proactive. Already live on oll.am's VPS (:18789) + the oll-mcp seam proven both transports.
DistributePostizgithub.com/gitroomhq/postiz-app · AGPL-3.0Deploy-ready
OSS self-hosted social scheduler: 30+ platforms, OAuth posting, AI drafts (copy / images / video), unified analytics, a confirmed MCP server + public REST API + n8n node. Stack: Next.js 16 + NestJS 11 + Postgres/Prisma + Redis + Temporal queue. Self-host free / hosted $29–99.
Agentic, self-hosted distribution — MCP-drivable.
→ oll.in: the "get found" presence engine — the agent drafts + schedules the seeker's LinkedIn / X posts so recruiters find them (inbound), and distributes oll.in itself. Deploy-ready on oll.am (PR #83); Postiz's MCP server lets OpenCLAW drive it.
Your data, as a product Measure + Prove, made a surface you touch
The pillars above run the machine for you. But the same data the machine already holds — the RAG'd live job corpus, your application funnel, and your interaction signals, all sitting in the Memory spine — is also something you should be able to touch directly. Not just a backend Ollie reads: a product surface. This is Measure and Prove turned user-facing — three faces of one data layer, sitting alongside the agent, on the same rows.
one data layer — three faces, alongside Ollie
Memory spine · pgvector
Your data
job corpus + your funnel + signals
↓
Chat
Ask your data
NL → answer
Model · NL→query
Insights
Your funnel
analytics + attribution
Measure, shown
Verified
Track record
un-fakeable, on real events
Prove, shown
↺ and Ollie reads the exact same rows — the data product is the machine's own memory, exposed as a surface you can query, not a second copy.
Chat with your data
DataFast's "AI analyst" pattern, pointed at your own job search: ask natural-language questions over your data and get answers — "which of my applications got a reply?" · "what's my interview rate?" · "what roles pay most for my skills?" · "which cover-letter style converts?". Under the hood it's NL → query / retrieve → answer: oll-model turns the question into a query over the Memory-spine data, retrieves the relevant funnel rows and corpus matches, and answers in plain language. No dashboard-spelunking — you just ask.
Insights, like DataFast
Your job-search analytics and attribution, surfaced the way DataFast surfaces revenue: response rate · ghost rate · interview-conversion % · time-to-reply, plus which channel / CV variant / role-type converts and your market position. This is the Measure pillar made a visible surface — the career funnel measured and shown, not left as backend jargon feeding the agent. Rendered the same state.py → HTML way the Control Room already renders live state.
Verified — TrustMRR-vibes for your career
Your track record is un-fakeable because it rides on Ollie's own logged actions — applications actually sent, replies actually received — aggregated and third-party-verifiable, exactly like TrustMRR verifies revenue on real Stripe events rather than self-report. It's a trust primitive for a job-seeker: not a CV claim you type, but a record the machine wrote. This is the Prove pillar made user-facing — the same "verification on real events, not self-report" idea, now a credential you can show.
Ground it in the job vertical first. The concrete near-term surface is "chat with your job search" + "your live, personal job-market DB" — the scouted jobs and your funnel, queryable. That's the head. The general horizontal — a self-hosted, agentic, chattable, verifiable DB-as-a-service (the full DataFast + TrustMRR combo productized for any data) — is the bigger tail play, explicitly kept as the tail, not the head. Focus stays on the franc.
Chat with your data. See your insights. Show a verified track record. Same rows Ollie already acts on.
— the data product, in one line
Why this is reuse, not a new build. The Memory spine is the DB/RAG (pgvector); oll-model does the NL→query, the chat, and the insight generation; and the data — job corpus + funnel + signals — is already being captured by the machine. So DB-as-a-service is the same spines exposed as a user surface: an additive UI plus a thin query/insight layer, no new backend service. See the extended reuse-vs-build ledger below.
Another conversion hook. Like instant-jobs-on-landing, "chat with your data / see your insights" makes the product feel smart and personal the moment you use it — a reason to convert, not just a backend nicety. Still Platform 3.0; still deferred behind the first franc — but a hook worth noting now.
The 3.0 edge — integrate even better why owning them beats renting them
The four reference products are four SaaS silos: four logins, four datasets, no shared brain. oll.am owns self-hosted, agentic versions of all four on ONE box, behind one identity (Core) + Memory + OpenCLAW + oll-mcp. That single fact lets the pillars compose into a closed loop the silos structurally cannot.
Four SaaS silos
- Four logins, four datasets — no shared brain
- Manual export/relink between tools
- A human is the integration layer
- Per-tool billing + rate limits drag
- Verification is self-attested, then paused
One owned loop on one box
- Shared identity + one dataset — the whole funnel in Memory, not four exports
- One agent drives all four over MCP — reads its own analytics, decides, acts, distributes, logs the verified outcome, re-scores next cycle
- One dashboard (render from
state.json, like the Control Room)
- No per-tool billing/rate-limit drag — self-hosted OSS on the existing box, runs on cron continuously
- Verification rides on the agent's own logged actions — un-fakeable, automatic
Concretely, the five things owning-not-renting unlocks:
- Shared identity + one dataset. The whole funnel lives in Memory — one corpus, not four exports that drift out of sync.
- One agent, closed measure→act→measure. One OpenCLAW agent reads its own analytics, decides, acts, distributes, logs the verified outcome, and re-scores next cycle — with no human relinking.
- One dashboard. Render the whole loop from
state.json the same way the Control Room already renders live state.
- Verification is automatic. It rides on the agent's own logged actions — un-fakeable because the machine, not a human, wrote the record.
- No billing/rate-limit drag. Self-hosted OSS on the box already paid for; it runs on cron continuously instead of metering every event.
The closed growth loop measure → act → distribute → prove → measure
The four pillars aren't a list — they're a cycle. Each turn feeds the next, and the last feeds back into the first. This is what the silos can't do: close the loop without a human carrying data between logins.
Measure
DataFast
read the funnel
→
→
Distribute
Postiz
get found
→
Prove
TrustMRR
log the outcome
↺ and the proven outcome re-scores the next Measure cycle — a closed measure → act → measure loop with no human relinking.
The whole edge in one line: four silos make you the integration layer; one owned box makes the agent the integration layer — so the loop runs on cron while you sleep.
Dogfood = demo run the machine on oll.am itself first
The safest, most honest way to prove 3.0 works is to point it at oll.am itself before pointing it at anyone's career:
Act
OpenCLAW
cron-drafts build-in-public updates
→
Distribute
Postiz
schedules to LinkedIn / X
→
Measure
DataFast
post → signup → first-dollar
→
Prove
TrustMRR
already-verified badge
OpenCLAW cron-drafts the build-in-public updates → Postiz schedules them → the measure layer tracks post → signup → first-dollar (revenue-attributed) → TrustMRR's already-verified badge proves it worked. Once the identical machine grows oll.am's own numbers, it IS the product for a user's job search — swap "revenue funnel" for "career funnel" and nothing else changes.
The distribution is the demo.
— the machine's own marketing proves the machine
Reuse-vs-build ledger what's already here vs what's genuinely new
3.0 sounds ambitious; it's mostly wiring things oll.am already owns. The honest accounting:
| Piece | Verdict | Detail |
| OpenCLAW (Act) | Reuse — live | Already running on the VPS (:18789); oll-mcp seam proven both transports. |
| Postiz (Distribute) | Reuse — deploy-ready | PR #83; MCP server lets OpenCLAW drive it. One merge away. |
| Memory spine — pgvector + nomic embeddings | Reuse — live | Holds both corpora (user experience + live jobs). The RAG store and embedding path already run; the job corpus is a new collection, not new infra. |
| Model — embeddings + generation | Reuse — live | nomic-embed-text vectorizes each posting; generation drafts the dossier. Both already served behind one seam. |
| OpenCLAW — cron + scout runtime | Reuse — live | The always-on gateway on the VPS (:18789) already does cron + skills; the scout is a scheduled job on it, not a new daemon. |
| Core + oll-mcp thin seam | Reuse — proven | One identity; one agent drives every product over MCP. No new transport, no new auth. |
| TrustMRR listing (Prove) | Reuse — live | oll-am already listed, Stripe-verified; the badge already updates. |
| Job-corpus ingestion pipeline | New — thin | Fetch → normalize → embed → upsert into the jobs collection; minimal-cache, attribute, expire stale. Additive to Memory — no new service. |
| Legal API connectors | New — additive | Thin adapters for Adzuna · Arbeitnow · Jooble (legal job APIs only — never ToS-restricted boards). |
| Scout skill + ~2 JD-aware write verbs | New — additive | A scout SKILL.md for OpenCLAW's cron + match/tailor verbs on the existing write service. |
| Measure — career-analytics layer | New — thin | An events table + funnel dashboard fed by the interaction signals. Reuse state.py → HTML to render it. |
| Prove — verify layer | New — thin | A verified-activity record + embeddable credential, riding on the agent's logged actions. |
| Data as a product — the data itself | Reuse — captured | Job corpus + your funnel + interaction signals already live in the Memory spine — the same rows Ollie acts on. No new capture. |
| Chat-with-your-data — NL→query + chat | New — thin | oll-model turns a question into a query/retrieve over the Memory-spine data and answers in plain language. A thin query surface over existing spines — no new backend. |
| Insights + verified-record — user-facing surface | New — thin (UI) | The Measure funnel + Prove track-record, rendered as a surface you touch (state.py → HTML). Additive UI over the same data/verify layers above. |
Net new: a thin job-corpus ingestion pipeline + a few legal API connectors + a scout skill + ~2 write verbs + 2 thin data/render layers — plus, for data-as-a-product, a thin NL→query surface and the insights + verified-record UI. Zero new backend services — the corpus, embeddings, cron, identity, and the data you'd chat with all reuse spines already on the box.
Highest-leverage first franc-gated — the single first move
When 3.0 does begin — after the first franc — the highest-leverage first build isn't the career product. It's wiring the closed Measure → Act → Distribute loop on oll.am's own build-in-public. That single loop is both the oll.in MVP skeleton and its own best marketing.
The first 3.0 build (after the first franc)
- Merge Postiz PR #83 — the distribution layer onto the box.
- Connect OpenCLAW → Postiz over MCP — the agent can now schedule posts.
- Add the minimal events + funnel dashboard — the one genuinely-new Measure surface (render via
state.py → HTML).
- Close the loop — OpenCLAW drafts an update, Postiz schedules it, the Measure layer reads conversion back → re-score.
The line, restated: none of this starts until oll.in's
CHF 29 on-ramp takes a stranger's dollar. 3.0 is a future north-star — it earns its turn by revenue, not by ambition. Until then the single priority is unchanged:
the first franc.
Research sources — datafa.st · trustmrr.com · github.com/openclaw/openclaw · github.com/gitroomhq/postiz-app