Curved quotes on Wattpad

As part of an outreach experiment, in 2023 I placed some technical fiction on (among other forums) a website popular with female teenage fans called Wattpad.

One thing I found unsatisfactory about Wattpad’s browser-based story editor was that it seemed impossible to make it accept curved quote marks and long dashes: these were replaced by their typewriter versions whenever the button was pressed to publish or save changes, and I was unable to find any part of the site’s Javascript code that was obviously doing this so I think the problem was server-side (unless I missed it).

Another problem with Wattpad’s story editor was that if you copied and pasted multiple paragraphs from another source, the paragraph breaks or double newlines would be collapsed into single newlines, making it necessary to go back and manually restore all the paragraph breaks taking care not to miss any. This particular problem could be worked around by arranging for your paragraphs to be separated by a line of whitespace of a type that Wattpad hadn’t been programmed to collapse, such as the Unicode character U+2002 en-space—one and a half spaces, often used between sentences in professional typography—which can be coded in HTML as &#8194; and I found that editing the HTML version of a story and replacing the paragraph breaks with <br>&#8194;<br> before opening the resulting HTML file in a browser was sufficient to enable copying and pasting into Wattpad without Wattpad collapsing the paragraph breaks. As a bonus, strong and emphasized (bold and italic) formatting is preserved in the paste and did not have to be reapplied, although superscript was not supported in Wattpad. But curved quote marks and long dashes were still changed into their typewriter versions.

However, I found that Wattpad’s *Android* application *could* accept the proper typographical marks, at least in chapter texts. It was still unable to persist curved quote marks in chapter titles, but getting them right in the body of the chapter seemed a good start. The app would still collapse paragraph spacing when pasting in text unless the above workaround was used, but doing it on the Android app *did* allow me to keep the curved quotes in the chapter body text.

Since the process of selecting only part of a substantial amount of text on Android is highly error-prone (because at least some versions of Android will automatically change the off-screen end of the selection so it will no longer be where you left it, and although Android and Chrome’s source code is available I haven’t taken the time to figure out the logic behind this one, sorry), you’ll probably find it necessary to use Select All, which means you’ll need your chapter to be in an HTML document without chapter title and with nothing else around it, so you can Select All, Copy, go to Wattpad, edit the chapter, Select All if there is a previous version of the text to replace, and Paste.

But there is a further problem: if any of your chapters have “too many” paragraphs, then select all and paste in the Android app can omit paragraphs at the end, and in some cases it can truncate paragraphs part-way through. The app seems to be able to cope with about 56 paragraphs per paste, but I observed one case in which it took only 54 paragraphs, so I suggest setting that as the limit and split chapters longer than 54 paragraphs into two or more chunks.

As a programmer, I had the source of my novel as a Python script—mostly a multi-line string-constant containing all the text with simple markup, then a couple of hundred lines of code to perform a few basic checks and output the various formats—so for Wattpad I had an option to separate the paragraphs with en-space, group them into batches of 54, and dump the resulting HTML onto a temporary Web server for me to access from an Android phone and copy-paste into the app. The grouping can also be done manually if you don’t have too many long chapters. There didn’t seem to be any obvious relationship between how many paragraphs it could take and their total length, so what determines the exact cutoff point is unclear, but a limit of 54 paragraphs per chunk seemed to work.

If you are updating an existing chapter that was previously published with typewriter-style quotes, please note that any comments received on the chapter should remain after the update *but* any “inline” comments that had been attached to a particular paragraph or sentence are likely to lose their inline status after you edit that chapter in the Android app, even if you take care not to edit any paragraph that has comments attached: editing *other* paragraphs on the Android app can still cause Wattpad to lose track of where the inline comments should be. The comments will be retained at the end of the chapter but not also shown inline. For this reason you might want to avoid using the Android app to update chapters that have already received inline comments that need to stay as inline comments.

The reader-visible publication date was not changed on chapter updates, but I think some of my readers who had followed the book received notifications that it had been updated. I had posted a separate announcement telling them that my updates were merely cosmetic this time. If you are bulk-editing chapters on the Android app and some of them are not yet published, you might like to note that the “Publish” button was placed where the “Save” button would be in an already-published chapter, making it easy to slip up and publish a scheduled chapter early (there was no confirmation check) and this definitely generates notifications to followers.

