GEOFlow: a Laravel GEO content pipeline that publishes to WordPress and its own PHP Agent
Open-source GEO content engineering and multi-site distribution system with AI tasks, RAG/semantic chunking, analytics, GEOFlow Agent and WordPress target publishing.
At a glance
- What is it?
- GEOFlow is an Apache-2.0 Laravel application for generating, quality-checking and distributing GEO content across multiple sites. It is heavy infrastructure, and the README is honest about the setup work that implies.
- Who is it for?
- Adopt GEOFlow if you already run Laravel or PHP infrastructure, need a review gate between AI generation and publishing, and plan to distribute to more than one site. Do not adopt it if you want a single binary, a hosted service, or a quick content generator; the README describes DNS, wildcard TLS, trusted proxies and Nginx work before hosted channel sites can be enabled.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 5 days ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem GEOFlow solves, and who it is actually for
Most AI content tools stop at the draft. GEOFlow assumes the harder part is everything after it: keeping a knowledge base that generated claims can be traced to, running an automated quality check before publication, and pushing the same article to a local front end, a WordPress site and a self-hosted PHP Agent target. The README describes the goal as turning trusted material into content assets that are manageable, publishable, trackable and synchronizable across endpoints.
The intended user is a team, not an individual blogger. The repository ships a Laravel admin, a scheduler, queue workers, Reverb, a Chrome extension, a browser operations runbook and a separate updater project. That is a lot of moving parts for someone who just wants a prompt box. If you are a solo writer, the operational surface here is larger than the writing problem it solves.
How the generation and distribution pipeline is wired
The README lays out the data flow explicitly. Admin pages hold AI configuration, material libraries, prompts and task configuration. A scheduler scans and enqueues work; `queue:work` or Horizon consumes it; workers call the model to produce body text and metadata. Articles then move through draft, review and publish states, appear on the local Blade front end with SEO metadata, and, if a distribution channel is selected, enter a distribution queue that syncs to a GEOFlow Agent or WordPress target.
Persistence is PostgreSQL, with the README recommending the pgvector image so the local instance matches production, plus Redis for queue and cache. The knowledge base supports structured rule-based chunking with optional LLM semantic planning and a fallback path; once an embedding model is configured, vectors are written and recalled during article generation. Target sites keep local JSON and static files.
The quality gate is the part worth noting. According to the README, articles are checked against knowledge evidence, advertising rules and publishing context, producing itemized scores, source locations, regulatory references and revision suggestions. Results that are pending review, blocked, abnormal or expired stay in draft. That is a design choice with a cost: a misconfigured rule set can hold back legitimate articles, and the README does not document a bulk override beyond auditable manual release.
Installing GEOFlow with Docker Compose and completing a first task
The repository ships `docker-compose.yml`, `docker-compose.prod.yml` and `docker-compose.prebuilt.yml`. The dev compose file defines a pgvector PostgreSQL service, Redis, a Node assets builder, and an init container that runs automatic initialization including key generation and migration. Ports are bound to localhost by default: PostgreSQL on 15432 and Redis on 16379, with the app on 18080 per `.env.example`.
Start by copying the environment template. The README warns that injecting an empty `APP_KEY` environment variable prevents a valid key from being written, so leave it blank in the file and let the entrypoint generate it.
cp .env.example .env
docker compose up -dThe init container sets `GEOFLOW_SECURITY_FRESH_INSTALL_CONFIRMED=true` and `AUTO_INIT_ONCE=true`, so the first boot runs migrations. A fresh install uses clean data and does not import demo articles, per the release notes.
Once the admin is reachable, the README's three-step onboarding is: configure at least one chat model, add an embedding model if you want knowledge base recall, then prepare the knowledge, title, keyword, image and author libraries. Only after that do you create a task.
php artisan queue:workThat worker is what actually calls the model. Without a running queue process, tasks are enqueued and never generated. The README also documents a bundled CLI at `bin/geoflow` for managing directories, tasks, execution records, materials and articles through API v1, with official support for macOS, Linux and WSL; native Windows configuration file ACLs need manual confirmation.
Where GEOFlow gets in your way
The hosted channel sites feature is off by default via `GEOFLOW_HOSTED_SITES_ENABLED=false`, and the README is direct about why: enabling it requires wildcard DNS, wildcard TLS, trusted proxy configuration and a three-entry Nginx setup first. Subdomain allocation, lifecycle management, publish quotas, failure cooldowns and cache invalidation all sit behind that gate. If you cannot control DNS and TLS for a root domain, this half of the product is unavailable to you.
Upgrades are not a one-command affair either. The release notes state that upgrading requires running migrations, rebuilding the front end and restarting runtime processes, and then installing and validating GEOFlow Updater. That updater is a separate repository and communicates over a fixed local Unix socket; sensitive operations require an admin password and a six-digit authenticator code. It is a sensible security posture and also another component to keep running.
There is also a licensing wrinkle worth reading carefully. The repository LICENSE is Apache-2.0, and the README repeats that you may use, copy, modify and distribute the project including commercially. But `package.json` declares `"license": "AGPL-3.0-only"`. Those two statements do not agree, and the README does not explain the split. If your legal position depends on the answer, ask the maintainer rather than assuming the README wins.
GEOFlow against a plain WordPress publishing stack
The obvious alternative is WordPress with an AI writing plugin and a scheduled posting plugin. That approach is far cheaper to run: one PHP host, one database, and the publishing target is the same system that generates the content. GEOFlow instead treats WordPress as one distribution channel among several, alongside its own PHP Agent package and a generic HTTP API channel.
The difference in mechanism matters. A WordPress plugin generates inside the site it publishes to. GEOFlow generates centrally, stores the article in its own PostgreSQL database with review state, and then pushes it out. That gives you a single audit trail across multiple domains and lets the same article land on a local Blade front end and a remote WordPress install. It also means the central instance becomes a dependency: if it is down, nothing new is generated or distributed. For a single-site blog, that trade is not worth making. For a team running several properties with a shared knowledge base, it is the reason to look at this project at all.
Maintenance, upgrades and what the licence split means for you
The last push to the default branch was on 2026-08-09, the same day v2.3.0 was tagged, after v2.2.0 on 2026-07-29 and v2.1.2 on 2026-07-28. The repository is not archived. Release cadence in that window was frequent, though the README's own feature notes describe the 3.0 line while the newest tag is v2.3.0, which is a discrepancy the documentation does not resolve.
Upgrade cost is real and documented: migrations, a front-end rebuild and process restarts, with GEOFlow Updater installed separately for backup and rollback. The updater's rollback path is the recovery mechanism; the README does not describe an alternative if the updater itself is unavailable.
On licensing, Apache-2.0 requires you to keep the copyright notice and licence text and carries patent grant, trademark and disclaimer terms. The AGPL-3.0-only declaration in `package.json` would, if it governs the front-end build, impose network copyleft obligations that Apache-2.0 does not. This is a question for your own counsel, not something to settle from a README.
Editorial conclusion
Adopt GEOFlow if you already run Laravel or PHP infrastructure, need a review gate between AI generation and publishing, and plan to distribute to more than one site. Do not adopt it if you want a single binary, a hosted service, or a quick content generator; the README describes DNS, wildcard TLS, trusted proxies and Nginx work before hosted channel sites can be enabled. Verify first that Docker Compose brings up PostgreSQL with pgvector, that at least one chat model passes the streaming check, and that GEOFlow Updater is installed and validated before you rely on the updater socket for backups and rollback.
Frequently asked questions
How do I install GEOFlow?
The repository provides Docker Compose files that bring up PostgreSQL with pgvector, Redis, the application, queue, scheduler and Nginx. Copy .env.example to .env, leave APP_KEY blank so the entrypoint generates it, then run docker compose up -d.
Does GEOFlow send telemetry?
Anonymous usage statistics exist but are disabled by default through GEOFLOW_TELEMETRY_ENABLED=false, and no request is made when the collection address is empty. When enabled, the payload is limited to a random instance ID, an irreversible admin digest, the version and the event type.
What licence does GEOFlow use?
The LICENSE file and README state Apache-2.0, allowing commercial use with the copyright notice and licence text retained. However, package.json declares AGPL-3.0-only, and the README does not explain the difference.
Which platforms does the GEOFlow CLI support?
The bundled bin/geoflow CLI officially supports macOS, Linux and WSL. Native Windows requires manual confirmation of configuration file ACLs according to the README.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/yaojingang-geoflow)