Go back

Yomu Web is a fantastic open-source and self-hosted novel reader web client for reading your favorite novels from various sources. It's part of the Yomu monorepo, which houses the implementation of the Yomu Web app and the sources.


Yomu Web - light version

Purpose and Motivation

I came up with the idea for Yomu Web out of frustration with switching between different platforms to read my favorite web novels. I thought, "Wouldn't it be great to have an app where users can easily read and keep track of their favorite novels all in one place?"

Stack and Explanation

To bring Yomu Web to life, I used the Next.js app router for server-side rendering and routing, and it was a fantastic choice. I didn't complicate things with a state management library because I mainly used server-side rendering and only needed useState.

I also utilized Drizzle as a database ORM to manage the database, and the ability to configure the database schema using Typescript was cool. I kept the styling clean and user-friendly with TailwindCSS and Shadcn UI components.

Problems and Process

I faced some challenges during the planning stage, especially when deciding on a monorepo or multi-repo approach. Eventually, I chose a monorepo to house all web client and source implementations, including potential future mobile client integrations.

I also had to decide between creating a regular website hosted in the cloud for universal access or dockerizing the web app for self-hosting. After weighing the options, I found that self-hosting was better for Yomu Web.

Closing Thoughts

In conclusion, Yomu Web has been a rewarding project that has allowed me to address my own frustrations while exploring new technologies and approaches. I'm excited to see how it evolves in the future and how it may benefit other users who share similar reading habits.

The decision to opt for self-hosting has also created a more flexible and personalized experience for Yomu Web users. I look forward to continuing to refine and enhance the platform in the days ahead.