Additionally, there appears to be a certain probability that the Wattpad Android app tells you it has saved a chapter when it has not. It is therefore necessary to double-check the appearance of the chapter in a separate Web browser to ensure the update has gone through. This also needs to be done after fixing any typo, even if the fix is made in the Android app, as there’s still a possibility that this will revert the curved quotes to straight ones until that whole chapter is re-input to the app (I ended up using my webcheck-strings program to alert me to the disappearance of curved quotes in any of my chapters).

Note on advertisements

Having mentioned the Wattpad Android app, I should add that, like the rest of Wattpad, it carries advertising, and at least in reader mode it features compulsory interstitial video advertisements with sound. There is an option to pay Wattpad to stop showing you these.

Advertising is common across the industry; Wattpad’s did at least seem generally compliant with the UK’s Advertising Standards Authority, unlike the far worse ones carried by Wattpad’s unauthorised scraping proxy “TeenFic” in Vietnam, mostly advertising illegal gambling, narcotics and malware, which a Wattpad case handler told me they didn’t think they could take action against, but they encouraged individual writers to file their own DMCA take-down notices to TeenFic’s provider CloudFlare, to their domain registrar PorkBun and to Google, although it was already ranking quite poorly on Google for keywords related to the fiction in question. (I was in fact trying to suggest *technical* means to identify and block the scraping-proxy’s traffic but the case handler didn’t put me through to engineering.)

The one active community I found *without* advertising was the “Archive Of Our Own” (AO3) based on free/libre and open source software and cited in a conference paper at ACM CHI 2016, but unfortunately AO3’s approach to inclusivity has backfired: their copious listings of sleazy stories, albeit nearly always with the correct warning tags, has resulted in their domain being summarily blocked by software used by many parents, institutions and mobile data providers, thereby *ex*cluding a large part of the younger audience and making AO3 an unsuitable platform for this kind of outreach experiment unless the story is cross-posted to more age-appropriate sites as well.

AO3 might be more inclusive if they served it from *two* domains, “safe” and “unsafe”, where “safe” applies compulsory filters (I could probably rig up my Web Adjuster to do that for them, but changing the server scripts would be cleaner) and institutional blockers might be able to permit the “safe” domain if they permit similar material from elsewhere, but then there could be the danger of writers trying to break the filters, which would probably result in a blanket block being reapplied: as some people’s approach to protesting censorship is to stimulate more of it so it’s noticed more, they might decide they actually prefer to let the blanket ban happen.

If AO3 had advertising, they *might* have been under pressure to be “brand-safe” if they chose reputable advertisers who cared about that enough to mandate a site-wide policy, but if badly curated it might have resulted in more attempts to get things “under the radar” and therefore less clearly tagged, as had apparently become the case with the once dominant but now rapidly declining FanFiction.Net site, which had evidently moved to advertisers less likely to mind a poorer environment: one user sent me daily death threats, creating new accounts to bypass blocks, left unprovoked reviews suggesting serious criminal acts which could not be removed until I deleted the story, and was also doing this to other writers, and the unresponsiveness of FF administrators to my reports of *that* made me feel continuing to post there might amount to too substantial a contribution to the endangerment of my readers’ well-being; I didn’t want to promote such a badly-administrated platform to young writers even at the level of keeping my cross-posts up on it. Yes I *could* have written a Selenium script to automate the process of deleting and re-uploading a work every time an offensive review was attached (while reinstating legitimate reviews as Guest) but I’d rather encourage a migration to a better-moderated platform. So I’m unsurprised by reports of sloppy tagging on FF although I’ve not checked it all myself.

AO3 has better tagging, but due to blanket bans of the site it’s still necessary to cross-post to other communities with advertising—unless I wanted to rely on self-hosting and general Web search, but in this case I guessed target readers were more likely to discover the book by browsing their established communities than by searching the Web, and said communities didn’t generally support external hosting. So I opted for platform-native uploads to three sites which seemed to have reasonably competent administrators, and put up with slightly intrusive but still ASA-compliant advertising on two of these: the girl-dominated Wattpad and the lesser-known boy-dominated Royal Road (which incidentally had better per-story SEO). But it was necessary to employ the above workaround if you cared about typography on Wattpad.

