FICTBASE

ຄຳອະທິບາຍ

FICTBASE turns any WordPress site into a self-hosted serialized fiction platform — a free Wattpad alternative and Royal Road alternative that runs on infrastructure you control.

Publish your web novel or serialized story chapter by chapter. Own your readers. Keep 100% of your revenue. No platform fees, no algorithm changes, no lock-in.

Why Self-Host Your Fiction?

Platforms like Wattpad and Royal Road give you discovery, then take everything else. When you self-host with FICTBASE:

  • You own your audience — collect email subscribers directly on your story pages
  • You own the SEO — Google ranks your domain, not the platform’s
  • You control monetization — Patreon, subscriptions, ads, or anything else
  • You set the rules — no content policy changes, no sudden demonetization

Free Features

Stories and Chapters

  • Create and manage stories with title, cover image, description, genre, and status
  • Add chapters with a full rich-text editor
  • Automatic word count and estimated read time per chapter
  • Chapter reading page with scroll-based progress bar
  • Previous / Next chapter navigation
  • Author bio block at the end of each chapter
  • Clean URLs: /story/my-story/, /story/my-story/chapter/1/

Reader Experience

  • Light, Dark, and Auto (follows OS) reader themes
  • Adjustable font size and reading width
  • Story archive at /stories/ with genre and status filters
  • Content rating and content warnings shown before the blurb and before chapter one

Feeds

  • RSS feed per story at /story/my-story/feed/ — readers follow new chapters in any reader app
  • Site-wide feed of your latest chapters at /stories/feed/
  • Discovered automatically by browsers and reader apps, no configuration
  • Members-only and paid chapters appear as a teaser and a link, never as full text

Search

  • Search your stories and chapters at /stories/search/ — a search box sits on the story archive
  • Finds stories by title and blurb, chapters by title and by the words inside them
  • Results show the matching sentence with your term highlighted
  • Members-only and paid chapters are found by title only — their text is never quoted in results
  • Uses a MySQL full-text index where the server supports one, and works without it either way
  • A theme search that finds nothing sends the reader here instead of to an empty page

Developer and Site Tools

  • Shortcodes: [fictbase_list], [fictbase_story id="5"], [fictbase_chapters story_id="5"]
  • REST API: GET stories, GET chapters, POST view tracking
  • Works with any WordPress theme — injects CSS only on fiction pages

Pro Features

Pro is an optional paid upgrade available at fictbase.com. The free plugin is fully functional without it.

  • Drip scheduling — write chapters in advance and release them on an automatic schedule
  • Reader bookmarks — logged-in users save their exact reading position across devices
  • Analytics dashboard — total chapter views, 30-day chart, top chapters by reads
  • Email notifications — subscribers receive an email the moment a new chapter publishes
  • .docx import — bulk-import a Word manuscript; chapters detected automatically from headings
  • Custom CSS editor — per-page scoped CSS for story listing, story landing page, and chapter reader

The Self-Hosted Web Novel Platform

FICTBASE is built specifically for serialized fiction authors who want the features of Wattpad or Royal Road without giving up ownership of their work. Whether you write fantasy, romance, LitRPG, progression fantasy, sci-fi, or any other genre — if it’s chapter-based and ongoing, FICTBASE is built for it.

External Services

This plugin makes no external HTTP requests of any kind. No data is transmitted to any third-party service. All data (stories, chapters, settings) is stored in your own WordPress database.

ພາບໜ້າຈໍ

ການຕິດຕັ້ງ

  1. Upload the fictbase folder to /wp-content/plugins/
  2. Activate the plugin through the Plugins menu in WordPress
  3. Go to FICTBASE Stories to create your first story
  4. Add chapters via FICTBASE Stories Chapters
  5. Your story is live at /story/your-story-slug/

No pages need to be created manually. FICTBASE registers its own URL routes on activation.

ຄຳຖາມທີ່ພົບເລື້ອຍ

Is this a Wattpad alternative?

