Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/adapters/src/agenticjobs.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import { decodeEntities, defineAdapter, slugify } from '@nichedb/core/adapter';
* token -- which is the shape a bounty on this board actually takes.
*/

const BASE = 'https://agenticjobs.work/api/v1/jobs';
const SITE = 'https://agenticjobs.work';
const BASE = 'https://agenticjobs.pwa.pit.world/api/v1/jobs';
const SITE = 'https://agenticjobs.pwa.pit.world';

/** The documented ceiling per page. */
const PAGE = 100;
Expand Down Expand Up @@ -111,7 +111,7 @@ export const agenticjobs = defineAdapter({
collection: 'jobs',
description:
'Every published posting on the agenticjobs.work board, newest first: title, company, location, whether it is remote, the pay in whatever shape it was written, the stack, and whether an AI agent may apply. Keyless public API.',
docs: 'https://agenticjobs.work/api/v1/jobs',
docs: 'https://agenticjobs.pwa.pit.world/api/v1/jobs',
kinds: ['job'],
cadenceMinutes: 30,
configFields: [
Expand Down
4 changes: 2 additions & 2 deletions packages/adapters/src/aiornot.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { defineAdapter, first, slugify, stripHtml, xmlItems } from '@nichedb/cor
* `latest` first, because that is the feed with the most items in it.
*/

const BASE = 'https://aiornot.vote';
const BASE = 'https://aiornot.pwa.pit.world';

/** The three documents, keyed by the tag a feed adds to what it carries. */
export const FEEDS = {
Expand Down Expand Up @@ -105,7 +105,7 @@ export const aiornot = defineAdapter({
collection: 'ai-media',
description:
'Photorealistic images and videos submitted to aiornot.vote for people to judge as AI or not: the newest, the featured set and what is trending, each with its media file, categories and the votes so far. Three keyless RSS feeds; a submission on more than one is stored once and tagged with each.',
docs: 'https://aiornot.vote/rss.xml',
docs: 'https://aiornot.pwa.pit.world/rss.xml',
kinds: ['submission'],
cadenceMinutes: 30,
configFields: [
Expand Down
4 changes: 2 additions & 2 deletions packages/adapters/src/brisk.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { decodeEntities, defineAdapter } from '@nichedb/core/adapter';
* walks pages rather than asking per desk.
*/

const BASE = 'https://brisk.news/api/news';
const BASE = 'https://brisk.pwa.pit.world/api/news';

/**
* brisk caps a response at 50 rows however large a `limit` is asked for, and the
Expand Down Expand Up @@ -133,7 +133,7 @@ export const brisk = defineAdapter({
collection: 'news',
description:
'Posts from the ~33,000 independent feeds brisk.news polls — the Kagi small-web catalogue and a curated set. Blogs rather than newsrooms, filed under their own "independent" desk. Keyless. The mainstream wire and the Google News stubs the same endpoint carries are deliberately not taken.',
docs: 'https://brisk.news',
docs: 'https://brisk.pwa.pit.world',
kinds: ['story'],
cadenceMinutes: 60,
configFields: [
Expand Down
6 changes: 3 additions & 3 deletions packages/adapters/src/c0upons.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import { decodeEntities, defineAdapter } from '@nichedb/core/adapter';
* run's page count is the site's size, not the count it brings back.
*/

const BASE = 'https://c0upons.com/api/coupons';
const SITE = 'https://c0upons.com';
const BASE = 'https://c0upons.pwa.pit.world/api/coupons';
const SITE = 'https://c0upons.pwa.pit.world';

/** Rows per page. The route caps nothing; this is one request's worth. */
const PAGE = 200;
Expand Down Expand Up @@ -119,7 +119,7 @@ export const c0upons = defineAdapter({
collection: 'coupons',
description:
"Every coupon c0upons.com took in on its own: codes people submitted on the site and the listings it reads from r/couponcodes, each under its store with the code, discount and expiry as fields and a link to the coupon page. Rows c0upons copied from this database's deals collection are left where they already are.",
docs: 'https://c0upons.com/docs',
docs: 'https://c0upons.pwa.pit.world/docs',
kinds: ['coupon'],
cadenceMinutes: 15,
configFields: [
Expand Down
8 changes: 4 additions & 4 deletions packages/adapters/src/opensite.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,16 @@ const HOUSE = [
],
['logicsrc', 'https://logicsrc.com', 'logicsrc.com: every spec and its landing page'],
['rssamplifier', 'https://rssamplifier.com', 'rssamplifier.com: the small-web feed directory'],
['saasrow', 'https://saasrow.com', 'saasrow.com: the SaaS directory'],
['saasrow', 'https://saasrow.pwa.pit.world', 'saasrow.com: the SaaS directory'],
[
'outreachgraph',
'https://outreachgraph.com',
'outreachgraph.com: the public profiles and company pages',
],
['tsbb', 'https://tsbb.dev', 'tsbb.dev: the bulletin boards'],
['agenticjobs', 'https://agenticjobs.work', 'agenticjobs.work: the job board'],
['tsbb', 'https://tsbb.pwa.pit.world', 'tsbb.dev: the bulletin boards'],
['agenticjobs', 'https://agenticjobs.pwa.pit.world', 'agenticjobs.work: the job board'],
['d0rz', 'https://d0rz.com', 'd0rz.com: the marketplace'],
['aiornot', 'https://aiornot.vote', 'aiornot.vote: real or generated, judged by people'],
['aiornot', 'https://aiornot.pwa.pit.world', 'aiornot.vote: real or generated, judged by people'],
];

export const opensite = defineAdapter({
Expand Down
4 changes: 2 additions & 2 deletions packages/adapters/src/saasrow.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { decodeEntities, defineAdapter, slugify } from '@nichedb/core/adapter';
* message). The public directory is the products endpoint.
*/

const BASE = 'https://saasrow.com/api/v1/products';
const BASE = 'https://saasrow.pwa.pit.world/api/v1/products';

/** The documented ceiling per page. */
const PAGE = 100;
Expand Down Expand Up @@ -110,7 +110,7 @@ export const saasrow = defineAdapter({
collection: 'saas',
description:
'Every product in the saasrow.com software directory with its category, tags, pricing model, platforms, alternatives, votes and views, walked newest first through the keyless public API. The listings endpoint is per-account and needs a key, so it is not read.',
docs: 'https://saasrow.com/api/v1/products',
docs: 'https://saasrow.pwa.pit.world/api/v1/products',
kinds: ['product'],
cadenceMinutes: 60,
configFields: [
Expand Down
4 changes: 2 additions & 2 deletions packages/adapters/src/tsbb.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { decodeEntities, defineAdapter, first, slugify, xmlItems } from '@niched
* list rather than fetched and found empty.
*/

const BASE = 'https://tsbb.dev';
const BASE = 'https://tsbb.pwa.pit.world';

/** Forums read per run, however many the board has. */
const MAX_FORUMS = 40;
Expand Down Expand Up @@ -88,7 +88,7 @@ export const tsbb = defineAdapter({
collection: 'forums',
description:
'Every topic on the tsbb.dev bulletin board, forum by forum: the title, the opening post, the author and the forum it was posted in. The forum list comes from the keyless JSON API and each forum’s topics from its own RSS feed.',
docs: 'https://tsbb.dev/api/v1',
docs: 'https://tsbb.pwa.pit.world/api/v1',
kinds: ['post'],
cadenceMinutes: 30,
configFields: [
Expand Down
4 changes: 2 additions & 2 deletions packages/adapters/src/weedforcrypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { decodeEntities, defineAdapter, slugify } from '@nichedb/core/adapter';
* null.
*/

const DEFAULT_URL = 'https://weedforcrypto.com/api/v1/dispensaries';
const DEFAULT_URL = 'https://weedforcrypto.pwa.pit.world/api/v1/dispensaries';
const PAGE = 200;

const clean = (s) => {
Expand Down Expand Up @@ -134,7 +134,7 @@ export const weedforcrypto = defineAdapter({
collection: 'weed',
description:
'Every licensed cannabis dispensary in the weedforcrypto.com directory, from official regulator licence lists in the US, Canada, Uruguay, the Netherlands and Thailand: licence number, type and status, address and coordinates, medical or adult-use, delivery, and whether the store takes crypto through CoinPay, walked page by page from the keyless directory API once a day.',
docs: 'https://weedforcrypto.com/api/v1/coverage',
docs: 'https://weedforcrypto.pwa.pit.world/api/v1/coverage',
kinds: ['dispensary'],
cadenceMinutes: 1440,
configFields: [
Expand Down
2 changes: 1 addition & 1 deletion packages/adapters/test/fixtures/agenticjobs-jobs.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
"createdAt": "2026-09-09T06:52:22.685Z"
},
"title": "Register your agent on our new agentic job board",
"description": "Pick which jobs your agent applies to, or let it apply automatically against a\nfiltered search. A person stays in control at both ends: an agent drafts, a\nperson releases.\n\nThe work is API, MCP and CLI integrations against https://agenticjobs.work. The\nboard speaks REST, MCP, a CLI and a TUI on one engine, so there is more than one\nsurface to build against.\n\nJavaScript and TypeScript.\n\n## What pays\n\n- $0.25 per task, settled in SOL.\n- $0.25 for a PR that fixes a bug you find. File them on GitHub.\n- $0.25 for each social post linking to your job or profile page on\n agenticjobs.work.\n\nApplications are taken here on the board. Use the form, or read the schema at\n`/api/v1/jobs/register-your-agent-on-our-new-agentic-job-board/apply-schema` and\npost to it.",
"description": "Pick which jobs your agent applies to, or let it apply automatically against a\nfiltered search. A person stays in control at both ends: an agent drafts, a\nperson releases.\n\nThe work is API, MCP and CLI integrations against https://agenticjobs.pwa.pit.world. The\nboard speaks REST, MCP, a CLI and a TUI on one engine, so there is more than one\nsurface to build against.\n\nJavaScript and TypeScript.\n\n## What pays\n\n- $0.25 per task, settled in SOL.\n- $0.25 for a PR that fixes a bug you find. File them on GitHub.\n- $0.25 for each social post linking to your job or profile page on\n agenticjobs.work.\n\nApplications are taken here on the board. Use the form, or read the schema at\n`/api/v1/jobs/register-your-agent-on-our-new-agentic-job-board/apply-schema` and\npost to it.",
"employmentType": "contract",
"workplace": "remote",
"seniority": null,
Expand Down
14 changes: 7 additions & 7 deletions packages/adapters/test/fixtures/aiornot-featured.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,27 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>AIorNot.vote — Featured media</title>
<link>https://aiornot.vote/search?featured=1</link>
<atom:link href="https://aiornot.vote/rss/featured.xml" rel="self" type="application/rss+xml" />
<link>https://aiornot.pwa.pit.world/search?featured=1</link>
<atom:link href="https://aiornot.pwa.pit.world/rss/featured.xml" rel="self" type="application/rss+xml" />
<description>Hand-picked featured media.</description>
<language>en</language>
<lastBuildDate>Sat, 12 Sep 2026 20:53:05 GMT</lastBuildDate>
<generator>AIorNot.vote</generator>
<item>
<title>AI or Not: Street</title>
<link>https://aiornot.vote/m/ai-or-not-street-2</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-street-2</link>
<guid isPermaLink="false">media:med_a4f2f47e9ea445ae8064b849d026c952</guid>
<pubDate>Tue, 07 Jul 2026 11:46:01 GMT</pubDate>
<category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/ai-variants/mral20q6-v9ff33.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/ai-variants/mral20q6-v9ff33.webp" alt="AI or Not: Street" />
<enclosure url="https://aiornot.pwa.pit.world/media/ai-variants/mral20q6-v9ff33.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/ai-variants/mral20q6-v9ff33.webp" alt="AI or Not: Street" />
<p>Guess: AI or Not AI.</p>
<p>No guesses yet — be the first.</p>
<p>Tags: Photorealistic, Image</p>]]></description>
</item>
<item>
<title>AI or Not: Portrait</title>
<link>https://aiornot.vote/m/ai-or-not-portrait-1</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-portrait-1</link>
<guid isPermaLink="false">media:med_ebb5735f189141b8ad29c11324478e8e</guid>
<pubDate>Tue, 07 Jul 2026 11:16:49 GMT</pubDate>
<category>cinematic</category><category>photorealistic</category><category>portrait</category><category>image</category>
Expand All @@ -34,7 +34,7 @@
</item>
<item>
<title>AI or Not: Cinematic</title>
<link>https://aiornot.vote/m/golden-hour-portrait-on-a-rooftop-1</link>
<link>https://aiornot.pwa.pit.world/m/golden-hour-portrait-on-a-rooftop-1</link>
<guid isPermaLink="false">media:med_dc5324be943449f6b9827b5006a71787</guid>
<pubDate>Tue, 07 Jul 2026 04:02:53 GMT</pubDate>
<category>cinematic</category><category>photorealistic</category><category>portrait</category><category>image</category>
Expand Down
22 changes: 11 additions & 11 deletions packages/adapters/test/fixtures/aiornot-latest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,44 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>AIorNot.vote — Latest media</title>
<link>https://aiornot.vote</link>
<atom:link href="https://aiornot.vote/rss.xml" rel="self" type="application/rss+xml" />
<link>https://aiornot.pwa.pit.world</link>
<atom:link href="https://aiornot.pwa.pit.world/rss.xml" rel="self" type="application/rss+xml" />
<description>The newest photorealistic images and videos to guess AI or Not AI.</description>
<language>en</language>
<lastBuildDate>Sat, 12 Sep 2026 20:53:05 GMT</lastBuildDate>
<generator>AIorNot.vote</generator>
<item>
<title>AI or Not: Animal</title>
<link>https://aiornot.vote/m/ai-or-not-animal-mtu2lpg8</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-animal-mtu2lpg8</link>
<guid isPermaLink="false">media:med_792571a62a1945a79e9bb2e9463b6112</guid>
<pubDate>Wed, 09 Sep 2026 12:24:15 GMT</pubDate>
<category>animal</category><category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/pool/3fb4b199-2d01-4ded-8df0-9fd6e50e2509.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/pool/3fb4b199-2d01-4ded-8df0-9fd6e50e2509.webp" alt="AI or Not: Animal" />
<enclosure url="https://aiornot.pwa.pit.world/media/pool/3fb4b199-2d01-4ded-8df0-9fd6e50e2509.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/pool/3fb4b199-2d01-4ded-8df0-9fd6e50e2509.webp" alt="AI or Not: Animal" />
<p>Guess: AI or Not AI.</p>
<p>No guesses yet — be the first.</p>
<p>Tags: Animal, Photorealistic, Image</p>]]></description>
</item>
<item>
<title>AI or Not: Landscape</title>
<link>https://aiornot.vote/m/ai-or-not-landscape-mtu23ja5</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-landscape-mtu23ja5</link>
<guid isPermaLink="false">media:med_88f716f7cc8a46758ba27460b1a4dffc</guid>
<pubDate>Wed, 09 Sep 2026 12:10:07 GMT</pubDate>
<category>landscape</category><category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/pool/8612fea8-4c20-4bc2-8645-15cb60f97522.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/pool/8612fea8-4c20-4bc2-8645-15cb60f97522.webp" alt="AI or Not: Landscape" />
<enclosure url="https://aiornot.pwa.pit.world/media/pool/8612fea8-4c20-4bc2-8645-15cb60f97522.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/pool/8612fea8-4c20-4bc2-8645-15cb60f97522.webp" alt="AI or Not: Landscape" />
<p>Guess: AI or Not AI.</p>
<p>No guesses yet — be the first.</p>
<p>Tags: Landscape, Photorealistic, Image</p>]]></description>
</item>
<item>
<title>AI or Not: Architecture</title>
<link>https://aiornot.vote/m/ai-or-not-architecture-mtu1j49l</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-architecture-mtu1j49l</link>
<guid isPermaLink="false">media:med_057077ad7ef948a4abfb7514970205fa</guid>
<pubDate>Wed, 09 Sep 2026 11:54:14 GMT</pubDate>
<category>architecture</category><category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/pool/286c65a0-2db9-43f6-9529-4d89733664cc.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/pool/286c65a0-2db9-43f6-9529-4d89733664cc.webp" alt="AI or Not: Architecture" />
<enclosure url="https://aiornot.pwa.pit.world/media/pool/286c65a0-2db9-43f6-9529-4d89733664cc.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/pool/286c65a0-2db9-43f6-9529-4d89733664cc.webp" alt="AI or Not: Architecture" />
<p>Guess: AI or Not AI.</p>
<p>No guesses yet — be the first.</p>
<p>Tags: Architecture, Photorealistic, Image</p>]]></description>
Expand Down
16 changes: 8 additions & 8 deletions packages/adapters/test/fixtures/aiornot-trending.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,32 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>AIorNot.vote — Trending media</title>
<link>https://aiornot.vote/search?sort=trending</link>
<atom:link href="https://aiornot.vote/rss/trending.xml" rel="self" type="application/rss+xml" />
<link>https://aiornot.pwa.pit.world/search?sort=trending</link>
<atom:link href="https://aiornot.pwa.pit.world/rss/trending.xml" rel="self" type="application/rss+xml" />
<description>The media people are guessing on right now.</description>
<language>en</language>
<lastBuildDate>Sat, 12 Sep 2026 20:53:06 GMT</lastBuildDate>
<generator>AIorNot.vote</generator>
<item>
<title>AI or Not: Food</title>
<link>https://aiornot.vote/m/ai-or-not-food-msp6dj4t</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-food-msp6dj4t</link>
<guid isPermaLink="false">media:med_b73ec5d4abd14bc29f1835a6e2e76023</guid>
<pubDate>Tue, 11 Aug 2026 21:31:18 GMT</pubDate>
<category>food</category><category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/pool/d8e5311b-db2d-461e-9ebd-22a45d244cd7.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/pool/d8e5311b-db2d-461e-9ebd-22a45d244cd7.webp" alt="AI or Not: Food" />
<enclosure url="https://aiornot.pwa.pit.world/media/pool/d8e5311b-db2d-461e-9ebd-22a45d244cd7.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/pool/d8e5311b-db2d-461e-9ebd-22a45d244cd7.webp" alt="AI or Not: Food" />
<p>Guess: AI or Not AI.</p>
<p>Current crowd result: 50% AI, 50% Not AI.</p>
<p>Tags: Food, Photorealistic, Image</p>]]></description>
</item>
<item>
<title>AI or Not: Fashion</title>
<link>https://aiornot.vote/m/ai-or-not-fashion-45</link>
<link>https://aiornot.pwa.pit.world/m/ai-or-not-fashion-45</link>
<guid isPermaLink="false">media:med_4e46b74293254009bbcd38c45af8d3cd</guid>
<pubDate>Mon, 20 Jul 2026 10:25:51 GMT</pubDate>
<category>fashion</category><category>photorealistic</category><category>image</category>
<enclosure url="https://aiornot.vote/media/ai-variants/mrt2wz7z-v4bybj.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.vote/media/ai-variants/mrt2wz7z-v4bybj.webp" alt="AI or Not: Fashion" />
<enclosure url="https://aiornot.pwa.pit.world/media/ai-variants/mrt2wz7z-v4bybj.webp" type="image/webp" />
<description><![CDATA[<img src="https://aiornot.pwa.pit.world/media/ai-variants/mrt2wz7z-v4bybj.webp" alt="AI or Not: Fashion" />
<p>Guess: AI or Not AI.</p>
<p>Current crowd result: 100% AI, 0% Not AI.</p>
<p>Tags: Fashion, Photorealistic, Image</p>]]></description>
Expand Down
Loading
Loading