@yaojingang: After a month of continuous iteration, the first GEO system "GEOFlow 2.0" is officially launched. GitHub link at the end. A month ago, GEOFlow 1.0 was launched. Now, exactly one month later, the star count has exceeded 1.6k. Over this past month, I've received feedback and real-world implementation cases from many friends...
Summary
GEOFlow 2.0 is officially launched, with a systematic refactoring, adding multi-site distribution, AI knowledge base enhancement, data analysis, and other features, aiming to become the infrastructure for GEO content engineering.
View Cached Full Text
Cached at: 05/23/26, 08:06 AM
After a month of continuous iteration, the first GEO system “GEOFlow 2.0” has officially launched. The GitHub link is at the end of this article.
A month ago, GEOFlow 1.0 went live. Now, exactly one month later, the star count has exceeded 1.6k. During this month, I have received a lot of feedback and real-world implementation cases from friends.
This 2.0 upgrade marks a key version for GEOFlow to evolve from an “open-source content production system” to a “GEO content engineering infrastructure.”
Here are several core changes:
-
Systematic refactoring based on the Laravel framework
The underlying architecture is clearer. Modules such as the backend, tasks, queues, distribution, and data analysis are now better suited for long-term iteration and real-world deployment. -
From single-site to multi-site and multi-Agent
Previously, it mainly managed content production for a single site. Now, you can use one backend to manage content distribution, remote synchronization, and operational status across multiple channel sites, while retaining ports for multi-channel API access. -
Further enhanced AI knowledge base capabilities
Continuous optimization has been made around knowledge bases, material libraries, vectorized retrieval, AI generation, and content invocation, making the system more suitable for enterprises to internalize knowledge assets and more suitable for GEO content production and ongoing updates. -
Multi-site distribution has entered a closed-loop operational state
Supports distribution channel management, Agent keys, test connections, target site package downloads, distribution queues, distribution logs, and remote article editing/deletion. This means GEOFlow now has the capability for “central backend + multiple target sites” content distribution. -
Target channel site packages are online
Each channel can generate pre-configured target site packages, including a built-in PHP Agent, homepage, article detail page, static resources, sitemap, TXT map, and Schema structured data. This step is crucial for GEO because AI not only needs content but also more stable, structured, and easily crawlable source expressions. -
New data analysis page added
System overview, single-site operations, multi-site distribution, access logs, top articles, top channel sites, AI crawler identification, and other data are now unified in the backend. GEO operations should not only look at “how much content was published,” but also whether the content has been accessed, crawled, distributed, and continuously maintained. -
Deployment, security, and test coverage continue to improve
Includes Docker production deployment optimization, default admin initialization improvements, multilingual completion, and more tests related to distribution management, data analysis, and access logs.
During this period, many friends have given me feedback:
- Some have done secondary development based on GEOFlow and started exploring commercial services.
- Some use it to manage enterprise internal AI knowledge bases and content assets, significantly improving content production and collaboration efficiency.
- Some use it as the foundational system for GEO projects to support knowledge bases, content generation, multi-site publishing, and effect tracking.
I believe a key core of GEO is “continuously building trustworthy content assets.” In GEOFlow, many such concepts and designs are incorporated. How to turn real, trustworthy, and verifiable materials into manageable, generable, publishable, traceable, and multi-terminal-syncable GEO content assets.
Welcome to try it out, and also welcome Star, Fork, and co-build together.
2.0 GitHub address: https://github.com/yaojingang/GEOFlow
yaojingang/GEOFlow
Source: https://github.com/yaojingang/GEOFlow
GEOFlow
Languages: 简体中文 | English | 日本語 | Español | Русский | Português (BR)
GEOFlow is an open-source intelligent content engineering and multi-site distribution system specifically designed for GEO (Generative Engine Optimization). It connects knowledge bases, material libraries, prompts, AI generation tasks, review and publishing, data analysis, target channel site packages, and remote static page distribution into a sustainable operational workflow. The goal is to help teams turn trustworthy materials into manageable, publishable, traceable, and multi-terminal-syncable GEO content assets.
PHP (https://www.php.net/)
PostgreSQL (https://www.postgresql.org/)
Docker (https://docs.docker.com/compose/)
License
GitHub stars (https://github.com/yaojingang/GEOFlow/stargazers)
GitHub forks (https://github.com/yaojingang/GEOFlow/network/members)
GitHub issues (https://github.com/yaojingang/GEOFlow/issues)
GEOFlow is open-sourced under the Apache License 2.0. You are free to use, copy, modify, and distribute this project, including for commercial use. Please retain the copyright notice and license text, and comply with the patent authorization, trademark, and disclaimer terms of Apache-2.0.
✨ What can you do with it
| Feature | Description |
|---|---|
| 🤖 Multi-model content generation | Compatible with OpenAI-style APIs, supports chat / embedding models, Provider URL auto-adaptation, intelligent model switching, failure retry, and call statistics |
| 🧠 Knowledge base & RAG | Knowledge base uploads are automatically chunked; after configuring an embedding model, vectors are written, and relevant materials are recalled during article generation |
| 🗂 Material and prompt system | Centralized management of title libraries, keyword libraries, image libraries, author libraries, knowledge bases, body prompts, and special prompts |
| 📦 Task automation | Supports task creation, generation quantity, draft pool, review toggle, publishing rhythm, queue execution, failure retry, and task article filtering |
| 📋 Review and article management | Unified management of drafts, reviews, published, recycling bin, authors, categories, SEO fields, and task source |
| 📡 Multi-site distribution management | Supports distribution channels, Agent keys, target site packages, static mode, pseudo-static rules, remote article editing/deletion, and queue logs |
| 🧾 Target site packages | Generates pre-configured PHP Agent packages for each channel, including homepage, detail page, static resources, sitemap, llms.txt / TXT map, and Schema |
| 📊 Data analysis | Centrally displays system overview, single-site content operations, multi-site distribution, access logs, top content, AI crawler identification, and trend charts |
| 🔍 SEO & LLM crawl-friendly output | Article SEO meta information, Open Graph, Schema, GFM Markdown, standalone CSS, image sync, sitemap, and TXT map |
| 🎨 Frontend & Themes | Default theme, theme packages, preview path, backend theme switching; remote channels can sync site title, copyright, theme, and category settings |
| 🌍 Backend multilingual | Backend supports Chinese, English, Japanese, Spanish, Russian, Portuguese (Brazil) switching, covering new 2.0 modules |
| 🔔 Version reminder | Backend can check for new versions on GitHub via version.json and notify admins when a new version is available |
| 🐳 Direct deployment | Docker Compose with one-click startup of PostgreSQL (pgvector), Redis, application, queue, scheduler, Reverb, and production Nginx/php-fpm |
🖼 Preview screenshots
The above pages cover the main workflow such as site homepage, task scheduling, article flow, and model configuration. For more backend documentation, see docs/ (if no screenshots are present in the directory, add or replace with your own screenshot paths).
🆕 New version highlights
Key changes in GEOFlow 2.0 include:
- Backend homepage changed to operations navigation: Retains the three-step getting-started guide, and organizes entrances by single-site operations, multi-site distribution, and supporting skill resources.
- Data analysis as a separate page: System overview, content operations, task health, material health, distribution status, access logs, and AI crawler trends are centralized at
/admin/analytics. - Distribution management enters closed-loop operation: Supports channel creation, key management, test connection, target site package download, static/pseudo-static mode, remote settings sync, queues, logs, remote article editing/deletion.
- Target channel sites support static pages: After article distribution, generates remote homepage, detail page, sitemap, TXT map, and
llms.txt, and syncs images and standalone CSS. - Materials & RAG more complete: Knowledge base chunking, vectorization status, title library, keyword library, image library, author, and prompt system form task production input.
- Deployment & security enhancements: Production Docker uses Nginx + PHP-FPM, default admin seed does not overwrite existing accounts, Docker images and Composer mirrors can be configured.
- Multilingual coverage completed: Backend language packs cover new 2.0 modules, reducing bare translation keys or English fallbacks in the interface.
🏗 Operation structure
Backend management page
↓
AI configuration / Material library / Prompts / Task configuration
↓
Scheduler / Queue / Worker execute AI generation
↓
Draft / Review / Publish
↓
Local frontend articles & SEO pages
↓
Distribution queue / Target site Agent
↓
Remote static homepage, detail page, sitemap, TXT map & llms.txt
🧱 System architecture
| Layer | Description |
|---|---|
| Web / Admin | Laravel routes and controllers; frontend article site, Blade backend, data analysis, distribution management, material and task entry points |
| API / Agent | Local API and target site PHP Agent; handles distribution health checks, article reception, remote settings sync, and static file generation |
| Scheduler / Queue / Reverb | Laravel Scheduler scans and enqueues; queue:work / Horizon consumes generation and distribution tasks; Reverb enabled as needed |
| Domain & Jobs | app/Services, app/Jobs, app/Http/Controllers, etc., carry out AI generation, RAG, publishing, distribution, and log analysis rules |
| Persistence | PostgreSQL (recommended pgvector image for consistency with online instance) + Redis (queue/cache, etc.) + target site local JSON/static files |
Core workflow:
- Configure models, prompts, and material libraries in the backend
- Prepare knowledge bases, title libraries, keyword libraries, image libraries, and author libraries
- Create tasks and enter scheduling and queues
- Worker (queue process) calls the model to generate body and metadata
- Articles enter draft, review, and publish pipeline
- Local frontend outputs articles and SEO pages
- If a distribution channel is selected, articles enter the distribution queue and sync to target sites
- Data analysis page continuously views content production, distribution status, access logs, and AI crawler trends
⚡ Three-step backend getting started
After logging into the backend, it is recommended to follow the “Quick Start” in the dashboard to complete the first round of verification:
- Configure API: Add at least one available chat model; if you need knowledge base RAG recall, also add an embedding model.
- Configure material library: Prepare knowledge base, title library, keyword library, image library, and author. It is recommended to use real, verifiable business materials for the knowledge base first.
- Create a new task: Select title library, materials, model, generation quantity, and publishing frequency. First let articles enter draft or review workflow, then gradually enable automatic publishing.
🎯 Applicable scenarios and target benefits
GEOFlow is suitable for these real, implementable scenarios:
- Independent GEO website: Organize the official website content, product materials, FAQs, case studies, and brand knowledge into a continuously updatable content system. The goal is to improve AI search visibility, brand source coverage, and content operation efficiency, not to pile up low-quality pages.
- GEO sub-channel within a website: Build an independent news, knowledge, or solution channel under an existing official website. The goal is to make brand content more structured and easier for search engines to reference, and also convenient for different teams to collaborate on updates.
- Independent GEO source site: Continuously accumulate high-quality articles, rankings, interpretations, guides, and materials for a specific industry, topic, or problem domain. The goal is to build stable and trustworthy external content assets, not to pollute information.
- GEO content management system: As an internal content production backend, manage models, materials, titles, images, knowledge bases, reviews, and publishing from a central point. The goal is to improve team efficiency, reduce repetitive work, and minimize context switching between scattered tools.
- GEO multi-site / multi-column deployment: Use the same system to manage multiple sites, multiple columns, or multiple theme templates. The goal is to standardize content production, template switching, distribution, and maintenance.
- Automated source management and content distribution: Engineer the management of knowledge bases, thematic content, news updates, and content distribution workflows. The goal is to make truly valuable information more stably understood, referenced, and retrieved by users and AI.
The benefits of this system should be based on a real, high-quality, and continuously maintained knowledge base.
We do not encourage using the system to create information noise, bulk-pollute the internet, or pile up fake content. The essence of GEOFlow is to help teams manage, produce, and distribute trustworthy content more efficiently, improving AI marketing efficiency and GEO operational efficiency, not to replace facts, judgment, or content quality itself.
🧭 Scenario-based deployment and usage
Different scenarios suggest the following ways to use GEOFlow:
- Run as an independent GEO website: Deploy the complete frontend and backend, and operate around the official website columns, product page extensions, FAQs, case studies, and topics. Suitable for teams that want to turn their website into AI-search-friendly content assets.
- Run as a GEO sub-channel within a website: Deploy GEOFlow as a relatively independent content channel, then connect to the main site via navigation, subdomain, or directory. Suitable for teams that don’t want to restructure the main site but need to quickly launch a content channel.
- Run as a GEO source site: Maintain a separate content site focused on a specific topic, prioritizing knowledge base and material development, then use the task system for stable updates. Suitable for teams that want to build industry-specific, thematic, or problem-oriented content assets.
- Run as an internal GEO content management backend: Weaken the frontend, focus on the backend’s model configuration, material library, task scheduling, review/publishing, and API capabilities. Suitable for content teams, growth teams, or brand teams to use as an internal production system.
- Run as a multi-site / multi-channel system: Use different templates, columns, domains, or deployment instances to manage multiple content outputs. Suitable for teams that need to maintain multiple brand channels, multiple topic sites, or multiple experimental sites simultaneously.
- Run as an automated source management system: Focus on building knowledge bases, title libraries, image libraries, and prompt systems, treating the system as a content engineering and distribution console. Suitable for teams that want to accumulate trustworthy knowledge assets over the long term, then gradually expand automation capabilities.
Recommended order of use:
- First, determine real business goals and target readers.
- First, build the knowledge base, then build automation processes.
- First, ensure content is real, verifiable, and maintainable.
- Then use model, task, and template capabilities to improve efficiency.
If the knowledge base itself is not real, complete, or stable, stronger automation will only amplify noise.
Therefore, in GEOFlow, knowledge base construction should always come first.
🚀 Quick start
Method 1: Docker (development / demo)
# 1. Clone the repository
git clone https://github.com/yaojingang/GEOFlow.git
cd GEOFlow
# 2. Copy environment variables
cp .env.example .env
# 3. Edit .env as needed (database, Redis, APP_URL, ADMIN_BASE_PATH, REVERB_*, etc.)
vi .env
# 4. Build and start (includes postgres, redis, init, app, queue, scheduler, reverb)
docker compose build
docker compose up -d
- Frontend default access:
http://localhost:18080(port controlled by environment variableAPP_PORT, default18080) - Backend login:
http://localhost:18080/geo_admin/login(prefix controlled byADMIN_BASE_PATH, defaultgeo_admin)
Upon first startup, the init container will run: after the database is ready, it executes the first migration and seed (default admin – see “Default admin” below).
Method 1 supplement: Docker (production)
For production, it is recommended to use docker-compose.prod.yml, switching to Nginx + php-fpm instead of php artisan serve.
If you want automatic environment checks, Docker detection, .env.prod generation, container deployment, and post-deployment health checks on a common cloud server, you can use the reference deployment script:
curl -fsSL https://raw.githubusercontent.com/yaojingang/GEOFlow/main/deploy-scripts/geoflow-docker-deploy.sh -o geoflow-docker-deploy.sh
bash geoflow-docker-deploy.sh
Script documentation is in deploy-scripts/README.md.
cp .env.prod.example .env.prod
vi .env.prod
docker compose --env-file .env.prod -f docker-compose.prod.yml build
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d postgres redis
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d init
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d app web queue scheduler reverb
- Frontend / backend are accessed via
web(Nginx). - PHP is handled by
app(php-fpm). - Default admin: The production
initservice executesdb:seedonce after migration, only writing the default admin account if the target username does not exist; repeated execution does not overwrite existing accounts or passwords. - Detailed instructions are in
docs/deployment/DEPLOYMENT.md.
Method 2: Local PHP server
Prerequisites: PHP 8.2+, with pdo_pgsql, redis, and other common Laravel extensions enabled; PostgreSQL and Redis installed locally; Composer 2.x installed.
# 1. Clone the repository
git clone https://github.com/yaojingang/GEOFlow.git
cd GEOFlow
# 2. Environment & dependencies
cp .env.example .env
# Edit .env: set DB_HOST/DB_* to your local Postgres, REDIS_* to your local Redis, QUEUE_CONNECTION=redis, etc.
composer install --no-interaction --prefer-dist
php artisan key:generate
# 3. Database & storage
php artisan migrate --force
php artisan db:seed --force # Optional: write default admin, etc.
php artisan storage:link
# 4. HTTP for development (local debugging only; use Nginx + PHP-FPM for production, web root is public/)
php artisan serve --host=127.0.0.1 --port=8080
Open another terminal to start persistent processes (corresponding to queue / scheduler / reverb in Docker):
php artisan queue:work redis --queue=geoflow,distribution,default --sleep=1 --tries=1 --timeout=300
php artisan schedule:work
php artisan reverb:start
- Backend:
http://127.0.0.1:8080/geo_admin/login(replace path ifADMIN_BASE_PATHis modified) - In production, you can use
php artisan horizoninstead ofqueue:work(require process management configured per project).
Environment requirements (deployment checklist)
| Component | Description |
|---|---|
| PHP | 8.2+ (Docker image can be 8.4) |
| Extensions | Laravel standard extensions; PostgreSQL requires pdo_pgsql; Redis queue requires redis |
| Composer | 2.x |
| Database | PostgreSQL (recommend pgvector, matching the image in docker-compose.yml) |
| Redis | Queue, cache, etc. (for local minimal debugging, you can change QUEUE_CONNECTION to sync, not recommended for production) |
Source deployment supplementary notes
Directory permissions (Linux / macOS common):
chmod -R ug+rwx storage bootstrap/cache
Default admin (after running php artisan db:seed, based on Database\Seeders\AdminUserSeeder):
| Field | Value |
|---|---|
| Username | GEOFLOW_ADMIN_USERNAME, default admin |
| Password | Default password for local development; for production, set GEOFLOW_ADMIN_PASSWORD. If left empty in production and the account does not exist, the seed will generate a one-time random password and output it in the initialization log. |
Additional rule: AdminUserSeeder only creates an account if the target username does not exist; repeated execution does not overwrite existing username, email, or password. If the account already exists, even if GEOFLOW_ADMIN_PASSWORD is empty in production, it will not regenerate or print a password.
Admin login lockout and manual unlock
- The admin account will automatically lock after 5 consecutive login failures (
status=locked). - A locked account cannot log in further; an admin must manually unlock it.
- Unlock command:
php artisan geoflow:admin-unlock
Example:
php artisan geoflow:admin-unlock admin
Production environment Web: Use Nginx / Apache + PHP-FPM, with the website root directory pointing to the project’s public/ directory. Do not expose the repository root as the document root.
Docker deployment supplementary notes
Development Compose services overview
| Service | Purpose |
|---|---|
postgres | PostgreSQL 16 + pgvector |
redis | Redis 7 |
init | One-time initialization (restart: "no") |
app | php artisan serve, mapped to ${APP_PORT:-18080}:8080 |
queue | queue:work redis |
scheduler | schedule:work |
reverb | WebSocket, mapped to ${REVERB_EXPOSE_PORT:-18081}:8080 |
When the host only binds 127.0.0.1 to expose database/Redis ports, see DB_EXPOSE_PORT and REDIS_EXPOSE_PORT in docker-compose.yml.
Entry script (docker/entrypoint.sh) common variables
| Variable | Default | Meaning |
|---|---|---|
COMPOSER_ON_START | true | Execute composer install at container startup |
AUTO_MIGRATE | true | Execute php artisan migrate --force on every startup |
AUTO_INIT_ONCE | Only init is true | Execute migrate + db:seed once on a fresh database |
AUTO_GENERATE_APP_KEY | true within init | Automatically generate if no valid APP_KEY exists |
AUTO_SEED | false | If true, run db:seed every startup (use with caution) |
Compose mounts ./storage and ./.env into the container; application code is inside the image. For formal production, use the repository’s new docker-compose.prod.yml (Nginx + php-fpm), and see docs/deployment/DEPLOYMENT.md.
Upgrade suggestion: git pull → docker compose build → docker compose up -d.
Development & testing
composer test
./vendor/bin/pint
🌍 Multilingual documentation
📄 Open-source license
This project is licensed under the Apache License 2.0. This license allows individuals and enterprises to use, modify, distribute, and commercialize GEOFlow, subject to the license statement, copyright retention, modification notes, patent authorization, and disclaimer clauses.
⭐ Star trend
Star History Chart (https://star-history.com/#yaojingang/GEOFlow&Date)
Similar Articles
@yaojingang: Tonight at 8:00 PM, I will hold my first GEO livestream via WaytoAGI, explaining the underlying logic, methods, system principles, and concepts of GEO. The relevant materials and systems are as follows, sharing with everyone: 1. GEOFlow, the system I will be presenting tonight and the GEO principles behind it https://github.co…
This is a preview of a livestream sharing about GEO (Generative Engine Optimization), also introducing the open-source GEOFlow system and its related materials and toolkits.
@yaojingang: Tonight's GEO public class has ended, here are the related links and course materials: 1. Course summary article: https://mp.weixin.qq.com/s/PVi74oPeoUTFUa23tDaBZA… 2. GEOFlow https://github.com/yaoji…
Yao Jingang's GEO public class has ended, providing links to resources such as the course summary article, GitHub project, example site, course materials, datasets, and paper repository.
@yaojingang: I downloaded all papers related to GEO, AEO, and AI search from the past two years — 41 in total. Read through them one by one, and gained many new insights and inspirations. All 41 papers have been pushed to the GitHub repository. Feel free to download. The address is at the end of the article. Some key insights to share: 1. GEO is not a replacement for SEO. SEO addresses whether content can be retrieved, indexed, and entered into the candidate set...
The author collected and read 41 papers related to GEO, AEO, and AI search, pushed the collection to GitHub, and shared 10 key insights, including the relationship between GEO and SEO, AI search citation mechanisms, the importance of content structuring, and practical optimization directions.
@yaojingang: Created a free GEO online professional testing system, now live and open, with relevant links in the comments. Test instructions: 1. Simply enter your name to start the test; after completion, a detailed visual test report will be generated, including detailed explanations, principles, and evidence sources for each question; 2. Based on 54 domestic...
The author released a free GEO (Generative Engine Optimization) online professional testing system. Based on 54 papers and a large number of AI platform citation features, 30 questions were designed. The test is completely free and open source, helping users build professional GEO knowledge.
@giswqs: GeoLibre v2.2 is here! GeoLibre is a free and open-source, lightweight, cloud-native GIS platform for visualizing, expl…
GeoLibre v2.2 is a free, open-source GIS platform update adding terrain-aware 3D measurement, timelapse plugin, advanced symbology, and many other features.