Yes. FICTBASE gives you the same chapter-by-chapter reading experience as Wattpad — story pages, chapter navigation, genre filters, reader themes — but hosted on your own WordPress site. You keep your audience data, your SEO, and 100% of your revenue.

Can I use this for web novels?

Yes. FICTBASE is designed for web novels and serialized fiction of any genre: fantasy, LitRPG, romance, progression fantasy, sci-fi, thriller, and more. Each story gets its own landing page and chapter list, and readers can filter by genre on the public archive at /stories/.

Do I need to create any WordPress pages?

No. FICTBASE uses its own URL routing. Stories and chapters are available at /story/{slug}/ automatically after plugin activation. If your URLs return 404, go to Settings Permalinks and click Save.

Where do I put the shortcodes?

Use [fictbase_list] on any page to show all your stories in a grid. Use [fictbase_story id="5"] to embed a single story card. Use [fictbase_chapters story_id="5"] to embed a chapter list.

What is the Pro version?

Pro is an optional paid add-on (from $9.99/month or $99/year) that unlocks drip scheduling, reader bookmarks, analytics, email notifications, .docx import, and a per-page Custom CSS editor. It is purchased at fictbase.com. The free plugin is fully functional without it.

Does this work with any theme?

Yes. FICTBASE injects its own CSS only on story and chapter pages. Your existing theme header and footer continue to wrap reader pages.

How do I change the look of chapter pages?

Go to FICTBASE Settings. You can choose light/dark/auto theme, font size, reading width, and add custom CSS. For deeper changes, copy the template files from the plugin’s public/views/ folder into a fictbase/ subfolder in your theme.

Is this GDPR-friendly?

The free plugin stores no visitor data and sends nothing anywhere. Licence key validation is performed by the separate Pro add-on, not by this plugin. Pro’s email subscriber feature stores email addresses in your own WordPress database.

ການຣີວິວ

ບໍ່ມີການຣີວິວສຳລັບປລັກອິນນີ້.

ຜູ້ຮ່ວມພັດທະນາ ແລະ ຜູ້ພັດທະນາ

“FICTBASE” ແມ່ນຊອຟແວໂອເພັນຊອດ (Open Source). ບຸກຄົນຕໍ່ໄປນີ້ໄດ້ມີສ່ວນຮ່ວມໃນການພັດທະນາປລັກອິນນີ້.

ຜູ້ຮ່ວມພັດທະນາ

ແປ “FICTBASE” ເປັນພາສາຂອງເຈົ້າ.

ສົນໃຈຮ່ວມພັດທະນາບໍ່?

ເບິ່ງລະຫັດ, ກວດເບິ່ງ ຄັງເກັບ SVN, ຫຼື ຕິດຕາມ ບັນທຶກການພັດທະນາ ຜ່ານ RSS.

ບັນທຶກການປ່ຽນແປງ

2.6.0

  • New: search. Readers can search your stories and chapters at
    /stories/search/, and a search box now sits at the top of the story archive.
    Chapters are searched by their full text, not just their titles, so a reader
    who remembers a line can find the chapter it is in.
  • New: results show the sentence the term was found in, with the term
    highlighted, so a reader can tell which hit is the one they meant.
  • New: if your theme’s own search box finds nothing, the reader is sent to the
    FICTBASE results instead of to an empty page. WordPress search only looks at
    posts and pages, and your chapters are not posts.
  • Security: members-only and paid chapters are found by their title and never
    by their text, and results never quote a locked chapter. This does not change
    based on who is searching, so a results page cached for one reader is safe to
    serve to the next.
  • Note: search uses a MySQL full-text index when the server supports one and
    falls back to a slower plain match when it does not. The index is built once,
    on upgrade, and nothing is required from you either way.

