GitHub Publishing
Floyi’s GitHub Publishing integration lets you push finished content from the Content Creation workspace straight to any Git-based static site. Your articles arrive as Markdown or MDX files with frontmatter, images, and schema markup, committed atomically to your repository. If your repo has CI/CD configured (Cloudflare Pages, Vercel, Netlify), your site deploys automatically.
What You’ll Learn
Section titled “What You’ll Learn”- How to install the Floyi GitHub App on your GitHub account or organization
- How to connect a repository and configure it for your static site framework
- How to publish, update, and manage articles
- How to customize frontmatter templates for any framework
- How to use framework presets for Astro, Next.js, Hugo, Jekyll, and Docusaurus
- How to manage connected repos and troubleshoot issues
Part 1: Installing the Floyi GitHub App
Section titled “Part 1: Installing the Floyi GitHub App”Before you can connect a repository, you need to install the Floyi GitHub App on your GitHub account or organization.
Requirements
Section titled “Requirements”| Requirement | Detail |
|---|---|
| GitHub account | Personal account or organization |
| Repository access | You must be able to grant the app access to the target repo |
| Floyi Plan | Any paid plan |
| Static site framework | Any framework that reads Markdown/MDX files (Astro, Next.js, Hugo, Jekyll, Docusaurus, Eleventy, VitePress, Nuxt Content, etc.) |
| CI/CD (optional) | Cloudflare Pages, Vercel, Netlify, or any platform that auto-deploys on push |
[!NOTE] CI/CD is not required. Floyi commits files to your repo regardless. However, without CI/CD, you’ll need to manually build and deploy your site after publishing.
What Permissions Does the App Need?
Section titled “What Permissions Does the App Need?”The Floyi GitHub App requests minimal permissions:
| Permission | Level | Purpose |
|---|---|---|
| Contents | Read & Write | To commit Markdown/MDX files and images to your repo |
| Metadata | Read | To list repositories and branches |
Floyi does not request access to issues, pull requests, actions, or any other GitHub features.
Installation Steps
Section titled “Installation Steps”- In Floyi, go to Settings > Integrations.
- Scroll to the GitHub section.
- Click Connect.
- You are redirected to GitHub to install the Floyi app.
- Choose which account or organization to install on.
- Select All repositories or choose specific repos you want Floyi to access.
- Click Install.
- GitHub redirects you back to Floyi with a confirmation.
After installation, Floyi stores your installation ID. You can now connect individual repositories.
[!TIP] If you’re installing on an organization, an organization admin may need to approve the installation first. Check your org’s GitHub App policy if the install is blocked.
Part 2: Connecting a Repository
Section titled “Part 2: Connecting a Repository”After installing the GitHub App, you connect individual repositories and configure how Floyi publishes to each one.
Step-by-Step Connection
Section titled “Step-by-Step Connection”- In Settings > Integrations, under the GitHub section, click + Connect.
- The connection modal opens with two steps.
Step 1: Select Repository
- If you’ve already installed the Floyi app, your accessible repos appear in a dropdown.
- If you haven’t installed the app yet, click Install Floyi on GitHub to start the installation flow.
- Select the repository you want to publish to.
- Select the target branch (e.g.,
main,develop).
Step 2: Configure Publishing Settings
Choose a framework preset (optional) to pre-fill settings, or configure manually:
- File Extension —
.mdor.mdx - File Naming Pattern — How article files are named (e.g.,
{slug}.mdx,{date}-{slug}.md,{slug}/index.md) - Content Path — Where Markdown/MDX files are committed (e.g.,
src/content/blog/) - Image Path — Where images are committed (e.g.,
src/assets/blog/) - Frontmatter Template — The YAML frontmatter template with
{{ variable }}placeholders - Schema Embed Mode — How JSON-LD schema markup is included: as a script tag after frontmatter, inside frontmatter, or not at all
Click Connect to save the configuration. A success screen confirms the connection with a summary of your settings.
Framework Presets
Section titled “Framework Presets”Presets pre-fill all settings with sensible defaults for popular frameworks. You can edit everything after selecting a preset.
| Preset | Extension | Content Path | Image Path | File Naming |
|---|---|---|---|---|
| Astro | .mdx | src/content/blog/ | src/assets/blog/ | {slug}.mdx |
| Next.js | .mdx | content/blog/ | public/images/blog/ | {slug}.mdx |
| Hugo | .md | content/posts/ | static/images/posts/ | {slug}/index.md |
| Jekyll | .md | _posts/ | assets/images/posts/ | {date}-{slug}.md |
| Docusaurus | .mdx | blog/ | static/img/blog/ | {date}-{slug}.mdx |
If your framework isn’t listed, skip the preset and configure settings manually. The integration is framework-agnostic — it works with any static site that reads Markdown or MDX files.
[!TIP] You can change all connection settings later from Settings > Integrations by clicking the settings icon on the connected repo card.
Part 3: Managing Connected Repositories
Section titled “Part 3: Managing Connected Repositories”After connecting, your repositories appear in Settings > Integrations under the GitHub section.
Connection Card
Section titled “Connection Card”Each connected repo shows:
- Repository name in
owner/repoformat - Branch being published to
- Content path where files are committed
- File extension (
.mdor.mdx) - Framework preset badge (if one was used)
- Last publish date and article count
- Settings button to modify connection configuration
- Disconnect button to remove the connection
Health Check
Section titled “Health Check”Click the health check icon on any connected repo to verify the connection is working. A successful check confirms that:
- The Floyi GitHub App still has access to the repository
- The configured branch exists
- Floyi can write to the repository
If the check fails, review the error message. Common causes include:
- The Floyi app was uninstalled from GitHub
- The repository was deleted or renamed
- Repository access was revoked from the app’s installation settings
Publishing Sites Limits
Section titled “Publishing Sites Limits”WordPress and GitHub connections share a single publishing sites limit based on your Floyi plan. The connection count appears as a badge (e.g., “2/3”) next to the Publishing section header.
| Plan | Max Publishing Sites |
|---|---|
| Free | 0 |
| Creator | 1 (WordPress + GitHub combined) |
| Pro | 3 (WordPress + GitHub combined) |
| Agency | 10 (WordPress + GitHub combined) |
Disconnecting a site frees up a slot immediately.
Disconnecting a Repository
Section titled “Disconnecting a Repository”- Click the Disconnect button (trash icon) on the repo card.
- Confirm the disconnection in the dialog.
Disconnecting removes the active link between Floyi and your repository. Files already committed to the repo remain untouched. You can reconnect the same repo later.
Part 4: Publishing Content to GitHub
Section titled “Part 4: Publishing Content to GitHub”You can publish any article from the Content Creation workspace to a connected GitHub repository.
Opening the Publish Modal
Section titled “Opening the Publish Modal”- Open an article in the Content Editor.
- Click the Publish dropdown in the toolbar.
- Select Publish to GitHub.
- The GitHub publish modal opens.
Selecting a Repository
Section titled “Selecting a Repository”If you have multiple connected repos, choose the target repo from the Repository dropdown. The dropdown shows each repo’s name, branch, and framework preset.
If only one repo is connected, it is selected automatically.
Publish Settings
Section titled “Publish Settings”When you select a repository, the publish settings are pre-filled from your connection configuration. You can override any setting for this specific publish without changing the connection defaults:
- Branch — The branch to commit to
- File extension —
.mdor.mdx - Content path — Where the article file goes
- File naming pattern — How the file is named
- Image path — Where images are committed
- Schema markup — Script tag, frontmatter, or none
- Include images — Toggle to include or exclude images from the commit
File Path Preview
Section titled “File Path Preview”Below the settings, a file path preview shows exactly where the article will be committed:
src/content/blog/seo-topical-map-mistakes.mdxThis updates live as you change the content path, file naming pattern, or file extension.
Frontmatter Preview
Section titled “Frontmatter Preview”If a frontmatter template is configured, it appears in an editable text area. You can review and modify the template before publishing. Variables like {{ title }}, {{ slug }}, and {{ tags_array }} are replaced with actual article data at publish time.
Publishing
Section titled “Publishing”Click Publish to GitHub. A loading state appears while Floyi:
- Compiles your article to Markdown
- Renders the frontmatter template with article data
- Downloads images from Floyi’s CDN
- Creates Git blobs for all files
- Commits everything atomically to your repo
Once complete, a success screen shows:
- Repository name and branch
- File path of the committed article
- Commit SHA with a link to view the commit on GitHub
- A note that your site will deploy automatically if CI/CD is configured
How the Commit Works
Section titled “How the Commit Works”Floyi uses the Git Trees API to create a single atomic commit containing the article file and all images. This means either all files are committed together or none are — there are no partial commits.
The commit is authored by Floyi with a message like:
Publish: 10 Common SEO Topical Map Mistakes
Published via FloyiPart 5: Updating Published Content
Section titled “Part 5: Updating Published Content”When you edit an article in Floyi after it has been published to GitHub, the publish modal shows that the article was previously published.
How Updates Work
Section titled “How Updates Work”- Open the previously published article in the Content Editor.
- Click the Publish dropdown and select Publish to GitHub.
- The modal shows:
- A Previously published indicator with a green checkmark
- The commit SHA of the last publish (clickable link to GitHub)
- An Update badge if the article content has changed since the last publish
- Modify any publish settings if needed.
- Click Update on GitHub to push the latest version.
The updated content replaces the existing file in your repo. A new commit is created — the file path remains the same.
Change Detection
Section titled “Change Detection”Floyi tracks a content hash for each published article. When you edit the article in Floyi, the publish modal shows whether the content has changed since the last publish. This helps you know at a glance which articles need updating.
Part 6: Frontmatter Template System
Section titled “Part 6: Frontmatter Template System”The frontmatter template is the core of Floyi’s framework-agnostic approach. You write a YAML template with {{ variable }} placeholders, and Floyi fills them in with article data at publish time.
How It Works
Section titled “How It Works”- When you connect a repo (or select a framework preset), a frontmatter template is saved.
- At publish time, Floyi replaces each
{{ variable }}with the corresponding article data. - The rendered frontmatter is prepended to the Markdown body.
- The assembled file is committed to your repo.
Example: Astro Template
Section titled “Example: Astro Template”Template (what you configure):
---title: '{{ title }}'description: '{{ meta_description }}'pubDate: { { publish_date } }slug: '{{ slug }}'heroImage: '{{ hero_image_path }}'heroAlt: '{{ hero_image_alt }}'author: '{{ brand_name }}'tags: { { tags_array } }---Rendered output (what gets committed):
---title: '10 Common SEO Topical Map Mistakes to Avoid'description: 'Validate seed topics, align search intent, and avoid common pitfalls when building your topical map.'pubDate: 2026-04-17slug: 'seo-topical-map-mistakes'heroImage: './images/seo-topical-map-mistakes-hero.jpg'heroAlt: 'Topical map structure diagram'author: 'Floyi'tags: ['seo', 'topical-maps', 'content-strategy']---Available Template Variables
Section titled “Available Template Variables”| Variable | Description | Example Output |
|---|---|---|
{{ title }} | Article title | 10 Common SEO Topical Map Mistakes |
{{ meta_description }} | SEO meta description | Validate seed topics, align search... |
{{ slug }} | URL slug from topic node or article | seo-topical-map-mistakes |
{{ publish_date }} | Current date (YYYY-MM-DD) | 2026-04-17 |
{{ updated_date }} | Article last updated date | 2026-04-17 |
{{ brand_name }} | Your brand name | Floyi |
{{ hero_image_path }} | Relative path to hero image | ./images/hero.jpg |
{{ hero_image_filename }} | Hero image filename only | hero.jpg |
{{ hero_image_alt }} | Hero image alt text | Topical map structure diagram |
{{ tags_array }} | JSON array of tags | ["seo", "topical-maps"] |
{{ word_count }} | Total word count | 2500 |
{{ topic_level }} | Hierarchy level in topical map | hub |
{{ schema_json }} | Combined JSON-LD string | [{"@context":...}] |
{{ language }} | Primary language code | en |
Editing the Template
Section titled “Editing the Template”You can edit the frontmatter template in two places:
- Connection settings — Go to Settings > Integrations, click settings on a connected repo. Changes here apply to all future publishes from that repo.
- Publish modal — Edit the frontmatter directly before publishing. Changes here apply only to the current publish and do not modify the saved template.
Part 7: Image Handling
Section titled “Part 7: Image Handling”When you publish with images included, Floyi downloads each image from its CDN and commits it to your repository alongside the article file.
How Images Are Committed
Section titled “How Images Are Committed”- Floyi downloads images from the Cloudflare R2 CDN where they are stored.
- Each image is encoded as a Git blob (base64).
- Images are placed in the configured image path, organized in a subdirectory named after the article slug.
- Image references in the Markdown body and frontmatter are rewritten to use relative paths.
Image Directory Structure
Section titled “Image Directory Structure”For an article with slug seo-topical-map-mistakes, images are committed as:
src/assets/blog/ └── seo-topical-map-mistakes/ ├── hero.jpg ├── image-1.jpg └── image-2.jpgThis prevents filename collisions between articles.
Image Source Priority
Section titled “Image Source Priority”Floyi selects the hero/featured image in this order:
- User-selected featured image set explicitly in Floyi
- First image in the article body auto-detected from the editor content
- AI-generated image if image generation was used
- No featured image if none of the above exist
Excluding Images
Section titled “Excluding Images”If you prefer to manage images separately (e.g., through a CMS or image CDN), uncheck Include images in commit in the publish modal. The article file will still be committed, but image paths in the Markdown will reference their Floyi CDN URLs instead of local paths.
Part 8: Schema Markup (JSON-LD)
Section titled “Part 8: Schema Markup (JSON-LD)”Floyi can embed structured data (JSON-LD schema markup) in your published files. This is the same schema data generated by Floyi’s Schema Generator.
Embed Modes
Section titled “Embed Modes”| Mode | How It Works | Best For |
|---|---|---|
| Script tag (default) | JSON-LD is inserted as an inline <script type="application/ld+json"> tag after the frontmatter, before the Markdown body | Most frameworks — the script tag renders in the HTML output |
| Frontmatter | JSON-LD is included as a frontmatter field (e.g., schema: [...]) | Frameworks where you handle schema in layout templates |
| None | No schema markup included | When you manage schema separately |
You can change the schema embed mode per connection in your repo settings, or override it per publish in the publish modal.
Part 9: Topical Authority Integration
Section titled “Part 9: Topical Authority Integration”When you publish an article that is linked to a topic in your Topical Map, Floyi automatically updates your Topical Authority data:
- The topic node is marked as Published in the Topical Authority Planner
- Your coverage metrics update to reflect the newly published content
- The Topical Authority Scorecard reflects the change in your next refresh
This creates a closed loop: plan topics in your Topical Map, create briefs and drafts, publish to GitHub, and track authority growth — all within Floyi.
Part 10: Internal Link Handling
Section titled “Part 10: Internal Link Handling”Floyi articles can contain internal links to other articles. When publishing to GitHub, these links are automatically resolved.
How Link Resolution Works
Section titled “How Link Resolution Works”- Published articles — Internal links pointing to other published articles are resolved to your site’s URL using your brand website URL + the article slug.
- Cross-repo links — If the linked article is published to the same repo, relative paths are used.
- Unpublished articles — If a linked article hasn’t been published yet, Floyi warns you during the pre-publish step. The link is still included but may not resolve until the target article is published.
Part 11: Error Handling and Recovery
Section titled “Part 11: Error Handling and Recovery”Common Errors
Section titled “Common Errors”| Error | What It Means | What to Do |
|---|---|---|
| Branch was updated | Someone else pushed to the branch while Floyi was publishing | Floyi retries automatically with the latest branch state |
| Repository not found | The repo was deleted or renamed | Check that the repo still exists and update the connection |
| Rate limit reached | GitHub’s API rate limit was hit (rare with normal usage) | Wait a few minutes and retry |
| App not installed | The Floyi GitHub App was uninstalled | Reinstall the app from Settings > Integrations |
| Permission denied | Floyi lost access to the repo | Check the app’s installation settings on GitHub |
| Branch protected | The target branch has protection rules that block direct pushes | Use a different branch or update the branch protection rules |
Retrying a Failed Publish
Section titled “Retrying a Failed Publish”When a publish fails, the error screen shows a Retry button. Click it to attempt the publish again with the same settings. Floyi also retries automatically up to 3 times with increasing delays for transient errors.
Publishing Timeout
Section titled “Publishing Timeout”If publishing takes longer than 2 minutes (e.g., an article with many large images), the modal shows a timeout message. The task may still be running in the background — check your GitHub repo to see if the commit appeared.
Permissions
Section titled “Permissions”GitHub publishing is available to team members based on their role:
| Action | Required Role |
|---|---|
| Install GitHub App / Connect a repo | Team Admin or Owner |
| Disconnect a repo | Team Admin or Owner |
| Update connection settings | Team Admin or Owner |
| Publish or update articles | Any team member |
| View connection status | Any team member |
| Run health checks | Any team member |
Security
Section titled “Security”How Floyi Connects to GitHub
Section titled “How Floyi Connects to GitHub”Floyi uses a GitHub App (not OAuth tokens or personal access tokens) for maximum security:
| Property | Detail |
|---|---|
| No stored user tokens | Only the installation ID is stored. Access tokens are ephemeral (1-hour TTL) and cached temporarily |
| Minimal permissions | Only contents: write and metadata: read |
| User-controlled access | You choose exactly which repos the app can access during installation |
| Org admin approval | Organization admins can require approval before app installation |
| Clear attribution | All commits are authored by Floyi, making them easy to identify in Git history |
| Revocable | You can uninstall the app at any time from your GitHub settings |
What Floyi Stores
Section titled “What Floyi Stores”| Data | Where | Sensitivity |
|---|---|---|
| Installation ID | Database | Low — a number, useless without the app’s private key |
| Repo name, branch, paths | Database | Low — user-configured settings |
| Commit SHAs and file paths | Database | Low — public Git data |
| GitHub App private key | Environment variable (server only) | High — never stored in the database |
| Installation access tokens | Temporary cache (1-hour TTL) | Medium — ephemeral and auto-expire |
Frequently Asked Questions
Section titled “Frequently Asked Questions”How many GitHub repos can I connect?
Section titled “How many GitHub repos can I connect?”The number of connections depends on your Floyi plan. WordPress and GitHub connections share the same limit. Your current usage is shown in the Publishing section header (e.g., “2/3”). Free plans do not include publishing integrations.
Can I publish the same article to multiple repos?
Section titled “Can I publish the same article to multiple repos?”Yes. Open the publish modal and select a different repo from the dropdown. Each repo maintains its own publish record, so you can publish the same Floyi article to multiple repos with different settings and frontmatter templates.
Can I publish to both WordPress and GitHub?
Section titled “Can I publish to both WordPress and GitHub?”Yes. WordPress and GitHub are independent publishing integrations. You can publish the same article to a WordPress site and a GitHub repo. Each uses its own publish flow and tracks its own publish status.
What static site frameworks are supported?
Section titled “What static site frameworks are supported?”Any framework that reads Markdown or MDX files with YAML frontmatter. Floyi provides quick-start presets for Astro, Next.js, Hugo, Jekyll, and Docusaurus, but the integration is framework-agnostic. You can configure the frontmatter template, file naming, and paths to match any framework.
Does Floyi create pull requests or commit directly?
Section titled “Does Floyi create pull requests or commit directly?”Floyi commits directly to the configured branch (e.g., main). Pull request-based workflows are planned for a future update.
What happens if I disconnect and reconnect the same repo?
Section titled “What happens if I disconnect and reconnect the same repo?”Files already committed to the repo remain untouched. After reconnecting, Floyi creates a new connection record. Existing publish records from the previous connection are preserved in Floyi’s history.
Why isn’t my site deploying after I publish?
Section titled “Why isn’t my site deploying after I publish?”Floyi commits files to your repo but does not manage deployments. Verify that:
- Your CI/CD platform (Cloudflare Pages, Vercel, Netlify) is configured to deploy on pushes to the branch Floyi commits to
- Your build is not failing due to content errors (check your platform’s build logs)
- The committed files are in the correct directory for your framework
Can I edit the frontmatter after selecting a preset?
Section titled “Can I edit the frontmatter after selecting a preset?”Yes. Presets are a convenience that pre-fills settings. After selecting a preset, you can edit every field — the content path, image path, file naming pattern, and the entire frontmatter template. You can also start from scratch without a preset.
How do I know if an article needs updating on GitHub?
Section titled “How do I know if an article needs updating on GitHub?”The publish modal shows a Previously published indicator with the commit SHA. If the article has changed since the last publish, an orange Update badge appears. You can also see this in the file path preview area of the publish modal.
What commit message does Floyi use?
Section titled “What commit message does Floyi use?”Commits use the format: Publish: {Article Title} with a body of Published via Floyi. For updates, the message is Update: {Article Title}.
Can I change which repos the app has access to?
Section titled “Can I change which repos the app has access to?”Yes. Go to your GitHub account settings > Applications > Floyi, and modify the repository access. You can add or remove repos at any time. Changes take effect immediately in Floyi.
What happens to my files if I uninstall the Floyi app from GitHub?
Section titled “What happens to my files if I uninstall the Floyi app from GitHub?”All files previously committed to your repo remain unchanged. Uninstalling the app only removes Floyi’s ability to make new commits. In Floyi, the connection is marked as disconnected.
Is my repo content safe?
Section titled “Is my repo content safe?”Floyi only creates or updates files that it published. It never modifies, deletes, or reads files that were not created through Floyi’s publishing flow.