diff --git a/README.md b/README.md index 41fa7c7..742163a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ **An SEO content engine that uses RSS as raw material.** Aggregate It imports RSS/Atom feeds, faithfully rewrites the content with AI (no -fact changes — news stays news), deduplicates stories semantically, and maintains +fact changes, news stays news), deduplicates stories semantically, and maintains *living* topic pages that stay up to date as new sources arrive. It automatically extracts entities (companies, people, products…), resolves them against your custom post types, creates researched hub pages, and builds an internal-link graph @@ -15,30 +15,30 @@ fuel happens to be RSS. - **License:** GPL-2.0-or-later - **Distribution:** GitHub releases + Plugin Update Checker self-update (matches `crm-connect`); WordPress.org listing optional later. Freemium add-ons via provider seams. - **Slug:** `aggregate-it` -- **Conventions:** follows the `crm-connect` house style — see [`docs/CONVENTIONS.md`](docs/CONVENTIONS.md) -- **Status:** planning / pre-implementation +- **Conventions:** follows the `crm-connect` house style, see [`docs/CONVENTIONS.md`](docs/CONVENTIONS.md) +- **Status:** implemented (phases 0-4 built, see [`docs/PLAN.md`](docs/PLAN.md)) ## What makes it different | Capability | Why it matters for SEO | |---|---| -| **Living canonical posts** — one authoritative URL per story, updated over time | Concentrates link equity + sends `dateModified` freshness signals instead of splitting equity across duplicates | -| **Faithful rewrite** — reword + strip promo junk, never alter facts | Original prose without the hallucination/legal risk; a documented selling point | -| **Novelty gate** — only update when genuinely new facts arrive | Avoids the thin-rewrite pattern that triggers Google's Scaled Content Abuse policy | -| **Entity hub engine** — auto-match/create CPT entities + contextual backlinks | Builds hub-and-spoke topical authority + machine-readable `about`/`sameAs` schema | -| **Native-rich schema** — Article/NewsArticle + entity + citation graph | The durable moat thin-rewrite competitors can't replicate | +| **Living canonical posts**: one authoritative URL per story, updated over time | Concentrates link equity + sends `dateModified` freshness signals instead of splitting equity across duplicates | +| **Faithful rewrite**: reword + strip promo junk, never alter facts | Original prose without the hallucination/legal risk; a documented selling point | +| **Novelty gate**: only update when genuinely new facts arrive | Avoids the thin-rewrite pattern that triggers Google's Scaled Content Abuse policy | +| **Entity hub engine**: auto-match/create CPT entities + contextual backlinks | Builds hub-and-spoke topical authority + machine-readable `about`/`sameAs` schema | +| **Native-rich schema**: Article/NewsArticle + entity + citation graph | The durable moat thin-rewrite competitors can't replicate | ## Documentation -- [`docs/DECISIONS.md`](docs/DECISIONS.md) — the resolved design decisions and their rationale -- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — data model, pipeline, subsystems, config schema, extension API -- [`docs/CONVENTIONS.md`](docs/CONVENTIONS.md) — engineering house style, ported from `crm-connect` -- [`docs/EXTENDING.md`](docs/EXTENDING.md) — provider/hook seams for premium add-ons -- [`docs/PLAN.md`](docs/PLAN.md) — phased implementation plan (phases 0–4 built) +- [`docs/DECISIONS.md`](docs/DECISIONS.md): the resolved design decisions and their rationale +- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md): data model, pipeline, subsystems, config schema, extension API +- [`docs/CONVENTIONS.md`](docs/CONVENTIONS.md): engineering house style, ported from `crm-connect` +- [`docs/EXTENDING.md`](docs/EXTENDING.md): provider/hook seams for premium add-ons +- [`docs/PLAN.md`](docs/PLAN.md): phased implementation plan (phases 0-4 built) ## Operating profile (chosen constraints) -- **Scale:** single site, moderate volume — Action Scheduler, no external worker +- **Scale:** single site, moderate volume. A claim-based database queue driven by WP-Cron, no external worker - **Editorial:** fully automatic publish; manual edits after the fact - **AI:** cheapest-viable models behind a swappable, bring-your-own-key adapter - **Content stance:** full faithful rewrite, facts preserved, promo stripped diff --git a/aggregate-it.php b/aggregate-it.php index 85d913f..b74c64d 100644 --- a/aggregate-it.php +++ b/aggregate-it.php @@ -2,12 +2,12 @@ /** * Plugin Name: Aggregate It * Plugin URI: https://github.com/nmbrthirteen/aggregate-it - * Description: An SEO content engine that uses RSS as raw material — it imports feeds, faithfully rewrites them with AI, deduplicates stories into living topic pages, and auto-builds entity hubs with an internal-link graph. + * Description: An SEO content engine that uses RSS as raw material. It imports feeds, faithfully rewrites them with AI, deduplicates stories into living topic pages, and auto-builds entity hubs with an internal-link graph. * * Features: * - Import RSS/Atom and JSON feeds on a per-feed schedule, with categories, tags, include/exclude keywords, and per-feed length and publish overrides. * - Bulk-add feeds, OPML import (paste or upload), and a global keyword/domain blacklist. - * - Faithful AI rewrite that keeps the facts and strips promo — choose Google Gemini, OpenAI, or Claude with your own key. + * - Faithful AI rewrite that keeps the facts and strips promo, choose Google Gemini, OpenAI, or Claude with your own key. * - Model, article-length, and writing-style controls, a daily spend cap, and a one-click connection test. * - Semantic deduplication into one canonical post per story, a novelty gate, and dated "In the news" timelines. * - Automatic entity hub pages with schema.org types, sameAs links, optional Wikipedia enrichment, an internal-link graph, and related articles. diff --git a/assets/css/admin.css b/assets/css/admin.css index 3ee6b07..020c091 100644 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -438,8 +438,6 @@ display: block; color: #646970; font-size: 11px; - text-transform: uppercase; - letter-spacing: .02em; } .aggregate-it .ai-hub-feed-link { diff --git a/assets/css/hub.css b/assets/css/hub.css index 4cff221..f51ac43 100644 --- a/assets/css/hub.css +++ b/assets/css/hub.css @@ -1,4 +1,4 @@ -/* Aggregate It — entity hub front-end styles. Neutral + theme-agnostic. */ +/* Aggregate It entity hub front-end styles. Neutral + theme-agnostic. */ .aggregate-it-details { border-collapse: collapse; width: 100%; diff --git a/assets/js/admin.js b/assets/js/admin.js index 4de7440..92957ce 100644 --- a/assets/js/admin.js +++ b/assets/js/admin.js @@ -143,7 +143,7 @@ } tbody.innerHTML = ''; if ( ! rows.length ) { - tbody.innerHTML = '
%s %s
%s