Audio distribution

I tried adding an audio reading of the story using Wattpad’s option of attaching YouTube videos to chapters, but I later removed these because traffic statistics suggested they were inconveniencing readers. If reading on the app, the video auto-plays without warning, and then stops when scrolled away so you can’t read along in the chapter; it’s more passable if reading on the Web version, but given the excessive nagging of readers on mobile devices to switch to the app I wasn’t sure how many readers still use the Web version, and my monitoring of viewer counts on both Wattpad and Youtube suggested readers were either not playing the videos or stopping them or scrolling away within the first 30 seconds, so I guessed the videos were more hindrance than help on the Wattpad platform and any reader who requires an audio version is more likely to search elsewhere.

If you *do* want to add YouTube videos at the start of your chapters, then this must be done from the desktop browser if they are at unlisted URLs, because the Android app accepts only search terms and not URLs—so adding in the curved quotes etc will then need to be redone after this desktop edit. Additionally, any YouTube videos added to scheduled chapters might be deleted on auto-publish, meaning you need to re-add them after publication *and* redo the curved quotes in the app. YouTube videos were the only still-supported mechanism I found that allowed an audio reading of the story to be delivered on Wattpad (there were references in the documentation to a SoundCloud function but this had apparently been removed), but the Wattpad-YouTube integration wasn’t very good for audio as noted above.

The Android app can be used to remove YouTube videos from chapters, but I found that this *also* results in resetting the punctuation (curved quotes and long dashes), which then has to be redone, although this change to the punctuation is not visible in the app’s edit mode but is if you load your story in a separate browser. In most cases this could be worked around by following this sequence: remove YouTube video from chapter, save chapter, insert an extra space in the text to reset the app’s internal “chapter saved” flag, delete the extra space, and save the chapter again.

For the YouTube audio which I had on Wattpad for a while, I think I was somewhat able to reduce further advertising over and above Wattpad’s own level of advertising by creating a YouTube channel on my university account, although I’m not sure what happens when this closes.

Royal Road also allowed this YouTube audio via simple iframes with youtube.com/embed URLs in its code editor, and in Royal Road’s case the video was not delivered via an app that auto-plays until scrolled away, so it was not necessary to remove the videos from Royal Road at the time I removed them from Wattpad.

Royal Road also allowed a link to an RSS “podcast” feed of more efficient MP3s hosted on GitLab Pages (with .gitlab-ci.yml set with FF_USE_FASTZIP "true" and ARTIFACT_COMPRESSION_LEVEL: "fastest" to let the GitLab server support the HTTP Range: header, which is needed for streaming episodes in software like Apple Podcasts which fails with “Unable to Play. Something went wrong. Try again later” if you try to stream instead of download on a server that doesn’t support Range: headers). AO3 allowed the RSS link plus <audio> tags (I placed one of these at the start of each chapter); AO3 also allowed YouTube’s iframe which I ended up using for one chapter where I’d taken advantage of the video channel to include a scrolling musical score (which I did using the scroll=horizontal filter in ffmpeg with Lilypond’s one-line-auto-height-breaking and a hideNotes voice to undo most of the variable-width typography so that a constant scrolling speed could be used), but in other cases an audio-only channel was sufficient and the video was simply displaying a static picture of the book’s cover so I placed just the <audio> tag on AO3.

Legal

All material © Silas S. Brown unless otherwise stated. Android is a trademark of Google LLC. Apple is a trademark of Apple Inc. Archive Of Our Own is a trademark of the Organization for Transformative Works Inc. Google is a trademark of Google LLC. Javascript is a trademark of Oracle Corporation in the US. MP3 is a trademark that was registered in Europe to Hypermedia GmbH Webcasting but I was unable to confirm its current holder. Python is a trademark of the Python Software Foundation. Royal Road is a trademark of Royal Road. Unicode is a registered trademark of Unicode, Inc. in the United States and other countries. Wattpad is a trademark of Wattpad Corp. YouTube is a trademark of Google Inc. Any other trademarks I mentioned without realising are trademarks of their respective holders.