2.5.0

  • New: RSS feeds. Every story now has a feed at /story/your-story/feed/, and
    your latest chapters across every story are at /stories/feed/. Readers follow
    you in any reader app, browsers and apps find the feed on their own, and both
    URLs are shown on every FICTBASE admin screen.
  • New: content ratings. Every story carries a rating — General audiences, Teen
    and up, Mature, or Explicit — shown to readers above the blurb and again at
    the top of every chapter. Existing stories are rated General audiences, so
    nothing changes on your site until you change it.
  • New: content warnings. Tick the ones that apply from a starting list, or type
    your own. They appear next to the rating for readers who want to know what
    they are walking into.
  • Note: a rating is a label, not a lock. It tells readers what is in the story;
    it does not hide anything from anyone. Enforcing an age check on top of the
    label is a Pro feature.
  • Security: feeds resolve access as a logged-out visitor, always, whoever
    fetched them. A members-only or paid chapter is a teaser and a link in the
    feed even when the author is signed in — which matters because feeds are
    cached and re-served to strangers.
  • Fix: upgrading the plugin no longer leaves story and chapter URLs 404ing
    until Settings > Permalinks is re-saved by hand. The rewrite rules were being
    flushed before they were registered.

2.4.0

  • New: reading access levels. Every story and chapter now carries an access
    level — Public, Members only, or Paid — set from a single dropdown in the
    editor. A chapter can inherit its story’s level, so a whole story is opened
    or closed in one place. Existing content is migrated to Public, so nothing
    changes on your site until you choose to change it.
  • New: members-only chapters. A chapter set to Members only shows a teaser and
    a sign-in prompt to logged-out readers, and the full text to anyone with an
    account. This works with no add-on and no payment provider.
  • New: reader entitlements. What a reader has unlocked is recorded on your own
    site rather than only at the payment provider, so access survives a refund
    window, a provider outage, or a move between providers.
  • New: order records. Every purchase attempt is written to your database, so an
    abandoned checkout can be told apart from a failed payment.
  • Note: charging for a chapter requires the FICTBASE Pro add-on on the Author
    plan. Without it the Paid level is not offered, and Public and Members only
    work exactly as described above.
  • Security: the access level is validated on save against what the site is
    actually entitled to offer. A submission that asks for a level the site
    cannot grant leaves the stored level untouched instead of falling back to
    Public, so a members-only story cannot be forced open by editing the form.
  • Security: the REST API and the chapter templates now share one access check,
    closing a path where a restricted chapter could be read through the API.

2.3.6

  • Fix: draft stories are no longer readable by the public. A story still marked
    as a draft could be reached through the REST API, through its own URL, through
    the [fictbase_story] and [fictbase_chapters] shortcodes, and it was listed
    on the stories archive. Drafts are now visible only to users who can edit
    content, and a draft answers 404 exactly as an unknown address does. Chapters
    are checked against their parent story too, so a published chapter of a draft
    story is no longer served.
  • Fix: deleting the plugin now removes everything it created. The Genres table
    and several licence-related settings, including your stored Pro licence key,
    were being left behind in the database, and a scheduled task kept running with
    nothing to run.
  • Fix: the licence-key helper the Pro add-on reads always returned an empty
    string, so a licensed site could look unlicensed to the code that asked.
  • Fix: the REST stories list only ever returned ongoing stories, so a completed
    or paused story was missing from it. It now returns every publicly visible
    story, and the sitemap uses the same rule, so a paused story is no longer
    silently left out of both.
  • Fix: a helper function declared by the stories archive template used a short
    fb_ prefix; renamed to fictbase_.
  • Fix: a chapter with a custom label (“Prologue”, “Chapter One”) broke the
    chapter list. The label was drawn into the small round badge sized for a
    chapter number, so the text spilled out over the row. A labelled chapter now
    gets a pill that grows to fit its label.
  • Compatibility: tested against WordPress 7.1. The plugin no longer calls
    load_plugin_textdomain() — WordPress has loaded a plugin’s own translations
    automatically since 4.6, and the call ran early enough to trip the 6.7
    “translation loading triggered too early” notice.
  • Housekeeping: development files (test suite, build script, Composer metadata)
    are excluded from the release package.

