oll.am · Future North-Star · Deferred behind the first franc

Platform 3.0

The growth machine — Measure · Prove · Act · Distribute — applied to the job vertical. Its beating heart: a continuously-scouted, RAG-indexed live job corpus that makes the product useful the instant you land. oll.am already owns all four pillars; 3.0 wires them into one closed loop. Future work, deferred behind the first franc — but instant-jobs-on-landing is worth pulling forward.
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.
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

What's inside

  1. The always-warm job corpus
  2. The 1.0 → 2.0 → 3.0 arc
  3. The four pillars
  4. Your data, as a product
  5. The 3.0 edge — integrate even better
  6. The closed growth loop
  7. Dogfood = demo
  8. Reuse-vs-build ledger
  9. Highest-leverage first (franc-gated)

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:

  1. Shared identity + one dataset. The whole funnel lives in Memory — one corpus, not four exports that drift out of sync.
  2. 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.
  3. One dashboard. Render the whole loop from state.json the same way the Control Room already renders live state.
  4. Verification is automatic. It rides on the agent's own logged actions — un-fakeable because the machine, not a human, wrote the record.
  5. 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
Act
OpenCLAW
decide & do
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:

PieceVerdictDetail
OpenCLAW (Act)Reuse — liveAlready running on the VPS (:18789); oll-mcp seam proven both transports.
Postiz (Distribute)Reuse — deploy-readyPR #83; MCP server lets OpenCLAW drive it. One merge away.
Memory spine — pgvector + nomic embeddingsReuse — liveHolds 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 + generationReuse — livenomic-embed-text vectorizes each posting; generation drafts the dossier. Both already served behind one seam.
OpenCLAW — cron + scout runtimeReuse — liveThe 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 seamReuse — provenOne identity; one agent drives every product over MCP. No new transport, no new auth.
TrustMRR listing (Prove)Reuse — liveoll-am already listed, Stripe-verified; the badge already updates.
Job-corpus ingestion pipelineNew — thinFetch → normalize → embed → upsert into the jobs collection; minimal-cache, attribute, expire stale. Additive to Memory — no new service.
Legal API connectorsNew — additiveThin adapters for Adzuna · Arbeitnow · Jooble (legal job APIs only — never ToS-restricted boards).
Scout skill + ~2 JD-aware write verbsNew — additiveA scout SKILL.md for OpenCLAW's cron + match/tailor verbs on the existing write service.
Measure — career-analytics layerNew — thinAn events table + funnel dashboard fed by the interaction signals. Reuse state.py → HTML to render it.
Prove — verify layerNew — thinA verified-activity record + embeddable credential, riding on the agent's logged actions.
Data as a product — the data itselfReuse — capturedJob 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 + chatNew — thinoll-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 surfaceNew — 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)

  1. Merge Postiz PR #83 — the distribution layer onto the box.
  2. Connect OpenCLAW → Postiz over MCP — the agent can now schedule posts.
  3. Add the minimal events + funnel dashboard — the one genuinely-new Measure surface (render via state.py → HTML).
  4. 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