Write once.
Publish everywhere.
PawPoller is a publishing pipeline for furry fiction writers. Draft your chaptered story in Markdown, and it generates every format your platforms need — BBCode, styled HTML, SoFurry, PDFs, SquidgeWorld work skins — then posts to nine platforms with per-chapter tags, descriptions, and thumbnails.
Think of it as PostyBirb, reimagined for people who publish novels, not illustrations.
- 9
- Posting targets
- 11
- Polled platforms
- 1
- Source of truth
<!-- @title -->
# Late Shift
<!-- @subtitle -->
*A novella in seven chapters*
<!-- @byline -->
by Your Name
<!-- @body -->
## Chapter 1: The Last Call
The bar had cleared out an hour ago.
Dane was still wiping down the same
patch of counter... Posting one chaptered story to Inkbunny, SoFurry, AO3, FurAffinity, and SquidgeWorld means juggling five formats, five tag systems, five login sessions, and remembering whether each platform wants Markdown, BBCode, or CSS-scoped work-skin HTML.
PawPoller does it once.
Built for the way fiction actually ships.
Every feature exists because a writer complained about something. Format conversion, per-chapter everything, tag dialects per platform, drift detection — these aren't generic CMS features, they're the specific pain points of publishing stories.
Multi-format conversion
Your MASTER.md becomes BBCode for Inkbunny, SoFurry HTML, work-skin styled HTML for AO3 and SquidgeWorld, and a print-ready PDF — in one regeneration pass.
Chaptered posting
Split a multi-chapter novel automatically. Each platform gets the right flavour: AO3 creates a work + chapters, Inkbunny posts a single submission, SoFurry pushes a chaptered thread.
Publish-check matrix
One grid shows every chapter × platform combination. Red cells need attention, green cells are posted, amber cells have drifted from your source file. Click to fix inline.
Per-chapter tags & thumbnails
Platforms that allow per-chapter metadata (Inkbunny, FA) get their own tag sets and chapter covers. The rest fall back to story-level gracefully.
Tag database & validation
4,600+ validated tags with per-platform rules. SoFurry uses spaces, FurAffinity uses underscores — you just tag once and PawPoller reformats per target.
Drift detection
Edit a chapter six months after publishing and PawPoller flags every platform where the posted copy diverged from your source. One click per cell to republish just the stale ones.
Encrypted credential vault
Optional Fernet-encrypted store for platform credentials, keyed against your OS keyring or a dotfile. Plaintext settings.json stays credential-free.
Import what you already have
Point PawPoller at an existing Inkbunny, SoFurry, or FurAffinity story URL and it pulls the content, converts to Markdown, and sets up the folder. No retyping.
Three steps. One source of truth.
Write in Markdown
A single MASTER.md per story, with HTML-comment anchors marking the title, byline, warnings, body, and any inline semantic blocks (text messages, phone calls). An in-app editor with a toolbar inserts them for you.
Regenerate every format
One click rebuilds BBCode, SoFurry HTML, styled HTML, SquidgeWorld work skins, and PDFs. WeasyPrint does the heavy lifting on Linux; Edge handles it on Windows. All generated files land in the same folder as your MASTER.md.
Publish with confidence
The publish-check matrix shows every chapter-platform combination at a glance. Dry-run to see what would post, or confirm and push. Retry queue handles transient failures; drift detection flags stale posts months later.
The interface writers actually use.
Screenshots coming in the next release. Below is a sketch of what each view does.
Eleven polled. Nine posted.
Polling tracks views, favourites and comments across all eleven. Posting supports nine of them today; the last two are on the roadmap.
| Platform | Poll | Post | Notes |
|---|---|---|---|
| Inkbunny | Chaptered, official API | ||
| FurAffinity | Scraping, desktop-only for posting | ||
| SoFurry | Chaptered | ||
| Weasyl | Official API | ||
| AO3 | Chaptered + work skins | ||
| SquidgeWorld | Chaptered + work skins | ||
| DeviantArt | Eclipse API | ||
| Wattpad | Read-only analytics | ||
| Itaku | Read-only analytics | ||
| Bluesky | Announcements (coming soon) | ||
| X / Twitter | Read-only analytics |
PostyBirb is great — for illustrators.
PawPoller takes the same "one source, many platforms" idea and rebuilds it for the specific pains of publishing chaptered fiction. Different tool, different audience, same respect for multi-platform posting.
| PostyBirb | PawPoller | |
|---|---|---|
| Content type | Illustrations | Chaptered fiction |
| Per-post unit | A single image + description | A whole story with N chapters |
| Format conversion | Text descriptions | BBCode, HTML, work-skin CSS, PDF |
| Per-chapter metadata | N/A | Tags, descriptions, thumbnails per chapter |
| Drift detection | N/A | Flags stale posts when the source changes |
| Analytics | None | Views, faves, comments over time |
| Primary audience | Visual artists | Fiction writers |
If you post illustrations, go to postybirb.com. It's genuinely the right tool.
Three ways to run it.
Same app, same database format, same feature set. Pick whichever shape fits your workflow.
Desktop
Windows x64 · native app
The simplest path. One .exe with the dashboard, all pollers, the editor, and the full publishing pipeline bundled. Ideal for personal use on one machine.
Download v2.13.9 →MIT licensed · free forever
Self-hosted
Docker · headless · your server
Run PawPoller 24/7 on a VPS, home server, or Raspberry Pi. Poll while you sleep, access the dashboard from any device. Setup guide covers Cloudflare Tunnel, Caddy, and nginx reverse proxies.
Read the setup guide →Hosting cost: $0–10/mo
Cloud
One-click hosted · pay-as-you-go
Deploy your own PawPoller instance to Railway, Fly.io, or DigitalOcean with a single click. You own your data and credentials; you pay the PaaS directly. No central service holding your secrets.
Join the waitlist →Eventually: browser-only SaaS tier
git clone https://github.com/knaughtykat01-prog/PawPoller.git
cd PawPoller
cp .env.example .env # set DASHBOARD_PASSWORD before exposing publicly
docker compose up -d --build
# Dashboard: http://localhost:8420 Short answers to honest questions.
Is it free? +
Yes. MIT licensed, no accounts, no telemetry, no feature gates. Fork it, audit it, run it forever.
Where do my platform passwords live? +
On your own machine or your own server. The optional encrypted vault (Fernet + OS keyring or a dotfile key) stores credentials separately from your plaintext settings.json. No PawPoller-operated service ever sees them.
Does it post things automatically? +
Only when you confirm. Every publish action has an explicit confirmation dialog; live (non-draft) posts require a second confirmation. There is also a full dry-run mode that shows exactly what would be submitted without submitting it.
Does it work on Mac or Linux? +
The headless Docker / server mode runs anywhere. The native desktop app is Windows-only right now (pywebview + Edge for PDF rendering). Linux and macOS desktop builds are possible but not prioritised — run the server mode in Docker and you get the same dashboard in any browser.
Why nine posting platforms but eleven polled? +
Wattpad, Itaku, X/Twitter and similar are either public read-only or have posting APIs that discourage third-party automation. PawPoller can read their stats for your analytics; it won't pretend to post where it shouldn't.
Can I eventually use it from the browser without self-hosting? +
That's the plan for the Cloud tier — a one-click hosted instance owned by you, not a shared service. A true multi-tenant SaaS tier is possible further out but needs real demand first; holding credentials for many users at once is a serious responsibility.
Can I help? +
Yes. Bug reports, feature requests, and platform additions are all welcome via GitHub Issues. CONTRIBUTING.md has the platform-adding walkthrough.