Note: 2.3.4 and 2.3.5 were never published here; their applicable fixes are
folded into this release.

2.3.3

  • Fix: theme header and footer now render correctly on sites using Pagelayer — page-builder global header/footer conditions require a real WordPress post object; we now attach the front page (or any published page) as the queried object on all FICTBASE virtual pages so condition matching works

2.3.2

  • Fix: Genres admin page layout corrected — genre list now appears on the left, Add/Edit form on the right; Blade-style comment syntax was being output as literal text and collapsing both panels into the right column

2.3.1

  • Fix: sitemap now outputs at /fictbase-sitemap.xml independently of any SEO plugin — submit that URL directly to Google Search Console; the previous approach registered with WP core’s sitemap which SiteSEO and similar plugins replace entirely
  • Fix: theme header and footer now render correctly on all FICTBASE pages (stories archive, story page, chapter reader) — page-builder themes like PopularFX and Elementor check is_singular() before rendering their designed header/footer templates; we now set that flag on all our virtual pages

2.3.0

  • Fix: story and chapter pages are now indexed by Google — registered a sitemap provider so all published stories and chapters appear in /wp-sitemap.xml and are picked up by SEO plugins (SiteSEO, Yoast, RankMath)
  • Feature: custom genres — admins can now add, edit, and delete genres from FICTBASE Genres; Werewolf, Vampire, and any other category can be added; story edit screen loads genres dynamically
  • Feature: chapter label override — authors can set a custom label (e.g. Prologue, Author’s Note, Chapter 3 Part 2) on any chapter; label appears in the chapter nav bar, breadcrumb, and table of contents instead of the default “Chapter N”
  • Fix: chapter reader pages now render the theme’s full header and footer (including site navigation, branding, footer widgets, and social links) instead of a bare standalone HTML page

2.2.17

  • Improvement: chapter list now shows 15 chapters by default with a “Show X more chapters” button — keeps story pages clean for stories with large chapter counts
  • Fix: “Start from beginning” and other outline buttons now display correctly in auto dark mode (text was invisible due to missing dark mode overrides)

2.2.16

  • Fix: chapter navigation now appears below chapter content instead of alongside it when using themes that apply float or inline-block to the HTML main element (e.g. PopularFX)

2.2.15

  • Fix: chapter navigation buttons on mobile no longer overflow the page when chapter titles are long — buttons now wrap text correctly and stay within the viewport on all screen sizes

2.2.14

  • Fix: mobile chapter navigation bar (Previous / Contents / Next) now stacks vertically on small screens instead of staying side-by-side and forcing horizontal scroll

2.2.13

  • Fix: chapter content stored as plain text (typed/pasted in Code tab) now renders with correct paragraph spacing — wpautop() applied at display time so all existing chapters are fixed without re-saving
  • Fix:   placeholder paragraphs stripped at display time for all chapters

2.2.12

  • Fix: chapter count in admin story list now shows published / total (e.g. “1 / 2”) so draft chapters are not mistaken for published ones

