=== geo-mode Connector ===
Contributors: geomode
Tags: geo, generative engine optimization, ai, schema, content
Requires at least: 6.0
Tested up to: 6.8
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Import geo-mode GEO content clusters as editable Gutenberg drafts with Article and FAQ schema, receive pushes from geo-mode, and track AI citations.

== Description ==

geo-mode Connector links your WordPress site to your geo-mode account with an API key, then imports answer-shaped content clusters as draft posts - built from real Gutenberg blocks, with schema.org JSON-LD (Article + FAQPage, and HowTo on procedural pages) and meta title/description.

All content rendering happens server-side in geo-mode; the plugin inserts the result verbatim, so the output stays identical to every other geo-mode export.

Features:

* Connect with a gm_live_ API key (configurable API base).
* Import a cluster's pages as draft posts - Gutenberg blocks, schema, meta.
* Idempotent re-import (updates the same posts by cluster + slug; no duplicates).
* Push from geo-mode: saving Connect registers this site, and clusters you push from geo-mode publish straight to Posts (re-push updates the same posts). geo-mode records the live URLs against the deployment.
* Mark a cluster implemented to start geo-mode's time-to-citation tracking.

= Push flow =

When you save the Connect settings, the plugin generates a per-site receiver token once, keeps it across re-saves, and registers this site with geo-mode. A push from geo-mode is a nudge, not a content payload: geo-mode calls this site's REST endpoint (/wp-json/geo-mode/v1/pull) with that token, the plugin pulls the cluster from geo-mode with your API key, imports it published (updating the same posts by cluster + slug), and replies with the permalinks so geo-mode can show per-URL citation proof. The token is checked in constant time and pushes are rejected until Connect has been saved.

== External services ==

This plugin is a client for the geo-mode service and connects to the geo-mode API to fetch your content. It requires a geo-mode account and does not function without one.

* Service: geo-mode (provided by VALKER), https://geo-mode.com
* When it connects: only on actions you initiate - when you save your connection settings (which also registers this site for push), when you list or import your content clusters in wp-admin, and when a push you trigger from geo-mode asks this site to pull a cluster.
* What is sent: your geo-mode API key; on Connect save, your site URL, site name, and a randomly generated receiver token (so geo-mode can authenticate its pushes to this site); on import or push, the id of the cluster. No site-visitor data and no personal data are sent.
* Where it is sent: the geo-mode API endpoints https://geo-mode.com/api/v1/clusters, https://geo-mode.com/api/v1/cluster/pages, and https://geo-mode.com/api/v1/wp/register (the base URL is configurable, so you may point it at a self-hosted geo-mode instance).
* What is received: your content as Gutenberg block markup, schema.org JSON-LD, and meta title/description, stored by the plugin as posts (drafts on import, published on push).

Terms of service: https://geo-mode.com/terms
Privacy policy: https://geo-mode.com/privacy

== Installation ==

1. Upload the plugin via Plugins -> Add New -> Upload Plugin, then activate.
2. Go to geo-mode -> Connect and paste your gm_live_ API key.
3. Go to geo-mode -> Import, pick a cluster, and import it as drafts.
4. Review the drafts under Posts, then publish.

Requires an administrator account so Gutenberg block markup is stored verbatim.

== Frequently Asked Questions ==

= Do I need a geo-mode account? =

Yes. The plugin is a client for geo-mode. Paste a gm_live_ API key from your geo-mode account (geo-mode -> Connect). You can create an account and get a key at https://geo-mode.com.

= What data does the plugin send? =

Only your geo-mode API key and the id of the cluster you choose to import, sent to the geo-mode API. No site-visitor or personal data is sent. See "External services" above.

= Does it conflict with my SEO plugin? =

No. If Yoast, Rank Math, All in One SEO, or SEOPress is active, the plugin defers the meta-description tag to it. The imported JSON-LD is additive and does not duplicate an existing Article schema you have configured elsewhere.

= Are imported posts published automatically? =

Importing from wp-admin never publishes - clusters land as drafts for you to review. Pushing from geo-mode is different on purpose: a push is you deploying, so pushed pages publish immediately (and re-pushes update the same posts).

= Can I re-import a cluster without creating duplicates? =

Yes. Re-import updates the same posts by cluster and slug, so it is idempotent.

== Screenshots ==

1. Connect - paste your gm_live_ API key from your geo-mode account.
2. Import - pick a content cluster and import its pages as drafts.
3. An imported draft - real Gutenberg blocks with schema.org JSON-LD.

== Changelog ==

= 1.1.0 =
* Push from geo-mode: Connect save now registers the site (per-site receiver token, generated once), and a new REST receiver (/wp-json/geo-mode/v1/pull) imports pushed clusters published, updating the same posts by slug, then reports the live URLs back.

= 1.0.0 =
* Initial release: connect, import clusters as Gutenberg-block drafts with schema, mark implemented.

== Upgrade Notice ==

= 1.1.0 =
Adds push: send clusters from geo-mode straight to this site. Re-save Connect once after updating to register the site.

= 1.0.0 =
Initial release.
