openvibers/openvibe.wiki Commits
Wiki seed: Sources and Deals pages say what runs today (35 sources, 2,067 deals with sellers) (#66)
Changes
@@@ -380,8 +380,8 @@{"title": "OpenVibe.Sources","parent": "OpenVibe",-- "body": "**OpenVibe.Sources** is the source registry and ingestion service of the OpenVibe network, at `sources.openvibe.network` on port 4720, with a loopback-only API. The README calls it \"The source registry and the ingestion workers the publication products depend on.\"\n\n## What it does\n\nSources owns the one place outside material enters the network: a registry of sources with their terms, plus workers that fetch them politely and record what happened. News, Reviews, Deals, Coupons, Trade and AI summarisation all read items with provenance from here. A source records its type (`rss|atom|sitemap|jsonld|api|manual`), category, endpoints, auth, robots and terms notes, rate limits and indexability. Adapters parse RSS, Atom, sitemaps, JSON-LD and official APIs. Every attempt writes a `fetch_runs` row with an explicit state, and the README states a failed fetch is a recorded failure, never replaced by invented content. Items keep revisions and provenance, and removal is explicit.\n\n## What it does not do yet\n\nOn 2026-10-14, 31 sources were enabled and 2 disabled. The enabled ones are news wires, Steam reviews, DealNews coupons and other feeds. A person reads each source's robots and terms notes before enabling it, and a source whose robots file refuses the fetch stays disabled. Sources does not decide what a product publishes, and it never calls [[OpenVibe.AI]].\n## How it fits the network\n\nProducts are the only clients of both Sources and [[OpenVibe.AI]]: a product reads items and passes them to AI as run input. Sources emits `sources.item.*`, `sources.fetch.failed` and staff-only index documents through the [[OpenVibe.Events]] outbox, and raw items reach [[OpenVibe.Search]] for staff only, always `noindex`. It depends on [[OpenVibe.Host]] data roles, PostgreSQL and [[OpenVibe.Network]] signing keys.\n\n## Runtime and status\n\nNode 22 and Express on PostgreSQL 18 and Valkey 9, unit `openvibe-sources.service` on `127.0.0.1:4720`, database `ov_sources`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",-- "summary": "The source registry and ingestion workers that fetch outside material with recorded provenance; alpha, deployed but not launched, seeded sources disabled.",++ "body": "**OpenVibe.Sources** is the source registry and ingestion service of the OpenVibe network, at `sources.openvibe.network` on port 4720, with a loopback-only API. The README calls it \"The source registry and the ingestion workers the publication products depend on.\"\n\n## What it does\n\nSources owns the one place outside material enters the network: a registry of sources with their terms, plus workers that fetch them politely and record what happened. News, Reviews, Deals, Coupons, Trade and AI summarisation all read items with provenance from here. A source records its type (`rss|atom|sitemap|jsonld|api|manual`), category, endpoints, auth, robots and terms notes, rate limits and indexability. Adapters parse RSS, Atom, sitemaps, JSON-LD and official APIs. Every attempt writes a `fetch_runs` row with an explicit state, and the README states a failed fetch is a recorded failure, never replaced by invented content. Items keep revisions and provenance, and removal is explicit.\n\nIt also keeps what a deal feed states in its own elements: DealNews' price, currency, retailer and end date become item fields exactly as written (`feed@2`), so [[OpenVibe.Deals]] shows them without reading prices out of headlines.\n\n## Sources today\n\nOn 2026-10-16, 35 of 39 sources were enabled, with 17,965 items from 2,156 fetch runs: 19 review sources, 4 market sources for Trade, 4 news wires, 3 hosting catalogues, 2 coupon feeds, and one each for blog desks, crowdfunding and deals.\n\n## What it does not do\n\nSources does not decide what a product publishes. A person reads each source's robots and terms notes before enabling it, and a source whose robots file refuses the fetch stays disabled. It never calls [[OpenVibe.AI]].\n\n## How it fits the network\n\nProducts are the only clients of both Sources and [[OpenVibe.AI]]: a product reads items and passes them to AI as run input. Sources emits `sources.item.*`, `sources.fetch.failed` and staff-only index documents through the [[OpenVibe.Events]] outbox, and raw items reach [[OpenVibe.Search]] for staff only, always `noindex`. It depends on [[OpenVibe.Host]] data roles, PostgreSQL and [[OpenVibe.Network]] signing keys.\n\n## Runtime and status\n\nNode 22 and Express on PostgreSQL 18 and Valkey 9, unit `openvibe-sources.service` on `127.0.0.1:4720`, database `ov_sources`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",++ "summary": "The source registry and ingestion workers that fetch outside material with recorded provenance; 35 sources feed Deals, News, Reviews, Trade, Host, Coupons and Blog.","infobox": [{"key": "repository",@@@ -428,10 +428,10 @@"quote": "The source registry and the ingestion workers the publication products depend on"},{-- "url": "https://github.com/OpenVibers/OpenVibe.Sources/blob/6a7a7488cc21ee4ca85c9ba2882b9522991118e3/STATUS.json",-- "title": "OpenVibe.Sources STATUS.json (commit 6a7a748)",-- "retrievedAt": "2026-10-14T23:30:00.000Z",-- "quote": "Deployed with `sudo ovhost deploy sources`: /opt/openvibe.sources, unit openvibe-sources, 127.0.0.1:4720, principal sources."++ "url": "https://github.com/OpenVibers/OpenVibe.Sources/blob/11d96371ed260cc1485eeddaf0a97395ff9f5bf6/STATUS.json",++ "title": "OpenVibe.Sources STATUS.json (commit 11d9637)",++ "retrievedAt": "2026-10-16T05:00:00.000Z",++ "quote": "35 of 39 sources were enabled in production"}]},@@@ -1730,8 +1730,8 @@{"title": "OpenVibe.Deals","parent": "OpenVibe",-- "body": "**OpenVibe.Deals** is the network's service for deals submitted and voted on by the community, with source, price and freshness always shown. It is at the alpha stage (roadmap Wave 18) and is deployed internally, not launched.\n\n## What it does\n\nIt normalises deal submissions and imports, keeps product and store records, and records offers with timestamped price, shipping, condition and availability observations. A price is an observation: each has a source and an `observed_at` time, is shown \"as of\" that time, and is never presented as current without a fresh observation. Votes and hotness (`hot@1`) are server-authoritative and deterministic. It provides duplicate merge and unmerge, watches and saved searches, moderation and abuse controls, and server-rendered pages, feeds and sitemaps useful without JavaScript.\n\n## What it does not do yet\n\nDeals starts empty, with \"no example deals, no invented prices\", and imports only from sources whose terms are verified. `openvibe.deals` is served from its own site since 2026-10-08. Watch matches are events: they reach people once a consumer delivers them as notifications.\n## How it fits the network\n\nDiscussion is [[OpenVibe.Community]]'s; imports come from [[OpenVibe.Sources]]; notifications are events for [[OpenVibe.Network]]. It publishes through [[OpenVibe.Events]] and emits [[OpenVibe.Search]] documents.\n\n## Status\n\nIt runs on Node 22 and Express with PostgreSQL 18 and Valkey 9, on port 4840. It is licensed AGPL-3.0.",-- "summary": "Community-submitted deals, recording prices as timestamped observations and always showing each deal’s source, price and freshness.",++ "body": "**OpenVibe.Deals** is the network's deals site at `openvibe.deals`, in the spirit of Slickdeals: people post and vote on deals, and deals are imported from permitted feeds, each with its source, price and freshness shown.\n\n## What it does\n\nIt keeps offers with timestamped price, shipping, condition and availability observations. A price is an observation: each has a source and an `observed_at` time, is shown \"as of\" that time, and is never presented as current without a fresh observation. Deals imported from DealNews through [[OpenVibe.Sources]] carry the price, the retailer and the end date the feed states: the retailer is the offer's seller (\"at Amazon\"), while the link goes to DealNews' own page, credited on every card. On 2026-10-16 there were 2,067 imported offers. Imported deals are noindex until a person reviews them, and DealNews' deals are kept out of browser extensions, as its feed terms require.\n\nVotes and hotness (`hot@1`) are server-authoritative and deterministic. It has duplicate merge and unmerge, watches and saved searches (a match reaches the person's OpenVibe inbox through [[OpenVibe.Network]]), moderation and abuse controls, a crowdfunding search across Kickstarter, Indiegogo and other platforms, and server-rendered pages, feeds and sitemaps useful without JavaScript.\n\n## What it does not do\n\nIt never invents a price or fills in a missing one: a deal whose source states no price says so. It imports only from sources whose terms were checked.\n\n## How it fits the network\n\nDiscussion is [[OpenVibe.Community]]'s; imports come from [[OpenVibe.Sources]]; watch matches are delivered by [[OpenVibe.Network]]. It publishes through [[OpenVibe.Events]] and emits [[OpenVibe.Search]] documents. Coupon codes are [[OpenVibe.Coupons]]'.\n\n## Status\n\nIt runs on Node 22 and Express with PostgreSQL 18 and Valkey 9, on port 4840. It is licensed AGPL-3.0.",++ "summary": "Deals posted and voted on by the community and imported from DealNews, with each deal's source, price, seller and freshness shown.","infobox": [{"key": "repository",@@@ -1778,10 +1778,10 @@"quote": "Deals submitted and voted on by the community, with source, price and freshness always shown."},{-- "url": "https://github.com/OpenVibers/OpenVibe.Deals/blob/8d474edd14f2877cebdf493a5de9fa39bbd1af80/STATUS.json",-- "title": "OpenVibe.Deals STATUS.json (commit 8d474ed)",-- "retrievedAt": "2026-10-14T23:30:00.000Z",-- "quote": "Deployed internally, not launched"++ "url": "https://github.com/OpenVibers/OpenVibe.Deals/blob/9d2ee6ed88de77240da6be0cac34b3ead9cfc7fe/STATUS.json",++ "title": "OpenVibe.Deals STATUS.json (commit 9d2ee6e)",++ "retrievedAt": "2026-10-16T05:00:00.000Z",++ "quote": "2,067 imported offers on 2026-10-16"}]},
@@ -380,8 +380,8 @@
@@ -380,8 +380,8 @@
{
{
"title": "OpenVibe.Sources",
"title": "OpenVibe.Sources",
"parent": "OpenVibe",
"parent": "OpenVibe",
- "body": "**OpenVibe.Sources** is the source registry and ingestion service of the OpenVibe network, at `sources.openvibe.network` on port 4720, with a loopback-only API. The README calls it \"The source registry and the ingestion workers the publication products depend on.\"\n\n## What it does\n\nSources owns the one place outside material enters the network: a registry of sources with their terms, plus workers that fetch them politely and record what happened. News, Reviews, Deals, Coupons, Trade and AI summarisation all read items with provenance from here. A source records its type (`rss|atom|sitemap|jsonld|api|manual`), category, endpoints, auth, robots and terms notes, rate limits and indexability. Adapters parse RSS, Atom, sitemaps, JSON-LD and official APIs. Every attempt writes a `fetch_runs` row with an explicit state, and the README states a failed fetch is a recorded failure, never replaced by invented content. Items keep revisions and provenance, and removal is explicit.\n\n## What it does not do yet\n\nOn 2026-10-14, 31 sources were enabled and 2 disabled. The enabled ones are news wires, Steam reviews, DealNews coupons and other feeds. A person reads each source's robots and terms notes before enabling it, and a source whose robots file refuses the fetch stays disabled. Sources does not decide what a product publishes, and it never calls [[OpenVibe.AI]].\n## How it fits the network\n\nProducts are the only clients of both Sources and [[OpenVibe.AI]]: a product reads items and passes them to AI as run input. Sources emits `sources.item.*`, `sources.fetch.failed` and staff-only index documents through the [[OpenVibe.Events]] outbox, and raw items reach [[OpenVibe.Search]] for staff only, always `noindex`. It depends on [[OpenVibe.Host]] data roles, PostgreSQL and [[OpenVibe.Network]] signing keys.\n\n## Runtime and status\n\nNode 22 and Express on PostgreSQL 18 and Valkey 9, unit `openvibe-sources.service` on `127.0.0.1:4720`, database `ov_sources`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",
- "summary": "The source registry and ingestion workers that fetch outside material with recorded provenance; alpha, deployed but not launched, seeded sources disabled.",
+ "body": "**OpenVibe.Sources** is the source registry and ingestion service of the OpenVibe network, at `sources.openvibe.network` on port 4720, with a loopback-only API. The README calls it \"The source registry and the ingestion workers the publication products depend on.\"\n\n## What it does\n\nSources owns the one place outside material enters the network: a registry of sources with their terms, plus workers that fetch them politely and record what happened. News, Reviews, Deals, Coupons, Trade and AI summarisation all read items with provenance from here. A source records its type (`rss|atom|sitemap|jsonld|api|manual`), category, endpoints, auth, robots and terms notes, rate limits and indexability. Adapters parse RSS, Atom, sitemaps, JSON-LD and official APIs. Every attempt writes a `fetch_runs` row with an explicit state, and the README states a failed fetch is a recorded failure, never replaced by invented content. Items keep revisions and provenance, and removal is explicit.\n\nIt also keeps what a deal feed states in its own elements: DealNews' price, currency, retailer and end date become item fields exactly as written (`feed@2`), so [[OpenVibe.Deals]] shows them without reading prices out of headlines.\n\n## Sources today\n\nOn 2026-10-16, 35 of 39 sources were enabled, with 17,965 items from 2,156 fetch runs: 19 review sources, 4 market sources for Trade, 4 news wires, 3 hosting catalogues, 2 coupon feeds, and one each for blog desks, crowdfunding and deals.\n\n## What it does not do\n\nSources does not decide what a product publishes. A person reads each source's robots and terms notes before enabling it, and a source whose robots file refuses the fetch stays disabled. It never calls [[OpenVibe.AI]].\n\n## How it fits the network\n\nProducts are the only clients of both Sources and [[OpenVibe.AI]]: a product reads items and passes them to AI as run input. Sources emits `sources.item.*`, `sources.fetch.failed` and staff-only index documents through the [[OpenVibe.Events]] outbox, and raw items reach [[OpenVibe.Search]] for staff only, always `noindex`. It depends on [[OpenVibe.Host]] data roles, PostgreSQL and [[OpenVibe.Network]] signing keys.\n\n## Runtime and status\n\nNode 22 and Express on PostgreSQL 18 and Valkey 9, unit `openvibe-sources.service` on `127.0.0.1:4720`, database `ov_sources`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",
+ "summary": "The source registry and ingestion workers that fetch outside material with recorded provenance; 35 sources feed Deals, News, Reviews, Trade, Host, Coupons and Blog.",
"infobox": [
"infobox": [
{
{
"key": "repository",
"key": "repository",
@@ -428,10 +428,10 @@
@@ -428,10 +428,10 @@
"quote": "The source registry and the ingestion workers the publication products depend on"
"quote": "The source registry and the ingestion workers the publication products depend on"
},
},
{
{
- "url": "https://github.com/OpenVibers/OpenVibe.Sources/blob/6a7a7488cc21ee4ca85c9ba2882b9522991118e3/STATUS.json",
- "title": "OpenVibe.Sources STATUS.json (commit 6a7a748)",
- "retrievedAt": "2026-10-14T23:30:00.000Z",
- "quote": "Deployed with `sudo ovhost deploy sources`: /opt/openvibe.sources, unit openvibe-sources, 127.0.0.1:4720, principal sources."
+ "url": "https://github.com/OpenVibers/OpenVibe.Sources/blob/11d96371ed260cc1485eeddaf0a97395ff9f5bf6/STATUS.json",
+ "title": "OpenVibe.Sources STATUS.json (commit 11d9637)",
+ "retrievedAt": "2026-10-16T05:00:00.000Z",
+ "quote": "35 of 39 sources were enabled in production"
}
}
]
]
},
},
@@ -1730,8 +1730,8 @@
@@ -1730,8 +1730,8 @@
{
{
"title": "OpenVibe.Deals",
"title": "OpenVibe.Deals",
"parent": "OpenVibe",
"parent": "OpenVibe",
- "body": "**OpenVibe.Deals** is the network's service for deals submitted and voted on by the community, with source, price and freshness always shown. It is at the alpha stage (roadmap Wave 18) and is deployed internally, not launched.\n\n## What it does\n\nIt normalises deal submissions and imports, keeps product and store records, and records offers with timestamped price, shipping, condition and availability observations. A price is an observation: each has a source and an `observed_at` time, is shown \"as of\" that time, and is never presented as current without a fresh observation. Votes and hotness (`hot@1`) are server-authoritative and deterministic. It provides duplicate merge and unmerge, watches and saved searches, moderation and abuse controls, and server-rendered pages, feeds and sitemaps useful without JavaScript.\n\n## What it does not do yet\n\nDeals starts empty, with \"no example deals, no invented prices\", and imports only from sources whose terms are verified. `openvibe.deals` is served from its own site since 2026-10-08. Watch matches are events: they reach people once a consumer delivers them as notifications.\n## How it fits the network\n\nDiscussion is [[OpenVibe.Community]]'s; imports come from [[OpenVibe.Sources]]; notifications are events for [[OpenVibe.Network]]. It publishes through [[OpenVibe.Events]] and emits [[OpenVibe.Search]] documents.\n\n## Status\n\nIt runs on Node 22 and Express with PostgreSQL 18 and Valkey 9, on port 4840. It is licensed AGPL-3.0.",
- "summary": "Community-submitted deals, recording prices as timestamped observations and always showing each deal’s source, price and freshness.",
+ "body": "**OpenVibe.Deals** is the network's deals site at `openvibe.deals`, in the spirit of Slickdeals: people post and vote on deals, and deals are imported from permitted feeds, each with its source, price and freshness shown.\n\n## What it does\n\nIt keeps offers with timestamped price, shipping, condition and availability observations. A price is an observation: each has a source and an `observed_at` time, is shown \"as of\" that time, and is never presented as current without a fresh observation. Deals imported from DealNews through [[OpenVibe.Sources]] carry the price, the retailer and the end date the feed states: the retailer is the offer's seller (\"at Amazon\"), while the link goes to DealNews' own page, credited on every card. On 2026-10-16 there were 2,067 imported offers. Imported deals are noindex until a person reviews them, and DealNews' deals are kept out of browser extensions, as its feed terms require.\n\nVotes and hotness (`hot@1`) are server-authoritative and deterministic. It has duplicate merge and unmerge, watches and saved searches (a match reaches the person's OpenVibe inbox through [[OpenVibe.Network]]), moderation and abuse controls, a crowdfunding search across Kickstarter, Indiegogo and other platforms, and server-rendered pages, feeds and sitemaps useful without JavaScript.\n\n## What it does not do\n\nIt never invents a price or fills in a missing one: a deal whose source states no price says so. It imports only from sources whose terms were checked.\n\n## How it fits the network\n\nDiscussion is [[OpenVibe.Community]]'s; imports come from [[OpenVibe.Sources]]; watch matches are delivered by [[OpenVibe.Network]]. It publishes through [[OpenVibe.Events]] and emits [[OpenVibe.Search]] documents. Coupon codes are [[OpenVibe.Coupons]]'.\n\n## Status\n\nIt runs on Node 22 and Express with PostgreSQL 18 and Valkey 9, on port 4840. It is licensed AGPL-3.0.",
+ "summary": "Deals posted and voted on by the community and imported from DealNews, with each deal's source, price, seller and freshness shown.",
"infobox": [
"infobox": [
{
{
"key": "repository",
"key": "repository",
@@ -1778,10 +1778,10 @@
@@ -1778,10 +1778,10 @@
"quote": "Deals submitted and voted on by the community, with source, price and freshness always shown."
"quote": "Deals submitted and voted on by the community, with source, price and freshness always shown."
},
},
{
{
- "url": "https://github.com/OpenVibers/OpenVibe.Deals/blob/8d474edd14f2877cebdf493a5de9fa39bbd1af80/STATUS.json",
- "title": "OpenVibe.Deals STATUS.json (commit 8d474ed)",
- "retrievedAt": "2026-10-14T23:30:00.000Z",
- "quote": "Deployed internally, not launched"
+ "url": "https://github.com/OpenVibers/OpenVibe.Deals/blob/9d2ee6ed88de77240da6be0cac34b3ead9cfc7fe/STATUS.json",
+ "title": "OpenVibe.Deals STATUS.json (commit 9d2ee6e)",
+ "retrievedAt": "2026-10-16T05:00:00.000Z",
+ "quote": "2,067 imported offers on 2026-10-16"
}
}
]
]
},
},