2.2.11

  • Fix: paragraphs from Word paste now separate correctly — double line breaks converted to paragraph tags on save; empty paragraphs containing
    also stripped
  • Fix: chapter reader CSS now uses ID selector (#fb-reader-content) to beat any theme .entry-content override

2.2.10

  • Fix: extra spaces within chapter text from Word paste (multiple   collapsed to single space on save)

2.2.9

  • Fix: paragraph spacing in chapter reader now overrides aggressive theme CSS using higher-specificity selectors

2.2.8

  • Fix: empty paragraphs from Word/Google Docs paste are stripped on save so they no longer create double spacing in the chapter editor
  • Fix: paragraph spacing now renders correctly on published chapters regardless of theme CSS

2.2.7

  • Fix: cover image now displays correctly on story preview pages — inline styles applied so WordPress theme CSS (e.g. height:auto) cannot override the portrait ratio
  • Fix: cover images on archive/grid pages also protected from theme CSS overrides

2.2.6

  • Fix: cover image preview in story editor now shows a correct 2:3 portrait box instead of a wide landscape crop
  • Fix: story page cover image given explicit pixel height so WordPress theme CSS cannot override the portrait ratio

2.2.5

  • New: Premium chapter gate — mark any chapter as Premium; non-logged-in readers see a 200-word teaser with fade-out and a login prompt instead of the full content

2.2.4

  • Fix: remove license key input and external API call from free plugin; Pro page now links to fictbase.com with manual install instructions (WP.org Guideline 6)
  • Fix: remove assets/ folder (banners, icons, screenshots) from plugin zip — these are uploaded to SVN assets/ separately after approval

2.2.3

  • Fix: move all inline <style> and <script> blocks to wp_enqueue_style / wp_add_inline_style / wp_add_inline_script per WP.org guidelines
  • Fix: change story/chapter management capability from manage_options to edit_posts; authors may only edit their own stories
  • Fix: remove Plugin_Upgrader auto-install and activate_plugin from free plugin to comply with WP.org guideline 8
  • Fix: remove custom CSS setting from free plugin (use WP Customizer for site-wide CSS)
  • Fix: REST track_view endpoint now rejects unpublished chapters
  • Fix: admin menu position moved to 58 (below all core WP items)

2.2.2

  • Improvement: update plugin description and tags for clarity

2.2.1

  • Fix: add missing translators comments to all plural/placeholder i18n strings
  • Fix: wrap all printf() integer arguments with absint() to satisfy output escaping requirements
  • Fix: use %i placeholder for table name in SQL query to avoid string interpolation
  • Fix: escape emoji icon output with esc_html() in story and status grids

2.2.0

  • Security: HMAC-sign license data stored in the database to detect direct tampering
  • Security: remove development bypass — FICTBASE_API_URL must be configured for license checks
  • Fix: PHP 8 compatibility for WP REST API validate_callback (ArgumentCountError on PHP 8 when using native function strings)
  • Fix: Pro gate enforced on all bookmark REST endpoints
  • Fix: IDOR validation added to bookmark save endpoint (chapter must belong to the requested story)
  • Fix: story delete now uses $wpdb->prepare() with placeholders for chapter_views cleanup
  • Fix: wrap fb_stories_filter_url() in function_exists to prevent fatal on pages with multiple shortcodes
  • Improvement: license grace period (72h offline) now also verifies HMAC of cached data

2.1.0

  • Add reader bookmarks (Pro) — save and resume reading position
  • Add .docx import (Pro) — bulk-import manuscripts, chapters detected from headings
  • Add story archive page at /stories/ with genre and status filters
  • Add [fictbase_chapters] shortcode
  • REST API: add bookmark endpoints (POST, GET, DELETE)
  • Improvement: chapter reading page now tracks scroll position for bookmark auto-save

2.0.0

  • Add drip scheduling (Pro) — release chapters on a date/time schedule
  • Add analytics dashboard (Pro) — total views, 30-day chart, top chapters
  • Add email notifications (Pro) — subscriber opt-in form on story pages; new chapter sends email
  • Add licence key field and FICTBASE API validation
  • Add 72-hour offline grace period for licence checks
  • Add custom CSS field in plugin settings
  • REST API: add /chapters/{id}/view endpoint for view tracking

1.1.0

  • Add light/dark/auto reader themes
  • Add adjustable font size and reading width settings
  • Add author bio block at end of chapter pages
  • Add [fictbase_story id=""] shortcode for embedding story cards
  • Add uninstall.php to clean up database tables and options on uninstall

1.0.0

  • Initial release
  • Story and chapter CRUD in WP admin
  • Chapter reading page with scroll-based progress bar
  • Previous / Next chapter navigation
  • Clean URLs: /story/{slug}/, /story/{slug}/chapter/{n}/
  • REST API: GET stories, GET story chapters, GET chapter
  • Shortcode: [fictbase_list]
  • Plugin settings: font size, reading width, theme