
1. Why build a home for my novels?
A new project was mentioned for this month, and this is it: a series of notes about developing TPNovel, a novel-oriented plugin for Typecho. I will build it while documenting the process, and eventually use the finished result on my own site.
In other words, my novels may finally get a home of their own.
Regular readers may remember that, for roughly a year, I have occasionally mentioned having novels in progress. In earlier writing, I even organized the situation a little: there were four novels in total. The first was abandoned before completion, the second reached 200,000 Chinese characters before being abandoned, the third never got much beyond its opening, and the fourth is the one I am still working on, 《如果瓷杯从未冷透》.
The details of how I came to write those novels have already been discussed elsewhere, so there is no need to repeat them here. Apart from the first one, they all share one important characteristic: none has ever been published on a public platform for other people to read.
At the time, the reasoning seemed straightforward. I would finish a novel first and publish it afterward, avoiding the possibility of getting stuck halfway through and then leaving readers waiting for months. Many online fiction writers update several thousand characters every day, after all. If updates stopped, readers might simply leave.
But after writing a blog for so long, I have become accustomed to a different rhythm: publish when I want to, and take a break when I have no motivation. I am not a full-time novelist, nor do I depend on writing fiction for an income. Once I stop writing, there is little external pressure pushing me to resume, and an unfinished manuscript can easily disappear forever.
It seems wasteful to let all those pages vanish. Even unfinished stories preserve ideas and thoughts that once mattered to me. So, gradually, I let go of the belief that everything had to be completed before anyone could see it.
Once that restriction was gone, the next question was how to release the novels. That is where this new series, “Busy with My Novels,” comes from. It will serve two purposes: a development log for the plugin, and a way of putting some pressure on myself. This project has already been delayed for a long time. If I keep postponing it, even the flowers may have withered by the time I get started.
2. Choosing a way to publish
Although this series will eventually belong under programming, the first entry needs to wander slightly. Before implementing a project, choosing the tools and planning its direction are unavoidable parts of the work.
There were several possible approaches. The simplest would be to publish the novels on one of the established fiction platforms and place links to them on my site. Many well-known web novelists, including authors whose work has later appeared in print, do exactly that.
So why build TPNovel and make the novels part of my own website?
2.1 Different kinds of fiction need different presentation
“Novel” is a broad category. The differences are not limited to subject matter—fantasy, danmei, power fantasies, cultivation stories, system fiction, and online-game fiction all have their own conventions. The way a story is written and laid out also changes with its genre and reading environment.
Consider these two passages:
『东西呢?』 『拿到了。』 『人呢?』 来者怒目圆睁。 『......跑太快,没追上。』
And then this one:
两人在一张靠窗的圆桌旁坐下。窗外,城市喧嚣的背景音被咖啡馆的轻柔爵士乐完美地滤化、减弱,变成了一层温柔的、可以随时沉溺其中的背景音景。A端起卡布奇诺,轻抿了一口。那混合着浓郁烘焙香气、恰到好处的苦涩与牛奶的柔滑甘甜,瞬间唤醒了他因奔波而有些混沌的神经。他放下杯子,长长地吐出一口气,那口气中带着一丝微不可察的,属于职业侦探特有的,略显紧绷的锐利感。。
The second passage was generated by AI, and its actual subject is irrelevant here. What matters is the arrangement of the prose.
I think of the first as a short-paragraph style. It resembles the work of Gu Long and much of the web fiction written for the smartphone era. Each paragraph is brief, and dialogue, action, and description can be separated into a series of small blocks.
The second is a long-paragraph style, closer to the conventions of the print-novel era. Its paragraphs occupy more lines and rarely consist of only a single short sentence.
There are many possible explanations for this difference, including the physical cost of printed books and the demands of faster-paced storytelling. Literary scholars have already examined the subject in detail, so I will focus on one practical factor: the visual space available in the print era was generally wider, while the smartphone era has narrowed it.
A long paragraph in a printed book can use relatively tight line spacing within the paragraph and larger spacing between paragraphs. The result can feel balanced and remain easy to read. Short paragraphs, however, can cause trouble in print: once paragraph spacing is applied, it may look like ordinary line spacing, either too wide or too narrow. Because the spacing is so uniform, the boundaries between paragraphs can become unclear.
Narrow smartphone screens have the opposite effect. Short paragraphs, which may look awkward on a printed page, become much more suitable on a phone. The page no longer appears to be a solid wall of text, and readers are less likely to lose their place while moving from one line to the next. As a small example, the paragraph above and the one before it would normally be joined together, but I separated them in the mobile preview for precisely this reason.
The novel I am currently writing sits somewhere between these two styles—or uses both. Sometimes I write a line that is extremely short; at other times I naturally produce a much longer block of prose.
Most modern fiction platforms can adjust their display dynamically, so the result may not look too bad. But those are still other people's platforms. If I want to make a custom adjustment for a particular reading style or respond to reader feedback, I have little control over the interface. If I implement both the platform and the reading pages myself, that freedom becomes much greater. There is no reason not to take advantage of it.
2.2 Why not use a major fiction platform?
Readers of online fiction are probably familiar with major services such as Qidian, Jinjiang Literature City, and Biquge-style communities. Their large audiences are an obvious advantage. Publishing there could bring readers quickly, and under certain circumstances a platform might even select a work for a contract and provide an income.
There is nothing wrong with that model. Those platforms would not exist if it did not work. My question is different: since I already have a blog that can function as a small personal platform, why not make full use of it?
Traffic is still a factor
This is the most utilitarian consideration, but it is also the first one. A major platform can provide readers quickly, yet the traffic it sends tends to be somewhat self-contained. It does not necessarily create much positive feedback for the rest of my site.
Publishing on my own website may bring readers more slowly, but the readers who do arrive are connected directly to the site. The situation is similar to maintaining an independent blog. Public blogging platforms exist, but writing on a site that I control feels more self-contained. There is no platform dividing up the relationship, and my interests and identity can appear as a more complete whole. That also brings a stronger sense of achievement.
Platform culture can shape the work
This point is less certain, but large platforms do seem to develop dominant styles. Qidian, for example, is strongly associated with cultivation and power-fantasy fiction, while Jinjiang is known more for romance-oriented works.
Perhaps the result is that the individual gradually disappears behind the platform. Every piece of writing becomes associated with the service where it was published. On a personal blog, there is no comparable platform identity. A person is simply that person, and the writer does not have to keep asking whether a work fits the site's dominant category.
Rules can be strangely restrictive
This is the most bewildering issue. I once wrote on a fiction platform where an article failed to publish because it supposedly contained a sensitive word. The sentence that had been highlighted was:
『钢笔帽被插上了』
Fortunately, the page offered a button meaning, “I don't think this is a blocked term; please review it manually when you have time.” I submitted an appeal, and the article was eventually published without further trouble.
Still, the incident made me question some of the platform's less understandable rules. On a system I operate myself, I can at least understand how the software works and investigate problems directly. There is less chance of running into rules that seem arbitrary from the outside.
There are probably many other small reasons, but these are already enough to make the choice clear.
3. Why build a Typecho plugin instead of another CMS?
Once I decided to provide the platform myself, the next issue was implementation.
One option would be to install a CMS designed specifically for novels on the server and expose it to the public. Another would be to write a complete CMS from scratch, customizing every detail according to my own preferences.
Both approaches would require maintaining a second system alongside the blog's existing software. For a site whose priorities are stability and speed, that introduces more than just another administrative interface. It could also create another potential attack surface, and I would have to learn and maintain an entirely separate workflow.
The novels are not my main project—at least not for now. That alone makes a second CMS difficult to justify.
So, between adopting a complete platform and writing a complete CMS, I chose a middle path: TPNovel, a Typecho plugin for fiction. The CMS remains Typecho, while the plugin adds the functions needed for novels.
This avoids reinventing existing infrastructure. Page editing, comments, and other basic capabilities can continue to come from Typecho. The plugin only needs to call the relevant interfaces and adapt them to the novel structure. The rest of Typecho's ecosystem remains available, and I do not have to maintain two separate systems. Overall, it follows the KISS principle reasonably well.
4. The initial project plan
The broad direction is finally clear. This is only an initial plan, and parts of it may change during development.
4.1 Project scope
TPNovel will be a completely personal plugin, as with my earlier projects. I have no plans to publish its source code as a public open-source project.
That is not because I oppose open source. I simply do not have the time or motivation to maintain an open-source project properly. The code is also likely to contain many workarounds designed for the current architecture. They may not apply to other environments, and the result would not necessarily be something that could be installed and used immediately.
One known limitation is that the plugin cannot work independently and relies on the current setup. To make up for that, I will still publish the full development reasoning and selected code fragments, as usual.
4.2 Three parts of the system
For now, I expect the project to consist of three main parts:
- Typecho as the CMS foundation;
- the front-end reading pages;
- the plugin code that provides the novel-specific back end.
The CMS layer needs little explanation. As described above, the system will be built on Typecho, more specifically on its independent pages feature. This makes it possible to reuse Typecho's existing infrastructure, including the text editor, attachment system, and comment system.
None of those features needs to be rebuilt inside the plugin. The plugin only needs to call the official interfaces and adapt the results, which removes a considerable amount of work.
The front-end pages are nominally part of TPNovel, but the finished templates will ultimately be placed under:
usr/themes/<current theme>/
This does not mean that TPNovel will be tied to a particular theme. It is simply where Typecho looks for templates for independent pages. The final novel pages will be designed separately and will not actually depend on the visual design of the existing theme.
The novel-specific back end is the part handled by the plugin. Its central task is to build an organizational layer on top of independent pages: books, directories, chapters, navigation, pagination, and similar functions.
Other features would be useful additions rather than the foundation. One example might be a dedicated RSS feed for novels, separate from the blog's own RSS feed.
The plugin will not take responsibility for custom routing or page rendering. Those remain Typecho's job. A custom routing system might produce cleaner URLs, such as:
/novel/book-name/1/
It would also avoid having to place two separate pages in the theme directory, since the plugin could handle everything itself. But for a personal project, the small convenience would likely be outweighed by the later complications—especially all the corner cases hidden in places that seem unimportant at first.
4.3 Storing metadata
Typecho has one particularly useful feature: custom fields attached to content, including posts and independent pages. These fields are structured key-value pairs associated with a particular piece of content, and Typecho stores them in the typecho_fields table.

Because the structure is already suitable for querying and storage, carefully designed fields could replace a substantial portion—or perhaps all—of the additional tables that a separate novel CMS might require. That would reduce both the amount of data modeling and the overall difficulty of development.
5. Continuing from here
That is enough planning for the first entry. The later parts of the series can examine each component in detail and begin implementing the code.
When I first started writing novels, I wanted to use words to construct a world. Now I wonder whether writing this plugin is another version of the same thing: using code to build a world of its own.