Init commit

This commit is contained in:
Ahmed DCHAR 2026-04-11 22:55:16 +02:00
commit 2360d3d74b
321 changed files with 133177 additions and 0 deletions

24
.dockerignore Normal file
View File

@ -0,0 +1,24 @@
node_modules
npm-debug.log
.git
.gitignore
.env
.env.local
.env.*.local
dist
.nuxt
.output
coverage
.vscode
.idea
*.swp
*.swo
*~
.DS_Store
.env.example
README.md
LICENSE
scripts
.eslintignore
.prettierignore
drizzle

13
.editorconfig Normal file
View File

@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_size = 2
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

2
.env.example Normal file
View File

@ -0,0 +1,2 @@
# Public URL, used for OG Image when running nuxt generate
NUXT_PUBLIC_SITE_URL=

27
.gitignore vendored Normal file
View File

@ -0,0 +1,27 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example
# VSC
.history

23
.llmconfig Normal file
View File

@ -0,0 +1,23 @@
# LastWebNovel Platform - llms.txt
## Project Overview
Web novel reading platform built with Nuxt 4, Nuxt Content v3, Drizzle ORM
## Tech Stack
- Frontend: Nuxt 4.4.2, Vue 3.5.30, Tailwind CSS 4.2.1
- CMS: Nuxt Content 3.0.0 (markdown-based)
- Database: PostgreSQL with Drizzle ORM
- UI: Nuxt UI 4.5.1
## Project Structure
- `/app/pages/` - Page routes
- `/app/components/` - Vue components
- `/content/novels/` - Novel markdown files
- `/server/api/` - Server endpoints
- `/server/db/` - Database schema (Drizzle)
## Key Patterns
- Use queryCollection('content').all() for Nuxt Content
- API endpoints in `/server/api/` use server-side composables
- Pages use $fetch() to call API endpoints
- Novel files: /content/novels/{slug}/index.md + ch-N.md chapters

8
.vscode/mcp.json vendored Normal file
View File

@ -0,0 +1,8 @@
{
"servers": {
"nuxt": {
"type": "http",
"url": "https://nuxt.com/mcp"
}
}
}

15
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
"github.copilot.chat.codeblocks.languageDetection": true,
"editor.formatOnSave": true,
// "[vue]": {
// "editor.defaultFormatter": "Vue.volar",
// "editor.formatOnSave": true
// },
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"vue"
]
}

80
AGENTS.md Normal file
View File

@ -0,0 +1,80 @@
# AGENTS.md
This file provides guidance to WARP (warp.dev) when working with code in this repository.
## Project baseline
- Stack: Nuxt 4 + Vue 3 + TypeScript + Nuxt UI + Nuxt Content.
- Package manager: `pnpm` (see `packageManager` in `package.json`).
- The current `README.md` is mostly upstream template documentation; use scripts/config in this repo as source of truth.
## Commands used in this repo
- Install dependencies:
- `pnpm install`
- Start local dev server:
- `pnpm dev`
- Build production bundle:
- `pnpm build`
- Preview production build locally:
- `pnpm preview`
- Lint:
- `pnpm lint`
- Typecheck:
- `pnpm typecheck`
### Database/Drizzle commands
- Push schema:
- `pnpm db:push`
- Generate migrations:
- `pnpm db:generate`
- Open Drizzle Studio:
- `pnpm db:studio`
Note: `drizzle.config.ts` points to `server/db/schema.ts`, but the repository currently has `server/db/schema.ts.bak` (not `schema.ts`). DB commands may fail until schema paths/files are aligned.
## Testing status
- There is no automated test script in `package.json` and no test runner config (`vitest`, `jest`, `playwright`, etc.) checked in.
- “Run a single test” is currently not applicable in this repository.
- For validation, use:
- `pnpm lint`
- `pnpm typecheck`
- manual verification via `pnpm dev`
## High-level architecture
### 1) Data model and content source
- Primary app data comes from markdown/content files in `content/novels/**` via Nuxt Content (`queryCollection('content')`).
- Pattern:
- One novel metadata file per novel (`content/novels/<slug>/index.md`)
- Chapter files per novel (`content/novels/<slug>/ch-*.md`)
- Homepage curation file at `content/novels/homepage.md` (featured/trending/recent lists).
### 2) Frontend structure and routing
- UI shell and navigation live in `app/layouts/default.vue` (dashboard/sidebar/search structure).
- Page routes are file-based under `app/pages/**`.
- Core user-facing routes:
- `/` homepage (`app/pages/index.vue`)
- `/novels/[id]` novel detail + chapter list (`app/pages/novels/[id].vue`)
- `/novel/[novelId]/[chapterId]` chapter reader (`app/pages/novel/[novelId]/[chapterId].vue`)
- `/titles/search` advanced catalog search (`app/pages/titles/search.vue`)
- `/myreading/*` local user state views (history/library/updates).
### 3) Chapter identity and reader navigation
- Chapter URLs are intentionally not the raw `ch-<n>` IDs.
- Both `app/pages/novels/[id].vue` and `app/pages/novel/[novelId]/[chapterId].vue` generate deterministic UUIDv5 chapter IDs using the same namespace constant and `${novelId}/${internalId}` seed.
- This UUID mapping is critical for route compatibility and resume/history behavior.
### 4) State and persistence strategy
- Persistent user-specific state is currently browser-side via `localStorage`:
- `user_library`
- `reading_history`
- `readerPreferences`
- Shared logic lives in `app/composables/useReaderStorage.ts`.
- `myreading` pages and reader screens consume this composable and/or the same storage keys directly.
### 5) Server API layer
- Nitro handlers under `server/api/**` expose novels/chapters/search endpoints.
- Current handlers also read from Nuxt Content (`queryCollection('content')`), not from a live DB.
- `server/data/*.json` exists as legacy/sample data and is not the primary source for the current UI flows.
### 6) Repository caveats to know before editing
- `app/pages/oldbak/**` contains older backup pages; avoid treating this directory as active product surface unless explicitly migrating/reviving it.
- Type interfaces in `app/types/index.d.ts` include both dashboard-template sample types and web-novel-specific types; be careful to update the right domain types.

40
Dockerfile Normal file
View File

@ -0,0 +1,40 @@
# Build stage
FROM node:22-alpine AS builder
WORKDIR /app
# Copy package files
COPY package.json package-lock.json ./
# Install dependencies (including dev for build)
RUN npm install --legacy-peer-deps
# Copy app source
COPY . .
# Build app
RUN npm run build
# Runtime stage
FROM node:22-alpine
WORKDIR /app
# Copy package files
COPY package.json package-lock.json ./
# Install only production dependencies
RUN npm install --omit=dev --legacy-peer-deps
# Copy built app from builder
COPY --from=builder /app/.output ./.output
# Expose port (adjust if needed)
EXPOSE 3000
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
CMD node -e "require('http').get('http://localhost:3000/', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})"
# Start app
CMD ["node", ".output/server/index.mjs"]

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Nuxt UI Templates
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

64
README.md Normal file
View File

@ -0,0 +1,64 @@
# Nuxt Dashboard Template
[![Nuxt UI](https://img.shields.io/badge/Made%20with-Nuxt%20UI-00DC82?logo=nuxt&labelColor=020420)](https://ui.nuxt.com)
Get started with the Nuxt dashboard template with multiple pages, collapsible sidebar, keyboard shortcuts, light & dark mode, command palette and more, powered by [Nuxt UI](https://ui.nuxt.com).
- [Live demo](https://dashboard-template.nuxt.dev/)
- [Documentation](https://ui.nuxt.com/docs/getting-started/installation/nuxt)
<a href="https://dashboard-template.nuxt.dev/" target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://ui.nuxt.com/assets/templates/nuxt/dashboard-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://ui.nuxt.com/assets/templates/nuxt/dashboard-light.png">
<img alt="Nuxt Dashboard Template" src="https://ui.nuxt.com/assets/templates/nuxt/dashboard-light.png">
</picture>
</a>
> The dashboard template for Vue is on https://github.com/nuxt-ui-templates/dashboard-vue.
## Quick Start
```bash [Terminal]
npm create nuxt@latest -- -t ui/dashboard
```
## Deploy your own
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-name=dashboard&repository-url=https%3A%2F%2Fgithub.com%2Fnuxt-ui-templates%2Fdashboard&demo-image=https%3A%2F%2Fui.nuxt.com%2Fassets%2Ftemplates%2Fnuxt%2Fdashboard-dark.png&demo-url=https%3A%2F%2Fdashboard-template.nuxt.dev%2F&demo-title=Nuxt%20Dashboard%20Template&demo-description=A%20dashboard%20template%20with%20multi-column%20layout%20for%20building%20sophisticated%20admin%20interfaces.)
## Setup
Make sure to install the dependencies:
```bash
pnpm install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
pnpm dev
```
## Production
Build the application for production:
```bash
pnpm build
```
Locally preview production build:
```bash
pnpm preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
## Renovate integration
Install [Renovate GitHub app](https://github.com/apps/renovate/installations/select_target) on your repository and you are good to go.

8
app/app.config.ts Normal file
View File

@ -0,0 +1,8 @@
export default defineAppConfig({
ui: {
colors: {
primary: 'green',
neutral: 'zinc'
}
}
})

42
app/app.vue Normal file
View File

@ -0,0 +1,42 @@
<script setup lang="ts">
const colorMode = useColorMode()
const color = computed(() => colorMode.value === 'dark' ? '#1b1718' : 'white')
useHead({
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ key: 'theme-color', name: 'theme-color', content: color }
],
link: [
{ rel: 'icon', href: '/favicon.ico' }
],
htmlAttrs: {
lang: 'en'
}
})
const title = 'LastWebNovel - Read Web Novels Online'
const description = 'Discover and read thousands of web novels from talented authors. Featuring fantasy, romance, sci-fi, and more with customizable reading experience.'
useSeoMeta({
title,
description,
ogTitle: title,
ogDescription: description,
ogImage: 'https://images.unsplash.com/photo-1512820790803-83ca734da794?w=1200&h=630&fit=crop',
twitterImage: 'https://images.unsplash.com/photo-1512820790803-83ca734da794?w=1200&h=630&fit=crop',
twitterCard: 'summary_large_image'
})
</script>
<template>
<UApp>
<NuxtLoadingIndicator />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</UApp>
</template>

33
app/assets/css/main.css Normal file
View File

@ -0,0 +1,33 @@
@import "tailwindcss" theme(static);
@import "@nuxt/ui";
@theme static {
--font-sans: 'Public Sans', sans-serif;
--color-green-50: #EFFDF5;
--color-green-100: #D9FBE8;
--color-green-200: #B3F5D1;
--color-green-300: #75EDAE;
--color-green-400: #00DC82;
--color-green-500: #00C16A;
--color-green-600: #00A155;
--color-green-700: #007F45;
--color-green-800: #016538;
--color-green-900: #0A5331;
--color-green-950: #052E16;
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
cursor: default;
}

View File

@ -0,0 +1,37 @@
<script setup lang="ts">
interface Props {
collapsed?: boolean
}
withDefaults(defineProps<Props>(), {
collapsed: false
})
</script>
<template>
<transition name="fade">
<img
v-if="collapsed"
src="/logo.png"
alt="LastWebNovel logo"
class="h-8 w-8"
>
</transition>
<transition name="fade">
<div v-if="!collapsed" class="flex flex-col gap-0 px-4 py-2">
<span class="text-lg font-bold text-gray-900 dark:text-white" style="font-family: 'Caveat', cursive; font-weight: 700;">LastWebNovel</span>
<span class="text-xs text-gray-500 dark:text-gray-400">Your Web Novel Hub</span>
</div>
</transition>
</template>
<style scoped>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.2s;
}
.fade-enter-from, .fade-leave-to {
opacity: 0;
}
</style>

View File

@ -0,0 +1,58 @@
<script setup lang="ts">
import type { Chapter } from '~/types'
const props = defineProps<{
chapters: Chapter[]
currentChapterId?: string
novelId: string
}>()
const router = useRouter()
const formatNumber = (num: number): string => {
if (num >= 1000000) {
return `${(num / 1000000).toFixed(1)}M`
} else if (num >= 1000) {
return `${(num / 1000).toFixed(1)}k`
}
return num.toString()
}
const goToChapter = (chapterId: string) => {
router.push(`/novel/${props.novelId}/${chapterId}`)
}
</script>
<template>
<div class="space-y-2 max-h-96 overflow-y-auto w-full">
<div
v-for="chapter in chapters"
:key="chapter.id"
class="p-3 rounded-lg border cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-900 transition-colors w-full"
:class="{ 'bg-primary/10 border-primary': chapter.id === currentChapterId }"
@click="goToChapter(chapter.id)"
>
<div class="flex items-start justify-between">
<div>
<p class="font-semibold text-sm">
<!-- Chapter {{ chapter.number }}: -->
{{ chapter.title }}
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">
{{ new Date(chapter.createdAt).toLocaleDateString() }}
</p>
</div>
<div class="flex items-center gap-2 text-xs text-gray-500">
<span class="flex items-center gap-1">
<UIcon name="i-lucide-eye" class="size-3" />
{{ formatNumber(chapter.views) }}
</span>
<span class="flex items-center gap-1">
<UIcon name="i-lucide-heart" class="size-3" />
{{ formatNumber(chapter.likes) }}
</span>
</div>
</div>
</div>
</div>
</template>

View File

@ -0,0 +1,42 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
defineProps<{
novel: WebNovel
}>()
const router = useRouter()
</script>
<template>
<div
class="cursor-pointer group"
@click="router.push(`/novels/${novel.id}`)"
>
<div class="relative overflow-hidden rounded-lg">
<img
:src="novel.cover"
:alt="novel.title"
class="w-full aspect-[3/4] object-cover group-hover:scale-105 transition-transform duration-300"
>
<div class="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent flex flex-col justify-end p-3">
<h3 class="font-bold text-white line-clamp-2">
{{ novel.title }}
</h3>
<p class="text-sm text-gray-200">
{{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
</div>
</div>
<div class="mt-2 space-y-1">
<div class="flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-4 text-yellow-500" />
<span class="text-sm font-semibold">{{ (novel.rating || 0).toFixed(1) }}</span>
<span class="text-xs text-gray-500">· {{ novel.status }}</span>
</div>
<p class="text-xs text-gray-600 dark:text-gray-400">
{{ novel.chapters || 0 }} chapters
</p>
</div>
</div>
</template>

View File

@ -0,0 +1,64 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
const props = defineProps<{
novel: WebNovel
}>()
const router = useRouter()
const handleClick = () => {
router.push(`/novels/${props.novel.id}`)
}
</script>
<template>
<UCard
@click="handleClick"
class="cursor-pointer hover:shadow-lg transition-all duration-200 h-full"
>
<template #header>
<img
:src="novel.cover"
:alt="novel.title"
class="w-full h-48 object-cover rounded"
>
</template>
<div class="space-y-2">
<h3 class="font-bold text-lg line-clamp-2">{{ novel.title }}</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">
by {{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
<div class="flex flex-wrap gap-1 pt-2">
<UBadge
v-for="genre in novel.genres.slice(0, 2)"
:key="genre"
size="xs"
>
{{ genre }}
</UBadge>
</div>
<div class="flex items-center justify-between pt-2">
<div class="flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-4 text-yellow-500" />
<span class="text-sm font-semibold">{{ (novel.rating || 0).toFixed(1) }}</span>
</div>
<UBadge
:color="novel.status === 'completed' ? 'green' : novel.status === 'hiatus' ? 'amber' : 'blue'"
size="xs"
>
{{ novel.status }}
</UBadge>
</div>
<div class="text-xs text-gray-500 dark:text-gray-400 space-y-1 pt-2">
<p>📖 {{ novel.chapters || 0 }} chapters</p>
<p>👁 {{ ((novel.views || 0) / 1000).toFixed(0) }}k views</p>
</div>
</div>
</UCard>
</template>

View File

@ -0,0 +1,71 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
defineProps<{
novel: WebNovel
featured?: boolean
}>()
const router = useRouter()
</script>
<template>
<UCard class="overflow-hidden cursor-pointer hover:shadow-xl transition-shadow duration-300">
<div class="flex flex-col md:flex-row gap-4">
<img
:src="novel.cover"
:alt="novel.title"
class="w-full md:w-32 h-48 object-cover rounded"
>
<div class="flex-1 flex flex-col justify-between">
<div>
<div class="flex items-start justify-between mb-2">
<div>
<h3 class="text-lg font-bold">
{{ novel.title }}
</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">
by {{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
</div>
<UBadge
:color="novel.status === 'completed' ? 'green' : novel.status === 'hiatus' ? 'amber' : 'blue'"
>
{{ novel.status }}
</UBadge>
</div>
<p class="text-sm text-gray-700 dark:text-gray-300 line-clamp-2 mb-3">
{{ novel.description }}
</p>
<div class="flex flex-wrap gap-1 mb-3">
<UBadge v-for="genre in novel.genres" :key="genre" size="xs">
{{ genre }}
</UBadge>
</div>
</div>
<div class="flex items-center justify-between">
<div class="flex items-center gap-4 text-sm">
<div class="flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-4 text-yellow-500" />
<span>{{ (novel.rating || 0).toFixed(1) }}</span>
</div>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-eye" class="size-4" />
<span>{{ ((novel.views || 0) / 1000).toFixed(0) }}k</span>
</div>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-book" class="size-4" />
<span>{{ novel.chapters || 0 }}</span>
</div>
</div>
<UButton
icon="i-lucide-arrow-right"
@click.stop="router.push(`/novels/${novel.id}`)"
>
Read
</UButton>
</div>
</div>
</div>
</UCard>
</template>

View File

@ -0,0 +1,84 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
const route = useRoute()
const router = useRouter()
const open = ref(false)
const query = ref('')
const results = ref<WebNovel[]>([])
const isLoading = ref(false)
const searchNovels = async () => {
if (!query.value.trim()) {
results.value = []
return
}
isLoading.value = true
try {
const response = await $fetch<WebNovel[]>('/api/novels/search', {
query: { q: query.value }
})
results.value = response
} catch (error) {
console.error('Search error:', error)
} finally {
isLoading.value = false
}
}
const selectResult = (novel: WebNovel) => {
router.push(`/novels/${novel.id}`)
open.value = false
query.value = ''
}
// Watch for Ctrl+K
const handleKeyDown = (e: KeyboardEvent) => {
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
e.preventDefault()
open.value = !open.value
}
}
onMounted(() => {
window.addEventListener('keydown', handleKeyDown)
})
onUnmounted(() => {
window.removeEventListener('keydown', handleKeyDown)
})
</script>
<template>
<UCommandPalette
v-model="open"
:groups="[
{
id: 'novels',
label: 'Novels',
commands: results.map(novel => ({
id: novel.id,
label: `${novel.title}`,
description: `by ${typeof novel.author === 'string' ? novel.author : novel.author?.name} · ${(novel.rating || 0).toFixed(1)}`,
icon: 'i-lucide-book',
click: () => selectResult(novel)
}))
}
]"
:loading="isLoading"
icon="i-lucide-search"
placeholder="Search novels..."
:ui="{ base: 'h-64 sm:h-96' }"
@update:model-value="val => open = val"
>
<template #default="{ query: q }">
<input
v-model="query"
placeholder="Search novels, authors, tags..."
class="w-full bg-transparent px-2 py-1 outline-none"
@input="searchNovels"
>
</template>
</UCommandPalette>
</template>

View File

@ -0,0 +1,183 @@
<script setup lang="ts">
import type { ReaderPreferences } from '~/types'
const toast = useToast()
const props = defineProps<{
preferences: ReaderPreferences
backgroundColor?: string
textColor?: string
}>()
const emit = defineEmits<{
update: [preferences: Partial<ReaderPreferences>]
}>()
const readingPresets = [
{
id: 'book',
name: 'Book',
description: 'Serif, Cream',
settings: { fontFamily: 'serif', backgroundColor: 'cream', textColor: 'black' }
},
{
id: 'modern',
name: 'Modern',
description: 'Sans-serif, White',
settings: { fontFamily: 'sans-serif', backgroundColor: 'white', textColor: 'black' }
},
{
id: 'dark',
name: 'Dark',
description: 'Serif, Black',
settings: { fontFamily: 'serif', backgroundColor: 'black', textColor: 'white' }
}
]
const updateFontSize = (value: number) => {
emit('update', { fontSize: value })
}
const updateLineHeight = (value: number) => {
emit('update', { lineHeight: value })
}
const applyPreset = (preset: typeof readingPresets[0]) => {
emit('update', preset.settings)
}
const updatePreference = (key: keyof ReaderPreferences, value: any) => {
emit('update', { [key]: value })
}
const getCurrentPreset = () => {
return readingPresets.find(
p => p.settings.fontFamily === props.preferences.fontFamily
&& p.settings.backgroundColor === props.preferences.backgroundColor
&& p.settings.textColor === props.preferences.textColor
)?.id
}
const handleSave = () => {
emit('save')
toast.add({
title: 'Settings Saved',
description: 'Your reader preferences have been saved.',
icon: 'i-lucide-check-circle',
color: 'green'
})
}
const handleReset = () => {
emit('reset')
toast.add({
title: 'Settings Reset',
description: 'Your reader preferences have been reset to default.',
icon: 'i-lucide-undo-2',
color: 'blue'
})
}
</script>
<template>
<div
class="space-y-4 p-4 rounded-lg transition-colors duration-300"
:style="{
backgroundColor: props.backgroundColor || '#f9fafb',
color: props.textColor || '#000000'
}"
>
<p class="text-lg font-bold mb-4">
Reader Settings
</p>
<div>
<label class="text-xs font-semibold mb-2 block">Font Size: {{ preferences.fontSize }}px</label>
<div class="flex items-center gap-3">
<UIcon name="i-lucide-type" class="size-4" />
<input
type="range"
:value="preferences.fontSize"
min="12"
max="24"
class="flex-1"
@input="e => updateFontSize(Number((e.target as HTMLInputElement).value))"
>
<span class="text-xs w-8">{{ preferences.fontSize }}</span>
</div>
</div>
<div>
<label class="text-xs font-semibold mb-2 block">Line Height: {{ preferences.lineHeight.toFixed(1) }}</label>
<div class="flex items-center gap-3">
<UIcon name="i-lucide-maximize-2" class="size-4" />
<input
type="range"
:value="preferences.lineHeight"
min="1.5"
max="2.5"
step="0.1"
class="flex-1"
@input="e => updateLineHeight(Number((e.target as HTMLInputElement).value))"
>
<span class="text-xs w-8">{{ preferences.lineHeight.toFixed(1) }}</span>
</div>
</div>
<div>
<label class="text-xs font-semibold mb-3 block">Reading Presets</label>
<div class="grid grid-cols-3 gap-2">
<button
v-for="preset in readingPresets"
:key="preset.id"
:class="[
'p-2 rounded-lg text-xs font-medium transition-all duration-200 border-2',
getCurrentPreset() === preset.id
? 'border-current font-bold bg-opacity-20'
: 'border-transparent opacity-60 hover:opacity-100'
]"
@click="applyPreset(preset)"
>
<div class="font-semibold">
{{ preset.name }}
</div>
<div class="text-xs opacity-75">
{{ preset.description }}
</div>
</button>
</div>
</div>
<div class="flex items-center gap-2 py-3">
<input
type="checkbox"
:checked="preferences.textJustify"
class="rounded"
@change="e => updatePreference('textJustify', (e.target as HTMLInputElement).checked)"
>
<label class="text-xs font-semibold">Justify Text</label>
</div>
<div class="flex gap-2 pt-4">
<UButton
size="lg"
variant="subtle"
color="info"
icon="i-lucide-undo-2"
class="flex-1"
@click="handleReset"
>
Reset
</UButton>
<UButton
size="lg"
variant="subtle"
icon="i-lucide-check"
class="flex-1"
@click="handleSave"
>
Save
</UButton>
</div>
</div>
</template>

View File

@ -0,0 +1,137 @@
<script setup lang="ts">
import type { DropdownMenuItem } from '@nuxt/ui'
defineProps<{
collapsed?: boolean
}>()
const colorMode = useColorMode()
const appConfig = useAppConfig()
const colors = ['red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose']
const neutrals = ['slate', 'gray', 'zinc', 'neutral', 'stone']
const presets = [
{ label: 'Ocean Dark', primary: 'blue', neutral: 'slate', mode: 'dark', icon: 'i-lucide-waves' },
{ label: 'Forest Light', primary: 'green', neutral: 'stone', mode: 'light', icon: 'i-lucide-tree-pine' },
{ label: 'Sunset', primary: 'orange', neutral: 'zinc', mode: 'dark', icon: 'i-lucide-sunset' }
]
const applyPreset = (preset: typeof presets[0]) => {
appConfig.ui.colors.primary = preset.primary
appConfig.ui.colors.neutral = preset.neutral
colorMode.preference = preset.mode
}
const items = computed<DropdownMenuItem[][]>(() => ([[{
type: 'label',
label: 'Quick Presets',
icon: 'i-lucide-sparkles'
}], presets.map(preset => ({
label: preset.label,
icon: preset.icon,
onSelect: () => applyPreset(preset)
})), [{
label: 'Theme',
icon: 'i-lucide-palette',
children: [{
label: 'Primary',
slot: 'chip',
chip: appConfig.ui.colors.primary,
content: {
align: 'center',
collisionPadding: 16
},
children: colors.map(color => ({
label: color,
chip: color,
slot: 'chip',
checked: appConfig.ui.colors.primary === color,
type: 'checkbox',
onSelect: (e) => {
e.preventDefault()
appConfig.ui.colors.primary = color
}
}))
}, {
label: 'Neutral',
slot: 'chip',
chip: appConfig.ui.colors.neutral === 'neutral' ? 'old-neutral' : appConfig.ui.colors.neutral,
content: {
align: 'end',
collisionPadding: 16
},
children: neutrals.map(color => ({
label: color,
chip: color === 'neutral' ? 'old-neutral' : color,
slot: 'chip',
type: 'checkbox',
checked: appConfig.ui.colors.neutral === color,
onSelect: (e) => {
e.preventDefault()
appConfig.ui.colors.neutral = color
}
}))
}]
}, {
label: 'Appearance',
icon: 'i-lucide-sun-moon',
children: [{
label: 'Light',
icon: 'i-lucide-sun',
type: 'checkbox',
checked: colorMode.value === 'light',
onSelect(e: Event) {
e.preventDefault()
colorMode.preference = 'light'
}
}, {
label: 'Dark',
icon: 'i-lucide-moon',
type: 'checkbox',
checked: colorMode.value === 'dark',
onUpdateChecked(checked: boolean) {
if (checked) {
colorMode.preference = 'dark'
}
},
onSelect(e: Event) {
e.preventDefault()
}
}]
}]]))
</script>
<template>
<UDropdownMenu
mode="hover"
:items="items"
:content="{ align: 'center', collisionPadding: 12 }"
:ui="{ content: collapsed ? 'w-48' : 'w-(--reka-dropdown-menu-trigger-width)' }"
>
<template #default="{ open }">
<UButton
color="neutral"
variant="ghost"
class="w-full rounded-none"
:class="[collapsed ? 'justify-center square' : 'justify-start']"
:aria-label="collapsed ? 'Settings' : undefined"
>
<UIcon
name="i-lucide-settings"
class="size-5 shrink-0"
:class="{ 'animate-spin-slow': open }"
/>
<span v-if="!collapsed" class="truncate">Settings</span>
<UIcon
v-if="!collapsed"
name="i-lucide-chevrons-up-down"
class="ms-auto size-5 shrink-0 transform transition-transform duration-200"
:class="[open && 'rotate-90']"
/>
</UButton>
</template>
</UDropdownMenu>
</template>

188
app/components/UserMenu.vue Normal file
View File

@ -0,0 +1,188 @@
<script setup lang="ts">
import type { DropdownMenuItem } from '@nuxt/ui'
defineProps<{
collapsed?: boolean
}>()
const colorMode = useColorMode()
const appConfig = useAppConfig()
const colors = ['red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose']
const neutrals = ['slate', 'gray', 'zinc', 'neutral', 'stone']
const user = ref({
name: 'Ahmed DCHAR',
avatar: {
src: 'https://github.com/benjamincanac.png',
alt: 'Ahmed DCHAR'
}
})
const items = computed<DropdownMenuItem[][]>(() => ([[{
type: 'label',
label: user.value.name,
avatar: user.value.avatar
}], [{
label: 'Profile',
icon: 'i-lucide-user'
}, {
label: 'Billing',
icon: 'i-lucide-credit-card'
}, {
label: 'Settings',
icon: 'i-lucide-settings',
to: '/settings'
}], [{
label: 'Theme',
icon: 'i-lucide-palette',
children: [{
label: 'Primary',
slot: 'chip',
chip: appConfig.ui.colors.primary,
content: {
align: 'center',
collisionPadding: 16
},
children: colors.map(color => ({
label: color,
chip: color,
slot: 'chip',
checked: appConfig.ui.colors.primary === color,
type: 'checkbox',
onSelect: (e) => {
e.preventDefault()
appConfig.ui.colors.primary = color
}
}))
}, {
label: 'Neutral',
slot: 'chip',
chip: appConfig.ui.colors.neutral === 'neutral' ? 'old-neutral' : appConfig.ui.colors.neutral,
content: {
align: 'end',
collisionPadding: 16
},
children: neutrals.map(color => ({
label: color,
chip: color === 'neutral' ? 'old-neutral' : color,
slot: 'chip',
type: 'checkbox',
checked: appConfig.ui.colors.neutral === color,
onSelect: (e) => {
e.preventDefault()
appConfig.ui.colors.neutral = color
}
}))
}]
}, {
label: 'Appearance',
icon: 'i-lucide-sun-moon',
children: [{
label: 'Light',
icon: 'i-lucide-sun',
type: 'checkbox',
checked: colorMode.value === 'light',
onSelect(e: Event) {
e.preventDefault()
colorMode.preference = 'light'
}
}, {
label: 'Dark',
icon: 'i-lucide-moon',
type: 'checkbox',
checked: colorMode.value === 'dark',
onUpdateChecked(checked: boolean) {
if (checked) {
colorMode.preference = 'dark'
}
},
onSelect(e: Event) {
e.preventDefault()
}
}]
}], [{
label: 'Templates',
icon: 'i-lucide-layout-template',
children: [{
label: 'Starter',
to: 'https://starter-template.nuxt.dev/'
}, {
label: 'Landing',
to: 'https://landing-template.nuxt.dev/'
}, {
label: 'Docs',
to: 'https://docs-template.nuxt.dev/'
}, {
label: 'SaaS',
to: 'https://saas-template.nuxt.dev/'
}, {
label: 'Dashboard',
to: 'https://dashboard-template.nuxt.dev/',
color: 'primary',
checked: true,
type: 'checkbox'
}, {
label: 'Chat',
to: 'https://chat-template.nuxt.dev/'
}, {
label: 'Portfolio',
to: 'https://portfolio-template.nuxt.dev/'
}, {
label: 'Changelog',
to: 'https://changelog-template.nuxt.dev/'
}]
}], [{
label: 'Documentation',
icon: 'i-lucide-book-open',
to: 'https://ui.nuxt.com/docs/getting-started/installation/nuxt',
target: '_blank'
}, {
label: 'GitHub repository',
icon: 'i-simple-icons-github',
to: 'https://github.com/nuxt-ui-templates/dashboard',
target: '_blank'
}, {
label: 'Log out',
icon: 'i-lucide-log-out'
}]]))
</script>
<template>
<UDropdownMenu
:items="items"
:content="{ align: 'center', collisionPadding: 12 }"
:ui="{ content: collapsed ? 'w-48' : 'w-(--reka-dropdown-menu-trigger-width)' }"
>
<UButton
v-bind="{
...user,
label: collapsed ? undefined : user?.name,
trailingIcon: collapsed ? undefined : 'i-lucide-chevrons-up-down'
}"
color="neutral"
variant="ghost"
block
:square="collapsed"
class="data-[state=open]:bg-elevated"
:ui="{
trailingIcon: 'text-dimmed'
}"
/>
<template #chip-leading="{ item }">
<div class="inline-flex items-center justify-center shrink-0 size-5">
<span
class="rounded-full ring ring-bg bg-(--chip-light) dark:bg-(--chip-dark) size-2"
:style="{
'--chip-light': `var(--color-${(item as any).chip}-500)`,
'--chip-dark': `var(--color-${(item as any).chip}-400)`
}"
/>
</div>
</template>
</UDropdownMenu>
</template>

View File

@ -0,0 +1,62 @@
<script setup lang="ts">
import type { WebNovel, Chapter } from '~/types'
interface ContinueReading {
novel: WebNovel
lastChapter: Chapter
readingTime?: string
}
interface Props {
items?: ContinueReading[]
loading?: boolean
}
withDefaults(defineProps<Props>(), {
loading: false
})
</script>
<template>
<div>
<div class="flex items-center justify-between mb-6">
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
Continue Reading
</h2>
</div>
<div v-if="loading" class="grid grid-cols-1 md:grid-cols-2 gap-4">
<USkeleton v-for="i in 2" :key="i" class="h-32 rounded-lg" />
</div>
<div v-else-if="items && items.length > 0" class="grid grid-cols-1 md:grid-cols-2 gap-4">
<NuxtLink
v-for="item in items"
:key="item.novel.id"
:to="`/novel/${item.novel.slug}/${item.lastChapter.slug}`"
class="p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:shadow-lg dark:hover:shadow-xl transition"
>
<div class="flex gap-4">
<div class="flex-1">
<h3 class="font-semibold text-gray-900 dark:text-white line-clamp-2">
{{ item.novel.title }}
</h3>
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1">
{{ item.lastChapter.title }}
</p>
<p v-if="item.readingTime" class="text-xs text-gray-500 dark:text-gray-500 mt-2">
Reading time: {{ item.readingTime }}
</p>
</div>
<div class="flex-shrink-0">
<UIcon name="i-lucide-arrow-right" class="w-5 h-5 text-gray-400 dark:text-gray-600" />
</div>
</div>
</NuxtLink>
</div>
<div v-else class="py-8 text-center text-gray-500 dark:text-gray-400">
<p>No reading history yet. Start reading a novel!</p>
</div>
</div>
</template>

View File

@ -0,0 +1,39 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
interface Props {
novels?: WebNovel[]
loading?: boolean
}
withDefaults(defineProps<Props>(), {
loading: false
})
</script>
<template>
<div>
<div class="flex items-center justify-between mb-6">
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">Featured Novels</h2>
<NuxtLink to="/novels" class="text-sm text-blue-600 dark:text-blue-400 hover:underline">
View All
</NuxtLink>
</div>
<div v-if="loading" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<USkeleton v-for="i in 4" :key="i" class="h-64 rounded-lg" />
</div>
<div v-else-if="novels && novels.length > 0" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<NovelCard
v-for="novel in novels.slice(0, 4)"
:key="novel.id"
:novel="novel"
/>
</div>
<div v-else class="py-12 text-center text-gray-500 dark:text-gray-400">
<p>No novels available</p>
</div>
</div>
</template>

View File

@ -0,0 +1,59 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
interface Props {
novels?: WebNovel[]
loading?: boolean
}
withDefaults(defineProps<Props>(), {
loading: false
})
</script>
<template>
<div>
<div class="flex items-center justify-between mb-6">
<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
Popular Now
</h2>
<NuxtLink to="/novels" class="text-sm text-blue-600 dark:text-blue-400 hover:underline">
Browse All
</NuxtLink>
</div>
<div v-if="loading" class="space-y-3">
<USkeleton v-for="i in 3" :key="i" class="h-20 rounded-lg" />
</div>
<div v-else-if="novels && novels.length > 0" class="space-y-3">
<div
v-for="(novel, idx) in novels.slice(0, 5)"
:key="novel.id"
class="flex items-center gap-4 p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-800 transition cursor-pointer"
>
<div class="flex-shrink-0">
<span class="inline-flex items-center justify-center h-8 w-8 rounded-full bg-blue-100 dark:bg-blue-900 text-sm font-semibold text-blue-600 dark:text-blue-300">
{{ idx + 1 }}
</span>
</div>
<NuxtLink :to="`/novels/${novel.slug}`" class="flex-1 min-w-0">
<p class="text-sm font-semibold text-gray-900 dark:text-white truncate">
{{ novel.title }}
</p>
<p class="text-xs text-gray-500 dark:text-gray-400">
{{ novel.author }} {{ novel.views }}M views
</p>
</NuxtLink>
<div class="flex-shrink-0 flex items-center gap-1">
<UIcon name="i-lucide-star" class="w-4 h-4 text-yellow-400" />
<span class="text-sm font-semibold text-gray-900 dark:text-white">{{ novel.rating }}</span>
</div>
</div>
</div>
<div v-else class="py-8 text-center text-gray-500 dark:text-gray-400">
<p>No novels available</p>
</div>
</div>
</template>

View File

@ -0,0 +1,25 @@
import { createSharedComposable } from '@vueuse/core'
const _useDashboard = () => {
const route = useRoute()
const router = useRouter()
const isNotificationsSlideoverOpen = ref(false)
defineShortcuts({
'g-h': () => router.push('/'),
'g-i': () => router.push('/inbox'),
'g-c': () => router.push('/customers'),
'g-s': () => router.push('/settings'),
'n': () => isNotificationsSlideoverOpen.value = !isNotificationsSlideoverOpen.value
})
watch(() => route.fullPath, () => {
isNotificationsSlideoverOpen.value = false
})
return {
isNotificationsSlideoverOpen
}
}
export const useDashboard = createSharedComposable(_useDashboard)

View File

@ -0,0 +1,94 @@
export interface LibraryNovel {
id: string
title: string
author: string
cover: string
addedAt: string
}
export interface ReadingHistoryEntry {
novelId: string
novelTitle: string
chapterId: string
chapterTitle: string
cover: string
readAt: string
}
export const useReaderStorage = () => {
/**
* Library Management (localStorage)
* TODO: Migrate to PostgreSQL in a future update
*/
const addToLibrary = (novel: { id: string, title: string, author: string, cover: string }) => {
const library = JSON.parse(localStorage.getItem('user_library') || '[]') as LibraryNovel[]
const exists = library.some(n => n.id === novel.id)
if (!exists) {
library.push({
...novel,
addedAt: new Date().toISOString()
})
localStorage.setItem('user_library', JSON.stringify(library))
return true
}
return false
}
const removeFromLibrary = (novelId: string) => {
const library = JSON.parse(localStorage.getItem('user_library') || '[]') as LibraryNovel[]
const filtered = library.filter(n => n.id !== novelId)
localStorage.setItem('user_library', JSON.stringify(filtered))
}
const isInLibrary = (novelId: string): boolean => {
const library = JSON.parse(localStorage.getItem('user_library') || '[]') as LibraryNovel[]
return library.some(n => n.id === novelId)
}
const getLibrary = (): LibraryNovel[] => {
return JSON.parse(localStorage.getItem('user_library') || '[]')
}
/**
* Reading History Management (localStorage)
* TODO: Migrate to PostgreSQL in a future update
*/
const addToHistory = (entry: Omit<ReadingHistoryEntry, 'readAt'>) => {
const history = JSON.parse(localStorage.getItem('reading_history') || '[]') as ReadingHistoryEntry[]
history.push({
...entry,
readAt: new Date().toISOString()
})
// Keep only last 100 entries
if (history.length > 100) {
history.shift()
}
localStorage.setItem('reading_history', JSON.stringify(history))
}
const getHistory = (): ReadingHistoryEntry[] => {
const history = JSON.parse(localStorage.getItem('reading_history') || '[]') as ReadingHistoryEntry[]
return history.sort((a, b) => new Date(b.readAt).getTime() - new Date(a.readAt).getTime())
}
const clearHistory = () => {
localStorage.removeItem('reading_history')
}
return {
// Library methods
addToLibrary,
removeFromLibrary,
isInLibrary,
getLibrary,
// History methods
addToHistory,
getHistory,
clearHistory
}
}

24
app/error.vue Normal file
View File

@ -0,0 +1,24 @@
<script setup lang="ts">
import type { NuxtError } from '#app'
defineProps<{
error: NuxtError
}>()
useSeoMeta({
title: 'Page not found',
description: 'We are sorry but this page could not be found.'
})
useHead({
htmlAttrs: {
lang: 'en'
}
})
</script>
<template>
<UApp>
<UError :error="error" />
</UApp>
</template>

160
app/layouts/default.vue Normal file
View File

@ -0,0 +1,160 @@
<script setup lang="ts">
import type { NavigationMenuItem } from '@nuxt/ui'
const toast = useToast()
const open = ref(false)
const links = [[
{
label: 'Home',
icon: 'i-lucide-home',
to: '/',
onSelect: () => {
open.value = false
}
},
{
label: 'My Reading',
icon: 'i-lucide-history',
defaultOpen: true,
children: [
{
label: 'History',
to: '/myreading/history',
onSelect: () => {
open.value = false
}
},
{
label: 'Library',
to: '/myreading/library',
onSelect: () => {
open.value = false
}
},
{
label: 'Updates',
to: '/myreading/updates',
onSelect: () => {
open.value = false
}
}
]
},
{
label: 'Titles',
icon: 'i-lucide-book',
defaultOpen: true,
children: [
{
label: 'Advanced Search',
to: '/titles/search',
// icon: 'i-lucide-search',
onSelect: () => {
open.value = false
}
},
{
label: 'Recently Added',
to: '/titles/recently-added',
// icon: 'i-lucide-clock',
onSelect: () => {
open.value = false
}
},
{
label: 'Latest Updates',
to: '/titles/latest',
// icon: 'i-lucide-refresh-cw',
onSelect: () => {
open.value = false
}
},
{
label: 'Random',
to: '/titles/random',
// icon: 'i-lucide-shuffle',
onSelect: () => {
open.value = false
}
}
]
}
]] satisfies NavigationMenuItem[][]
const groups = computed(() => [{
id: 'main',
items: links.flat()
}])
onMounted(async () => {
const cookie = useCookie('cookie-consent')
if (cookie.value === 'accepted') {
return
}
toast.add({
title: 'We use first-party cookies to enhance your experience on our website.',
duration: 0,
close: false,
actions: [{
label: 'Accept',
color: 'neutral',
variant: 'outline',
onClick: () => {
cookie.value = 'accepted'
}
}, {
label: 'Opt out',
color: 'neutral',
variant: 'ghost'
}]
})
})
</script>
<template>
<UDashboardGroup unit="rem">
<UDashboardSidebar
id="default"
v-model:open="open"
collapsible
resizable
class="bg-elevated/25"
:ui="{ footer: 'lg:border-t lg:border-default' }"
>
<template #header="{ collapsed }">
<AppLogo :collapsed="collapsed" />
</template>
<template #default="{ collapsed }">
<UDashboardSearchButton :collapsed="collapsed" class="bg-transparent ring-default" />
<UNavigationMenu
:collapsed="collapsed"
:items="links"
orientation="vertical"
tooltip
popover
/>
<!-- <UNavigationMenu
:collapsed="collapsed"
:items="links[1]"
orientation="vertical"
tooltip
class="mt-auto"
/> -->
</template>
<template #footer="{ collapsed }">
<SettingsMenu :collapsed="collapsed" />
</template>
</UDashboardSidebar>
<UDashboardSearch :groups="groups" />
<slot />
</UDashboardGroup>
</template>

346
app/pages/index.vue Normal file
View File

@ -0,0 +1,346 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
const router = useRouter()
const featured = ref<WebNovel[]>([])
const trending = ref<WebNovel[]>([])
const recent = ref<WebNovel[]>([])
const isLoading = ref(true)
const currentFeaturedIndex = ref(0)
const nextFeatured = () => {
if (featured.value.length > 0) {
currentFeaturedIndex.value = (currentFeaturedIndex.value + 1) % featured.value.length
}
}
const prevFeatured = () => {
if (featured.value.length > 0) {
currentFeaturedIndex.value = (currentFeaturedIndex.value - 1 + featured.value.length) % featured.value.length
}
}
const currentFeatured = computed(() => featured.value[currentFeaturedIndex.value])
const loadNovels = async () => {
try {
// Load homepage configuration to get featured/trending/recent novel slugs
const homepageConfig = await queryCollection('content').path('/novels/homepage').first()
if (!homepageConfig) {
console.error('Homepage configuration not found')
return
}
console.log('Homepage config:', homepageConfig)
// Collect all unique slugs from featured, trending, and recent
const allSlugs = new Set<string>([
...(homepageConfig.meta.featured || []),
...(homepageConfig.meta.trending || []),
...(homepageConfig.meta.recent || [])
])
console.log(`Querying ${allSlugs.size} unique novels`)
// Create a map of slug -> novel for quick lookup
const novelMap = new Map<string, WebNovel>()
// Query only the novels we need
for (const slug of allSlugs) {
const item = await queryCollection('content').path(`/novels/${slug}`).first() as WebNovel | null
if (item) {
const novel: WebNovel = {
id: slug,
title: item.title || 'Unknown',
author: item.meta.author || 'Unknown',
description: item.description || item.meta.body?.text || '',
cover: `/images/${slug}/cover.png`,
status: item.meta.status || 'ongoing',
genres: item.meta.genres || [],
rating: item.meta.rating || 0,
views: item.meta.views || 0,
followers: item.meta.followers || 0,
chapters: item.meta.chapters || 0,
language: item.meta.language || 'English',
tags: item.meta.tags || [],
createdAt: item.createdAt || new Date().toISOString(),
updatedAt: item.updatedAt || new Date().toISOString()
}
novelMap.set(slug, novel)
}
}
console.log(`Loaded ${novelMap.size} novels from cache`)
// Get featured novels using configured slugs
featured.value = (homepageConfig.meta.featured || [])
.map((slug: string) => novelMap.get(slug))
.filter(Boolean)
// Get trending novels using configured slugs
trending.value = (homepageConfig.meta.trending || [])
.map((slug: string) => novelMap.get(slug))
.filter(Boolean)
// Get recent novels using configured slugs
recent.value = (homepageConfig.meta.recent || [])
.map((slug: string) => novelMap.get(slug))
.filter(Boolean)
console.log('Featured:', featured.value.length, 'Trending:', trending.value.length, 'Recent:', recent.value.length)
} catch (error) {
console.error('Error loading novels:', error)
} finally {
isLoading.value = false
}
}
onMounted(() => {
loadNovels()
})
</script>
<template>
<UDashboardPanel id="home">
<template #header>
<UDashboardNavbar title="WebNovel Platform" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
<template #right>
<!-- <UTooltip text="Search (Ctrl+K)" :shortcuts="['Ctrl', 'K']">
<UButton
icon="i-lucide-search"
color="neutral"
variant="ghost"
square
@click="$refs.search?.open()"
/>
</UTooltip>
<UButton
icon="i-lucide-flame"
color="primary"
size="md"
@click="router.push('/novels')"
>
Explore
</UButton> -->
</template>
</UDashboardNavbar>
</template>
<template #body>
<!-- Featured Hero Slider - Full Width -->
<section v-if="!isLoading && currentFeatured" class="-m-4 md:-m-6 mb-0">
<div class="relative h-[400px] md:h-[500px]">
<!-- Background Image with Gradient Overlay -->
<img
:src="currentFeatured.cover"
:alt="currentFeatured.title"
class="absolute inset-0 w-full h-full object-cover"
>
<div class="absolute inset-0 bg-gradient-to-r from-black/90 via-black/70 to-transparent" />
<!-- Content -->
<div class="relative h-full flex items-center">
<div class="container mx-auto px-4 md:px-8 max-w-2xl">
<div class="space-y-4">
<!-- Title -->
<h1 class="text-3xl md:text-5xl font-bold text-white line-clamp-2">
{{ currentFeatured.title }}
</h1>
<!-- Genres -->
<div class="flex flex-wrap gap-2">
<UBadge
v-for="genre in currentFeatured.genres?.slice(0, 3)"
:key="genre"
color="primary"
size="md"
>
{{ genre }}
</UBadge>
</div>
<!-- Description -->
<p class="text-gray-200 text-sm md:text-base line-clamp-3 md:line-clamp-4">
{{ currentFeatured.description }}
</p>
<!-- Author and Stats -->
<div class="flex flex-wrap items-center gap-4 text-sm text-gray-300">
<span class="font-medium">{{ typeof currentFeatured.author === 'string' ? currentFeatured.author : currentFeatured.author?.name }}</span>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-4 text-yellow-400" />
<span>{{ (currentFeatured.rating || 0).toFixed(1) }}</span>
</div>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-book" class="size-4" />
<span>{{ currentFeatured.chapters || 0 }} chapters</span>
</div>
</div>
<!-- Read Button -->
<UButton
size="lg"
color="primary"
icon="i-lucide-book-open"
@click="router.push(`/novels/${currentFeatured.id}`)"
>
Start Reading
</UButton>
</div>
</div>
</div>
<!-- Navigation Arrows -->
<button
v-if="featured.length > 1"
class="absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white p-2 rounded-full transition-colors"
@click="prevFeatured"
>
<UIcon name="i-lucide-chevron-left" class="size-6" />
</button>
<button
v-if="featured.length > 1"
class="absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white p-2 rounded-full transition-colors"
@click="nextFeatured"
>
<UIcon name="i-lucide-chevron-right" class="size-6" />
</button>
<!-- Page Indicator -->
<div
v-if="featured.length > 1"
class="absolute bottom-4 right-4 bg-black/50 text-white px-3 py-1 rounded text-sm font-medium"
>
NO. {{ currentFeaturedIndex + 1 }} / {{ featured.length }}
</div>
</div>
</section>
<!-- Featured Skeleton -->
<section v-if="isLoading" class="-m-4 md:-m-6 mb-0">
<USkeleton class="h-[400px] md:h-[500px]" />
</section>
<UContainer class="space-y-8 py-8">
<!-- Trending Section -->
<section class="space-y-3">
<div class="flex items-center justify-between">
<h2 class="text-xl md:text-2xl font-bold">
Trending Now
</h2>
<UButton
variant="ghost"
trailing-icon="i-lucide-arrow-right"
size="sm"
>
More
</UButton>
</div>
<div v-if="isLoading" class="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-3">
<USkeleton v-for="i in 6" :key="i" class="h-48 rounded-lg" />
</div>
<div v-else class="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-3">
<div
v-for="novel in trending.slice(0, 6)"
:key="novel.id"
class="cursor-pointer group"
@click="router.push(`/novels/${novel.id}`)"
>
<div class="relative overflow-hidden rounded-lg">
<img
:src="novel.cover"
:alt="novel.title"
class="w-full aspect-[2/3] object-cover group-hover:scale-105 transition-transform duration-300"
>
<div class="absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" />
<div class="absolute bottom-0 left-0 right-0 p-2">
<h3 class="font-semibold text-white text-xs md:text-sm line-clamp-2">
{{ novel.title }}
</h3>
<div class="flex items-center gap-1 mt-1">
<UIcon name="i-lucide-star" class="size-3 text-yellow-400" />
<span class="text-xs text-white">{{ (novel.rating || 0).toFixed(1) }}</span>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Recently Updated Section -->
<section class="space-y-3">
<div class="flex items-center justify-between">
<h2 class="text-xl md:text-2xl font-bold">
Recently Updated
</h2>
<UButton
variant="ghost"
trailing-icon="i-lucide-arrow-right"
size="sm"
>
More
</UButton>
</div>
<div v-if="isLoading" class="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-3">
<USkeleton v-for="i in 6" :key="i" class="h-48 rounded-lg" />
</div>
<div v-else class="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-3">
<div
v-for="novel in recent.slice(0, 6)"
:key="novel.id"
class="cursor-pointer group"
@click="router.push(`/novels/${novel.id}`)"
>
<div class="relative overflow-hidden rounded-lg">
<img
:src="novel.cover"
:alt="novel.title"
class="w-full aspect-[2/3] object-cover group-hover:scale-105 transition-transform duration-300"
>
<div class="absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" />
<div class="absolute bottom-0 left-0 right-0 p-2">
<h3 class="font-semibold text-white text-xs md:text-sm line-clamp-2">
{{ novel.title }}
</h3>
<p class="text-xs text-gray-300 mt-1">
{{ novel.chapters || 0 }} ch
</p>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Section -->
<section class="bg-gradient-to-r from-primary-500 to-primary-600 rounded-lg p-8 text-center text-white">
<h3 class="text-2xl font-bold mb-2">
Discover Your Next Favorite Novel
</h3>
<p class="mb-4 opacity-90">
Explore thousands of web novels from talented authors
</p>
<UButton
color="neutral"
size="lg"
icon="i-lucide-arrow-right"
@click="router.push('/titles/search')"
>
Browse Now
</UButton>
</section>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,289 @@
<script setup lang="ts">
interface ReadingHistoryEntry {
novelId: string
novelTitle: string
chapterId: string
chapterTitle: string
cover: string
readAt: string
}
const router = useRouter()
const toast = useToast()
const history = ref<ReadingHistoryEntry[]>([])
const fileInput = ref<HTMLInputElement | null>(null)
const searchQuery = ref('')
const filteredHistory = computed(() => {
if (!searchQuery.value) return history.value
const query = searchQuery.value.toLowerCase()
return history.value.filter(entry =>
entry.novelTitle.toLowerCase().includes(query)
|| entry.chapterTitle.toLowerCase().includes(query)
)
})
const loadHistory = () => {
const saved = localStorage.getItem('reading_history')
if (saved) {
history.value = JSON.parse(saved).sort((a: ReadingHistoryEntry, b: ReadingHistoryEntry) =>
new Date(b.readAt).getTime() - new Date(a.readAt).getTime()
)
}
}
const clearHistory = () => {
history.value = []
localStorage.removeItem('reading_history')
toast.add({ title: 'History cleared', color: 'info' })
}
const removeEntry = (entry: ReadingHistoryEntry) => {
const index = history.value.findIndex(e =>
e.novelId === entry.novelId
&& e.chapterId === entry.chapterId
&& e.readAt === entry.readAt
)
if (index !== -1) {
history.value.splice(index, 1)
localStorage.setItem('reading_history', JSON.stringify(history.value))
}
}
const exportHistory = () => {
const dataStr = JSON.stringify(history.value, null, 2)
const dataBlob = new Blob([dataStr], { type: 'application/json' })
const url = URL.createObjectURL(dataBlob)
const link = document.createElement('a')
link.href = url
link.download = `history-export-${new Date().toISOString().split('T')[0]}.json`
link.click()
URL.revokeObjectURL(url)
toast.add({ title: 'History exported successfully', color: 'success' })
}
const importHistory = () => {
fileInput.value?.click()
}
const isValidHistoryEntry = (item: any): item is ReadingHistoryEntry => {
return (
typeof item === 'object'
&& item !== null
&& typeof item.novelId === 'string'
&& typeof item.novelTitle === 'string'
&& typeof item.chapterId === 'string'
&& typeof item.chapterTitle === 'string'
&& typeof item.cover === 'string'
&& typeof item.readAt === 'string'
)
}
const handleFileUpload = (event: Event) => {
const target = event.target as HTMLInputElement
const file = target.files?.[0]
if (!file) return
const reader = new FileReader()
reader.onload = (e) => {
try {
const imported = JSON.parse(e.target?.result as string)
if (!Array.isArray(imported)) {
throw new Error('Invalid format: expected an array')
}
// Validate each item has correct structure
const validEntries = imported.filter(isValidHistoryEntry)
if (validEntries.length === 0) {
throw new Error('No valid history entries found')
}
if (validEntries.length < imported.length) {
toast.add({
title: 'Warning',
description: `${imported.length - validEntries.length} invalid entries skipped`,
color: 'warning'
})
}
// Merge with existing history
history.value = [...history.value, ...validEntries].sort((a, b) =>
new Date(b.readAt).getTime() - new Date(a.readAt).getTime()
)
localStorage.setItem('reading_history', JSON.stringify(history.value))
toast.add({ title: `Imported ${validEntries.length} entries`, color: 'success' })
} catch (error) {
const message = error instanceof Error ? error.message : 'Invalid file format'
toast.add({ title: 'Failed to import history', description: message, color: 'error' })
}
}
reader.readAsText(file)
target.value = ''
}
onMounted(() => {
loadHistory()
})
useSeoMeta({
title: 'Reading History - LastWebNovel',
description: 'Your reading history and recently read chapters'
})
</script>
<template>
<UDashboardPanel id="history">
<template #header>
<UDashboardNavbar title="My History" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div v-if="history.length === 0" class="text-center py-12">
<UIcon name="i-lucide-history" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No reading history yet
</h3>
<p class="text-gray-600 dark:text-gray-400 mb-4">
Your recently read chapters will appear here
</p>
<div class="flex flex-col md:flex-row gap-2 justify-center">
<UButton
icon="i-lucide-book"
color="primary"
@click="router.push('/')"
>
Start Reading
</UButton>
<UButton
icon="i-lucide-upload"
color="secondary"
variant="subtle"
@click="importHistory"
>
Import History
</UButton>
<input
ref="fileInput"
type="file"
accept=".json"
class="hidden"
@change="handleFileUpload"
>
</div>
</div>
<div v-else class="space-y-4">
<!-- Search Bar -->
<UInput
v-model="searchQuery"
icon="i-lucide-search"
placeholder="Search by novel or chapter title..."
size="xl"
class="mb-8 w-full"
/>
<div class="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3 mb-6">
<h2 class="text-xl font-semibold">
{{ filteredHistory.length }} of {{ history.length }} entries
</h2>
<div class="flex gap-2">
<UButton
size="sm"
color="secondary"
variant="soft"
icon="i-lucide-download"
@click="exportHistory"
>
Export
</UButton>
<UButton
size="sm"
color="secondary"
variant="soft"
icon="i-lucide-upload"
@click="importHistory"
>
Import
</UButton>
<UButton
size="sm"
color="error"
variant="soft"
icon="i-lucide-trash-2"
@click="clearHistory"
>
Clear history
</UButton>
<input
ref="fileInput"
type="file"
accept=".json"
class="hidden"
@change="handleFileUpload"
>
</div>
</div>
<!-- No Results -->
<div v-if="filteredHistory.length === 0" class="text-center py-12">
<UIcon name="i-lucide-search-x" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No entries found
</h3>
<p class="text-gray-600 dark:text-gray-400">
Try adjusting your search query
</p>
</div>
<div v-else class="grid gap-4">
<div
v-for="(entry, index) in filteredHistory"
:key="index"
class="flex flex-col md:flex-row md:items-start gap-4 p-4 rounded-lg border border-gray-200 dark:border-gray-800 hover:border-primary-500 hover:shadow-md transition-all"
>
<div class="flex-1">
<h3 class="font-semibold cursor-pointer hover:text-primary-500 transition-colors" @click="router.push(`/novel/${entry.novelId}/${entry.chapterId}`)">
{{ entry.novelTitle }}
</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">
{{ entry.chapterTitle }}
</p>
<p class="text-xs text-gray-500 mt-1">
Read: {{ new Date(entry.readAt).toLocaleDateString() }} at {{ new Date(entry.readAt).toLocaleTimeString() }}
</p>
</div>
<div class="flex gap-2 md:flex-col md:h-auto md:justify-start">
<UButton
size="md"
icon="i-lucide-play"
color="primary"
variant="soft"
class="flex-1 md:flex-none"
@click="router.push(`/novel/${entry.novelId}/${entry.chapterId}`)"
>
Continue
</UButton>
<UButton
size="md"
icon="i-lucide-x"
color="error"
variant="soft"
class="flex-1 md:flex-none"
@click="removeEntry(entry)"
>
Remove
</UButton>
</div>
</div>
</div>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,298 @@
<script setup lang="ts">
interface LibraryNovel {
id: string
title: string
author: string
cover: string
addedAt: string
}
const router = useRouter()
const toast = useToast()
const libraryNovels = ref<LibraryNovel[]>([])
const isLoading = ref(true)
const fileInput = ref<HTMLInputElement | null>(null)
const searchQuery = ref('')
const filteredNovels = computed(() => {
if (!searchQuery.value) return libraryNovels.value
const query = searchQuery.value.toLowerCase()
return libraryNovels.value.filter(novel =>
novel.title.toLowerCase().includes(query)
|| novel.author.toLowerCase().includes(query)
)
})
const loadLibrary = () => {
const saved = localStorage.getItem('user_library')
if (saved) {
libraryNovels.value = JSON.parse(saved)
}
isLoading.value = false
}
const removeFromLibrary = (id: string) => {
libraryNovels.value = libraryNovels.value.filter(n => n.id !== id)
localStorage.setItem('user_library', JSON.stringify(libraryNovels.value))
}
const exportLibrary = () => {
const dataStr = JSON.stringify(libraryNovels.value, null, 2)
const dataBlob = new Blob([dataStr], { type: 'application/json' })
const url = URL.createObjectURL(dataBlob)
const link = document.createElement('a')
link.href = url
link.download = `library-export-${new Date().toISOString().split('T')[0]}.json`
link.click()
URL.revokeObjectURL(url)
toast.add({ title: 'Library exported successfully', color: 'success' })
}
const importLibrary = () => {
fileInput.value?.click()
}
const isValidLibraryNovel = (item: any): item is LibraryNovel => {
return (
typeof item === 'object'
&& item !== null
&& typeof item.id === 'string'
&& typeof item.title === 'string'
&& typeof item.author === 'string'
&& typeof item.cover === 'string'
&& typeof item.addedAt === 'string'
)
}
const handleFileUpload = (event: Event) => {
const target = event.target as HTMLInputElement
const file = target.files?.[0]
if (!file) return
const reader = new FileReader()
reader.onload = (e) => {
try {
const imported = JSON.parse(e.target?.result as string)
if (!Array.isArray(imported)) {
throw new Error('Invalid format: expected an array')
}
// Validate each item has correct structure
const validNovels = imported.filter(isValidLibraryNovel)
if (validNovels.length === 0) {
throw new Error('No valid library entries found')
}
if (validNovels.length < imported.length) {
toast.add({
title: 'Warning',
description: `${imported.length - validNovels.length} invalid entries skipped`,
color: 'warning'
})
}
// Merge with existing library, avoiding duplicates
const existingIds = new Set(libraryNovels.value.map(n => n.id))
const newNovels = validNovels.filter(n => !existingIds.has(n.id))
libraryNovels.value = [...libraryNovels.value, ...newNovels]
localStorage.setItem('user_library', JSON.stringify(libraryNovels.value))
toast.add({ title: `Imported ${newNovels.length} novel(s)`, color: 'success' })
} catch (error) {
const message = error instanceof Error ? error.message : 'Invalid file format'
toast.add({ title: 'Failed to import library', description: message, color: 'error' })
}
}
reader.readAsText(file)
target.value = ''
}
onMounted(() => {
loadLibrary()
})
useSeoMeta({
title: 'My Library - LastWebNovel',
description: 'Your saved novels and reading list'
})
</script>
<template>
<UDashboardPanel id="library">
<template #header>
<UDashboardNavbar title="My Library" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<!-- Loading State -->
<div v-if="isLoading" class="space-y-4">
<div v-for="i in 3" :key="i" class="flex gap-4 p-4 rounded-lg border border-gray-200 dark:border-gray-800">
<USkeleton class="h-24 w-16 rounded flex-shrink-0" />
<div class="flex-1 space-y-2">
<USkeleton class="h-5 w-1/3" />
<USkeleton class="h-4 w-1/4" />
<USkeleton class="h-3 w-1/5 mt-2" />
</div>
<div class="flex gap-2">
<USkeleton class="h-9 w-16 rounded" />
<USkeleton class="h-9 w-16 rounded" />
</div>
</div>
</div>
<!-- Empty State -->
<div v-else-if="libraryNovels.length === 0" class="text-center py-12">
<UIcon name="i-lucide-bookmark" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
Your library is empty
</h3>
<p class="text-gray-600 dark:text-gray-400 mb-4">
Add novels to your library to keep track of your reading
</p>
<div class="flex flex-col md:flex-row gap-2 justify-center">
<UButton
icon="i-lucide-book"
color="primary"
@click="router.push('/')"
>
Browse Novels
</UButton>
<UButton
icon="i-lucide-upload"
color="secondary"
variant="subtle"
@click="importLibrary"
>
Import Library
</UButton>
<input
ref="fileInput"
type="file"
accept=".json"
class="hidden"
@change="handleFileUpload"
>
</div>
</div>
<!-- Library List -->
<div v-else class="space-y-4">
<!-- Search Bar -->
<UInput
v-model="searchQuery"
icon="i-lucide-search"
placeholder="Search by title or author..."
size="xl"
class="mb-8 w-full"
/>
<div class="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3 mb-6">
<h2 class="text-xl font-semibold">
{{ filteredNovels.length }} of {{ libraryNovels.length }} novel{{ libraryNovels.length !== 1 ? 's' : '' }}
</h2>
<div class="flex gap-2">
<UButton
size="sm"
color="secondary"
variant="soft"
icon="i-lucide-download"
@click="exportLibrary"
>
Export
</UButton>
<UButton
size="sm"
color="secondary"
variant="soft"
icon="i-lucide-upload"
@click="importLibrary"
>
Import
</UButton>
<input
ref="fileInput"
type="file"
accept=".json"
class="hidden"
@change="handleFileUpload"
>
</div>
</div>
<!-- No Results -->
<div v-if="filteredNovels.length === 0" class="text-center py-12">
<UIcon name="i-lucide-search-x" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No novels found
</h3>
<p class="text-gray-600 dark:text-gray-400">
Try adjusting your search query
</p>
</div>
<div v-else class="grid gap-4">
<div
v-for="novel in filteredNovels"
:key="novel.id"
class="flex flex-col md:flex-row gap-4 p-4 rounded-lg border border-gray-200 dark:border-gray-800 hover:border-primary-500 hover:shadow-md transition-all md:items-start"
>
<!-- Cover Image -->
<img
:src="novel.cover"
:alt="novel.title"
class="h-24 w-16 rounded object-cover flex-shrink-0 cursor-pointer hover:opacity-80 transition-opacity hidden md:block md:mx-0"
@click="router.push(`/novels/${novel.id}`)"
>
<!-- Content -->
<div class="flex-1 flex flex-col gap-2">
<div>
<h3
class="font-semibold text-base cursor-pointer hover:text-primary-500 transition-colors"
@click="router.push(`/novels/${novel.id}`)"
>
{{ novel.title }}
</h3>
<p class="text-sm text-gray-600 dark:text-gray-400">
{{ novel.author }}
</p>
</div>
<p class="text-xs text-gray-500">
Added: {{ new Date(novel.addedAt).toLocaleDateString() }}
</p>
</div>
<!-- Actions -->
<div class="flex gap-2 md:flex-col md:h-auto md:justify-start">
<UButton
size="md"
color="primary"
variant="soft"
icon="i-lucide-external-link"
class="flex-1 md:flex-none"
@click="router.push(`/novels/${novel.id}`)"
>
View
</UButton>
<UButton
size="md"
color="error"
variant="soft"
icon="i-lucide-trash-2"
class="flex-1 md:flex-none"
@click="removeFromLibrary(novel.id)"
>
Remove
</UButton>
</div>
</div>
</div>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,32 @@
<script setup lang="ts">
useSeoMeta({
title: 'Follows Updates - LastWebNovel',
description: 'Updates from your followed novels'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="My Updates" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-bell" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
Follow Updates
</h3>
<p class="text-gray-600 dark:text-gray-400">
Updates from your followed novels will appear here
</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,463 @@
<script setup lang="ts">
import type { WebNovel, Chapter, ReaderPreferences } from '~/types'
import { v5 as uuidv5 } from 'uuid'
// Namespace UUID for generating deterministic chapter UUIDs
const CHAPTER_NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
const route = useRoute()
const router = useRouter()
const { addToHistory } = useReaderStorage()
const novelId = computed(() => route.params.novelId as string)
const chapterId = computed(() => route.params.chapterId as string)
const novel = ref<WebNovel | null>(null)
const chapter = ref<Chapter | null>(null)
const chapters = ref<Chapter[]>([])
const chapterUuidMap = ref<Map<string, string>>(new Map()) // UUID -> chapter id mapping
const isLoading = ref(true)
const showControls = ref(false)
const showChapterList = ref(false)
const chapterSearchQuery = ref('')
const preferences = ref<ReaderPreferences>({
fontSize: 16,
fontFamily: 'serif',
lineHeight: 1.8,
backgroundColor: 'white',
textColor: 'black',
theme: 'light',
textJustify: false
})
const defaultPreferences: ReaderPreferences = {
fontSize: 16,
fontFamily: 'serif',
lineHeight: 1.8,
backgroundColor: 'white',
textColor: 'black',
theme: 'light',
textJustify: false
}
const currentChapterIndex = computed(() => {
return chapters.value.findIndex(ch => ch.id === chapterId.value)
})
const filteredChapters = computed(() => {
if (!chapterSearchQuery.value.trim()) {
return chapters.value
}
const query = chapterSearchQuery.value.toLowerCase()
return chapters.value.filter(ch =>
ch.title.toLowerCase().includes(query)
|| ch.number.toString().includes(query)
)
})
const previousChapter = computed(() => {
if (currentChapterIndex.value > 0) {
return chapters.value[currentChapterIndex.value - 1]
}
return null
})
const nextChapter = computed(() => {
if (currentChapterIndex.value < chapters.value.length - 1) {
return chapters.value[currentChapterIndex.value + 1]
}
return null
})
const getBackgroundColor = () => {
const colors: { [key: string]: string } = {
white: '#ffffff',
cream: '#f5f1e8',
gray: '#f0f0f0',
black: '#1a1a1a'
}
return colors[preferences.value.backgroundColor] || '#ffffff'
}
const getTextColor = () => {
const colors: { [key: string]: string } = {
black: '#000000',
white: '#ffffff',
gray: '#666666'
}
return colors[preferences.value.textColor] || '#000000'
}
const isDarkMode = computed(() => {
if (import.meta.client) {
return document.documentElement.classList.contains('dark')
}
return false
})
const applyThemeBasedPreset = () => {
if (isDarkMode.value) {
// Dark theme Dark preset (serif + black background + white text)
preferences.value = {
...defaultPreferences,
fontFamily: 'serif',
backgroundColor: 'black',
textColor: 'white'
}
} else {
// Light theme Modern preset (sans-serif + white background + black text)
preferences.value = {
...defaultPreferences,
fontFamily: 'sans-serif',
backgroundColor: 'white',
textColor: 'black'
}
}
}
const loadData = async () => {
try {
isLoading.value = true
// Load novel data from Nuxt Content
const novelData = await queryCollection('content').path(`/novels/${novelId.value}`).first() as any
if (!novelData) {
throw new Error('Novel not found')
}
// Map novel data
const mappedNovel: WebNovel = {
id: novelId.value,
slug: novelId.value,
title: novelData.title || 'Unknown',
author: novelData.meta?.author || 'Unknown',
description: novelData.description || novelData.body?.text || '',
cover: `/images/${novelId.value}/cover.png`,
status: novelData.meta?.status || 'ongoing',
genres: novelData.meta?.genres || [],
rating: novelData.meta?.rating || 0,
views: novelData.meta?.views || 0,
followers: novelData.meta?.followers || 0,
chapters: novelData.meta?.chapters || 0,
language: novelData.meta?.language || 'English',
tags: novelData.meta?.tags || [],
createdAt: novelData.meta?.createdAt || new Date().toISOString(),
updatedAt: novelData.meta?.updatedAt || new Date().toISOString()
}
novel.value = mappedNovel
// Load all content and filter chapters for this novel
const allItems = await queryCollection('content').all() as any[]
const novelChapters = allItems
.filter((item) => {
const path = item._path || item.id || ''
return path.includes(`/novels/${novelId.value}/`) && path.includes('/ch-')
})
.map((item, index) => {
const internalId = item.slug || `ch-${index}`
// Generate deterministic UUID from novel ID + internal chapter ID
const uuid = uuidv5(`${novelId.value}/${internalId}`, CHAPTER_NAMESPACE)
// Store UUID -> internal ID mapping
chapterUuidMap.value.set(uuid, internalId)
return {
id: uuid, // Use UUID for public URLs
internalId: internalId, // Keep internal reference
novelId: novelId.value,
number: item.meta?.number || index + 1,
title: item.title || `Chapter ${index + 1}`,
body: item.body, // Store full body for ContentRenderer
views: item.meta?.views || 0,
likes: item.meta?.likes || 0,
createdAt: item.meta?.createdAt || new Date().toISOString(),
updatedAt: item.meta?.updatedAt || new Date().toISOString()
}
})
.sort((a, b) => a.number - b.number)
chapters.value = novelChapters
// Find and load the current chapter using UUID
let currentChapter = novelChapters.find(ch => ch.id === chapterId.value)
// If not found by UUID, try by internal ID (backward compatibility)
if (!currentChapter) {
currentChapter = novelChapters.find(ch => ch.internalId === chapterId.value)
}
if (currentChapter) {
chapter.value = currentChapter as any
} else {
throw new Error('Chapter not found')
}
// Load preferences from localStorage
const saved = localStorage.getItem('readerPreferences')
if (saved) {
preferences.value = { ...defaultPreferences, ...JSON.parse(saved) }
} else {
// Apply preset based on current app theme
applyThemeBasedPreset()
}
} catch (error) {
console.error('Error loading data:', error)
} finally {
isLoading.value = false
}
}
const updatePreferences = (updates: Partial<ReaderPreferences>) => {
preferences.value = { ...preferences.value, ...updates }
}
const savePreferences = () => {
localStorage.setItem('readerPreferences', JSON.stringify(preferences.value))
}
const resetPreferences = () => {
preferences.value = { ...defaultPreferences }
}
const goToChapter = (ch: any) => {
router.push(`/novel/${novelId.value}/${ch.id}`)
}
const handleKeyDown = (e: KeyboardEvent) => {
if (e.key === 'ArrowLeft' && previousChapter.value) {
goToChapter(previousChapter.value)
} else if (e.key === 'ArrowRight' && nextChapter.value) {
goToChapter(nextChapter.value)
}
}
onMounted(() => {
loadData()
window.addEventListener('keydown', handleKeyDown)
})
onUnmounted(() => {
window.removeEventListener('keydown', handleKeyDown)
})
// Update SEO meta when chapter is loaded
watch([chapter, novel], ([newChapter, newNovel]) => {
if (newChapter && newNovel) {
useSeoMeta({
title: `${newChapter.title} - ${newNovel.title}`,
description: newNovel.description,
ogTitle: `${newChapter.title} - ${newNovel.title}`,
ogDescription: newNovel.description,
ogImage: newNovel.cover,
twitterCard: 'summary_large_image'
})
// Add to reading history
addToHistory({
novelId: novelId.value,
novelTitle: newNovel.title,
chapterId: newChapter.id,
chapterTitle: newChapter.title,
cover: newNovel.cover
})
}
})
</script>
<template>
<div
v-if="chapter && novel"
class="min-h-screen flex flex-col transition-colors duration-300 w-full"
:style="{
backgroundColor: getBackgroundColor(),
color: getTextColor()
}"
>
<!-- Top Bar -->
<div
class="sticky top-0 z-20 border-b transition-colors duration-300"
:style="{ borderColor: getTextColor() + '20' }"
>
<div class="flex items-center justify-between p-4 px-8">
<!-- <UDashboardSidebarCollapse /> -->
<button class="p-2 hover:opacity-60 transition-opacity" @click="router.push(`/novels/${novelId}`)">
<UIcon name="i-lucide-arrow-left" class="size-5" />
</button>
<div class="flex-1 mx-4">
<h1 class="text-sm font-semibold text-center truncate">
{{ novel.title }}
</h1>
<p class="text-xs opacity-60 text-center truncate">
<!-- Chapter {{ chapter.number }}: -->
{{ chapter.title }}
</p>
</div>
<div class="flex items-center gap-2">
<button
class="p-2 hover:opacity-60 transition-opacity"
:title="showControls ? 'Hide controls' : 'Show controls'"
@click="showControls = !showControls; showChapterList = false"
>
<UIcon name="i-lucide-settings" class="size-5" />
</button>
<button
class="p-2 hover:opacity-60 transition-opacity"
:title="showChapterList ? 'Hide chapters' : 'Show chapters'"
@click="showChapterList = !showChapterList; showControls = false"
>
<UIcon name="i-lucide-book-open" class="size-5" />
</button>
</div>
</div>
</div>
<div class="flex flex-1 overflow-hidden">
<!-- Main Content -->
<div class="flex-1 overflow-y-auto flex flex-col w-full">
<div class="flex-1">
<article
class="w-full px-8 py-8 prose prose-invert max-w-3xl mx-auto"
:style="{
fontSize: `${preferences.fontSize}px`,
fontFamily: preferences.fontFamily === 'serif' ? 'Merriweather, Georgia, serif'
: preferences.fontFamily === 'sans-serif' ? '\'Open Sans\', system-ui, sans-serif'
: 'monospace',
lineHeight: preferences.lineHeight,
textAlign: preferences.textJustify ? 'justify' : 'left'
}"
>
<h1>{{ chapter.title }}</h1>
<ContentRenderer :value="chapter" />
</article>
</div>
<!-- Navigation -->
<div class="border-t transition-colors duration-300 mt-8" :style="{ borderColor: getTextColor() + '20' }">
<div class="w-full px-8 py-8">
<div class="flex items-center justify-between mb-4">
<span class="text-sm opacity-60">
Chapter {{ chapter.number }} of {{ chapters.length }}
</span>
<span class="text-sm opacity-60">
{{ chapter.views.toLocaleString() }} views · {{ chapter.likes.toLocaleString() }} likes
</span>
</div>
<div class="flex gap-4">
<button
v-if="previousChapter"
class="flex-1 p-3 rounded border transition-opacity hover:opacity-60"
:style="{ borderColor: getTextColor() + '40' }"
@click="goToChapter(previousChapter)"
>
<div class="text-xs opacity-60 mb-1">
Previous
</div>
<div class="text-sm font-semibold truncate">
<!-- Ch{{ previousChapter.number }}: -->
{{ previousChapter.title }}
</div>
</button>
<button
v-if="nextChapter"
class="flex-1 p-3 rounded border transition-opacity hover:opacity-60"
:style="{ borderColor: getTextColor() + '40' }"
@click="goToChapter(nextChapter)"
>
<div class="text-xs opacity-60 mb-1">
Next
</div>
<div class="text-sm font-semibold truncate">
<!-- Ch{{ nextChapter.number }}: -->
{{ nextChapter.title }}
</div>
</button>
</div>
</div>
</div>
</div>
<!-- Chapter List Sidebar -->
<div
v-if="showChapterList"
class="w-80 border-1 overflow-y-auto transition-colors duration-300"
:style="{ borderColor: getTextColor() + '20' }"
>
<div class="p-8">
<p class="text-lg font-bold mb-4">
Table Of Contents
<span class="text-xs opacity-60 ml-2">
({{ chapters.length }} Chapter{{ chapters.length !== 1 ? 's' : '' }})
</span>
</p>
<input
v-model="chapterSearchQuery"
type="text"
placeholder="Search chapters..."
class="w-full px-3 py-2 mb-4 text-sm rounded border transition-colors"
:style="{
borderColor: getTextColor() + '20',
backgroundColor: getBackgroundColor(),
color: getTextColor()
}"
>
<button
v-for="ch in filteredChapters"
:key="ch.id"
class="w-full text-left p-2 rounded transition-opacity hover:opacity-60"
:class="{ 'opacity-100 font-semibold': ch.id === chapterId, 'opacity-60': ch.id !== chapterId }"
@click="goToChapter(ch)"
>
<p class="text-xs truncate">
{{ ch.title }}
</p>
</button>
</div>
</div>
<!-- Controls Sidebar -->
<div
v-if="showControls"
class="w-80 border-l overflow-y-auto transition-colors duration-300"
:style="{ borderColor: getTextColor() + '20' }"
>
<div class="p-4">
<ReaderControls
:preferences="preferences"
:background-color="getBackgroundColor()"
:text-color="getTextColor()"
@update="updatePreferences"
@save="savePreferences"
@reset="resetPreferences"
/>
</div>
</div>
</div>
</div>
<!-- Loading skeleton -->
<div v-else-if="isLoading" class="flex items-center justify-center h-full w-full p-10">
<USkeleton class="w-full h-full" />
</div>
</template>
<style scoped>
:deep(.prose) {
color: inherit;
}
:deep(.prose p) {
margin: 1em 0;
}
:deep(.prose h1) {
margin: 1.5em 0 0.5em 0;
text-size: 1.5em;
}
</style>

432
app/pages/novels/[id].vue Normal file
View File

@ -0,0 +1,432 @@
<script setup lang="ts">
import type { WebNovel, Chapter } from '~/types'
import { v5 as uuidv5 } from 'uuid'
// Same namespace as the reader page for consistent UUIDs
const CHAPTER_NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
const route = useRoute()
const router = useRouter()
const toast = useToast()
const { addToLibrary, removeFromLibrary, isInLibrary, getHistory } = useReaderStorage()
const novelId = computed(() => route.params.id as string)
const novel = ref<WebNovel | null>(null)
const chapters = ref<Chapter[]>([])
const isLoading = ref(true)
const error = ref('')
const inLibrary = ref(false)
const lastReadChapter = ref<string | null>(null)
const chapterSearch = ref('')
const sortAscending = ref(false)
const sortedChapters = computed(() => {
let filtered = [...chapters.value]
// Apply search filter
if (chapterSearch.value.trim()) {
const query = chapterSearch.value.toLowerCase()
filtered = filtered.filter(chapter =>
chapter.number.toString().includes(query)
|| chapter.title.toLowerCase().includes(query)
)
}
// Apply sort
return filtered.sort((a, b) =>
sortAscending.value ? a.number - b.number : b.number - a.number
)
})
const formatNumber = (num: number): string => {
if (num >= 1000000) {
return `${(num / 1000000).toFixed(1)}M`
} else if (num >= 1000) {
return `${(num / 1000).toFixed(1)}k`
}
return num.toString()
}
const loadData = async () => {
try {
isLoading.value = true
// Load novel data from Nuxt Content
const novelData = await queryCollection('content').path(`/novels/${novelId.value}`).first() as any
if (!novelData) {
error.value = 'Novel not found'
return
}
// Map the markdown frontmatter to WebNovel interface
const mappedNovel: WebNovel = {
id: novelId.value,
title: novelData.title || 'Unknown',
author: novelData.meta?.author || 'Unknown',
description: novelData.description || novelData.body?.text || '',
cover: `/images/${novelId.value}/cover.png`,
status: novelData.meta?.status || 'ongoing',
genres: novelData.meta?.genres || [],
rating: novelData.meta?.rating || 0,
views: novelData.meta?.views || 0,
followers: novelData.meta?.followers || 0,
chapters: novelData.meta?.chapters || 0,
language: novelData.meta?.language || 'English',
tags: novelData.meta?.tags || [],
createdAt: novelData.meta?.createdAt || new Date().toISOString(),
updatedAt: novelData.meta?.updatedAt || new Date().toISOString()
}
novel.value = mappedNovel
// Load chapters from Nuxt Content
const allItems = await queryCollection('content').all() as any[]
const novelChapters = allItems
.filter((item) => {
const path = item._path || item.id || ''
return path.includes(`/novels/${novelId.value}/`) && path.includes('/ch-')
})
.map((item, index) => {
const internalId = item.slug || `ch-${index}`
// Generate deterministic UUID from novel ID + internal chapter ID
const uuid = uuidv5(`${novelId.value}/${internalId}`, CHAPTER_NAMESPACE)
return {
id: uuid, // Use UUID for public URLs
internalId: internalId, // Keep internal ch-0 reference
novelId: novelId.value,
number: item.meta?.number || index + 1,
title: item.title || `Chapter ${index + 1}`,
content: item.body?.text || '',
views: item.meta?.views || 0,
likes: item.meta?.likes || 0,
createdAt: item.meta?.createdAt || new Date().toISOString(),
updatedAt: item.meta?.updatedAt || new Date().toISOString()
}
})
chapters.value = novelChapters
console.log(`Loaded 1 novel and ${novelChapters.length} chapters`)
// Check if novel is in library
inLibrary.value = isInLibrary(novelId.value)
// Check if there's a reading history for this novel
const readingHistory = getHistory()
const historyEntry = readingHistory.find(entry => entry.novelId === novelId.value)
if (historyEntry) {
lastReadChapter.value = historyEntry.chapterId
}
} catch (err) {
console.error('Error loading novel:', err)
error.value = 'Failed to load novel'
} finally {
isLoading.value = false
}
}
const toggleLibrary = () => {
if (!novel.value) return
if (inLibrary.value) {
removeFromLibrary(novelId.value)
inLibrary.value = false
toast.add({
title: 'Removed from Library',
description: `${novel.value.title} has been removed from your library`,
icon: 'i-lucide-bookmark-minus',
color: 'warning'
})
} else {
const authorName = typeof novel.value.author === 'string' ? novel.value.author : novel.value.author?.name || 'Unknown'
addToLibrary({
id: novel.value.id,
title: novel.value.title,
author: authorName,
cover: novel.value.cover
})
inLibrary.value = true
toast.add({
title: 'Added to Library',
description: `${novel.value.title} has been added to your library`,
icon: 'i-lucide-bookmark-plus',
color: 'success'
})
}
}
const startReading = () => {
if (chapters.value.length > 0) {
const firstChapter = chapters.value[0]
router.push(`/novel/${novelId.value}/${firstChapter.id}`)
}
}
const continueReading = () => {
if (lastReadChapter.value) {
// Resume from last read chapter in history
router.push(`/novel/${novelId.value}/${lastReadChapter.value}`)
} else if (chapters.value.length > 0) {
// Fallback to first chapter if no history
const firstChapter = chapters.value[0]
router.push(`/novel/${novelId.value}/${firstChapter.id}`)
}
}
const shareNovel = async () => {
if (!novel.value) return
const shareData = {
title: novel.value.title,
text: `Check out "${novel.value.title}" - ${novel.value.description.slice(0, 100)}...`,
url: window.location.href
}
try {
// Try native Web Share API (mobile-first)
if (navigator.share) {
await navigator.share(shareData)
toast.add({
title: 'Shared successfully',
color: 'success'
})
} else {
// Fallback: Copy to clipboard
await navigator.clipboard.writeText(window.location.href)
toast.add({
title: 'Link copied to clipboard',
description: 'Share the link with your friends!',
color: 'success'
})
}
} catch (error: unknown) {
// User cancelled or error occurred
if (error instanceof Error && error.name !== 'AbortError') {
console.error('Error sharing:', error)
toast.add({
title: 'Failed to share',
color: 'error'
})
}
}
}
onMounted(() => {
loadData()
})
</script>
<template>
<UDashboardPanel v-if="!isLoading && novel" id="novel-detail">
<template #header>
<UDashboardNavbar :title="novel.title" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
<UButton
color="neutral"
variant="ghost"
icon="i-lucide-arrow-left"
square
@click="router.back()"
/>
</template>
<template #right>
<UButton
:icon="inLibrary ? 'i-lucide-bookmark-check' : 'i-lucide-bookmark'"
:color="inLibrary ? 'primary' : 'secondary'"
variant="ghost"
square
@click="toggleLibrary"
/>
<UButton
icon="i-lucide-share-2"
color="secondary"
variant="ghost"
square
@click="shareNovel"
/>
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8 space-y-8">
<!-- Compact Header Section -->
<div class="grid grid-cols-1 md:grid-cols-5 gap-6">
<!-- Cover Image -->
<div class="md:col-span-1">
<img
:src="novel.cover"
:alt="novel.title"
class="w-full rounded-lg shadow-lg"
>
<div class="flex flex-col gap-2 mt-4">
<UButton
icon="i-lucide-play"
color="primary"
size="lg"
class="w-full"
@click="startReading"
>
Start Reading
</UButton>
<UButton
v-if="lastReadChapter"
icon="i-lucide-bookmark-check"
color="secondary"
variant="soft"
size="lg"
class="w-full"
@click="continueReading"
>
Continue Reading
</UButton>
<UButton
icon="i-lucide-share-2"
color="secondary"
variant="soft"
size="lg"
class="w-full"
@click="shareNovel"
>
Share
</UButton>
</div>
</div>
<!-- Summary & Info -->
<div class="md:col-span-4 space-y-4">
<div>
<div class="flex items-center gap-3 mb-2 flex-wrap">
<h1 class="text-2xl font-bold">
{{ novel.title }}
</h1>
<UBadge
:color="novel.status === 'completed' ? 'success' : novel.status === 'hiatus' ? 'warning' : 'info'"
>
{{ novel.status }}
</UBadge>
</div>
<p class="text-gray-600 dark:text-gray-400">
by {{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
</div>
<!-- Quick Stats -->
<div class="grid grid-cols-2 sm:grid-cols-4 gap-3">
<div class="bg-gray-50 dark:bg-gray-900 p-3 rounded">
<p class="text-xs text-gray-600 dark:text-gray-400">
Rating
</p>
<p class="text-lg font-bold flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-4 text-yellow-500" />
{{ (novel.rating || 0).toFixed(1) }}
</p>
</div>
<div class="bg-gray-50 dark:bg-gray-900 p-3 rounded">
<p class="text-xs text-gray-600 dark:text-gray-400">
Chapters
</p>
<p class="text-lg font-bold">
{{ novel.chapters || 0 }}
</p>
</div>
<div class="bg-gray-50 dark:bg-gray-900 p-3 rounded">
<p class="text-xs text-gray-600 dark:text-gray-400">
Views
</p>
<p class="text-lg font-bold">
{{ formatNumber(novel.views || 0) }}
</p>
</div>
<div class="bg-gray-50 dark:bg-gray-900 p-3 rounded">
<p class="text-xs text-gray-600 dark:text-gray-400">
Followers
</p>
<p class="text-lg font-bold">
{{ formatNumber(novel.followers || 0) }}
</p>
</div>
</div>
<!-- Summary -->
<div class="bg-gray-50 dark:bg-gray-900 p-4 rounded-lg">
<p class="text-sm leading-relaxed text-gray-700 dark:text-gray-300">
{{ novel.description }}
</p>
</div>
<!-- Genres -->
<div class="flex flex-wrap gap-2">
<UBadge
v-for="genre in novel.genres"
:key="genre"
size="sm"
variant="outline"
>
{{ genre }}
</UBadge>
</div>
</div>
</div>
<!-- Chapters Section (Main Content) -->
<div class="border-t pt-8">
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
<h2 class="text-2xl font-bold">
{{ chapters.length }} Chapter{{ chapters.length !== 1 ? 's' : '' }}
</h2>
<div class="flex items-center gap-2">
<UInput
v-model="chapterSearch"
icon="i-lucide-search"
placeholder="Search chapters..."
class="w-full sm:w-64"
/>
<UButton
:icon="sortAscending ? 'i-lucide-arrow-up-1-0' : 'i-lucide-arrow-down-1-0'"
color="secondary"
variant="ghost"
square
@click="sortAscending = !sortAscending"
/>
</div>
</div>
<div v-if="sortedChapters.length > 0" class="space-y-2">
<ChapterList
:chapters="sortedChapters"
:novel-id="novelId"
/>
</div>
<div v-else class="text-center py-12">
<UIcon name="i-lucide-search-x" class="size-12 mx-auto mb-4 text-gray-400" />
<p class="text-gray-600 dark:text-gray-400">
No chapters found matching "{{ chapterSearch }}"
</p>
</div>
</div>
</UContainer>
</template>
</UDashboardPanel>
<!-- Loading State -->
<div v-else-if="isLoading" class="p-8">
<USkeleton class="h-96" />
</div>
<!-- Error State -->
<div v-else class="p-8 text-center">
<UIcon name="i-lucide-alert-circle" class="size-12 mx-auto mb-4 text-red-500" />
<h3 class="text-lg font-semibold mb-2">
{{ error }}
</h3>
<UButton color="gray" @click="router.back()">
Go Back
</UButton>
</div>
</template>

View File

@ -0,0 +1,28 @@
<script setup lang="ts">
useSeoMeta({
title: 'About Us - LastWebNovel',
description: 'Learn more about LastWebNovel'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="About Us" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="prose dark:prose-invert max-w-none">
<h1>About LastWebNovel</h1>
<p>LastWebNovel is a platform dedicated to web novel readers and authors.</p>
<p>Coming soon...</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,28 @@
<script setup lang="ts">
useSeoMeta({
title: 'Advertise - LastWebNovel',
description: 'Advertising opportunities on LastWebNovel'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="Advertise With Us" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="prose dark:prose-invert max-w-none">
<h1>Advertising Opportunities</h1>
<p>Interested in advertising with LastWebNovel? We have great opportunities available.</p>
<p>More information coming soon...</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,32 @@
<script setup lang="ts">
useSeoMeta({
title: 'Announcements - LastWebNovel',
description: 'Latest announcements and updates'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="Announcements" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-megaphone" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
Announcements
</h3>
<p class="text-gray-600 dark:text-gray-400">
Check back soon for important announcements
</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,28 @@
<script setup lang="ts">
useSeoMeta({
title: 'Contact - LastWebNovel',
description: 'Get in touch with us'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="Contact" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="prose dark:prose-invert max-w-none">
<h1>Contact Us</h1>
<p>Have a question or feedback? We'd love to hear from you.</p>
<p>Contact form coming soon...</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

29
app/pages/oldbak/feed.vue Normal file
View File

@ -0,0 +1,29 @@
<script setup lang="ts">
useSeoMeta({
title: 'Feed - LastWebNovel',
description: 'Latest updates from your followed novels'
})
</script>
<template>
<UDashboardPanel id="feed">
<template #header>
<UDashboardNavbar title="Feed" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-message-square" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">Your feed is empty</h3>
<p class="text-gray-600 dark:text-gray-400 mb-4">Follow novels to see their latest updates here</p>
<p class="text-sm text-gray-500">Follow your favorite novels from their detail page to get notified of new chapters</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,29 @@
<script setup lang="ts">
useSeoMeta({
title: 'My Groups - LastWebNovel',
description: 'Join or create reading groups'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="My Groups" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-users" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">My Groups</h3>
<p class="text-gray-600 dark:text-gray-400">Join reading groups and connect with other readers</p>
<p class="text-sm text-gray-500 mt-4">Coming soon</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,28 @@
<script setup lang="ts">
useSeoMeta({
title: 'Community Guidelines - LastWebNovel',
description: 'Our community guidelines and policies'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="Community Guidelines" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="prose dark:prose-invert max-w-none">
<h1>Community Guidelines</h1>
<p>Our community guidelines help maintain a friendly and respectful environment for all users.</p>
<p>Coming soon...</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,29 @@
<script setup lang="ts">
useSeoMeta({
title: 'MDLists - LastWebNovel',
description: 'Your collection lists and reading lists'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="MDLists" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-list" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">My Lists</h3>
<p class="text-gray-600 dark:text-gray-400">Create and manage your reading lists</p>
<p class="text-sm text-gray-500 mt-4">Coming soon</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,321 @@
<script setup lang="ts">
import type { WebNovel, NovelGenre, NovelStatus } from '~/types'
const router = useRouter()
const novels = ref<WebNovel[]>([])
const isLoading = ref(true)
const viewMode = ref<'grid' | 'list'>('grid')
const showFilters = ref(false)
const filters = reactive({
genre: null as NovelGenre | null,
status: null as NovelStatus | null,
search: ''
})
const genres = ref<NovelGenre[]>([
'fantasy', 'romance', 'sci-fi', 'mystery', 'slice-of-life',
'action', 'adventure', 'horror', 'comedy', 'drama'
])
const statuses = ref<NovelStatus[]>(['ongoing', 'completed', 'hiatus'])
const filteredNovels = computed(() => {
let result = novels.value
if (filters.search) {
result = result.filter(n =>
(n.title || '').toLowerCase().includes(filters.search.toLowerCase())
|| (n.author || '').toLowerCase().includes(filters.search.toLowerCase())
)
}
if (filters.genre) {
result = result.filter(n => (n.genres || []).includes(filters.genre!))
}
if (filters.status) {
result = result.filter(n => n.status === filters.status)
}
return result
})
const sortOptions = [
{ value: 'rating', label: 'Highest Rated' },
{ value: 'views', label: 'Most Viewed' },
{ value: 'chapters', label: 'Most Chapters' },
{ value: 'recent', label: 'Recently Updated' }
]
const currentSort = ref('rating')
const sortedNovels = computed(() => {
const sorted = [...filteredNovels.value]
switch (currentSort.value) {
case 'rating':
return sorted.sort((a, b) => (b.rating || 0) - (a.rating || 0))
case 'views':
return sorted.sort((a, b) => (b.views || 0) - (a.views || 0))
case 'chapters':
return sorted.sort((a, b) => (b.chapters || 0) - (a.chapters || 0))
case 'recent':
return sorted.sort((a, b) => new Date(b.updatedAt || 0).getTime() - new Date(a.updatedAt || 0).getTime())
default:
return sorted
}
})
const hasActiveFilters = computed(() => filters.genre || filters.status || filters.search)
const clearFilters = () => {
Object.assign(filters, { genre: null, status: null, search: '' })
showFilters.value = false
}
const loadNovels = async () => {
try {
// Fetch all novels from Nuxt Content using queryCollection
const content = await queryCollection('content').all() as WebNovel[]
// Filter to only index files (no chapters)
novels.value = content.filter(n => !n._path?.includes('/ch-')) as WebNovel[]
} catch (error) {
console.error('Error loading novels:', error)
} finally {
isLoading.value = false
}
}
onMounted(() => {
loadNovels()
})
</script>
<template>
<UDashboardPanel id="novels">
<template #header>
<UDashboardNavbar title="Browse Novels" :ui="{ right: 'gap-2 sm:gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
<template #right>
<UInputMenu
v-model="filters.search"
icon="i-lucide-search"
placeholder="Search..."
:popper="{ placement: 'bottom-end' }"
class="w-full sm:w-64"
size="sm"
/>
</template>
</UDashboardNavbar>
<UDashboardToolbar>
<template #left>
<div class="flex items-center gap-2 sm:gap-3 w-full sm:w-auto">
<!-- Sort dropdown - responsive -->
<USelect
v-model="currentSort"
:options="sortOptions"
color="white"
variant="none"
class="w-full sm:w-40 text-sm"
size="sm"
/>
<UDivider orientation="vertical" class="hidden sm:block h-6" />
<!-- View mode toggle -->
<UButton
:icon="`i-lucide-${viewMode === 'grid' ? 'layout-list' : 'grid-2x2'}`"
size="sm"
color="gray"
variant="ghost"
@click="viewMode = viewMode === 'grid' ? 'list' : 'grid'"
/>
</div>
</template>
<template #right>
<div class="flex items-center gap-2">
<!-- Filter button with badge -->
<UButton
icon="i-lucide-filter"
size="sm"
:color="hasActiveFilters ? 'primary' : 'gray'"
:variant="hasActiveFilters ? 'soft' : 'ghost'"
@click="showFilters = true"
>
<template v-if="hasActiveFilters" #trailing>
<UBadge color="primary" variant="subtle" class="w-5 h-5 flex items-center justify-center p-0 text-xs">
{{ (filters.genre ? 1 : 0) + (filters.status ? 1 : 0) }}
</UBadge>
</template>
</UButton>
<!-- Clear filters button -->
<UButton
v-if="hasActiveFilters"
size="sm"
color="gray"
variant="outline"
label="Clear"
class="hidden sm:flex"
@click="clearFilters"
/>
</div>
</template>
</UDashboardToolbar>
</template>
<template #body>
<UContainer class="py-4 sm:py-8 space-y-4 sm:space-y-6">
<!-- Mobile Filters Drawer -->
<UDrawer v-model="showFilters" title="Filters" side="right">
<template #header>
<div class="flex items-center justify-between gap-2">
<h2 class="text-lg font-semibold">
Filters
</h2>
<UButton
color="gray"
variant="ghost"
size="sm"
icon="i-lucide-x"
@click="showFilters = false"
/>
</div>
</template>
<div class="space-y-4 p-4">
<!-- Genre Filter -->
<div>
<label class="text-sm font-semibold mb-2 block">Genre</label>
<USelect
v-model="filters.genre"
:options="genres"
placeholder="All genres"
class="w-full"
@update:model-value="v => filters.genre = v || null"
/>
</div>
<!-- Status Filter -->
<div>
<label class="text-sm font-semibold mb-2 block">Status</label>
<USelect
v-model="filters.status"
:options="statuses"
placeholder="All statuses"
class="w-full"
@update:model-value="v => filters.status = v || null"
/>
</div>
<!-- Clear button in drawer -->
<UButton
v-if="hasActiveFilters"
block
color="gray"
variant="outline"
@click="clearFilters"
>
Clear All Filters
</UButton>
</div>
</UDrawer>
<!-- Desktop Filters (hidden on mobile) -->
<div class="hidden sm:flex gap-4 items-end flex-wrap">
<div class="w-48">
<label class="text-sm font-semibold mb-2 block">Genre</label>
<USelect
v-model="filters.genre"
:options="genres"
placeholder="All genres"
@update:model-value="v => filters.genre = v || null"
/>
</div>
<div class="w-48">
<label class="text-sm font-semibold mb-2 block">Status</label>
<USelect
v-model="filters.status"
:options="statuses"
placeholder="All statuses"
@update:model-value="v => filters.status = v || null"
/>
</div>
<div class="flex-1">
<p class="text-sm text-gray-600 dark:text-gray-400">
Found <span class="font-semibold">{{ sortedNovels.length }}</span> novel{{ sortedNovels.length !== 1 ? 's' : '' }}
</p>
</div>
</div>
<!-- Mobile Results Summary -->
<div class="sm:hidden px-4">
<p class="text-sm text-gray-600 dark:text-gray-400">
Found <span class="font-semibold">{{ sortedNovels.length }}</span> novel{{ sortedNovels.length !== 1 ? 's' : '' }}
</p>
</div>
<!-- Loading State -->
<div v-if="isLoading" class="grid gap-3 sm:gap-4 px-4 sm:px-0" :class="viewMode === 'grid' ? 'grid-cols-2 sm:grid-cols-2 lg:grid-cols-3' : ''">
<div v-for="i in 6" :key="i">
<USkeleton class="h-64 sm:h-80" />
</div>
</div>
<!-- Empty State -->
<div v-else-if="sortedNovels.length === 0" class="text-center py-12">
<UIcon name="i-lucide-inbox" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No novels found
</h3>
<p class="text-sm sm:text-base text-gray-600 dark:text-gray-400 mb-4 px-4">
Try adjusting your filters or search term
</p>
<UButton
size="sm"
color="gray"
@click="clearFilters"
>
Clear Filters
</UButton>
</div>
<!-- Novels Grid/List -->
<div
v-else
class="px-4 sm:px-0"
:class="viewMode === 'grid'
? 'grid gap-3 sm:gap-4 grid-cols-2 sm:grid-cols-2 lg:grid-cols-3'
: 'space-y-2 sm:space-y-4'
"
>
<template v-if="viewMode === 'grid'">
<NovelCard
v-for="novel in sortedNovels"
:key="novel.id"
:novel="novel"
/>
</template>
<template v-else>
<NovelCardList
v-for="novel in sortedNovels"
:key="novel.id"
:novel="novel"
/>
</template>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

42
app/pages/settings.vue Normal file
View File

@ -0,0 +1,42 @@
<script setup lang="ts">
import type { NavigationMenuItem } from '@nuxt/ui'
const links = [[{
label: 'General',
icon: 'i-lucide-user',
to: '/settings',
exact: true
}, {
label: 'Security',
icon: 'i-lucide-shield',
to: '/settings/security'
}], [{
label: 'Documentation',
icon: 'i-lucide-book-open',
to: 'https://ui.nuxt.com/docs/getting-started/installation/nuxt',
target: '_blank'
}]] satisfies NavigationMenuItem[][]
</script>
<template>
<UDashboardPanel id="settings" :ui="{ body: 'lg:py-12' }">
<template #header>
<UDashboardNavbar title="Settings">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
<UDashboardToolbar>
<!-- NOTE: The `-mx-1` class is used to align with the `DashboardSidebarCollapse` button here. -->
<UNavigationMenu :items="links" highlight class="-mx-1 flex-1" />
</UDashboardToolbar>
</template>
<template #body>
<div class="flex flex-col gap-4 sm:gap-6 lg:gap-12 w-full lg:max-w-2xl mx-auto">
<NuxtPage />
</div>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,158 @@
<script setup lang="ts">
import * as z from 'zod'
import type { FormSubmitEvent } from '@nuxt/ui'
const fileRef = ref<HTMLInputElement>()
const profileSchema = z.object({
name: z.string().min(2, 'Too short'),
email: z.string().email('Invalid email'),
username: z.string().min(2, 'Too short'),
avatar: z.string().optional(),
bio: z.string().optional()
})
type ProfileSchema = z.output<typeof profileSchema>
const profile = reactive<Partial<ProfileSchema>>({
name: 'Ahmed DCHAR',
email: 'ben@nuxtlabs.com',
username: 'benjamincanac',
avatar: undefined,
bio: undefined
})
const toast = useToast()
async function onSubmit(event: FormSubmitEvent<ProfileSchema>) {
toast.add({
title: 'Success',
description: 'Your settings have been updated.',
icon: 'i-lucide-check',
color: 'success'
})
console.log(event.data)
}
function onFileChange(e: Event) {
const input = e.target as HTMLInputElement
if (!input.files?.length) {
return
}
profile.avatar = URL.createObjectURL(input.files[0]!)
}
function onFileClick() {
fileRef.value?.click()
}
</script>
<template>
<UForm
id="settings"
:schema="profileSchema"
:state="profile"
@submit="onSubmit"
>
<UPageCard
title="Profile"
description="These informations will be displayed publicly."
variant="naked"
orientation="horizontal"
class="mb-4"
>
<UButton
form="settings"
label="Save changes"
color="neutral"
type="submit"
class="w-fit lg:ms-auto"
/>
</UPageCard>
<UPageCard variant="subtle">
<UFormField
name="name"
label="Name"
description="Will appear on receipts, invoices, and other communication."
required
class="flex max-sm:flex-col justify-between items-start gap-4"
>
<UInput
v-model="profile.name"
autocomplete="off"
/>
</UFormField>
<USeparator />
<UFormField
name="email"
label="Email"
description="Used to sign in, for email receipts and product updates."
required
class="flex max-sm:flex-col justify-between items-start gap-4"
>
<UInput
v-model="profile.email"
type="email"
autocomplete="off"
/>
</UFormField>
<USeparator />
<UFormField
name="username"
label="Username"
description="Your unique username for logging in and your profile URL."
required
class="flex max-sm:flex-col justify-between items-start gap-4"
>
<UInput
v-model="profile.username"
type="username"
autocomplete="off"
/>
</UFormField>
<USeparator />
<UFormField
name="avatar"
label="Avatar"
description="JPG, GIF or PNG. 1MB Max."
class="flex max-sm:flex-col justify-between sm:items-center gap-4"
>
<div class="flex flex-wrap items-center gap-3">
<UAvatar
:src="profile.avatar"
:alt="profile.name"
size="lg"
/>
<UButton
label="Choose"
color="neutral"
@click="onFileClick"
/>
<input
ref="fileRef"
type="file"
class="hidden"
accept=".jpg, .jpeg, .png, .gif"
@change="onFileChange"
>
</div>
</UFormField>
<USeparator />
<UFormField
name="bio"
label="Bio"
description="Brief description for your profile. URLs are hyperlinked."
class="flex max-sm:flex-col justify-between items-start gap-4"
:ui="{ container: 'w-full' }"
>
<UTextarea
v-model="profile.bio"
:rows="5"
autoresize
class="w-full"
/>
</UFormField>
</UPageCard>
</UForm>
</template>

View File

@ -0,0 +1,69 @@
<script setup lang="ts">
import * as z from 'zod'
import type { FormError } from '@nuxt/ui'
const passwordSchema = z.object({
current: z.string().min(8, 'Must be at least 8 characters'),
new: z.string().min(8, 'Must be at least 8 characters')
})
type PasswordSchema = z.output<typeof passwordSchema>
const password = reactive<Partial<PasswordSchema>>({
current: '',
new: ''
})
const validate = (state: Partial<PasswordSchema>): FormError[] => {
const errors: FormError[] = []
if (state.current && state.new && state.current === state.new) {
errors.push({ name: 'new', message: 'Passwords must be different' })
}
return errors
}
</script>
<template>
<UPageCard
title="Password"
description="Confirm your current password before setting a new one."
variant="subtle"
>
<UForm
:schema="passwordSchema"
:state="password"
:validate="validate"
class="flex flex-col gap-4 max-w-xs"
>
<UFormField name="current">
<UInput
v-model="password.current"
type="password"
placeholder="Current password"
class="w-full"
/>
</UFormField>
<UFormField name="new">
<UInput
v-model="password.new"
type="password"
placeholder="New password"
class="w-full"
/>
</UFormField>
<UButton label="Update" class="w-fit" type="submit" />
</UForm>
</UPageCard>
<UPageCard
title="Account"
description="No longer want to use our service? You can delete your account here. This action is not reversible. All information related to this account will be deleted permanently."
class="bg-gradient-to-tl from-error/10 from-5% to-default"
>
<template #footer>
<UButton label="Delete account" color="error" />
</template>
</UPageCard>
</template>

248
app/pages/titles/latest.vue Normal file
View File

@ -0,0 +1,248 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
useSeoMeta({
title: 'Latest Updates - LastWebNovel',
description: 'Novels with the latest chapter updates'
})
const router = useRouter()
const isLoading = ref(true)
const updatedNovels = ref<WebNovel[]>([])
const displayLimit = ref(5)
const formatNumber = (num: number): string => {
if (num >= 1000000) {
return `${(num / 1000000).toFixed(1)}M`
} else if (num >= 1000) {
return `${(num / 1000).toFixed(1)}k`
}
return num.toString()
}
const formatDate = (dateString: string): string => {
const date = new Date(dateString)
const now = new Date()
const diffTime = Math.abs(now.getTime() - date.getTime())
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
if (diffDays === 0) {
return 'Updated today'
} else if (diffDays === 1) {
return 'Updated yesterday'
} else if (diffDays < 7) {
return `Updated ${diffDays} days ago`
} else if (diffDays < 30) {
return `Updated ${Math.floor(diffDays / 7)} weeks ago`
} else if (diffDays < 365) {
return `Updated ${Math.floor(diffDays / 30)} months ago`
} else {
return `Updated ${Math.floor(diffDays / 365)} years ago`
}
}
const goToNovel = (novelId: string) => {
router.push(`/novels/${novelId}`)
}
const loadMoreNovels = () => {
displayLimit.value += 1
}
const displayedNovels = computed(() => {
return updatedNovels.value.slice(0, displayLimit.value)
})
const hasMoreNovels = computed(() => {
return displayLimit.value < updatedNovels.value.length
})
// Load novels data
const loadNovels = async () => {
try {
isLoading.value = true
const allItems = await queryCollection('content').all() as any[]
const novels: WebNovel[] = allItems
.filter((item) => {
const path = item._path || item.id || ''
return path.includes('/novels/') && path.endsWith('/index.md')
})
.map((item) => {
const pathParts = (item._path || item.id || '').split('/')
const novelId = pathParts[pathParts.length - 2] || pathParts[pathParts.length - 1]
return {
id: novelId,
title: item.title || 'Unknown',
slug: item.meta?.slug || 'no-slug',
author: item.meta?.author || item.author || 'Unknown',
description: item.description || item.body?.text || '',
cover: `/images/${novelId}/cover.png`,
status: item.meta?.status || item.status || 'ongoing',
genres: item.meta?.genres || item.genres || [],
rating: item.meta?.rating || item.rating || 0,
views: item.meta?.views || item.views || 0,
followers: item.meta?.followers || item.followers || 0,
chapters: item.meta?.chapters || item.chapters || 0,
language: item.meta?.language || item.language || 'English',
tags: item.meta?.tags || item.tags || [],
createdAt: item.meta?.createdAt || item.createdAt || new Date().toISOString(),
updatedAt: item.meta?.updatedAt || item.updatedAt || new Date().toISOString()
} as WebNovel
})
.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())
updatedNovels.value = novels
console.log(`Loaded ${novels.length} recently updated novels`)
} catch (err) {
console.error('Error loading novels:', err)
} finally {
isLoading.value = false
}
}
onMounted(() => {
loadNovels()
})
</script>
<template>
<UDashboardPanel id="latest-updates">
<template #header>
<UDashboardNavbar title="Latest Updates" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-6">
<!-- Header Info -->
<div class="flex flex-row items-center justify-between gap-4 mb-6">
<div>
<h2 class="text-xl font-bold mb-1">
Recently Updated
</h2>
<p class="text-sm text-gray-600 dark:text-gray-400">
{{ updatedNovels.length }} novel{{ updatedNovels.length !== 1 ? 's' : '' }} with recent updates
</p>
</div>
</div>
<!-- Loading State -->
<div v-if="isLoading" class="space-y-4">
<USkeleton v-for="i in 10" :key="i" class="h-32" />
</div>
<!-- Novels List -->
<div
v-else-if="displayedNovels.length > 0"
class="space-y-6"
>
<!-- Mobile-First List View -->
<div class="space-y-3">
<div
v-for="novel in displayedNovels"
:key="novel.id"
class="flex gap-3 sm:gap-4 p-3 sm:p-4 bg-gray-50 dark:bg-gray-900 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors cursor-pointer"
@click="goToNovel(novel.id)"
>
<!-- Cover Image -->
<div class="flex-shrink-0 w-20 sm:w-24 md:w-28">
<div class="relative overflow-hidden rounded aspect-2/3">
<img
:src="`/images/${novel.slug || novel.id}/cover.png`"
:alt="novel.title"
class="w-full h-full object-cover"
>
<UBadge
:color="novel.status === 'completed' ? 'success' : novel.status === 'hiatus' ? 'warning' : 'info'"
size="xs"
class="absolute top-1 left-1"
>
{{ novel.status }}
</UBadge>
</div>
</div>
<!-- Novel Info -->
<div class="flex-1 min-w-0 flex flex-col justify-between">
<div>
<h3 class="font-semibold text-sm sm:text-base line-clamp-2 mb-1">
{{ novel.title }}
</h3>
<p class="text-xs text-gray-600 dark:text-gray-400 line-clamp-1 mb-2">
{{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
<!-- Genres (Desktop) -->
<div class="hidden sm:flex flex-wrap gap-1 mb-2">
<UBadge
v-for="genre in novel.genres?.slice(0, 3)"
:key="genre"
size="xs"
variant="soft"
class="capitalize"
>
{{ genre }}
</UBadge>
</div>
</div>
<!-- Stats Row -->
<div class="flex flex-wrap items-center gap-2 sm:gap-4 text-xs text-gray-600 dark:text-gray-400">
<div class="flex items-center gap-1">
<UIcon name="i-lucide-book-open" class="size-3" />
<span>{{ novel.chapters || 0 }} ch</span>
</div>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-star" class="size-3 text-yellow-400" />
<span>{{ (novel.rating || 0).toFixed(1) }}</span>
</div>
<div class="flex items-center gap-1">
<UIcon name="i-lucide-eye" class="size-3" />
<span>{{ formatNumber(novel.views || 0) }}</span>
</div>
<div class="flex items-center gap-1 text-primary">
<UIcon name="i-lucide-clock" class="size-3" />
<span>{{ formatDate(novel.updatedAt) }}</span>
</div>
</div>
</div>
<!-- Arrow Icon (Desktop) -->
<div class="hidden md:flex items-center">
<UIcon name="i-lucide-chevron-right" class="size-5 text-gray-400" />
</div>
</div>
</div>
<!-- Load More Button -->
<div v-if="hasMoreNovels" class="flex justify-center pt-4">
<UButton
size="lg"
variant="soft"
@click="loadMoreNovels"
>
Load More Novels
</UButton>
</div>
</div>
<!-- Empty State -->
<div v-else class="text-center py-12">
<UIcon name="i-lucide-zap" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No novels found
</h3>
<p class="text-gray-600 dark:text-gray-400">
Check back later for updated novels
</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,58 @@
<script setup lang="ts">
const router = useRouter()
const getRandomNovel = async () => {
try {
const allNovels = await queryCollection('content').all() as any[]
console.log(`Total novels found: ${allNovels.length}`)
const novels = allNovels.filter(item => (item._path || item.id || '').includes('/novels/') && (item._path || item.id || '').endsWith('/index.md'))
console.log(`Found ${novels.length} novels for random selection`)
if (novels.length > 0) {
const randomNovel = novels[Math.floor(Math.random() * novels.length)]
const slug = (randomNovel._path || randomNovel.id || '').split('/')[2]
if (slug) {
console.log('Redirecting to random novel:', slug)
await router.push(`/novels/${slug}`)
}
}
} catch (error) {
console.error('Error getting random novel:', error)
}
}
onMounted(async () => {
console.log('Getting random novel...')
await getRandomNovel()
})
useSeoMeta({
title: 'Random Novel - LastWebNovel',
description: 'Get a random novel recommendation'
})
</script>
<template>
<UDashboardPanel>
<template #header>
<UDashboardNavbar title="Random Novel" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-8">
<div class="text-center py-12">
<UIcon name="i-lucide-dice-1" class="size-12 mx-auto mb-4 text-gray-400 animate-spin" />
<h3 class="text-lg font-semibold mb-2">
Finding a random novel...
</h3>
<p class="text-gray-600 dark:text-gray-400">
Redirecting you to a random novel...
</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

View File

@ -0,0 +1,236 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
useSeoMeta({
title: 'Recently Added - LastWebNovel',
description: 'Latest novels added to our collection'
})
const router = useRouter()
const isLoading = ref(true)
const recentNovels = ref<WebNovel[]>([])
const displayLimit = ref(20)
const formatNumber = (num: number): string => {
if (num >= 1000000) {
return `${(num / 1000000).toFixed(1)}M`
} else if (num >= 1000) {
return `${(num / 1000).toFixed(1)}k`
}
return num.toString()
}
const formatDate = (dateString: string): string => {
const date = new Date(dateString)
const now = new Date()
const diffTime = Math.abs(now.getTime() - date.getTime())
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
if (diffDays === 0) {
return 'Today'
} else if (diffDays === 1) {
return 'Yesterday'
} else if (diffDays < 7) {
return `${diffDays} days ago`
} else if (diffDays < 30) {
return `${Math.floor(diffDays / 7)} weeks ago`
} else if (diffDays < 365) {
return `${Math.floor(diffDays / 30)} months ago`
} else {
return `${Math.floor(diffDays / 365)} years ago`
}
}
const goToNovel = (novelId: string) => {
router.push(`/novels/${novelId}`)
}
const loadMoreNovels = () => {
displayLimit.value += 20
}
const displayedNovels = computed(() => {
return recentNovels.value.slice(0, displayLimit.value)
})
const hasMoreNovels = computed(() => {
return displayLimit.value < recentNovels.value.length
})
// Load novels data
const loadNovels = async () => {
try {
isLoading.value = true
const allItems = await queryCollection('content').all() as any[]
const novels: WebNovel[] = allItems
.filter((item) => {
const path = item._path || item.id || ''
return path.includes('/novels/') && path.endsWith('/index.md')
})
.map((item) => {
const pathParts = (item._path || item.id || '').split('/')
const novelId = pathParts[pathParts.length - 2] || pathParts[pathParts.length - 1]
return {
id: novelId,
title: item.title || 'Unknown',
slug: item.meta?.slug || 'no-slug',
author: item.meta?.author || item.author || 'Unknown',
description: item.description || item.body?.text || '',
cover: `/images/${novelId}/cover.png`,
status: item.meta?.status || item.status || 'ongoing',
genres: item.meta?.genres || item.genres || [],
rating: item.meta?.rating || item.rating || 0,
views: item.meta?.views || item.views || 0,
followers: item.meta?.followers || item.followers || 0,
chapters: item.meta?.chapters || item.chapters || 0,
language: item.meta?.language || item.language || 'English',
tags: item.meta?.tags || item.tags || [],
createdAt: item.meta?.createdAt || item.createdAt || new Date().toISOString(),
updatedAt: item.meta?.updatedAt || item.updatedAt || new Date().toISOString()
} as WebNovel
})
.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
recentNovels.value = novels
console.log(`Loaded ${novels.length} recently added novels`)
} catch (err) {
console.error('Error loading novels:', err)
} finally {
isLoading.value = false
}
}
onMounted(() => {
loadNovels()
})
</script>
<template>
<UDashboardPanel id="recently-added">
<template #header>
<UDashboardNavbar title="Recently Added" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-6">
<!-- Header Info -->
<div class="flex flex-row items-center justify-between gap-4 mb-6">
<div>
<h2 class="text-xl font-bold mb-1">
Latest Additions
</h2>
<p class="text-sm text-gray-600 dark:text-gray-400">
{{ recentNovels.length }} novel{{ recentNovels.length !== 1 ? 's' : '' }} added
</p>
</div>
</div>
<!-- Loading State -->
<div v-if="isLoading" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4">
<USkeleton v-for="i in 10" :key="i" class="h-80" />
</div>
<!-- Novels Grid -->
<div
v-else-if="displayedNovels.length > 0"
class="space-y-6"
>
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4">
<div
v-for="novel in displayedNovels"
:key="novel.id"
class="group cursor-pointer"
@click="goToNovel(novel.id)"
>
<div class="relative overflow-hidden rounded-lg mb-2 aspect-2/3">
<img
:src="`/images/${novel.slug || novel.id}/cover.png`"
:alt="novel.title"
class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-110"
>
<div class="absolute inset-0 bg-linear-to-t from-black/90 via-black/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div class="absolute bottom-0 left-0 right-0 p-3 space-y-1">
<div class="flex items-center gap-1 text-xs text-white/90">
<UIcon name="i-lucide-star" class="size-3 text-yellow-400" />
<span>{{ (novel.rating || 0).toFixed(1) }}</span>
<span class="mx-1"></span>
<span>{{ novel.chapters || 0 }} ch</span>
</div>
<div class="flex items-center gap-1 text-xs text-white/80">
<UIcon name="i-lucide-eye" class="size-3" />
<span>{{ formatNumber(novel.views || 0) }}</span>
</div>
<div class="flex items-center gap-1 text-xs text-white/80">
<UIcon name="i-lucide-calendar" class="size-3" />
<span>{{ formatDate(novel.createdAt) }}</span>
</div>
</div>
</div>
<UBadge
:color="novel.status === 'completed' ? 'success' : novel.status === 'hiatus' ? 'warning' : 'info'"
size="xs"
class="absolute top-2 right-2"
>
{{ novel.status }}
</UBadge>
<UBadge
color="primary"
size="xs"
class="absolute top-2 left-2"
>
New
</UBadge>
</div>
<h3 class="font-semibold text-sm line-clamp-2 mb-1">
{{ novel.title }}
</h3>
<p class="text-xs text-gray-600 dark:text-gray-400 line-clamp-1 mb-1">
{{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
<div class="flex flex-wrap gap-1">
<UBadge
v-for="genre in novel.genres?.slice(0, 2)"
:key="genre"
size="xs"
variant="soft"
class="capitalize"
>
{{ genre }}
</UBadge>
</div>
</div>
</div>
<!-- Load More Button -->
<div v-if="hasMoreNovels" class="flex justify-center pt-4">
<UButton
size="lg"
variant="soft"
@click="loadMoreNovels"
>
Load More Novels
</UButton>
</div>
</div>
<!-- Empty State -->
<div v-else class="text-center py-12">
<UIcon name="i-lucide-sparkles" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No novels found
</h3>
<p class="text-gray-600 dark:text-gray-400">
Check back later for newly added novels
</p>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

344
app/pages/titles/search.vue Normal file
View File

@ -0,0 +1,344 @@
<script setup lang="ts">
import type { WebNovel } from '~/types'
useSeoMeta({
title: 'Advanced Search - LastWebNovel',
description: 'Search and filter novels by genre, rating, and more'
})
const router = useRouter()
const isLoading = ref(true)
const allNovels = ref<WebNovel[]>([])
// Search and filter states
const searchQuery = ref('')
const selectedGenres = ref<string[]>([])
const selectedStatus = ref<string>('all')
const minRating = ref<number>(0)
const sortBy = ref<string>('relevance')
// Available options
const availableGenres = computed(() => {
const genresSet = new Set<string>()
allNovels.value.forEach((novel) => {
novel.genres?.forEach(genre => genresSet.add(genre))
})
return Array.from(genresSet).sort()
})
const statusOptions = [
{ value: 'all', label: 'All Status' },
{ value: 'ongoing', label: 'Ongoing' },
{ value: 'completed', label: 'Completed' },
{ value: 'hiatus', label: 'Hiatus' }
]
const ratingOptions = [
{ value: 0, label: 'All Ratings' },
{ value: 4.0, label: '4.0+' },
{ value: 4.5, label: '4.5+' },
{ value: 4.8, label: '4.8+' }
]
const sortOptions = [
{ value: 'relevance', label: 'Relevance' },
{ value: 'rating', label: 'Highest Rating' },
{ value: 'views', label: 'Most Views' },
{ value: 'followers', label: 'Most Followers' },
{ value: 'updated', label: 'Recently Updated' },
{ value: 'title', label: 'Title A-Z' }
]
// Genre options computed from available genres
const genreOptions = computed(() =>
availableGenres.value.map(genre => ({ value: genre, label: genre.charAt(0).toUpperCase() + genre.slice(1) }))
)
// Filtered and sorted results
const filteredNovels = computed(() => {
let results = [...allNovels.value]
// Text search
if (searchQuery.value.trim()) {
const query = searchQuery.value.toLowerCase()
results = results.filter(novel =>
novel.title.toLowerCase().includes(query)
|| (typeof novel.author === 'string' ? novel.author : novel.author?.name || '').toLowerCase().includes(query)
|| novel.description.toLowerCase().includes(query)
)
}
// Genre filter
if (selectedGenres.value.length > 0) {
results = results.filter(novel =>
selectedGenres.value.some(genre => novel.genres?.includes(genre))
)
}
// Status filter
if (selectedStatus.value !== 'all') {
results = results.filter(novel => novel.status === selectedStatus.value)
}
// Rating filter
if (minRating.value > 0) {
results = results.filter(novel => (novel.rating || 0) >= minRating.value)
}
// Sorting
switch (sortBy.value) {
case 'rating':
results.sort((a, b) => (b.rating || 0) - (a.rating || 0))
break
case 'views':
results.sort((a, b) => (b.views || 0) - (a.views || 0))
break
case 'followers':
results.sort((a, b) => (b.followers || 0) - (a.followers || 0))
break
case 'updated':
results.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())
break
case 'title':
results.sort((a, b) => a.title.localeCompare(b.title))
break
// 'relevance' keeps the filtered order
}
return results
})
const hasActiveFilters = computed(() => {
return selectedGenres.value.length > 0
|| selectedStatus.value !== 'all'
|| minRating.value > 0
})
const clearFilters = () => {
selectedGenres.value = []
selectedStatus.value = 'all'
minRating.value = 0
sortBy.value = 'relevance'
}
const formatNumber = (num: number): string => {
if (num >= 1000000) {
return `${(num / 1000000).toFixed(1)}M`
} else if (num >= 1000) {
return `${(num / 1000).toFixed(1)}k`
}
return num.toString()
}
const goToNovel = (novelId: string) => {
router.push(`/novels/${novelId}`)
}
// Load novels data
const loadNovels = async () => {
try {
isLoading.value = true
const allItems = await queryCollection('content').all() as any[]
console.log(`Total content items found: ${allItems.length}`)
const novels: WebNovel[] = allItems
.filter((item) => {
const path = item._path || item.id || ''
return path.includes('/novels/') && path.endsWith('/index.md')
})
.map((item) => {
const pathParts = (item._path || item.id || '').split('/')
const novelId = pathParts[pathParts.length - 2] || pathParts[pathParts.length - 1]
return {
id: novelId,
title: item.title || 'Unknown',
slug: item.meta?.slug || 'no-slug',
author: item.meta?.author || item.author || 'Unknown',
description: item.description || item.body?.text || '',
cover: `/images/${novelId}/cover.png`,
status: item.meta?.status || item.status || 'ongoing',
genres: item.meta?.genres || item.genres || [],
rating: item.meta?.rating || item.rating || 0,
views: item.meta?.views || item.views || 0,
followers: item.meta?.followers || item.followers || 0,
chapters: item.meta?.chapters || item.chapters || 0,
language: item.meta?.language || item.language || 'English',
tags: item.meta?.tags || item.tags || [],
createdAt: item.meta?.createdAt || item.createdAt || new Date().toISOString(),
updatedAt: item.meta?.updatedAt || item.updatedAt || new Date().toISOString()
} as WebNovel
})
allNovels.value = novels
console.log(`Loaded ${novels.length} novels for search`)
} catch (err) {
console.error('Error loading novels:', err)
} finally {
isLoading.value = false
}
}
onMounted(() => {
loadNovels()
})
</script>
<template>
<UDashboardPanel id="search">
<template #header>
<UDashboardNavbar title="Advanced Search" :ui="{ right: 'gap-3' }">
<template #leading>
<UDashboardSidebarCollapse />
</template>
</UDashboardNavbar>
</template>
<template #body>
<UContainer class="py-6">
<!-- Search Bar -->
<div class="mb-6">
<UInput
v-model="searchQuery"
icon="i-lucide-search"
size="xl"
placeholder="Search by title, author, or description..."
class="w-full"
/>
</div>
<!-- Filters Bar -->
<div class="flex flex-row items-center justify-between gap-4 mb-6">
<span class="text-sm text-gray-600 dark:text-gray-400">
{{ filteredNovels.length }} novel{{ filteredNovels.length !== 1 ? 's' : '' }}
</span>
<!-- Clear Filters Button -->
<UButton
:disabled="!hasActiveFilters"
icon="i-lucide-x"
color="error"
variant="subtle"
@click="clearFilters"
>
Clear Filters
</UButton>
</div>
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-6">
<div class="flex flex-col sm:flex-row gap-2 w-full sm:w-auto">
<!-- Sort Select -->
<USelect
v-model="sortBy"
:items="sortOptions"
option-attribute="label"
value-attribute="value"
placeholder="Sort by..."
class="w-full sm:w-40"
/>
<!-- Genres Select -->
<USelect
v-model="selectedGenres"
:items="genreOptions"
multiple
option-attribute="label"
value-attribute="value"
placeholder="Genres"
class="w-full sm:w-40"
/>
<!-- Status Select -->
<USelect
v-model="selectedStatus"
:items="statusOptions"
option-attribute="label"
value-attribute="value"
placeholder="Status"
class="w-full sm:w-40"
/>
<!-- Rating Select -->
<USelect
v-model="minRating"
:items="ratingOptions"
option-attribute="label"
value-attribute="value"
placeholder="Rating"
class="w-full sm:w-40"
/>
</div>
</div>
<!-- Results Grid -->
<div v-if="isLoading" class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4">
<USkeleton v-for="i in 10" :key="i" class="h-80" />
</div>
<div
v-else-if="filteredNovels.length > 0"
class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-4"
>
<div
v-for="novel in filteredNovels"
:key="novel.id"
class="group cursor-pointer"
@click="goToNovel(novel.id)"
>
<div class="relative overflow-hidden rounded-lg mb-2 aspect-2/3">
<img
:src="`/images/${novel.slug || novel.id}/cover.png`"
:alt="novel.title"
class="w-full h-full object-cover transition-transform duration-300 group-hover:scale-110"
>
<div class="absolute inset-0 bg-linear-to-t from-black/90 via-black/50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div class="absolute bottom-0 left-0 right-0 p-3 space-y-1">
<div class="flex items-center gap-1 text-xs text-white/90">
<UIcon name="i-lucide-star" class="size-3 text-yellow-400" />
<span>{{ (novel.rating || 0).toFixed(1) }}</span>
<span class="mx-1"></span>
<span>{{ novel.chapters || 0 }} ch</span>
</div>
<div class="flex items-center gap-1 text-xs text-white/80">
<UIcon name="i-lucide-eye" class="size-3" />
<span>{{ formatNumber(novel.views || 0) }}</span>
</div>
</div>
</div>
<UBadge
:color="novel.status === 'completed' ? 'success' : novel.status === 'hiatus' ? 'warning' : 'info'"
size="xs"
class="absolute top-2 right-2"
>
{{ novel.status }}
</UBadge>
</div>
<h3 class="font-semibold text-sm line-clamp-2 mb-1">
{{ novel.title }}
</h3>
<p class="text-xs text-gray-600 dark:text-gray-400 line-clamp-1">
{{ typeof novel.author === 'string' ? novel.author : novel.author?.name }}
</p>
</div>
</div>
<!-- Empty State -->
<div v-else class="text-center py-12">
<UIcon name="i-lucide-search-x" class="size-12 mx-auto mb-4 text-gray-400" />
<h3 class="text-lg font-semibold mb-2">
No novels found
</h3>
<p class="text-gray-600 dark:text-gray-400 mb-4">
Try adjusting your filters or search query
</p>
<UButton
v-if="hasActiveFilters || searchQuery"
color="secondary"
@click="clearFilters(); searchQuery = ''"
>
Clear all filters
</UButton>
</div>
</UContainer>
</template>
</UDashboardPanel>
</template>

120
app/types/index.d.ts vendored Normal file
View File

@ -0,0 +1,120 @@
import type { AvatarProps } from '@nuxt/ui'
export type UserStatus = 'subscribed' | 'unsubscribed' | 'bounced'
export type SaleStatus = 'paid' | 'failed' | 'refunded'
export interface User {
id: number
name: string
email: string
avatar?: AvatarProps
status: UserStatus
location: string
}
export interface Mail {
id: number
unread?: boolean
from: User
subject: string
body: string
date: string
}
export interface Member {
name: string
username: string
role: 'member' | 'owner'
avatar: AvatarProps
}
export interface Stat {
title: string
icon: string
value: number | string
variation: number
formatter?: (value: number) => string
}
export interface Sale {
id: string
date: string
status: SaleStatus
email: string
amount: number
}
export interface Notification {
id: number
unread?: boolean
sender: User
body: string
date: string
}
export type Period = 'daily' | 'weekly' | 'monthly'
export interface Range {
start: Date
end: Date
}
// WebNovel types
export type NovelStatus = 'ongoing' | 'completed' | 'hiatus'
export type NovelGenre = 'fantasy' | 'romance' | 'sci-fi' | 'mystery' | 'slice-of-life' | 'action' | 'adventure' | 'horror' | 'comedy' | 'drama'
export interface Author {
id: string
name: string
avatar: string
bio?: string
}
export interface WebNovel {
id: string
slug: string
title: string
author: Author
description: string
cover: string
status: NovelStatus
genres: NovelGenre[]
rating: number
views: number
followers: number
chapters: number
language: string
tags: string[]
createdAt: string
updatedAt: string
}
export interface Chapter {
id: string
novelId: string
number: number
title: string
content: string
views: number
likes: number
createdAt: string
updatedAt: string
}
export interface ReadingProgress {
novelId: string
chapterId: string
chapterNumber: number
progress: number // 0-100
lastReadAt: string
}
export interface ReaderPreferences {
fontSize: number // 12-24
fontFamily: 'serif' | 'sans-serif' | 'monospace'
lineHeight: number // 1.5-2.5
backgroundColor: 'white' | 'cream' | 'gray' | 'black'
textColor: 'black' | 'white' | 'gray'
theme: 'light' | 'dark' | 'sepia'
textJustify: boolean
}

7
app/utils/index.ts Normal file
View File

@ -0,0 +1,7 @@
export function randomInt(min: number, max: number): number {
return Math.floor(Math.random() * (max - min + 1)) + min
}
export function randomFrom<T>(array: T[]): T {
return array[Math.floor(Math.random() * array.length)]!
}

8
content.config.ts Normal file
View File

@ -0,0 +1,8 @@
import { defineCollection } from '@nuxt/content'
export const collections = {
content: defineCollection({
source: '**/*.md',
type: 'page'
})
}

View File

@ -0,0 +1,297 @@
---
title: "Chapter 1 : World of Astral Pets"
slug: "ch-1"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“My handsome brother, time to get up.”
Eh?
“Who is calling me handsome?”
“Wait a minute.”
“Wasnt I sleeping alone? Whos talking?”
Surprised and bewildered, Su Ping quickly opened his eyes. He turned around to take a look. Just one glance almost scared him half to death!
Leaning against his pillow was a ghost that was bleeding from all the seven openings of her face. A twisted smile was ripping her mouth open, revealing ghastly white teeth.
“What the f*ck!!”
Trembling, Su Ping gave the ghost a backhand slap.
His hand went straight through the ghosts face and landed on the soft pillow. It was just like fanning the air!
The ghost grinned a bit and stuck out her scarlet tongue.
Su Ping was terrified. He hastened to turn around and flee. However, he didnt pay attention due to panic; his hand was misplaced and he fell off the bed face first on the ground.
“It hurts!”
Su Ping felt his nose was broken and the pain caused a burning sensation.
That being said, he then felt cold all over his body once he thought about the horrifying ghost again.
“Um, pff...”
It seemed as if someone was trying to hold back but failed. There was a burst of laughter coming from the side.
Su Ping shivered from fear. Was the ghost laughing?!
“Ha, ha, ha... Su Ping, are you trying to kill me with laughter? How hopelessly spineless can you be, to be frightened like this!”
The laughter came from the side of the room.
Su Ping was startled.
He turned around.
At the foot of the bed stood a delicate and cute girl with bright eyes and white teeth, wearing orange pajamas with cartoon characters. She was pretty, but at the moment she was laughing so hard that the word beauty no longer had anything to do with her.
“What is going on?”
Su Ping was confused. Then, he suddenly noticed there was something different about the environment of the room.
The first thing that jumped out was a huge poster of a monster on the wall behind the girl. That had to be a poster from some movie.
This was not his room!
Su Ping never had the habit of putting up posters in his room.
Where was the ghost girl?
Upon remembering the shock she had given him when he woke up, he quickly turned his head to look.
There was nothing on the bed. The ghost girl was gone!
“Did she leave?”
Su Ping was in a daze. He was just about to breathe in relief.
And yet, all of a sudden, a black figure whooshed out from under his blanket. It was a black cat.
It was more of a “rolling” than a “whooshing” out. The cat was so chubby that it was practically a ball.
“Snowball, come here,” the girl said to the black cat.
Hearing her voice, the black cat spared no effort in struggling with its four limbs to stand, finally turning around from its belly-up position. The cat shook its fur for a bit, threw a glance to Su Ping who was still cowering on the ground and walked toward the girl with graceful little steps.
Maybe he was just imagining things, but Su Ping thought he was being despised by a cat.
At that moment Su Ping suddenly noticed two sharp horns on the head of the black cat. There were a few strands of dark red hair on its forehead, forming something like a circle of flames.
A question mark slowly emerged above Su Pings head.
Buzzing!
Suddenly, as if space and time were quivering...
Su Pings vision blurred. Like flood currents, countless pieces of information were surging in his head from all sides.
“Su Ping? Su Lingyue?”
“Astral Pets?”
“Another world?”
The information that came in a continuous stream was confusing and overwhelming. Su Ping felt his head was about to explode, and the pain was unbearable. He had to clench his teeth to somewhat hold back the urge to utter a sound.
He didnt know how long it took before the messy storm of information in his head gradually quieted down. Some clips of memory emerged in an orderly manner along the timeline.
He had been transported to another world...
Su Ping came to the realization. No wonder he was in this unfamiliar room with that strange girl and the odd cat.
“However, I was just curling up at home to sleep! How could I be transported to another world like this?”
“Was it because I used my hand for some pre-sleep exercise?”
Inside, Su Ping was smiling bitterly. He began to sort through the memories in his mind.
“This is a world similar to earth. But the technology is more advanced, already having entered the era of interstellar travels, reaching far beyond the earth. At the same time, the focus here is not technological development, but the unique Astral Pets!”
“Astral Pets come in great variety and have everything to do with human society. There are Tool Pets who are in charge of infrastructure, transportation and work in daily life, even in scientific research! Battle pets are responsible for pioneering new frontiers amongst the stars and they also offer support in wars. When it comes to battles and status classification of major countries, the might of the battle pets is the decisive factor!”
“Astral Pets...”
Su Ping indulged himself in those memory clips. The more he knew, the more shocked he was. He then understood what that ghost girl was about.
“Battle pet of the demon family, the Phantom Flame Beasts main ability is to construct illusions and manipulate fire elements...”
This Phantom Flame Beast was that strange cat, a ferocious and tough battle pet of the demon family. This was an Astral Pet that was proficient both in spirit control and element control, a “rare” kind that could cost an arm and a leg!
Su Ping couldnt believe that “his” younger sister Su Lingyue would use such a rare Astral Pet just to trick him every day...
Once he finished browsing through the memories of his bodys original owner, Su Ping found this life both funny and annoying. This brother and sister were such a quarrelsome pair; they mutually couldnt stand the sight of the other since young. At first, Su Ping was the one who often played pranks to bully and scare his younger sister. However, the tables had turned as they grew up. It was Su Pings turn to spend his days on tenterhooks.
The trigger for such a change was because they had entered different schools when they were twelve.
One of them went to a common trade school.
The other went to the Academy of Astral Pet Warriors!
In a world that was centered on Astral Pets, not everyone could become an Astral Pet Warrior. Only the ones that were well-endowed at birth could build contracts with Astral Pets!
It was determined at birth that the former “Su Ping” didnt have such talent, which meant that he was destined to be a normal person.
But, in their childhood, this pair of brother and sister didnt understand this concept. Therefore, the talented Su Lingyue had always been the one on the receiving end, being constantly bullied by Su Ping who had no talent to train Astral Pets.
Once they realized the difference between them, the disastrous life for Su Ping had finally begun.
This younger sister of his was not one to be taken lightly. She harbored a bitter resentment due to all the times she had been bullied by her big brother. She had been repaying him that kindness by several folds over the years.
At the present day, the gap between them had widened even more. One of them was a genius girl who was enrolled in a famous school, with a promising future ahead of her, while the other couldnt even get into an average university. He would have to drop out of school to help out the family in the business.
“Well, what are you doing there? You didnt damage your head with the fall, did you?”
Su Lingyue felt something was unusual as she stared at the dumbstruck Su Ping who was sitting on the ground. She frowned, since she remembered that he fell head first.
She wasnt worried about Su Pings safety, but their parents might blame her for this.
“Eh?”
Su Ping came back to his senses. He threw a look at the proud girl who was there holding her head high with her arms folded in front of her chest. He didnt know what to do with her. “Dont play pranks like this anymore,” said Su Ping.
Since he had taken over this body, he didnt want to continue with the practical-joke-revenge living arranged by his sister.
Su Lingyue was taken aback.
“Wouldnt he usually jump right up and give vent to a torrent of abuse to call me a shrew?
“Why is he so quiet today?
“Could it be...
“He thinks I could become soft-hearted just because he wants to submit?
“Hmm!”
“As long as you havent become dumb. Well, truth be told, maybe you can become smarter with your head smashed, given your poor intelligence.” Su Lingyue sneered. She turned around and left right away. “Dont dawdle. Hurry up and get down for breakfast. Dont make mom tell me to come up and get you again!”
Slam!
She smashed the door behind her.
Su Ping produced a forced smile. Why was his younger sister so violent when other peoples sisters were cute and lovable girls?
Whoosh!
The door was pulled open again.
Su Ping was startled. It was Su Lingyue who had returned. She hid her spooky face behind the door as she added, “Also, dont tell mom on me. Or else...” Then she made a cutthroat gesture.
Slam!
The poor door had to shoulder another strike before Su Ping could give a reply.
“...”
Su Ping sat there for a while and crawled back up after he was sure no more sounds were coming from outside.
He glanced around the room and saw many action figures and posters of Astral Pets. While he was a normal person in this world, he wasnt inferior to the average Astral Pet Warriors regarding the studies on Astral Pets.
Of course, this didnt stem from his great love of Astral Pets. This bro hated Astral Pets. He was only delving in such studies to find a way to defeat Astral Pets as an average person!
To be more accurate, to find a way to defeat his sisters Astral Pet!
However, many years had passed; he was still on the receiving end of maltreatment and contempt without the ability to fight back. One could only imagine how difficult his life had been, for him to have researched this much.
Su Ping had a surge of mixed feelings after he reviewed the 18-year life of this man. Not only was he a good-for-nothing, but he had also offended the only powerful person he could have latched himself to. He had been mischievous since he was a kid. He created so many troubles and fooled his sister many times. He would put caterpillars in her lunchbox or scare her in the dead of night by dressing up as a ghost. He was practically the cause of her childhood trauma.
Look at the results. He had turned the girl whose coattails he could ride on into his foe. Besides, this sister of his was not a kind person. She had become his adulthood trauma for a change.
Su Ping definitely had to find a chance to reconcile with this powerful sister. Otherwise, he would be traumatized or his nerves would be wrecked after a few more rounds of peculiar scares.
Su Ping got himself ready, then he put on his slippers and headed downstairs.
“What took you so long? The congee is getting cold. Hurry up,” his mother, Li Qingru, said. She seemed to be in her forties, gentle and refined.
Su Lingyue had already dug in and remained by the table. She had placed the Phantom Flame Beast named “Snowball” on the chair next to hers, which was supposed to be his spot.
Su Ping curled his lips. Even at a simple breakfast, he could still feel such a vindictive nature...
“Coming.”
Su Ping went to the living room to get another chair. He took a look at the substantial breakfast with congee, meat pies, and soybean milk. He was getting hungry.
Su Lingyue raised her eyebrows and cast a glance at Su Ping. She deliberately used Snowball to occupy his seat to provoke him, so that he would get angry and scream and yell. That way she would tell her mom to scold him. Why did he bear the insult?
Curious.
There was some alertness in Su Lingyues looks. Was this guy up to something by acting out of character?
“Mom, Im done. Ill be heading to the academy now.” Since her plan had fallen through, Su Lingyue was no longer in the mood to stay. She finished her breakfast quickly and bid farewell to her mom.
When she was about to leave, Li Qingru stopped her, “Xiao Yue, wait.”
“Ah?” Su Lingyue turned around.
“Recently, your brothers store hasnt been performing very well, its not quite popular. How about you put Snowball there just to put on the dog?” Li Qingru tried to sound her out.
Su Lingyue was surprised. She threw a glance at Su Ping who was swallowing down the congee. She rolled her eyes and grumpily reasoned with her, “Mom, the business has been worsening day by day since you let this guy take over. Why do you think that is? The reason is that this guy is not attending to his proper duties. Do you still remember when someone almost filed a complaint against us at the Association of Astral Pets?
“Someone left a Messenger Bird there for the boarding service. However, it started saying f*ck you dumb**s to all the people it met, and it would blurt out all kinds of curse words, all in less than a week. A few days later, the bird was beaten to death and this case remained unresolved!”
“Do you have the courage to have my Snowball be raised by him when he cant even take care of a Messenger Bird? There is hope that Snowball can advance to an Astral Pet of the eighth rank. If you dont mind, I wont, either. After all, you were the one that bought me Snowball.”
Li Qingru was rendered speechless. She opened her mouth but ended up sighing.
If it werent for the fact that she had to rest quietly to recuperate since she was under the weather, she wouldnt have asked Su Ping to take over the store so early.
Su Ping could sense his sisters unkind glare but decided to keep silent. He lowered his head and continued eating the congee without paying attention to Su Lingyue.
“Hmm!” she snorted, after sensing that Su Ping knew how to behave in a delicate situation. She picked up Snowball who was still eating bones and went back to her room to get changed and head out.
A moment later, Su Ping had also finished his breakfast. As per usual, after Li Qingru told him to take care, he rode the bike to the store.
It was an Astral Pets store.
Su Ping was a dabbler trainer. His work was more related to Astral Pets servicing than to actual training.
After all, the real master trainers could change the potential and rank of an Astral Pet. The master trainers enjoyed similar, or even higher positions than Astral Pet Warriors!
Along the way, Su Ping saw high buildings and large mansions, just like on earth. The only thing different was the peculiar-looking Astral Pets walking alongside most of the pedestrians.
“I am indeed in another world...” Su Ping exclaimed. Everything was like a dream but it was every bit as real.
Soon, he had arrived at his familys Astral Pet store.
The store was at the end of a commercial street, a relatively remote location, but it used to be pretty popular. Su Pings mother Li Qingru was an official Astral Pet trainer of the Federation. While she was only an elementary trainer, she was more than capable of opening a small store like this. She had loads of repeated customers.
But things turned south quickly when Su Ping took over the store.
Ads by Pubfuture
Pubfuture Ads
Could anyone expect that a person who disliked Astral Pets would take good care of them?
Crash~!
Su Ping opened the roller shutter door. He could see dust stirring up in the air when sunshine reached the interior of the store.
It seemed the store hadnt been cleaned in a long time. There was a pungent smell of animal urine and feces coming from the inside.
Su Ping frowned and held his breath for a bit.
All of a sudden, cold mechanic sounds emerged in Su Pings mind.
“A suitable soul was detected within the target range. Performing contract detection...”
“Contract completed. Adding to the system...”
“Completed... Ready to launch...”
“System?”
Su Ping paused for a second. Then, glow burst out from his eyes.
What should come was coming...

View File

@ -0,0 +1,166 @@
---
title: "Chapter 10 : Thunder Slash, Seventh Rank Skill of the Thunder Family! (2)"
slug: "ch-10"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“That is the Dragon Hound!”
“This is such a surprise. Zhang Xiao from Class Seven, Grade Three, has sent out Dragon Hound, a pet of the demon family that is incredibly hard to tame, right at the beginning of the match!”
“This is a pet that can reach the upper position of the third rank in adolescence. Now, Zhang Xiao is using it at the very beginning. Is Zhang Xiao trying to win the game with a 3:0 score?”
The commentator sounded surprised to see the pet that Zhang Xiao summoned from his contract space. It was somewhat mean to fight an inferior Lightning Rat with such a powerful battle pet.
“Dragon Hound!”
Su Yanying was taken aback. Not only was the Dragon Hound violent and cruel, but it was also said that Dragon Hounds shared bloodlines with the “Hell Dragon,” a king beast. The Dragon Hound could release “Roar of Flames” which could carry the powers of dragons howls; such skill could overwhelm pets of an inferior rank. The latter would be scared half dead before they even began to fight the Dragon Hound!
Was he trying to disgrace her by deliberately threatening her when he was well aware that she was using the Lightning Rat?
Su Yanying clenched her hands. She took a deep breath. So be it. She sent out the Lightning Rat just to feel out her opponent and to probe for his ace card.
The fact that her opponent was underestimating her meant that the Lightning Rat had half succeeded in its mission!
“Roar!!”
The cries of dragons suddenly came out.
The Dragon Hound that was nearly three meters tall, bigger than tigers and lions, let out an abrupt bellow, carrying a strong deterrent force. The roar lingered on in the entire venue!
Su Yanyings pupils contracted a bit. She felt that her heart was uncontrollably pounding fast. Not only could the roar of a Dragon Hound deter low-rank pets, it could also intimidate the more timid battle pet warriors.
After all, its enormous body with magical flames surging around could give out a strong visual pressure!
But Su Yanying was not a coward. Plus, she had confronted more powerful pets in her daily training, so she could deal with this pressure. She was ready to tell Lightning Rat to come back and send out her ace card, the “Fanged Tiger.” All of a sudden, some electric arcs were generated with a “buzzing” sound!
The purple light produced by electricity appeared in her sight.
Su Yanying was astonished.
She lowered her head. The Lightning Rat that was by her foot had jumped to the center of the stage before she knew it. That small body stood in front of her, surrounded by electric arcs, as if wearing a suit made of lightning.
That little guy did not show any intention of escaping, even though it was facing the Dragon Hound. The Lightning Rat would have to hold its head up high just to look at it!
“It... is not afraid?” Su Yanying was startled.
The low-rank Lightning Rat was born to be a kind of pet that was more timid in nature. At the moment, such a pet was standing in front of her, showing its teeth at the Dragon Hound!
It was as if the Lightning Rat was defending something, protecting something!
“Come back!”
Two seconds later, Su Yanying suddenly came back to her senses. She shouted to the Lightning Rat at once.
“Yes?”
When Zhang Xiao he frowned when he saw that thing enveloped by electricity standing in front of the Dragon Hound. How come that little thing was not paralyzed from fright? His original plan was to bring shame to Su Yanying. It was a surprise that this little thing sabotaged his intentions.
“Kill it!” Zhang Xiao gave the instructions telepathically.
“Roar!!”
Ferocity was in the eyes of the Dragon Hound. Another sound was squeezed out from its mouth that was filled with horrifying fangs. The Dragon Hound felt its authority challenged since this little guy was not scared.
Flames were rolling around the Dragon Hound who had opened its mouth and it breathed out dragon flames. Those dark magical flames fluttered out like pythons. The flames swept across the stage, reaching the Lightning Rat in an instant.
Whoosh!
The Lightning Rat was enveloped by the passing of the magical flames.
Immediately, Su Yanying turned ghastly pale.
“Hmm.” Zhang Xiao snorted.
Right at that moment, he noticed a faint purple glow from the corner of his eyes.
Surprised, he turned around, only to see a figure surrounded by lightning rushing toward them at an incredible speed!
It was traveling too fast!
All Zhang Xiao could see was a ball of lightning charging at him!
The Dragon Hound seemed to have sensed the danger. It turned around at once and breathed out a ball of magical flames.
Whoosh!
The ball of lightning made a turn rapidly and dodged the strike.
Then, another ball of magical flames was discharged.
Whoosh!
The Lightning Rat jumped up again and slipped away!
At that moment, people could finally have the visual. The thing in the ball of lightning was that low-rank Lightning Rat that should have been consumed by the dragon fire!
“How is that possible!”
Someone cried out in alarm.
“Thats the Lightning Rat!” The moment the commentator saw it clearly, he found himself dumbstruck.
“Oh no. Use the flames to tear it apart!” Zhang Xiao shouted at one as he came back to his senses.
Having received the instructions from its master, the Dragon Hound showed its teeth. Flames with magical powers were attached to its body. The Dragon Hounds four limbs exerted great strength. Being facilitated by the second-rank power of the blast, the Dragon Hounds speed was accelerated. In an instant, the Dragon Hound had charged at the Lightning Rat that was dashing towards it!
Roar!
The Dragon Hounds white, sharp fangs were enough to instill fear. Those fangs could crack stones. It opened its mouth, ready to take a bite at the Lightning Rat.
The Lightning Rat did not flinch. A cold glare was bursting from its squinting rodent eyes. The lightning around its body quickly converged above its head.
The moment the Dragon Hound was about to lacerate the Lightning Rat, the lightning convergence was quickly coming to an end, taking the shape of a sharp sword from the compressed energy!
In the spectator seat, someone stood up. “Thunder Slash!!”
Buzzing, buzzing!
Lightning flashed and a gale was whooshing. That sword of lightning was hacked at the mouth filled with teeth that was about to swallow the Lightning Rat!
Crack!
It was as if the lightning were exploding. With the loud sound, the entire venue began to shake. That glaring lightning stung the eyes, just like the core of a planet that had blasted away!
When the lightning disappeared, the glaringly white light faded away from peoples sights as well. Soon, everyone could see the stage again. For a moment, people were gasping in astonishment one after another.
In the large stage, at a corner, that huge Dragon Hound had fallen and it was twitching. Smoke was rising from its burnt body. Right next to it, was Zhang Xiao who had collapsed on the ground in fright; his face had turned pale.
Next to the Dragon Hound was a small guy that was still covered in lightning. It was stepping back to where it came from.
It was that Lightning Rat that caught no attention!
A short period of silence later, there was a burst of passionate cheers at the venue.
The battle was marvelous!
Who could have expected that a Dragon Hound of the demon family could have lost and to a common Lightning Rat no less!
But, as of this moment, nobody believed that this Lightning Rat was anything common.
Su Yanying felt she was a bit absent-minded while she looked at the Lightning Rat that was coming back to her. Did she win? Did the first rank Lightning Rat defeat the Dragon Hound?
As a student of the academy of Astral Pet, she felt all her accumulated knowledge had been disrupted.
...
...
“Guys, did you see that?”
On a row of seats by the stage, some people that appeared to be powerful were sitting there. The vice-president of the academy was at the end of this row.
Sitting in the middle of the row, a woman with red hair said, “Yes, that has to be Thunder Slash!” She was dressed in strange armor, and there was a long, slanting brown scar on her delicate and beautiful cheek, which was a frightening sight, but the eyes of those around her were still demonstrating their admiration of her.
“That is a seventh-rank skill of the thunder family. Well, well, if I hadnt seen it with my own eyes, I wouldnt have believed it. It is such a surprise that this little Lightning Rat could learn a skill that not even the advanced pets can master.” On her side, someone with a strong figure chuckled.
“That is such an admirable talent. If this little guy can evolve to a third-rank Thunderstorm Rat, I believe it can be a match for other pets at the fourth or fifth rank!”
“It is a pity that this is just a Lightning Rat of low rank. The effect of it using such an advanced skill of the thunder family is still limited. If it were other pets with more potential, then its value would be beyond imagination. Maybe even I would be interested in such a pet.”

View File

@ -0,0 +1,154 @@
---
title: "Chapter 2 : Ancient Cultivation Sites"
slug: "ch-2"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
As an Otaku, Su Ping would spend all his days “learning” online. He was not a stranger to systems. Pleasantly surprised, Su Ping began to probe the functions of this system immediately.
“I am the Super Pet System, dedicated to cultivating the strongest pets in the world, and the motto of this system is: everything can be cultivated, and everything is a pet!”
“A pet cultivation system?!” Su Ping exclaimed in surprise.
The system sounded presumptuous. Everything was a pet. So, could flowers and the grass along the road be counted as pets as well?
“Flowers and grass can be pets as well, when they have intelligence and are spiritually awakened. Pets of the vegetation family evolved from common plants,” the system gave an indifferent reply.
Su Ping was taken aback. He glared at the air and asked, “You can hear my thoughts?”
“I am connected with the hosts soul. Of course, I am aware of my hosts thoughts... Warning, first profanity alert!”
“...”
Su Ping fell into silence.
“The system has been activated. You, my host, must add a pet store that belongs to you within 24 hours. If the addition fails, the system will be removed and the memory of the day will be erased...” The system added.
“The system would be removed?”
Su Ping raised his eyebrows after hearing that reply. While a system wasnt all that uncommon, it was a system nonetheless.
“Theres a pet store right in front of me. Can I add this one?” Su Ping asked telepathically.
“Authorized. Please confirm.”
Su Ping confirmed right away.
After all, this pet store was owned by his family. He could do whatever he wanted with it.
“Addition was successful. Adjusting the pet store...”
“[Pet Trough] established, [Nursing Pen] established, [Window to Cultivation Plane] established...”
“Set-up is finished. Initiating beginners quest...”
“Two pets are detected in the store. Please select any one pet and enhance its strength by three-fold within a week to reach the standard deemed as qualified by this system.”
As the system finished its reports, promptly, Su Ping felt the Astral Pet store appeared to be different than before. The previous pungent smell of urine and animal feces was gone. At the same time, the store appeared to be tidier and cleaner. The items were the same as before but the outlook was completely new.
“Enhance the strength of an Astral Pet by three-fold? Within a week?” Su Ping wondered if he had heard the system wrong. Or, maybe, the system was acting up.
How hard was it to enhance the strength of an Astral Pet?
Without hunting and training day in and day out, or consuming popular brands of precious food, it was impossible!
It was incredibly hard to achieve progress by one fold, let alone three-fold in one try or the one weeks time limit...
“What will happen if I fail in this quest?” Su Ping asked.
“The host must accept punishment for failure. The method of punishment will be drawn at random, including thunder punishment, purgatory punishment, extreme pain punishment...” the system answered.
Su Ping rolled his eyes. He could tell none of those forms of punishment were to be trifled with just by hearing the names.
“Cant I change to another quest?” Su Ping was making his final struggle.
“No.” He was turned down ruthlessly. “Warning. Second profanity alert!”
“...”
“Third profanity alert! Thunder punishment randomly chosen!”
Hardly had the systems voice faded away when Su Ping felt a huge electric current running through his whole body. He was twitching like a zombie dancing Disco.
The electric current disappeared as quickly as it came. Su Ping felt a burning pain all over his body. He wanted to hurl out verbal insults but he pushed the urge down. A wise man should know when to retreat.
“Never mind. I will try out the quest first. If I fail, then I have to say the system is a piece of garbage!” Su Ping bit his teeth in hatred.
He dragged his aching body to the pet room inside the store.
As soon as he was inside, Su Ping noticed the place was more spacious. The main footprint was the same but the score of piled-up iron cages was gone. Taking their place were two rows of stone cages.
It was more like a strange stone array than stone cages.
Several stalagmites rose straight from the ground and surrounded the two Astral Pets. The gap between the stalagmites was big and there was no ceiling above them. The Astral Pets were virtually able to hop right out or squeeze through the gaps.
However, the two Astral Pets were lying on the ground without the slightest intention of “bailing out.”
Su Ping raised his eyebrows. This had to be something the system had conjured up. The [Pet Trough] the system mentioned must be this.
He threw a look at the two pets in the stone array. Both were Battle Pets of the average type.
One of the pets was a Lightning Rat, an inferior grade Battle Pet of the agile type. Even in adulthood, a Lightning Rat would only reach the intermediate position of the first rank. The probability of Lightning Rats evolving was quite low. Even when they did evolve into Thunderstorm Rats, they could only reach the third rank, which was as high as they could go.
The other one was Managarm, also an inferior grade Battle Pet of the agile type. When grown-up, Managarms would be at the high position of the first rank, about as powerful as a Siberian tiger on earth.
Su Ping faintly remembered that those two Astral Pets were left in the stores pet boarding service and were going to be picked up after a couple of days.
“Im going with the Lightning Rat.”
Su Ping considered his options and chose the weaker Lightning Rat. This way, the room for improvement would be larger.
He heard the systems voice again, “Pet selected. Please choose a Cultivation Plane.”
As soon as the system finished the sentence, a surreal ray of white light suddenly appeared in front of Su Ping and it tore apart space, forming a vertical crack that was in the shape of an eye. There was a destructive aura on the other side of the opening, able to twist anything it came into contact with.
Su Ping was taken aback. Upon confirming that this thing wouldnt pose any danger to him, he asked the system. “What is a Cultivation Plane?”
“Cultivation Planes are the main sites for the breeding and cultivation of pets. The host can choose a site suitable to the selected pet to cultivate it.”
“Cultivation sites?”
Su Ping dug through his memory for information on this regard. The cultivation of Astral Pets relied heavily on the sites. Therefore, many Astral Pet breeding stores would rent large areas to build up cultivation sites, also known as professional hunting grounds.
The larger pet stores would have such facilities as well, but with more thorough services.
For small pet stores like the one Su Ping was operating, they only had to feed their customers pets and keep the place clean.
“Detecting pet. Lightning Rat. A pet of the thunder family. Match found for most suitable cultivation plane. Ancient Thunder Cloud Realm. Entering, yes or no?”
Su Ping felt baffled. “Yes... I guess.”
Just as he finished speaking, he suddenly felt this cultivation planes name somewhat familiar.
Ads by Pubfuture
Pubfuture Ads
Astral Pets came from different backgrounds but most of them were from cracks in space, or maybe some were celestial bodies occupied by beasts and animals, while other Astral Pets were from ancient planets.
The Thunder Cloud Realm seemed to be an ancient birth site of Astral Pets in the thunder family that was broken and long gone.
It was said that there had been many top-level Astral Pets in the thunder family, such as the Thunder Dragon of Blue Sea, the Nine-headed Grand Thunder, and the Zephyr Beast, all of them were from the Thunder Cloud Realm. With the collapse and disappearance of the Thunder Cloud Realm, those top-level Astral Pets had become legends that could be rarely seen.
Could it be that the place he was going to was an ancient site that was long lost?
Before Su Ping had returned to his senses, he felt a strong force sucking him toward the crack with the surreal white light.
The sky and earth were spinning around.
Then, it turned pitch dark.
When he regained his sight, he saw a blurry white mist and heard the rolling sounds of dull thunders.
Su Ping was there in a daze for a moment before he felt shocked by the visuals in front of him!
Was this a lost ancient site?
He found himself in a vast area surrounded by giant trees. Clouds and fog were in the sky tens of meters away from the top of the trees. Lightning flashed amid the cloud and mist. Purple lights flickered as if dragons were there riding the clouds.
The boundless starry sky could be seen through the thinner areas in the sea of clouds and mist. Giant planets, near and far, were visible to the naked eye, so close that the rings of planetary meteorites on their surfaces were clear and distinct.

View File

@ -0,0 +1,221 @@
---
title: "Chapter 3 : Infinite Times of Death"
slug: "ch-3"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“The host has established connection to the Thunder Cloud Realm.”
“Connection valid for three days...”
“During the beginners quest, beginners protection will be granted to the host: unlimited number of deaths during the exploration!”
“Temporary contract between the host and the pet has been established...”
“Please head out on your own...”
Su Ping was still stunned in this vast and ancient land unveiling in front of him when he was dragged back to reality by the row of prompt messages in his mind.
He came to a halt. Immediately, he noticed a line that indicated danger. Number of deaths?
A bad hunch rose in his mind.
All of a sudden, a huge shadow skimmed over his head. The day seemed to have become darker.
Su Ping raised his head, and his pupils were instantly dilated by the sight.
A pair of huge wings that could blot out the sky and cover the sun were stirring up the vast sea of clouds that seemed to stretch out to infinity. Lightning flashed and thunder roared among the dark purple wings; the countless clouds that were closest to them began to tumble over.
“What...”
“What the hell is this?!!”
Su Ping was dumbstruck.
Even a massive blue whale would be smaller than a feather of this giant beast!
While he was still in shock, a strong gale swept through in a matter of seconds, swooping down from a high altitude and slashing at him like thousands of wind blades.
“Run...”
Just as this idea came to Su Pings mind, he felt excruciating pain all over his body. His sight dimmed and darkness struck all of a sudden.
“Am I dead?” Su Ping thought, with heavy-laden eyes. But light soon emerged as a flood. He opened his eyes; in front of him was still the vast and ancient scene and yet, the environment seemed to have changed. He was no longer surrounded by giant trees, but flourishing and tall blades of grass.
He remembered the prompt message from the system. Su Ping came back to his senses. Was this the so-called unlimited number of deaths?
He could die as many times as he wanted in that place?
This idea brought him some relief. That being said, he felt the urge to let loose a torrent of abuse in the next second.
While he wouldnt die for real, he wouldnt want to experience that pain when he thought he was going to be torn into pieces. It was too painful!
“System, I want to go home,” Su Ping began to beg in an anguished tone.
“The quest has not been accomplished. An early return is not allowed.”
“...”
“Warning! First profanity alert!”
“...!!”
Su Ping turned pale. He had to stay in this deserted world where giant beasts were running wild for three days? How many deaths would he have to endure?
He was on the verge of a mental breakdown. What kind of system was this?
“Rustle, rustle~!”
Abruptly, he heard a subtle sound.
The sound made Su Pings hair stand on end. He looked over in terror, only to realize that the sound came from the Lightning Rat by his feet. This little guy had followed him to that place and was shivering in fright at the moment.
The little guy had also seen the giant beast that could cover up the entire sky and was surely scared to death.
“You poor little thing. Youll have to die many deaths for three days along with me...”
Su Ping sighed in despair. Misery loves company.
Maybe he felt close to the Lightning Rat because of the temporary contract. He felt sorry for the Lighting Rat after looking at the shivering animal. Su Ping crouched down to pat the rat to calm it down.
As he was patting the Lightning Rat...
It struck Su Ping that the goal of sending him there was to train this little guy.
To train the little guy so that its strength could be improved by three times within one week.
It was hard, for sure. But the focus in this quest should be the Lightning Rat!
This horrifying cultivation site was prepared for the Lightning Rat!
“The quest can be finished sooner if the Lightning Rat reaches the desired cultivation level. I can see that this is hard, but Ill never know if I dont push the limits, can I?”
After this thought, Su Ping turned his sight to the Lightning Rat that had gradually calmed down in his hand.
The jittery Lightning Rat slowly quieted down after being stroked by the warm hand, as if it represented a safe harbor. However, right then, the Lightning Rat was sensing a strong surge of uneasiness in its heart.
Following this hunch, the Lightning Rat looked over with its little rat eyes, only to see its temporary master glaring at itself with a pair of eyes that were shimmering with terror!
The Lightning Rat: “?”
“Come on. You can do this.” Su Ping grinned.
The Lightning Rat felt chills.
The Lightning Rat surely realized something because it began to struggle and wiggle in Su Pings hand with great effort.
While the Lightning Rat was an Astral Pet of the agile type, its strength was still greater than Su Pings. In an instant, the Lightning Rat struggled itself free.
“Come back here!” Su Ping cried out at once.
But he shrank back as soon as the words were out of his mouth.
This was the Thunder Cloud Realm where ferocious beasts were everywhere. To scream and yell like this was practically a request for death.
Then, he remembered he had already built a temporary contract with the Lightning Rat. He concentrated and immediately noticed another faint presence of consciousness running alongside his own.
The first consciousness was conveying vague traces of emotions and ideas.
Fear, anxiety, shock, escape!
Those were from the Lightning Rat.
“Is this the power that comes with a contract with an Astral Pet? No wonder I hear people say that an Astral Pet and its master can share the same mind. It can hardly be understood without personal experience....”
Su Pings eyes flickered. The power that came with the contract was something he had long wished for years back, which came with the very standard that distinguished the common public and the Astral Pet Warriors.
“Squeak—”
All of a sudden, he heard shrill cries made by the Lighting Rat coming from the bushes in the distance.
Scared, Su Ping ran over at once.
He saw that the Lighting Rat was confronting a large insect near the root of a giant grass of about seven to eight meters in height. Its fur was bristled and it was showing its teeth.
The large insect was about two meters long in a green color mixed with purple patterns. Some light produced by electricity would spring out from the purple patterns.
This was also an Astral Pet from the thunder family!
“Why does it look like a caterpillar?” The appearance of the large insect reminded Su Ping of such an insect. Only the former was hundreds of times more ferocious than a caterpillar.
“Sh*t, were not going to be swallowed by this insect, are we?” Su Pings blood was frozen as he saw all the sharp teeth covering the insects mouth. Death came instantly when he was torn apart by the fierce wind caused by the gargantuan beast that could cover up the sky. If he were to fall victim to this giant insect, he would have a taste of living was no better than dying!
He even wanted to commit suicide at once.
However, if he did, he would be reborn in another random location later.
There was one more thing.
There was nothing around him that could be used as a weapon.
Su Ping looked around and only found a rock on the ground. He was filled with mixed emotions.
Bashing himself to death?
How much strength would he have to use to kill himself with one blow?
If he couldnt do it, what could he do if he remained in a half-dead state?
This question was lingering in Su Pings mind like a sophisticated philosophy conundrum.
“Squeak!”
While Su Ping was still fantasizing about the most conveniently lethal angle to smash himself with the rock, he suddenly heard a shrill scream.
He looked up.
The Lighting Rat was about to lose its life. It had been grabbed by the giant insect. The giant insect had many feet, like a centipede. The sharp edges pierced through the Lightning Rats soft belly. Blood was spilling out. The Lightning Rat passed away after only a bit of struggle.
Su Ping looked pale. He couldnt bear to look at the scene and there were unexplainable feelings of anger.
The system suddenly gave an alert. “Revive pet on the spot. Yes or no?”
Su Ping was surprised.
Seeing that the giant insect was about to stuff the Lightning Rats body into its mouth, Su Ping shouted without further thinking, “Yes!”
Before the sound of his voice had died away, the Lightning Rat that was about to be put into the insects maw suddenly turned into sparkles that fell back to the ground in front of the insect and took the shape of the Lightning Rat again.
Crack!
The insect missed its bite.
The insect was stunned, since its prey had suddenly come back to life.
The insect: “???”
Su Ping didnt offer any explanation to the insect. Since the Lightning Rat had come back to life, Su Ping yelled out at once, “Attack the insect!”
Ads by Pubfuture
Pubfuture Ads
Thanks to the emotional strength passed along through the contract, Su Pings directions were delivered to the Lightning Rat immediately.
The Lighting Rat was frozen on the spot because, in its mind, it was still seized by the terror of death. Su Pings shout woke the Lightning Rat up. The obedience instinct that came from being domesticated emerged; the Lightning Rat rushed forward almost subconsciously.
With the speed of lighting!
Whoosh!
The Lightning Rat sped up all of a sudden and smashed itself against the giant insect.
Bang!
Due to the impact, the giant bug leaned backward. Halfway through, the insect stopped the motion. The sharp edges of its many feet moved fast. The insect grabbed the Lightning Rat and tore it apart in a most appalling way.
The Lightning Rat had died, again!
“Revive pet on the spot. Yes or no?”
“Do it!”
Su Ping didnt give it much thought. He issued another order to strike right when the Lightning Rat came back to life.
Since the number of revivals was unlimited, Su Ping was convinced that they would kill this giant insect eventually. While the gap in abilities between the insect and the Lightning Rat was vast, there was still a possibility of winning for the latter. He had to be able to grasp the tiniest chance of victory!

View File

@ -0,0 +1,190 @@
---
title: "Chapter 4 : Special Skill"
slug: "ch-4"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The Lightning Rat was still in shock after being brought back to life. However, it soon regained consciousness that time. After a second of hesitation, the Lightning Rat dashed toward the huge insect as commanded.
The huge insect was infuriated, since its prey had escaped twice from its mouth. When the Lightning Rat was about to arrive, the huge insect spat out a sort of white secretion that spread out like a spiders web, completely trapping the Lightning Rat.
Once its prey had been captured, the huge insect wiggled over and tore the Lightning Rat apart with the sharp claws.
“Revive!”
“Attack, again!”
Su Ping brought the Lightning Rat back to life immediately and told it to strike at once.
In just a blink, the Lightning Rat had been brought back to life again and again and killed by the huge insect over and over. At the eighth time it rushed on to face the web spat out by the giant insect, the Lightning Rat flashed over and disappeared on the spot in an instant, only to re-emerge somewhere further apart.
“Thunder Flash!”
Su Ping shivered from fear. Was the ghost laughing?!
Was that one of the 10 special skills for Astral Pets of the thunder family, “Thunder Flash”?
Su Ping wondered if he was hallucinating.
How could a Lighting Rat at the first rank comprehend a special skill of the thunder family that was so rare it was unimaginably precious?
Su Ping was surprised and confused.
Not even all of the advanced Astral Pets of the thunder family, such as those of the seventh or eighth rank, could master a top-level special skill of such rarity!
Besides, this Lightning Rat was just average, even poor, so to speak. The Lightning Rat might not even be able to learn the middle-rank pet skills of the thunder family, not to mention comprehend the special skills!
Su Ping kept his attention on the fight to observe.
After the sudden rush, the Lightning Rat came close to a side of the huge insect in the twinkling of an eye. The Lightning Rat had found a perfect soft spot. Lightning was generated around its body as the Lightning Rat smashed into the soft flesh on the side of the huge insect.
The huge insect fell to the ground immediately. There were some burns at its fleshy spot.
However, the insect was not yet entirely incapacitated. Instead, stimulated by the sharp pain, the insect began to twist and turn violently. Soon, it crawled back up and launched a strike at the Lightning Rat at a faster speed.
Having released all the energy, the Lightning Rat was tired so it was moving slowly. It died again after the huge insects strike that trapped it.
“Revive,” Su Ping said quickly.
The Lightning Rat came into being on the ground again. It was no longer confused and puzzled as before, as if it had gotten used to this fresh start after withstanding a short period of pain.
Faced with this traumatized insect, before Su Ping gave any orders, the Lightning Rat had dashed over to continue the unfinished battle.
Attack, injury, death, and revival.
After more than a dozen rounds, the huge insect finally fell, dying with anger and unwillingness because it could no longer defeat the never-dying Lightning Rat.
In the latter rounds, Su Ping never saw the “Thunder Flash” again; it seemed that such an attack was only a flash in the pan.
He felt sorry and a bit disappointed. That being said, he knew that as long as what he saw was real, then the Lightning Rat could do it again in the future, since it had already succeeded once!
Having taken care of the giant insect, Su Ping was able to catch a break. At the very least, he wouldnt have to be eaten up by the giant insect and experience that disgusting way of dying.
“Now I see that this place is dangerous indeed, but the training is productive.”
Su Ping took a look at the Lightning Rat sprawled on top of the giant insect, exhausted. After the little guy was brought back to life, its crafty movements were faster and more agile. The Lightning Rat even employed deceptive movements to sneak up on its opponent.
The battle lasted only about 10 minutes, even though the Lightning Rat was lingering between life and death. It was incredible that the Lightning Rat could achieve such a stunning progress within such a short period.
Perhaps, after three days, the Lightning Rats strength could advance rapidly!
Suddenly, Su Ping was filled with anticipation; finishing the quest was not entirely without hope.
“Come on, little guy.” Su Ping patted the Lightning Rat on its little head. He stood up, ready to search for the next target.
Tired!
A feeling of reluctance came from the Lightning Rat.
Su Ping was surprised.
But recalling the arduous fight the Lightning Rat had put up to kill the giant insect, Su Ping felt he could empathize.
“Take some time to recover your strength first.” Su Ping offered a kind smile.
The Lightning Rat, who was still lying on the back of the giant insect, looked up with low spirits. It was suddenly seized by a strange feeling as it glanced at the smiling face that was moving in closer.
Before the Lightning Rat could think, it felt a dull pain rushing in.
“Revive.”
Looking at the Lightning Rat that came into being again on the ground, Su Ping asked with a grin, “Has your strength recovered yet?”
Su Ping had already noticed that every time after the Lightning Rat was brought back to life, it would return to its prime state without any signs of fatigue associated with excessive energy consumption from previous battles.
Therefore, this was the best way to recover.
The Lightning Rats hair stood on end. This human smile was deeply engraved in its mind at this moment.
“Hiss!”
The Lightning Rat showed its teeth, as if warning Su Ping against such behavior.
Su Ping put down the claw he harvested from that giant insect. The claw was indeed sharp. He was able to impale the Lightning Rat with just a bit of strength. The claw could be regarded as a handy weapon.
“There, there. Lets go.” Su Ping stroked the Lightning Rats head.
The Lightning Rat ground its teeth ferociously. If it werent for the restrictions of the contract, the it would have bitten this master to death.
...
...
Three days later.
A towering mountain in the Thunder Cloud Realm.
Cloud and mist curled around the mountainside with steep hills and cliffs. The splendor and magnificence formed a landscape painting of the deserted land that was tranquil and beautiful.
On an unassuming boulder, a couple of petty lives were engaged in a fierce battle of life and death!
“Hurry. Use Thunder Shadow Image to distract it.”
“Circle around to its back from the side.”
“Use Thunder Slash to strike its side.”
Su Ping was standing by the boulder to communicate and give instructions telepathically.
Two figures in front of him, one big, one small, were fighting an intense fight.
The big one was a cockroach-shaped monster the size of an elephant. The quick and agile being was covered with a stone carapace in the color of lime and claws like sharp stone awls that grew out from its abdomen. This was a type of Astral Pet living in this land of boulders, and an earth family Astral Pet that was rarely seen in the Thunder Cloud Realm. For Astral Pets of the thunder family, those from the earth family were their arch enemies.
The small figure was the size of a regular domestic cat with purplish hair and electric arcs around its body. Its hair had wild curls like sharp needles. This was the Lightning Rat.
Buzzing!
Lightning surged. All of a sudden, the Lightning Rat charged toward the stone cockroach monster.
Out of instinct, the stone cockroach monster chased after the Lightning Rat.
However, right at this moment, a lighter purple flash whooshed by and appeared behind the stone cockroach monster.
Soon, the stone cockroach monster felt something was off. The Lightning Rat that was covered in electric arcs was running forward but that figure was getting fainter and fainter, until it was reduced to a half-transparent shadow formed by lightning.
It was an afterimage!
Abruptly, the stone cockroach monster sensed danger. It turned around quickly, only to see a ray of glaring purple light within its sight.
The Lightning Rat jumped up high from the ground. Lightning was gathering in increasing density around it, gradually forming a sharp blade that had concentrated strength.
Pff!
The blade of lightning fell. The soft spot between the gaps of the side carapace of the stone cockroach monster could not withstand this cut. The stone cockroach monster was cut into two!
Green blood spilled out onto the boulder.
“Perfect!” Su Ping snapped his fingers.
Ads by Pubfuture
Pubfuture Ads
The Lightning Rat was able to kill this Astral Pet of the earth family that was a grade higher with only one life. The Lightning Rat was forging ahead by leaps and bounds, several times stronger than three days before.
It was a fact.
Just then, in his mind, he had received the prompt message from the system. The quest had been completed.
“I didnt know that we could do this within three short days...”
Su Ping exclaimed to himself. This was hardly imaginable.
That being said, to achieve such an improvement, both the Lightning Rat and Su Ping had devoted considerable effort. They had experienced different ways of dying for over a hundred times and the Lightning Rat had even experienced over a thousand deaths.
“Quest accomplished. Cultivation Plane closing...”
“Disconnecting host from the Thunder Cloud Realm...”
“Removing host and pets temporary contract...”
“Prepare for return...”
In the next second, darkness fell into his eyes.
When the light came back to his world, the familiar scenes of the pet store emerged before Su Ping, as if a lifetime had passed.

View File

@ -0,0 +1,173 @@
---
title: "Chapter 5 : Claiming the Pet"
slug: "ch-5"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“Beginners mission completed. Host interface unlocked...”
“Pet store is officially open for business.”
“Establish [Currency Conversion] module. Establish [Chaos Spirit Pool for Incubation] module...”
“Beginner mission rewards issued. Collect now?”
Su Ping came back to his senses after the familiar sounds of the systems prompt tones. His eyes sparkled upon hearing the mention of rewards. “Collect!” he said without demur.
“The host has gained elementary Pet Identification Spell.”
“Pet Identification Spell?”
Su Ping waited for a few more seconds but heard no more prompt messages. He glared at the air in despair.
“Is that it?”
He exhausted himself in the three days of hellish torture and all he gained was a Pet Identification Spell book? And it was elementary?
With the Federal Illustrated Book for All Pets, Su Ping deemed this reward of little value or interest; such a skill could not be more worthless.
“The Pet Identification Spell issued by this system can help you gain insight into millions upon millions of types of Astral Pets. Your Illustrated Book for Pets cannot compare with this,” the system gave a reply in a cold voice, clearly unsatisfied with Su Pings complaint and resentment.
Su Ping stood in amazement.
To gain insight into millions upon millions of types of Astral Pets?
In his memory, even the most authoritative and comprehensive Illustrated Book for Pets issued by the Federation only recorded information of a few millions of types of Astral Pets, including many Astral Pets that had gone extinct.
Was it true that the goods generated by a system had to be the best of the best?
Su Pings feeling of resentment disappeared in no time. While this reward was not the immediate strength enhancement he expected, it was a precious skill nonetheless.
Additionally, in the future, if he could go to another ancient site like the Thunder Cloud Realm, he would be able to identify those ancient Astral Pets with this skill. After all, most of those Astral Pets had disappeared from peoples lives and there werent many records of them in the Federal Illustrated Book.
Su Ping was choked up with emotions after having obtained a new skill and he was eager to test it. He looked around and suddenly remembered the Lightning Rat.
“Where is that little guy?”
Su Ping hurried to the pet room at the back. He saw that the Lightning Rat had fallen into a deep sleep in one of the ancient stalagmite arrays.
The three days of hellish training had worn the Lightning Rat out. It fell into a sound sleep as soon as it returned to this familiar place.
Compared with three days prior, not much had changed in the Lightning Rats appearance. There were just a couple of more strains of dark purple hair mixed with the light purple strands and its body was leaner than before.
However, the faintly discernible gloomy and violent aura of a beast that was spreading out from the Lightning Rat was making the Managarm in the other stalagmite array shiver in fear; it was obviously unsettled.
Su Ping put his mind at ease after finding the Lightning Rat safe and sound. Although the contract had been ended and they could no longer exchange and communicate like before, he had become attached to this little guy after three days together.
It was a pity that it was someone elses Astral Pet. He would have to return it someday.
While Su Han was sighing, a prompt message suddenly popped out in his mind.
“Employ Pet Identification Spell. Yes or no?”
“Identify this little guy?”
Su Ping took a pause and selected yes.
Lighting Rat
Property: Astral Pet of the thunder family
Rank: Upper position of first grade
Combat Strength: 3.6
Aptitudes: Below average
Abilities Mastered: Lightning Speed, Thunder Flash, Thunder Shadow Image, Thunder Slash, Thunder Outerwear
Su Ping was surprised.
Thunder Flash?
He saw “Thunder Flash” in the abilities mastered!
Had the Lightning Rat learned this top-level special skill of the thunder family?
Su Ping was stunned. He didnt see the Lightning Rat employing the “Thunder Flash” for a second time in the battles later on. He had thought he was only having blurred visions. He didnt know that the Lighting Rat had indeed picked up this skill!
How astonishing it was that a Lightning Rat of the lowest rank that could be spotted everywhere in the Federation had mastered the “Thunder Flash” that not even an Astral Pet of the thunder family of the seventh or eighth grade could master easily! If he told people about this, they would think he had lost his mind!
“This little guy... is many times more valuable!”
Su Ping calmed himself down, although his eyes were still glowing.
A Lighting Rat that had mastered the “Thunder Flash” special skill would be even hundreds of times more valuable than its peers!
Not to mention the Lighting Rat had learned other skills.
Apart from the Lightning Speed that was common among all Lightning Rats, both the “Thunder Slash” and “Thunder Shadow Image” were a must for advanced Astral Pets.
It wouldnt be an exaggeration to call a Lightning Rat a mythical creature when it was equipped with so many powerful skills.
But there was something strange. In the column of aptitude, the Lightning Rat was rated “below average.” Why?
Sensing the questions in Su Pings mind, the system explained calmly, “The evaluation of its aptitude is based on the comparison of the data from all Lightning Rats born since the beginning of the endless chaos era to the present day. Host, you can trust the result.”
“All Lightning Rats...”
Su Ping became speechless because of astonishment.
Even the number of Lightning Rats born in the Federation every year would be beyond calculation, not to mention if they were to start counting since the chaos era in the distant past.
If so...
This Lightning Rat could already be considered formidable with a below-average aptitude!
...
...
Su Yanjing looked up. She could already see the signage of that little pet store down the street—Pixie Pet Store.
In sharp contrast to the gaily shining sun, Su Yanjings mood was cloudy and terrible.
She didnt expect that she would fall on evil days. She had been forced to a tight corner at the preliminary contest of the Pet Tournament.
This was an annual grand event of the academy. The students would display their strengths in this event. If someone could be favored by some Astral Pet masters during the tournament, they would be able to enjoy better tutoring and training. This could add brilliance in their resumes when the time came to join the Astral Pet Team!
However, for three rounds in a row, all she met were strong opponents that were highly popular. The result was that several Battle Pets she took such meticulous care of had all been wounded and could no longer fight.
Would she be stumped at the preliminary contest?
That was unacceptable to her!
She had already asked her family to spend a fortune to invite an advanced pet healer to cure one of the battle pets.
That being said, one battle pet was not enough. That was her ace in the hole.
She had to have a battle pet that could be the power forward and that could lure out her opponents ace pet.
Ads by Pubfuture
Pubfuture Ads
If it werent for the fact that the academy prohibited any pets that were contracted within a month to enter the tournament, she would have bought some pets at the last minute, even though that would inflict a great burden on her mind and even cause severe problems.
Anyways, she had no other battle pets available, except for the Lightning Rat she had left at the stores pet boarding service.
A very common low-rank Lightning Rat.
Nothing special about it.
She even wanted to give it up because this Lightning Rat could no longer satisfy her requirements. Faced with the recent opponents, the Lightning Rat would be heading to its doom.
Fortunately, she was softhearted and did not remove the contract directly. So, currently, this Lightning Rat was the only other battle pet that could enter the field.
The Lightning Rat was weaker but she supposed it could be used to feel her opponents out.
“Anyone here?”
Su Yanying pushed the door open and entered the pet store. She threw a casual glance over the store. It was empty, as if the owner had moved.
“Is the store going out of business?” Su Yanying though. Fortunately, she had come in time.
“Yes?”
Su Ping heard the voice and left the pet room at once. He saw a pretty girl standing in the store, looking around.

View File

@ -0,0 +1,164 @@
---
title: "Chapter 6 :Awakening"
slug: "ch-6"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“Hi.”
Su Ping stepped over. She was a customer, so he had to treat her nicely and politely.
“Hi, Im here to pick up my Astral Pet.” The store owner had come. Su Yanying turned her looks away from the empty store and said to Su Ping, “The Lightning Rat that I put here half a month ago. Is it doing okay?”
“The master of the Lightning Rat?” Su Ping was surprised.
The memories related to this matter were dug out.
Su Ping remembered at once. There was a strange look on his face. He couldnt help but throw more glances at this girl.
Was she the luckiest girl...
Su Ping felt uncomfortable since the Lightning Rat had to be returned to its original master. Part of the reason was that he had become attached to the Lightning Rat and the other part was because he felt unwilling...
After all, this was a super Lightning Rat that had mastered one of the 10 special skills!
How could he just give it up like this?
Well... he knew this little guy was someone elses in the first place.
Su Ping felt dispirited by this and could only heave a few sighs. “It is totally fine, better than fine. Come with me and settle the bills first,” he said, lifelessly.
Su Yanying was at a loss. Why did this caretaker sound strange? Was he upset?
She seemed to have an idea. “Dont worry. I came ahead of time but I will pay you the foster fee as we discussed. I will pay you in full.”
“Hmm...”
“??”
Su Ping was not in the mood to talk to her. He took out the bill for the deposit. When he saw the digits, he felt another surge of heartache.
He took a deep breath and tore the bill down slowly.
He acted as if a piece of flesh had been cut off from him and his voice was laden with a deep feeling of grief. “Minus the deposit you paid, you have to give another 108...” His voice was shaking and he was almost choking!
108...
Only 108!!
An Astral Pet that had learned one of the 10 special skills was going to be given away at an appallingly low price!
“Well...”
Su Yanying found that something was off about the owner but she could not put it in words. She settled the bill quickly. “Here you go. Can you show me to my Astral Pet?” She was dying to see the Lightning Rat, and to check if it was safe and sound.
After all, some pet stores would make mistakes when they were feeding the pets which could lead to sickness. While those events were rare, she could not see such unfortunate incidents happening to her at this critical juncture.
Su Ping heard the prompt tone of the money entering his account. His mouth twitched. Eventually, he stood up and turned around. “Wait here,” he said.
He left the counter and stepped into the pet room slowly.
As he looked at the Lightning Rat that was napping in the stalagmite array, recalling the battles they fought side by side for the past three days, he felt reluctant to be parted with it.
“Come on. Time for you to go home.” Su Ping sighed and picked up the Lightning Rat gently.
The Lightning Rat was startled and woke up. When it saw it was Su Ping, the Lightning Rat relaxed gradually and closed its eyes, falling back to sleep.
During the three days of desperate and cruel training, only when the Lightning Rat was with Su Ping could it feel secure enough to sleep.
This was a force of habit and trust!
Su Ping produced a forced smile. He took some deep breaths to calm himself down and then he stepped out of the pet room.
“My Lightning Rat.”
Su Yanyings eyes glowed as she saw Su Ping coming out with the Lightning Rat in his arms.
She knew this was her Lightning Rat the moment she saw it. While the Lightning Rats appearance seemed to be slightly different from before, the bond shared by flesh and blood that came from the contract could not be wrong.
However, she found something strange. When she first came into the pet store, she did not feel the presence of the Lightning Rat from their contract, as if something had blocked it.
She had no time to ponder about it. She hurried forward and took over the Lightning Rat from Su Pings hands.
The Lightning Rat was startled again. The Lightning Rats drowsy eyes glowed once it saw that it was Su Yanying. It threw itself into her arms happily and squeaked coquettishly nonstop.
Su Ping stood by their side. The happy sounds made by the Lightning Rat gave him the strange urge to strangle it to death.
“This punk... it only knows how to squeak coquettishly when its real master is here.”
The Lightning Rat never did this with him.
But Su Ping was well aware that the emotional bond sustained by the contract would exert a great influence on the Astral Pets. That was why the majority of the Astral Pets would never betray their masters; they would even sacrifice their lives for them!
“Come on. Lets go home.”
Inside, Su Yanying was glad that the Lightning Rat was still intact and was just a bit skinnier.
She had heard about how some unethical pet stores would cheat on pet food to make more money. She didnt want to look further into this.
Just as long as the Lightning Rat was healthy. Otherwise, to cure its illness would take a long time.
Su Yanying patted its head once she placed the Lightning Rat on the ground. She didnt even bother to look at Su Ping who was standing by her side. Inside, she had given a negative rate about this store. She would never come back again!
The Lightning Rat began to bounce around Su Yanying happily once on the ground. It was over the moon, since it had not seen its master in ages.
Su Yanying pushed the door open and left. Soon, the girl and the pet vanished from Su Pings sight.
Su Ping looked away as the Lightning Rat bounced about and disappeared. He heaved a sigh.
Right then, the system suddenly sent a message—
“Detecting money entering the account. [Shop] opened...”
“Beep. Money has been converted into energy points.”
Su Ping was stunned. Before he could check, he heard another message.
“Quest: [Chaos Spirit Pool for Incubation] is ready. The host must breed a pet that belongs to himself within a week.”
“Reward for quest accomplished: a random skill book for battle pet warriors.”
“Punishment for quest failed: downgrade the hosts rate. When the rate is below the passing line, the host will be erased!”
A skill book for battle pet warriors?
Su Ping was confused. He wasnt a battle pet warrior at all, and the force of the original core did not exist in his cells.
“The host can purchase Awakening Potion in the shop to be qualified as a battle pet warrior,” the system alerted him.
Su Ping was amazed. Then, he gasped. Awakening Potion?
He was destined to be a common man from birth. Was it possible for him to change his life? Could he become a battle pet warrior?
Ads by Pubfuture
Pubfuture Ads
Something had to be spelled out.
Innate skills were determined at birth!
Only a tiny minority could be the exception, those who could awaken their abilities later in their lives, but there wasnt even one in a million!
Of course, it was said that the state had developed some potions made from special plants found in space, and such potions could greatly increase the common peoples chances of awakening.
Still, such potions were priced at a level that only the rich could afford. Anyone without millions upon millions would not even get a chance!
As for those vastly wealthy people, who would take the risk of becoming a battle pet warrior to struggle in the front lines at the frontier, apart from satisfying their curiosities for a moment?
“Where is the shop?”
Su Ping could not wait to see this “Awakening Potion.” He was eager to acquire it. After all, whether in strength or survival abilities, there was a world of difference between battle pet warriors and the general public!
A simple case in point would be Su Ping and his sister Su Lingyue.
Ever since Su Lingyue joined the Academy for Astral Pets at the age of 12, Su Ping had never, not even once, gained the upper hand in close combat. He had always been defeated easily!
Therefore, over the years, he had learned to use his brain instead of brawn, unless necessary.
...

View File

@ -0,0 +1,182 @@
---
title: "Chapter 7 : Three Services"
slug: "ch-7"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“The shop is in the hosts sea of awareness. Think of it and it will appear,” the system explained.
Su Ping began to think about the shop.
All of a sudden, a dark gray shop interface appeared in his mind, like the cabinet of a storage unit. Only three items could be found in there.
“Awakening Potion—100 energy points.”
“Elementary beast catching ring—100 energy points.”
“Low-rank Astral Pet food—10 energy points.”
Information on all three items came up at the same time.
Su Ping did not hesitate to choose the “Awakening Potion” at once.
“Purchase failed. Insufficient energy,” the system cautioned him.
“Energy?”
Su Ping was surprised. Only then did he notice the purchase requirement that followed the item description.
“The energy points are converted from the money made by the host. The exchange rate is 100:1. The current energy stored is, one point.”
Su Ping was dumbfounded. He suddenly remembered something. He browsed through his transaction history.
-100!
As he expected, his account had 100 points less; they had been transferred to an unknown, unfamiliar account.
“This is to say, with 10,000, I can buy the Awakening Potion, right?” Instead of feeling frustrated, Su Ping was excited.
That was an utterly cheap price. After all, the Awakening Potion was something that could elevate a common person to an Astral Pet warrior in one go!
If he had to buy it in the federal outposts, the price alone would be astronomical, let alone the complicated channels he had to go through. Besides, the effect might be inferior to this one!
“Convert all the remaining currency in my account into energy,” Su Ping said at once.
There were more than 20,000 in the balance of his account. Those had been transferred to him by his family for him to buy some Astral Pet offspring.
“Currency unrelated to store activity cannot be converted,” the system said.
“What?”
Su Ping didnt understand. “Is there a difference between the money made in the store and the one made in other places?”
“No.”
“Warning! Profanity alert!”
“...” Su Ping took a deep breath. He clenched his fist, “If so, why cant you convert money that comes from other channels?”
“The currency conversion module is set up to test the hosts own development ability. This ability will be included in the final evaluation of the host in the system,” the system explained.
“What final evaluation?” Su Ping raised his eyebrows.
“The host doesnt have enough authority to know.”
“...”
Su Ping pushed down a certain urge and gradually loosened his fist.
He had to be humble while he was trapped in an inferior situation.
“Lucky for me, to make 10,000 in the pet store is not a difficult task. I just need some time. If I can train a pet like the Lightning Rat and sell it, I can make more than a million, let alone 10,000!” Su Ping said to himself.
“Given the hosts current limits of authority, you can only rent pets, not sell them.” The system doused him with cold water in a very timely manner.
Su Ping: “??”
He couldnt sell pets in a pet store?
“Warning! Second profanity alert!” The system sounded cold.
A painful memory surged in his mind. Su Ping quickly cut back the ideas that were swarming out endlessly on his mind.
He took a deep breath in, and out.
He had obtained the Zen spirit.
“Even if its just renting, its not difficult to make 10,000 every time I rent a pet as good as the Lightning Rat,” Su Ping thought.
“All the services provided by the store shall be priced reasonably. The host doesnt have the right to adjust the price,” the system came out again.
Su Ping was at a loss.
He had a bad feeling. “What are the prices like?”
“Currently, the store only has three kinds of services available: pet boarding, renting, and selling food.”
“Since the host has not bought a nursing pen, the two existing nursing pens in the store are failed products, complimentary from the system. So, for each pet raised there, the price is 10 per hour.”
“As for pet renting services, the prices will be set according to the rank, ability, and aptitude of the pet to be rented out. Since the host has yet to breed any pets, the prices cannot be estimated at the moment.”
“As for the food, the host will have to go to the cultivation site to harvest food and the price will be set according to the quality of the food.”
Su Ping was dumbfounded.
Only three services were available?
That was to say, no other mechanisms or services related to pets could be made available, right?
Things like the pets apparel, toys, and other services such as hair trimming for pets were the real money-makers for a pet store... the main source of income!
It had to be known that pets could do more than battles. In their daily lives, most of the time, pets would do some shopping with their masters, as well as dine or watch TV together. Most battle pet warriors were willing to take care of their pets thoroughly. After all, the pets were the only ones that could accompany their masters when it came to life and death struggles!
“If I can only make money on pet boarding services, one hour is 10, then one nursing pen can generate 240 a day, two of the nursing pens will be 480 and I can make enough money in about a month...”
Su Ping did some math. The result was acceptable. One month would pass by easily.
That being said, the charge for the nursing pen was higher than the market price and it was an hourly rate.
Who would come out and put their pets in pet care for an hour?
“System, you just mentioned that the nursing pens were failed products and were complimentary. Are there other nursing pens that would charge even more?” Su Ping asked in his mind.
“Of course there are,” the system answered at once, “10 energy points for one elementary nursing pen which has to be sustained by one point of energy per day. The host will have to pay for this.”
“It has to be sustained by my energy?” Su Ping felt he had met a dark-minded merchant. “That is not effective permanently?”
“Of course not,” the system replied, “The elementary nursing pens are made with spirit stones and the pets inside will be nurtured by pure anima that can improve the power of understanding and better the constitution of the pets. In that way, the pets can pick up powerful special skills more easily.”
Su Ping was stunned. Was that so?
One had to know that other than using some special treasures, only advanced trainers could inspire the power of understanding in a pet.
But according to the system, one nursing pen had such an effect. That was practically to say that the pet could be looked after by an advanced trainer at all times...
“What is the price for this kind of elementary nursing pen?” Su Ping asked in a hurry.
“One hundred per hour.” the system replied.
“...” Su Ping fell into silence.
In the market, averagely speaking, pet boarding would be charged at around 100 for 10 days unless the master had special requirements for extra services. Other than that, the price was pretty much the same everywhere.
Considering this, one hundred per hour would make 2400 per day.
That would be 24,000 for 10 days!
The price was 24 times as high as that of other pet stores!
“System,” Su Ping said all of a sudden.
Ads by Pubfuture
Pubfuture Ads
“Yes?”
“Can you make the price... even higher?”
“...”
Eventually, the system turned down Su Pings request in a cold-blooded fashion. He felt rather disappointed.
The price was high, even unimaginably queer. However, as far as Su Ping could tell, such elementary nursing pens could present such benefits that even a price 10 times as higher would be reasonable!
“But, I cannot afford such an elementary nursing pen right now. Am I supposed to drag along by relying on the failed nursing pen?” Su Ping found himself in a predicament.
As for the food sales...
He would have to harvest it from the cultivation site first.
Su Ping couldnt help but feel his mouth twitch at the thought of the many deaths he experienced in three days in that cultivation site.
Life was too hard...
“Wait a minute. Ive gone missing for three days. My family must be worried about me.” This idea suddenly came to his mind and startled him.
“The host doesnt have to worry. The time flow in the cultivation site is different from here. Outside, only three hours have passed.” The system sounded rather calm.

View File

@ -0,0 +1,194 @@
---
title: "Chapter 8 : Chaos Incubation"
slug: "ch-8"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Three hours?
That took Su Ping by surprise. He immediately opened up the computer nearby to check the time. The date shown on the computer was indeed the day he arrived at the store.
“Phew...” He breathed a sigh of relief.
That was good.
If he were gone missing for three days, his mom would lose her mind.
Of course, when it came to that sister of his, she might feel differently...
Su Ping shook his head. He focused his mind on the store. He remembered the pet incubation and breeding quest he had just collected. Promptly, he began to search the store.
Soon, he found a pond like a dried-up well in the lounge at the back of the store.
That probably was the “Chaos Spirit Pool for Incubation” the system had just added in the pet store.
“Am I supposed to do it here? What should I start the incubation with?”
Su Ping was curious. All of a sudden, the image of hens laying eggs came to mind. His expressions changed a bit. His at ease stance gradually changed to attention...
“The host is still within the beginners protection month. Only 10 energy points are needed for one use of the Chaos Spirit Pool for Incubation,” the system added.
Su Ping was relieved.
As long as he could use energy points for this... That being said, using energy was no joking matter, either.
Ten energy points would be equal to 1000!
“Lucky for me, when I finish the mission, I can get a skill book for battle pet warriors, which is to say, I can buy a skill book with 1000. That is worthwhile.”
Usually, a battle pet warrior had to master a skill to be enrolled into the Academy for Astral Pets. Such skills would have to take a long time, hard work and practice to master. That was not something that merely 1000 could buy.
“System, how can I make a quick buck?” Su Ping asked the system in his mind.
A moment later, the system gave a brief answer, “The host can earn energy quickly by selling food.”
“Selling food?” Naturally, Su Ping still remembered this service. In an instant, his hair stood up and he was covered with goosebumps. “I need to harvest food at cultivation sites. This cultivation site would not be some place like the Thunder Cloud Realm, would it?”
He didnt wish to harvest food in some places where he would be threatened by a growing crisis. He had had enough of a brush with death!
He would probably not mind an instant death. What he was most afraid of was to be bitten to death, one bite after another, slowly. That would be the most horrifying way to go!
The system answered, “The Thunder Cloud Realm is not the only cultivation site. It is just one among many, and it is an advanced one.”
“Given the remaining energy the host has left, there is not enough to pay for a round of teleportation to the Thunder Cloud Realm. Host, please select a cultivation site within the allowed price range to go to...”
“Be aware. The more advanced the cultivation site is, the higher the possibility of harvesting precious food!”
“What?”
Su Ping sat up straight suddenly.
“Price? Energy?”
“Warning. Second profanity alert!”
Su Pings facial expressions were twisted!
He had to pay to go to a cultivation site?
Was the system sure that it was a super pet system? Wasnt it a zillionaire system?!
Su Ping felt too ashamed. He didnt want to go moments before. However, a second later, he was told that he couldnt, even if he wanted to!
Besides, according to the system, he had lost a fortune!
During the previous days for the training mission, he did nothing other than focus his mind on the Lightning Rat. He had squandered away a perfect chance to harvest food for three days in an advanced cultivation site of the Thunder Cloud Realm!
If things were different, he would have returned with plenty of food for pets of the thunder family!
“System, I blame you...” Su Ping sounded full of complaints.
The system remained unaffected. “You didnt ask. Additionally, as a qualified host, you should have learned to search for everything related to pets.”
“You!” Su Ping clenched his teeth.
“Third profanity alert. Punishment drawn at random. Extreme pain experience...” the system warned him.
Su Ping opened his eyes wide. “No...!”
“Ah, ah, oh, oh, ah...”
A long moment later and after a fit of fierce shouts.
Su Ping sat by the door of the pet store, listless. His looks indicated he had gone through vicissitudes.
Bang.
A coin was thrown to him.
Su Ping looked up and saw a man smiling warmly at him. He was wearing a business suit and his hair was split in the middle. Then, he could only see the back of the man after he turned around gracefully.
“...”
Su Ping picked up that coin silently.
He gazed at the coin, and gazed at it some more...
“System, can this money be converted into energy?” Su Ping asked all of a sudden.
The system: “...”
“No!”
Su Ping made an “oh” sound in a low voice. He slowly placed the coin in his pocket and stood up. He patted the dust off from his butt. Life was hard but it had to go on, right?
He went back to the store and Su Ping read the words “Window to Cultivation Planes” in his mind.
Soon, a windowed chart showed up in front of him. Many location names were written inside, and following each location was a digit that indicated the energy required.
Su Ping scrolled it down. He saw the word “Thunder Cloud Realm” and the energy was 1000.
One thousand energy points for one visit.
Su Ping curled his lips. Soon, calmness was restored.
He had become composed, Buddha-like.
Su Ping kept scrolling the page down. He came to elementary cultivation planes. The energy required to enter such places varied from one to 10.
“What?” All of a sudden, Su Ping saw a plane that was also named the “Thunder Cloud Realm,” but it only required one energy point!
Did he read it correctly?
Su Ping checked more carefully. The number was correct. So, did the system make a mistake?
“This system doesnt make any errors,” the systems voice came in time, “This is a fragment of the plane called Thunder Cloud Realm. The fragment is a part broken off from the Thunder Cloud Realm, maybe land from the corners of the realm, or ruins where there are no animals or plants. To go to such places would be risky. The host must be prudent.”
“Fragment?” It was until then that Su Ping finally noticed the word “fragment” written in extremely small sizes.
He suddenly remembered what it said in the history books of the Federation. The Thunder Cloud Realm had broken up and vanished. Could it be that this fragment was from that incident?
Then...
The one he entered was a complete Thunder Cloud Realm?
But it had fallen into pieces, why would there be an intact Thunder Cloud Realm?
Su Ping had questions but he didnt obtain answers from the system. All of a sudden, he felt this system was unfathomably strong. He thought hed better not mess up with the system in the future.
Su Ping browsed through the list and closed it. He did not choose to go in.
He was worn out.
Simply exhausted.
He had died over a hundred times in three days when he was at the Thunder Cloud Realm. That meant more than a mere digit. During almost half of the deaths, he was slowly tortured to the end of his life in the most excruciating way.
Although every time after he was brought back to life, his strength would be recovered. That fatigue in spirit was becoming increasingly overwhelming. That is why the Lighting Rat fell so deeply asleep as soon as they came back.
Su Ping closed the roller shutter door. The store dimmed down. Promptly, he lay on the desk and slept soundly.
...
...
Su Yanying had returned to the academy.
The large campus had large lawn areas. The green ratio was quite high. In the middle of a plaza in the distance, there were ponds and waterfalls so that some students pets of the water family could enjoy themselves there.
But, at the moment, the pond was deadly tranquil. There wasnt a single pet there.
In a campus as large as an airport, there were foul souls scurrying about.
It was dead silent everywhere.
Su Yanying did not find this strange. Naturally, she knew where everyone had gone.
There was a huge stadium-like venue at the end of the plaza.
At the moment, the sounds of people cheering were coming out of this place. Even people standing at the gate of the academy could faintly hear that sound.
The afternoon match was still ongoing!
“Hurry up!” Su Yanying said to the Lighting Rat that was following her. Then, she sped up and pressed forward.
She had wasted too much time on her trip to the pet store. Luckily, her match was scheduled for later in the afternoon. It would start at around four.
That being said, if the competitors in the matches before hers were to fail too quickly, her match would be moved up.

View File

@ -0,0 +1,156 @@
---
title: "Chapter 9 : Thunder Slash, Seventh Rank Skill of the Thunder Family! (1)"
slug: "ch-9"
novel: "Astral Pet Store"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Soon, Su Yanjing arrived at the Astral Pet combat stadium.
Su Yanying did not wear the academy uniform but the guard recognized her. He let her in before she presented her student card.
“Pyro Cut!”
“The Pyro Canine has used the Pyro Cut!”
“Such a shame that the Pyro Cut did not hit its target. The Fire Warmonster dodged the strike. Wait a minute. No! The Pyro Cut is turning around. Good heavens, the Pyro Cut is traveling back!!”
Su Yanying heard the judge shouting in excitement as soon as she stepped into the stadium. His voice could be heard throughout the entire venue; it was loud enough to wake the dead.
At the same time, people were thrilled and shouting on the spectator seats on the sides of the entrance corridor.
This was of no surprise to Su Yanjing who kept her calm. Such a view couldnt be more familiar to her.
She looked around and found the seats of her class.
Class Two, Grade Three.
She hurried over. Halfway through, she suddenly remembered that her pet Lightning Rat was still behind her...
That little guy... she had never brought it to such a grand event. Would it be scared by this magnificent scene with tens of thousands of people shouting their lungs out?
Su Yanjing turned around at once, only to find the Lightning Rat was still close behind her. When she stopped, it stopped as well and the Lightning Rat raised its head to look at her. She could see confusion in those small eyes that were only as big as a crack.
It was unaffected... Inside, Su Yanying felt she could breathe again. Pets werent like the average wild animals. Pets had basic thinking and awareness abilities. A pet that was more timid would most likely be immobilized from fright in situations like this.
Time was pressing. She had just picked up the Lightning Rat. She didnt have time to train with it or give it some time to adjust.
Su Yanying was gladly surprised to see that the Lightning Rat was courageous and fearless.
“Ying Ying, where have you been? I couldnt find you anywhere. You frightened me there!”
Lan Lele, Su Yanyings friend, had spotted her as soon as she arrived at her class seats. The former ran over at once.
“I went to pick up my Astral Pet,” Su Yanying said as she followed Lan Lele to the seats of their class. Su Yanying threw a glance at the games and asked, “Which one is it now?”
“The fourth one. Youre almost up, just after Ice Jiang finishes her match.” Lan Lele pouted her lips to point at the back of someone with black hair in front of them. Both that person and Su Yanying were the center of attention in the class. Over time, due to the influence of such an environment, those two students had grown to be quite competitive.
Since Lan Lele was Su Yanyings friend, she naturally didnt have nice feelings about that student.
“Oh.” Su Yanying nodded. She didnt mind this and kept her gaze on the matches.
Then, Lan Lele noticed the Lightning Rat that was eating the fruit peels on the ground near Su Yanyings food. “This is the Lightning Rat that you sent out for pet boarding, right? Is it starving? Why is it eating anything it can find?” Lan Lele sounded surprised.
Hearing her words, Su Yanying turned around. Her expression changed as she saw the Lighting Rat that was holding a piece of fruit peel, eating happily.
“Drop it. Its too dirty,” said Su Yanying while she used the power of the contract to send across her instructions at the same time.
As a person with a morbid fear of getting dirty, she could never tolerate seeing her pets eating garbage on the ground.
In the meantime, this reminded her of that pet store!
“That vicious businessman!”
When the matches were over, she would go to the Association of Astral Pets to file a complaint against that store!
Sensing Su Yanyings orders, the Lightning Rat stopped, blinking its googly eyes.
Lan Lele took a look at the Lightning Rat. Something came to her mind. “Are you going to have it join you in this match?” She looked at Su Yanying, stunned.
“Of course.” Su Yanying remained composed.
Lan Lele opened her beautiful eyes wide. “Have you lost your mind? This is the annual Pet Tournament. The pets that can join in the matches should be at the second rank or higher. Arent you sending the Lightning Rat to its death by taking it with you?”
“The academy has rules that no casualties are allowed in the matches. The judge will call it off in time in case of potential danger,” Su Yanying replied.
“Even so, say the Lightning Rat doesnt lose its life, but what would be the benefit of sending it in? This is just a pet at the intermediate stage of the first rank. Any pet out there can defeat it.” Lan Lele was baffled.
“I know.” Su Yanying was determined and resolute. “But, dont forget about the battle pet warrior special skill I mastered, third-rank strength augmentation!”
“The lower the rank of the pet, the better the effect of my strength augmentation will be. I should be able to boost the strength of the Lightning Rat to the intermediate stage of the second rank. With my skills and instructions, the Lightning Rat can fight other pets!”
Lan Lele, naturally knew about the capabilities of this friend of hers to a tee. “Didnt you say that you asked your family to get you an advanced healer to help you recover the strength of that Fanged Tiger? Why dont you work with it instead?” said Lan Lele, still puzzled.
“Everyone else believes it was injured during the previous battles. It is my ace card now. I cannot expose it so quickly.” Su Yanying lowered her voice.
Lan Lele finally understood. She heaved a sigh. “Speaking of which, you are so unlucky this time. Youve met too many difficult opponents at the beginning of this tournament. Otherwise, you wouldnt be in such a predicament.”
Su Yanying kept silent. She didnt offer a reply.
At the same time, this round of matches had just ended. The one that was using the Pyro Canine won. Both parties went off the stage.
In the meantime, the girl that was called “Ice Jiang” by Lan Lele stood up slowly. She was immediately on the receiving end of the passionate stares from the boys of their class, as well as some glares from some that were gnashing teeth in hatred.
“That girl sure is lucky. All her opponents are rookies!” Lan Lele said, resentfully.
Su Yanying frowned a bit. Still, she kept silent.
A few minutes later, the battle on the stage had finished. The girl that looked as cold as ice stepped off the stage slowly.
Su Yanying felt when that girl threw her a glance.
That glance spoke volumes, as if Ice Jiang was telling Su Yanying to not to let her down...
Hmm!
Su Yanying clenched her fist. She looked even calmer on the outside.
“Time to go,” Su Yanying said this to Lan Lele and the Lightning Rat with her.
The Lightning Rat noticed that its masters mindset seemed to have been altered. The Lighting Rat stood up straight and a keen look flashed in that pair of small eyes.
And yet, nobody would throw a look at the eyes of an inferior Lighting Rat. Not a single person noticed that dangerous aura hidden within.
Along the aisle, Su Yanying walked to the stage in the middle of the venue. She made her way up, step by step.
The Lightning Rat jumped and hopped behind her.
She stood quietly in the spacious stadium, amid the looks thrown at her from all sides.
There was no trace of fear on this girls face. In her eyes, there was pride and composure.
“Su Yanying from Class Two, Grade Three!”
The judge announced her name at once and continued in a thrilled tone, “Now, lets shift our attention to the screen and find out who will be Su Yanyings opponent!”
Ads by Pubfuture
Pubfuture Ads
Everyone shifted their looks to the huge score screen hung above the ground. A string of images flashed past and then stopped in one.
“Sh*t!” Lan Leles expression changed the moment she saw the image. It was Zhang Xiao from Class Seven, Grade Three. That was quite a formidable opponent. Zhang Xiao could be counted as one of the best in the class!
Su Yanying was surprised as well.
How bad her luck was. How come she had to compete against another tough opponent?
Soon, her opponent was also up on the stage.
That was a young man of about one meter and seventy-five in height, with black hair and a fierce glance, wearing a valuable wristwatch. This was a rare mix of a wild and refined young man.
“Su Yanying from Class two?” Zhang Xiao could not help but chuckle as he saw his opponent. “I must be in luck. I heard that all your pets have been injured during the previous battles. Tsk, tsk. Is the little rat there all that youve got now?”
Su Yanyings face was clouded and her heart was weighed down.
COMMENT
By the stage, the judge announced the commencement coldly, “Best two out of three. Each party can only send in three pets to participate. No malicious wounding is allowed. Now, begin!”
Zhang Xiao smiled. He reached out his hand and made a grasping gesture to mobilize the contract power. All of a sudden, the space in front of him began to twist slightly. Right after that, a figure that was burning in black flames landed on the ground.
“Second rank, power of the blast!” A faint white glow emitted from Zhang Xiao spanned around like a vortex on the four limbs of that figure surrounded by black flames. This skill was the most basic augmenting skill that a battle pet warrior should master.

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

View File

@ -0,0 +1,29 @@
---
title: "Astral Pet Store"
slug: "astral-pet-store"
author: "Ancient God"
authorAvatar: "https://i.pravatar.cc/128?u=ancientgod"
authorBio: "Chinese web novelist specializing in cultivation and pet evolution stories"
cover: "https://images.unsplash.com/photo-1519681393784-d120267933ba?w=400&h=600&fit=crop"
description: "In a world where beast masters command powerful astral pets, Su Ping runs a small pet shop inherited from his parents. When he awakens a mysterious system, his ordinary shop transforms into a legendary establishment that can train pets to god-like levels. From a lowly Bronze rank, Su Ping begins his journey to become the greatest pet trainer the world has ever known."
status: "ongoing"
genres:
- "fantasy"
- "action"
- "adventure"
rating: 4.8
views: 12800000
followers: 720000
chapters: 1420
language: "English"
tags:
- "cultivation"
- "system"
- "pets"
- "evolution"
- "chinese"
createdAt: "2019-08-22"
updatedAt: "2024-03-10"
---
A thrilling cultivation story that combines pet training with traditional progression fantasy elements. Astral Pet Store delivers satisfying power progression as the protagonist transforms both his business and his pets from humble beginnings to legendary status. The novel excels at creating compelling pet characters and strategic battle sequences that highlight the bond between beast masters and their companions.

View File

@ -0,0 +1,205 @@
---
title: "Chapter 1 : Old Devil (1)"
slug: "ch-1"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“Baa baa... baa baa... baa baa...”
The cries of a young shepherds sheep echoed across the usually tranquil mountain range.
Li Qiye crawled to the top of a cliff with the cold nights breeze violently blowing against his body. His body was currently drenched in perspiration. At thirteen years of age, a little boy like Li Qiye was using all of his might to climb this mountain range — this scene in the night sky would give a macabre sensation to just about anyone.
Although the night was quiet, Li Qiyes mind was being tormented by a flame of uncertainty.
Coming from a poor family, his parents were both peasants. At the age of seven, he began his life as a shepherd. His family name was Li; his name was Li Qiye because he cried for seven days and seven nights after birth. [1]
Today, he had completed his daily tasks. However, during the approach of dawn, he noticed that he was missing his leading sheep. While filled with worry, he rushed back to the mountain range to search for it. After seemingly scouring the entire mountain range, he still couldnt find even a shadow of this sheep.
Thinking about the missing sheep and its evil owner, Zhang Dahu, Li Qiye feared for the worst in his heart.
Suddenly, Li Qiye thought of one place where the sheep might be. There was only one location that he didnt search — the Immortal Demon Grotto!
As he looked towards the Immortal Demon Grotto before him, he noticed that the mountain range in the dark night resembled a fierce beast from the ancient Desolate Era; its mouth appeared to be gaping, hungering for human flesh. Hearing the howls of wolves resound from all around him, he couldnt help but shiver in fear.
The Immortal Demon Grotto was considered a cursed land in the surrounding area. Legend states that an evil demon presided over this location, a demon who instantly consumed any trespassers. No one had ever made it out of the cave alive.
At this moment, the sound of Zhang Dahus whip reverberated in Li Qiyes ears. If Li Qiye truly lost the sheep, then Zhang Dahu would definitely whip his flesh to tatters.
Having reached this point, Li Qiye gritted his teeth and approached the cave.
His body disappeared in the night.
“Aaaaaaaahhhhh...!”
The calm night was interrupted by a young boys miserable scream.
Li Qiyes frightened voice rang once again: “You, you, what do you want? ... Ahh...!”
Suddenly, the screams came to an end.
An unknown amount of time later at the depths of the Immortal Demon Grotto, the silence was broken by a menacing voice: “Good, good, good! My immortal Dark Crow has finally been completed. Since only a soul was missing, today, I will conveniently borrow your soul for a little bit!”
“Phwoosh... phwoosh... phwoosh!”
A moment later, as each flap loudly resounded, a strange, dark crow flew away from the Immortal Demon Grotto.
“Fly, fly, fly! I will use your soul to find all the Forbidden Burials. Fly across all the lands! As long as the Nine Worlds exist, I will find you again!” From the depths of the Immortal Demon Grotto, the heavy voice came out once again and lingered in the air.𝒻𝑟𝘦𝘦𝘸𝒷𝑛𝘰𝓋𝘭.𝘤𝘰𝘮
From then on, throughout this heaven and earth, a Dark Crow flew across the planes. From heavenly cities to the most dangerous reaches and secret areas, it flew without a free will straight through the Nine Worlds for eras on end.
As time passed, millions of years came and went. A new peerless master would rise as another fell. Slowly, the crow would disappear only to reappear later on. It wanted to escape its master, it wanted to find a purpose to its life.
From the Alchemy God to Immortal Emperor Fei, Immortal Emperor Xue Xi to Immortal Emperor Min Ren, Immortal Emperor Tun Ri to Immortal Emperor Bing Yu... all the way up until the Black Dragon King. [2]
Behind each of these paragons lies the shadow of a crow, one that struggled to find freedom.
As these strongest beings came and went, the crow continued to mysteriously appear throughout the river of time.
The crow was not willing to have his fate controlled. It wanted to oppose the most frightening character in this world.
And now, millions of years has gone by with the passing of many eras...
Li Qiye, who was floating in a river, was suddenly dragged out by a person.
“Aaa!”
As he was being dragged out, Li Qiye suddenly woke up. His first reaction was to jump as he was unfamiliar with his own body. Unable to find his footing, he almost fell down to the ground.
“Ah, my body!” Looking down and seeing how his body had stayed the same, Li Qiye was both ecstatic and scared. Even after the thousands of struggles while fighting against the unending waves and winds, Dark Crow Li Qiye still couldnt contain his emotions after regaining his own body.
Taking a deep breath, he lifted his head and found that an old man was in front of him.
“Hehehe, it is this old man who saved you from your impending doom.” The old man loudly laughed in an inglorious manner, revealing his three remaining yellow teeth. His demeanor made others feel that his smile was very sinister.
Up the stream, Li Qiye could see the dim structure of the Immortal Demon Grotto. His eyes became increasingly cold and his aura exceeded anything that a thirteen year old child could exude.
Li Qiye took a deep breath and then stared at the old man. After a while, he eventually asked: “How should I address you, old man?”
“Cleansing Incense Ancient Sect, Old Devil.” The old man answered with his mouth agape, still revealing his three golden teeth while smiling and spitting everywhere.
“Cleansing Incense Ancient Sect...” Li Qiye whispered under his breath. This name made him recall the sealed memories in his mind. These memories were from a time when he was still imprisoned in the body of the Dark Crow.
Li Qiye regained his composure and asked the old man: “Right now, who has the Heavens Will?”
The old man was still smiling as he replied: “Heavens Will eh? Right now, no one in this era has been able to shoulder the Heavens Will.”
“Where is Immortal Emperor Ta Kong?” After hearing the old mans response, Li Qiyes demeanor darkened. How long had he been asleep for? Over a hundred thousand years? [1]
“Immortal Emperor Ta Kong has been missing for thirty thousand years.”
Li Qiye inquired the old man once more: “What about the Black Dragon King of the Heaven Protector Palace?”
“No one knows. The Black Dragon King went missing at the same time as Immortal Emperor Ta Kong.” Old Devil shook his head.
Hearing this, Li Qiyes expression drastically changed. He looked back at the Immortal Demon Grotto again and finally understood why he had regained his body.
“Let us go.” With a saddened expression, Li Qiye turned around and started to walk away. He didnt care if Old Devil was following him or not. After experiencing pseudo-immortality, he knew exactly what he had to do.
The Heaven Protector Palace was an incredibly powerful lineage in the current times. Back in that era when the Black Dragon King — a peerless master — was still alive, no one could match him across the Nine Worlds. He was respected for three whole generations!
Even though he had been missing for thirty thousand years, the Heaven Protector Palace still stood arrogantly in this domain.
At this moment, a young boy around the age of thirteen and a lowly old man with three golden teeth were standing outside of the Heaven Protector Palace.
Just beyond the perimeter of the palaces outer city, Li Qiye burned ceremonial money while whispering: “Little Black Dragon, you dont have to worry. You have helped me regain my body, my life. One day, I will destroy the evil land to seek revenge for you.”
After the ceremony was over, Li Qiye stared at the Heaven Protector Palace in front of him. The scene was still the same, but the people were no longer there; everything had become foreign. He reminisced about the old days with the Little Black Dragon, the memory of them building this city from the ground up through their efforts was fresh in his mind.
Unfortunately, after thirty thousand years, not many remembered the Dark Crow hiding behind the curtains.
“Heh, let us go back to the Cleansing Incense Ancient Sect.” At this time, the old man glanced at Li Qiye and stated his purpose while revealing his three shiny golden teeth.
“Let us go.” Li Qiye calmly nodded his head. No matter how illustrious or mysterious this old man might be, his origin could not surprise Li Qiye. Li Qiye had experienced countless difficulties and his soul had been trapped inside the Dark Crow for millions of years. Era after era, he walked together shoulder to shoulder alongside Immortal Emperors and became friends with the Alchemy God, so what could actually surprise him?
As they were leaving, an extremely elegant and beautiful girl stepped out of the palace. She resembled an angel from heaven, an otherworldly goddess. The moment she stepped out, she inadvertently noticed the remains of the fire from the ceremony as well as some mysterious symbols beside it.
After seeing these symbols, her expression greatly changed: “Who was having a ceremony here just now?”
An old servant nearby immediately went around to look for information and came back with results: “The city guards say that an old man and a young boy around the age of thirteen were here just now. They were burning ceremonial money.”
The girl issued her command: “Give chase and find them immediately.”
“Your Highness is supposed to go to Gods Mountain right now.” The old servant hesitantly whimpered.
The goddess softly yelled: “Find them!” Her body then disappeared as she flew across space to find the two.
In the end, she was unable to find them. She dejectedly returned to the palace after her search. The symbols beside the fire remained in her head. These symbols hadnt appeared for a long time, so why was it that they appeared in the outskirts after tens of thousands of years? Were they friends or foes?
An old loyal servant reported: “Your Highness, we couldnt find the people who were burning the ceremonial money.”
The goddess commanded with a serious demeanor: “Order everyone to keep in mind that if any news about those two people show up, immediately report back to me.”
The servant was extremely surprised to hear this. With the current power of the Heaven Protector Palace and the reputation of their goddess, it would be rare for her to show such a serious expression.
The servant asked: “Then what about the trip to Gods Mountain...?”
“Cancel it!” The goddess exclaimed: “I have to read the ancient books that the ancestors have left behind. Something strange is happening.”
She then immediately went to the deepest parts of the forbidden grounds in the Heaven Protector Palace.
The Cleansing Incense Ancient Sect resided in the nation of the Heavenly Jewel Kingdom. This sect was an Immortal Emperor lineage with a long history. At the beginning of the Emperors Era, Immortal Emperor Min Ren proudly stood at the peak and established a sect, naming it Cleansing Incense.
Unfortunately, after millions of years, it could not withstand the test of time and its unforgiving nature. The sect was no longer of the Immortal Emperor rank and could no longer rule the land like in the past. No matter how hard it tried, it could neither regain their ancient glory nor prevent their unrelenting and slow demise.
“Elder, I have bad news. A mortal said that he wants us to accept him as the prime disciple.” A disciple hurriedly reported to the first elder of the Cleansing Incense Ancient Sect as this elder was stepping outside.
“Kick him off the mountain!” Without giving the disciple a glance, the first elder continued: “Why would you even report something so ridiculous?”
A mortal wanting to become the prime disciple of their sect? What a joke. A prime disciple was the same as the sect masters protege, the one with the highest chance of becoming the future sect master. Of course, when the sect master wasnt present, the first elder could still personally take care of these matters.
The disciple stuttered: “But, but he was recommended by Old Devil.”
Raising his eyebrows, the first elder unhappily repeated: “Old Devil? Was he bribed by liquor? Is that why he is recommending a mortal?”
Old Devil belonged to the sect, but the sect did not want to recognize this geezer.
Although the name sounded very heroic, this old man had caused the sect to lose all face.
Old Devil had three “good” qualities to him. He was very good at spending money, lying, and fooling around in brothels. This was why they called him Old Devil. [2]
He had not cultivated any methods to the end, but he did have a very shocking background within the sect. Rumor has it that he was the bastard child of the previous sect master. This was why, when the last sect master passed away, he asked for the current sect master to take care of Old Devil.
However, there was another rumor stating that Old Devil was a bastard from the sect master two generations ago. Because the previous sect master owed this person a great favor, he had no choice but to accept this piece of trash and unwillingly took care of Old Devil. Before the previous sect master passed away, he also asked the current sect master to take care of Old Devil.
No matter who his father was, the whole sect and its upper echelons had no love for the old man. They detested the unflattering words regarding Old Devils character and didnt care about the rumors in the world.
From the elders to the lowest ranking disciples, the entire sect did not welcome this old man without any cultivation.
The first elder yelled out in annoyance: “So what if it was Old Devils recommendation? Kick the mortal off the mountain!” His morning and good mood had been ruined by this event.
“But, but he said he has the Cleansing Incense Ancient Order from Old Devil.” The disciple stuttered once again out of fear.
Ads by Pubfuture
“Cleansing Incense Ancient Order?!” After hearing these words, the first elders expression darkened. After quietly contemplating the situation, he quickly ordered: “Gather all of the elders and tell the mortal to wait outside of the grand chamber.”
The Cleansing Incense Ancient Sect had a total of six elders. After hearing the four words “Cleansing Incense Ancient Order”, the other five quickly came to the meeting.
The patriarch of the sect was Immortal Emperor Min Ren, the one who left behind three of these orders. Two had been reclaimed by the sect, but the third one fell into the hands of Old Devil.
Outside of the request from the previous sect master to take care of Old Devil, the second reason why the elders were helpless against him was because he possessed the last order.
The order represented Immortal Emperor Min Ren; the holder could request anything from the Cleansing Incense Ancient Sect.
Sitting in the grand chamber of the Cleansing Incense Ancient Sect while staring at an elusive statue covered in golden smoke, Li Qiye couldnt help but recall many stories from the past.
The statue of Immortal Emperor Min Ren stood strong at the highest point of this location. Although many years had passed, the statue still carried an ancient aura seemingly capable of piercing the nine heavens. Spectators couldnt help but worship this statue; it was as if the emperor was actually in front of them.
Li Qiye didnt know how to describe his feelings as he stared at this statue. The emperor was gone, but Li Qiye was still alive and forever will be. Although he had achieved his goal and regained his body, all of his old acquaintances had slowly disappeared in the river of time.
1. Qi meaning seven, Ye meaning night
2. Fei = fly, Xue Xi = Blood Seal, Min Ren = Bright Benevolence, Tun Ri = Swallow Sun, and Bing Yu = Icy Feather.
1. Ta Kong = Space Trample
2. Originally, we used the name San Guiye instead of Old Devil, but this is now being changed to reflect the recent chapters. San = Three, Gui = Ghoul, Ye = Old man.

View File

@ -0,0 +1,100 @@
---
title: "Chapter 10 : Brutal (2)"
slug: "ch-10"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The news of Li Qiye and Du Yuanguangs fight was intentionally spread by the disciples of the Nine Saint Demon Gate. Word of this quickly traveled throughout the entire sect.
Du Yuanguang possessed considerable influence and was fairly popular within the sect for reaching Provisional Palace in just five years after he was admitted. Here, he was considered a genius; at the current Cleansing Incense Ancient Sect, he would be a genius among geniuses.
Even the seniors who heard about this challenge were surprised: “Challenging Du Yuanguang?”
Some of the disciples who had never heard of Li Qiye were quite intrigued: “He is the latest disciple of Protector Hua. Even though his Golden Wolf Physique has only reached Houtian, it is still a formidable type of physique. What is the current cultivation of the prime disciple of the Cleansing Incense Ancient Sect?”𝒻𝓇𝑒𝘦𝘸𝑒𝒷𝓃ℴ𝑣𝘦𝑙.𝒸ℴ𝘮
A disciple mockingly answered: “Ha, Senior Sheng worries too much! That sect is average at best and without any experts. Their prime disciple is a piece of trash with a Mortal physique, Mortal life wheel, and Mortal fate palace. He had only joined the Cleansing Incense Ancient Sect for two days, so he only had the time to practice martial techniques. Even the most elementary merit laws elude him.”
After hearing this news, the seniors who didnt know Li Qiye before became even more perplexed. A martial artist challenging a cultivator? He must be tired of living!
“This is the same as a calf not being afraid of a tiger, how sad!” [1. Another proverb, meaning that a person is too naive to recognize danger.]
A lot of the seniors lost their interest because they believed the fight would end after a single move.
Du Yuanguang only needed one swing and everything would be finished.
This news also reached the ears of a few sectional leaders and protectors. They shook their heads while contemplating the implications.
One of the protectors spoke in an aloof and cold manner: “Maybe this is a blessing in disguise. Killing a piece of trash isnt something to be proud of, but if the idiotic juniors of the Cleansing Incense Ancient Sect wish to challenge us, then let this be a lesson.”
This comment caused some protectors and sectional leaders to knit their eyebrows. It was still an Immortal Emperor sect, after all. Currently, it still had Emperor level cultivation methods and, more importantly, the inheritance of Immortal Emperor Min Ren. Everyone had been watching that sect like hungry tigers waiting for the right moment to strike.
Realistically, the Nine Saint Demon Gate only had to mobilize their protectors to rob the Emperor merit laws, but the current Demon King had never revealed his thoughts on this topic. This caused the upper echelons to remain silent as well. If the Demon King gave the order, someone would immediately leave and destroy the sect with zero hesitation.
While the upper echelons were still deliberating, Li Qiye was already standing on the battle stage. Quite a crowd gathered for this event. They just wanted to see what kind of torture Du Yuanguang would employ.
When Du Yuanguang stepped onto the battle stage, a disciple loudly yelled: “Senior Du, use one slash to chop off his head!”
Another chimed in: “One sword strike is too merciful for him. He dared to insult Senior Li and our sect, so you have to flay him piece by piece.”
A senior opened his mouth: “Death is the only result for insulting our sect. Junior Du, do not rush things. Slice off his hands and feet, but do not kill him. Wait for the Cleansing Incense Ancient Sect to come and apologize. Let the whole Grand Middle Territory, no, the whole Mortal Emperor World know the consequences of opposing us.”
On the battle stage, Li Qiye stared at Du Yuanguang and teased: “Can the Nine Saint Demon Gates disciples only use words? You lot are indeed experts at using your mouths.”
“Idiotic animal, I only need one sword strike to remove your head from your body.” Du Yuanguang lifted his chin, clearly looking down on his opponent.
Li Qiye casually responded: “If you want to fight, then fight. Stop wasting so much time!” His left hand tightly griped his blade. He lifted it horizontally and pointed the edge towards Du Yuanguang then proclaimed: “Make your move.”
“Die!” Infuriated by Li Qiyes fearless attitude, Du Yuanguang made his move. A sword strike that felt like it could destroy the surrounding space lashed out; it was as fast as lightning. The sharp attack accompanied with the boundless anger of Du Yuanguang pounced for Li Qiyes heart.
Li Qiye did not take a step back. Instead, he moved forward. With each step he took, the blade in his left hand danced like a heavenly serpent and swiftly deflected Du Yuanguangs sword technique.
A crisp noise resounded in the arena, indicating that flesh had been cut. Although Du Yuanguangs sword didnt pierce Li Qiyes heart, it had pierced his left shoulder.
“Insect...” Du Yuanguang smirked. However, just a moment later while his sword was still lodged in Li Qiyes left shoulder, his opponents right hand started to move. In the blink of an eye, even Du Yuanguang did not see the movement of Li Qiyes blades.
“Good...” The blades were too swift; they invoked mysterious truths that nothing could compare to. No one saw the trajectory of the blades. The Nine Saint Demon Gate disciples were loudly cheering when they saw Du Yuanguangs sword connect.
However...
That very second when the sword met Li Qiyes left shoulder, Nan Huairen and Protector Mo arrived. Protector Mo saw the sword connect and yelled out: “Please lower your sword and spare him!”
A moment later, blood began to drip from Du Yuanguangs throat. All of a sudden, blood spurted out as Du Yuanguangs body slowly fell to the ground. Li Qiye had mercilessly thrown both of his blades using the “Invisible Dual Blades” technique.
“Plop... Plop...” Du Yuanguangs body was slashed by the two blades as they magically intersected each other, dividing his body into five pieces before it hit the ground. Blood filled the arena.
Du Yuanguangs eyes flashed hints of bewilderment and regret. He did not understand how he had fallen. How could he have known that Li Qiyes technique was honed by Immortal Emperor Min Ren himself? Although it could not compare to Emperor level merit laws, a martial technique sharpened by an Immortal Emperor could not be underestimated.
What was even more frightening was how Li Qiye had grasped the mysterious truths of this technique. Even since that ancient era, only the emperor and Li Qiye had fully understood the principles behind this technique. At this level, the technique could even slay a Royal Noble.
Du Yuanguang went into the match while underestimating his opponent, so he did not prepare any defenses. There was no way he could dodge the peerless strike. Li Qiye traded his left shoulder to execute this move.
Right now, the whole battle stage was completely silent. The laughter and jeers disappeared. It seemed that time itself froze.
Ads by Pubfuture
Nan Huairens jaws dropped to the floor. He hurried here in order to save Li Qiye. Not even in his wildest dreams would he expect for Li Qiye to only need one slash to dismember his opponent.
Li Qiye was slowly removing the magical sword from his shoulder. The noise of the sword scraping against his bone softly shrieked, but Li Qiye showed no signs of pain. After all, he had experienced much worse in the past. He threw the sword away then stepped outside of the ring. He then took a quick look at the crowd and, with a dejected and regretful expression, murmured: “It seems that my blade technique is still missing something. I had to trade a blow and injured myself...”
Recalling what had just occurred, Nan Huairens jaws were still hugging the floor. It wouldnt be surprising for it to be dislocated after staying agape for so long. One blade to kill a cultivator and he was pretending to be sad? This fella was shameless!
As for the Nine Saint Demon Gate disciples, their souls had yet to return to their bodies. Du Yuanguang was a genius among his peers, but he was instantly mutilated by his opponent!
Protector Mo was the first to regain his composure. He immediately covered Li Qiyes wound to stop the blood flow and gravely said: “Go, now.”
He carried Li Qiye and left the arena with Nan Huairen right behind them.
After settling Li Qiye down, Protector Mo just sat there aimlessly. Right now, he didnt have the time to think about how Li Qiye killed Du Yuanguang. He was devastated since he knew the consequences of killing a disciple from the Nine Saint Demon Gate. This was a huge disaster.
Nan Huairen, on the other hand, was treating Li Qiyes wound with a special silver paste. Next, he applied bandages around the shoulder. The entire time, he wondered about what happened.
“How is it possible for a martial technique to kill a Provisional Palace expert?” He had seen Li Qiye practice the move before. Although it was admirable, he didnt truly care for it since it was only a martial technique.
“That is only because you do not understand the truth.” Comfortably relaxing in his chair, Li Qiye was pleased with Nan Huairens confused expression.

View File

@ -0,0 +1,111 @@
---
title: "Chapter 2 : Old Devil (2)"
slug: "ch-2"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Li Qiye recalled that when the Ancient Ming Era was coming to an end and the Emperors Era began, his soul was still trapped in the body of the Dark Crow. And now, he was in this new era, an era where he temporarily regained his sanity and control of himself from the Immortal Demon Grotto after an eternity of struggle.
When he first met Immortal Emperor Min Ren, Min Ren was still a little boy who was in love with martial arts, someone who had no knowledge of the grand cultivational world.
The time between now and when he led Immortal Emperor Min Ren into the cultivation world was already many, many years. Many generations of experts had appeared and disappeared within the mysterious ocean of time.
Inadvertently looking at the obsidian colored wooden stick next to the altar below the statue, Li Qiye couldnt help but slightly chuckle at the sight of it. He couldnt believe that the stick still existed after so many years.
In the past, he made great use of it and disciplined that group of energetic children, including the Immortal Emperor, until they cried for their fathers and mothers.
At this moment, the six elders from the Cleansing Incense Ancient Sect had all been gathered. Even though they were old, their blood energies were still as apparent as a rainbow with bright lights surrounding their bodies.
Even though the Cleansing Incense Ancient Sect had declined, it was still an Immortal Emperor lineage. If the elders accepted the titles from the Heavenly Jewel Kingdom, then they would all be Named Heroes.
At this moment, the sharp gazes of these six elders were fixated on Li Qiye, as if they intended to uncover his secrets. However, Li Qiye remained calm and quietly sat in this uncomfortable atmosphere.
Eventually, the first elder gravely inquired: “Wheres the Cleansing Incense Ancient Order?” The order was extremely important because it was an object left behind by their founding Immortal Emperor.𝗳𝐫𝚎𝗲𝚠𝚎𝗯𝕟𝐨𝘃𝚎𝗹.𝗰𝗼𝗺
Li Qiye slowly opened his palm to reveal the ancient order. He was surprised when Old Devil took him to the town below the sects mountain and then ran off to a brothel. Before leaving, he casually threw the order into Li Qiyes hands. It was unbelievable that a person like this old man would have an ancient order.
In the past, when Li Qiye was trapped inside the Dark Crow and when Min Ren shouldered the Heavens Will, he gave the three ancient orders to Li Qiye. Later on, Li Qiye then gave these orders to different people. After millions of years, Li Qiye nostalgically stared at the order in his hand. In the past, he did not need them, but today, he had no choice but to rely on its authority.
The six elders passed around the order and carefully examined it to confirm that it was indeed authentic. The truth was that the sect had wanted to reclaim the order for a long time, but they did not have a way to force it from Old Devils hands. Old Devil knew that the order was equivalent to another life, thus he held onto it with his dear life. Who would have predicted that it would fall into the hands of a mortal without any reputation?
The first elder coldly asked: “Where is Old Devil?” In reality, the first elder harbored no love for Old Devil, a person who could only spend money, lie, and play with women. To him, it did not matter if Old Devil was the son of the previous sect master or not.
Li Qiye calmly answered: “He went to Cui Hong Brothel.”
Shadows could be seen on the six elders faces. Even though they didnt like Old Devil, the thought of someone from their honorable sect visiting the most famous and popular brothel within a thousand mile radius was a source of great shame. And it wasnt like it was his first time visiting this brothel either. The elders had pent up anger and didnt know how to release it. They could only hope that such a notorious player wouldnt be part of their sect in the future.
A different elder loudly asked: “What is your demand?” They didnt know the method Li Qiye employed to obtain it, but the truth was that the order in front of them was definitely not fake.
Li Qiye slowly responded: “I heard that the prime disciple position of the sect is still unoccupied. Since Old Devil fervently recommended me due to my talents, I have no choice but to ask for this position.”
After hearing his answer, the six elders started to curse Old Devil. That goddamned bastard, what rights did he have to recommend someone to become the prime disciple of their sect? It was an extremely important position, so the sect had to carefully select the right individual. Otherwise, the spot would have already been occupied.
An elder spoke with a cold voice: “Dont treat the prime disciple position as a joke!”
“I know.” Li Qiye calmly and slowly enunciated his words without fear: “However, the person who carries the order has the right to demand any request — this was the rule established by Immortal Emperor Min Ren.”
The first elder interjected with a threatening question: “What if you used an underhanded method to obtain this order?” This position wasnt something that could be joked about or given out without any thought.
Li Qiye replied in a domineering manner: “I understand. Elders fear that I might have used dishonest means to force the order from the hands of Old Devil. Since you six do not trust me, you can send people to Cui Hong Brothel for confirmation.”
Deep in their hearts, the elders cried out in pain every time they heard the name “Cui Hong Brothel.” In the end, they had no choice but to send disciples to confirm the what Li Qiye said.
A moment later, a disciple confirmed that Li Qiyes words were indeed true. The disciple tried his best to leave out information regarding Old Devils joyful and debaucherous situation with the girls right now. Otherwise, the elders might have gone crazy.
Unwilling as they may be, the elders had to follow the rules given to them by the patriarch. Even if the Cleansing Incense Ancient Sect has fallen, their lineage was still that of an Immortal Emperors. Thus, they could not dishonor the reputation left behind by their ancestor.
Ultimately, the elders issued a command: “Bring out the Truth Mirror.”
The Truth Mirror shone on Li Qiyes body. Any mortal who wanted to join a sect for cultivation purposes had to be judged by this type of mirror. It tested for ones physique, life wheel, and fate palace.
Within the mirror, Li Qiyes reflection appeared. It was a hazy, unstable shadow that seemed as if it would disappear at a moments notice. Behind this reflections head, an illusive blood halo appeared, and above this halo was a dim light — both were extremely feeble.
“A mortal physique, a mortal life wheel, and his destiny shows that he has a mortal fate palace.” The disciple reported the Truth Mirrors findings on Li Qiyes innate talents and physical condition.
Every person had a physique, life wheel, and fate palace. The physique directly affected ones physical strength, the life wheel indicated ones longevity, and the fate palace showed ones innate talent for cultivation.
Li Qiyes mortal physique, mortal life wheel, and mortal fate palace silenced the elders. He was the most average of men; the sect could go outside and grab any commoner from the streets and they would also have the same talents.
“If you want to become the prime disciple of the Cleansing Incense Ancient Sect, then forget about King and Saint Physiques, at the very least, you would need to have a Xiantian Physique. Your life wheel also has to be around the same level. Your abilities are not fit for this position.” The first elder directly rejected Li Qiye.
“I am aware of my talents.” Li Qiye didnt want to think too much of it and casually spoke: “But I still want to be the prime disciple.”
“You...” The elders were extremely aggravated by these words. This person was not qualified to even become a normal disciple, let alone the prime disciple! This was one of the most unreasonable requests they had ever heard.
“I trust that the descendants of the Immortal Emperor would neither go back on their words nor violate the ancestral rule and bring shame to the sect and lineage.” Li Qiye played around with the order in his hand and slowly continued: “If this order were to fall into anothers hands, the result would be unimaginable.”
Hearing this, the expressions of the six elders froze. The first elder gazed at him and coldly retorted: “Even if such a thing happened, anyone who wants to become the prime disciple of our sect has to be tested in all aspects. This ranges from their origin to their background as well as their innate talents. After all, the sect will not allow an unqualified candidate to take the position.”
Ads by Pubfuture
“That is your problem.” Li Qiye stared at the six elders and said: “If you think another sect sent me to steal your Immortal Emperors heritage, then let me tell you that I would not need to become the prime disciple. Due to this virtuous order, I can just ask for them; there would be no need to bother becoming the prime disciple. You should know this better than myself! If I wanted to harm the sect, it would not be a difficult feat with the power of this order.”
Li Qiyes words made the elders glance at each other. Even though they were a bit ambivalent, they didnt entirely trust Li Qiye.
“He is not exactly without reason.” Elder Cao, one of the six elders, slowly responded: “If the order keeps on wandering around outside, wouldnt that be a hidden danger to us? We cannot refuse anyone with the order, so we might as well accept his request.”
The first elder coldly replied: “Hmph... This matter cannot be taken lightly!”
Another elder mused: “From the past till now, the prime disciple has always been the disciple directly under the sect master. Whether we accept his request or not, either way, we must first ask for the sect masters opinion regarding this decision, then make the choice afterward.”
“This makes sense. In the end, the prime disciple would be the direct disciple of the sect master.” The remaining elders agreed.
After the six elders finished debating, the first elder immediately commanded: “Send a letter to the sect master.”
The letter was quickly sent to Sect Master Su Yonghuang, and the six elders received a reply very quickly. To their surprise, the reply was that the sect master had actually allowed for Li Qiye to become the prime disciple.
The first elder read the letter three times and confirmed that he didnt misread, so he angrily yelled: “Truly unbelievable! The sect master is being too rash!”
Elder Cao persuaded with words: “Brother Gu, if the sect master has agreed, then why are we still debating? In the end, the prime disciple is still the direct disciple of the sect master, so the choice is in the sect masters hands.”
“The sect master is being too rash, ah!” Another elder shook his head and sighed.
Elder Cao forcefully smiled: “So be it, we have no other choice. Ultimately, if we can recover the order, then we will have done a great service to the sect.”

View File

@ -0,0 +1,114 @@
---
title: "Chapter 3 : Cleansing Incense Ancient Sect (1)"
slug: "ch-3"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The first elder, while very discontent, still managed to grunt out a response: “Three days later, after honoring the ancestors, you will formally become the prime disciple of our sect.”
Li Qiye was still sitting there casually without a trace of surprise. He only chuckled out loud: “Me becoming the prime disciple should warrant a weapon or two for my personal safety, right?”
All the elders were surprised to see how comfortable he was under this heavy atmosphere. In the end, the boy was only thirteen years old, but his calm demeanor resembled that of a tyrants that dominated one sphere with everything under their control. How could a mortal like him have such a courageous spirit?
The first elder took a glance at Li Qiye and shook his head while telling him: “Although we accepted you as the prime disciple, we can only give you a normal weapon. If you desire a formidable treasure or an Immortal Emperor Merit Law, you will have to contribute to the sect.”
Li Qiye only smirked. His goal was certainly not an Immortal Emperor Merit Law or a peerless technique. His true aim was the black wooden stick lying on the pedestal. While averting his gaze to the stick, Li Qiye pressed on: “Fine, I want that wooden stick.”
“That wooden stick?” The six elders bodies shook in surprise.
The stick was only used for gathering the ashes after a ceremonial burning to honor the ancestors. It had always been there, and no one had any interest in it.
The elders thought that Li Qiye would ask for treasures using his new status, but he simply wanted a wooden stick. This request was outside of their expectations.
Li Qiye spoke in an unrestrained manner: “Since I am the prime disciple, my position is worthy of respect. The stick belongs to the grand chamber, and this is the Ancestral Grand Chamber of the entire sect. It represents the power of the Cleansing Incense Ancient Sect, so it is worthy of my current position as the prime disciple...”
After hearing Li Qiyes logic, the six elders looked at each other with their eyes wide open. They thought to themselves: This idiotic brat and that goddamned playboy Old Devil definitely belong together, just like how an ox seeks another ox while a horse would find another horse. [1. Stupid people come together would be the meaning here.]
“So be it, we shall bestow this stick upon you.” The first elder was happy to give this worthless stick to Li Qiye if it meant that he didnt have to hear any more of Li Qiyes incessant babbling. To him, this stick was only a regular wooden stick meant to move the ashes; they might as well give it to Li Qiye.
“Many thanks to Honorable Elders.” Li Qiye was eagerly waiting for those words. Before his words finished coming out of his mouth, his hands were already holding the stick. This action, in the eyes of the six elders, was seen as being very naive.
“Huairen, take him to his resting quarters.” An elder finally became impatient and told a nearby disciple to send Li Qiye away.
Todays events had greatly stressed the six elders. A wastrel has become the prime disciple of the Cleansing Incense Ancient Sect... Even if the sect had long passed its glory days, it was not destitute enough to accept a waste of a human being as the prime disciple.
Led by the disciple, Li Qiye approached a solitary peak. It was not small; on top of it laid a small villa the size of 36,000 square meters.
It was apparent that the villa had been abandoned for a long time due to the weeds and wild plants that surrounded it. Although this peak was far from everything, it was still part of the Cleansing Incense Ancient Sect.
After opening the doors, the disciple immediately said: “Junior Brot—, no, First Brother, this place will be your home from now on.”
He only spoke two words before he quickly realized his mistake.
Based on the time Li Qiye joined the sect, Li Qiye would be his junior. However, because he was the prime disciple, anyone within the third generation no matter how young or old would have to call him First Brother.
Li Qiye gave this wily disciple a glance and looked around before nodding his head: “This peak thats so distant from the rest of the sect is a suitable location.”
The disciple smilingly spoke: “It has a very fitting name, Lonely Peak.” He peeked at Li Qiye a few times before continuing: “You will be the master of this peak in the future.”
The truth was that according to the rules of the sect, the prime disciple had the right to live on the peak closest to the ancestral ground. The sect owned many peaks, and the prime disciple could choose any peak for himself.
However, most of the main peaks of the sect were occupied. Moreover, all six elders were unhappy with Li Qiye. Thus, Li Qiye was exiled to this faraway place, away from the main peaks.
The main peaks located near the ancestral ground contained a thicker worldly essence than the outside mountains and inferior peaks.
Li Qiye naturally stated: “This place will be just fine.” He was not a petty man that would place importance on such trivial matters.
“I have brought over all the daily necessities for First Brother earlier.” This junior brother thoroughly handled matters with ease and experience. After taking care of all the items necessary for Li Qiyes daily needs, he politely said: “If you need anything else, just come to the outer court to find me.”
Before the disciple departed, Li Qiye casually asked: “What is your name?”
The disciple was surprised by the sudden question. He did not think highly of Li Qiye. His talents were lacking to the point that he would not even be accepted as a regular disciple.
Li Qiyes actions earlier in the chamber caused others to feel that he was stupid. However, the current Li Qiye who was calm and natural made this disciple feel perplexed inside; he didnt know whether Li Qiye was crazy or if he had thought through everything beforehand.
This disciple quickly regained his wits and answered Li Qiye: “First Brother, this junior brothers name is Nan Huairen. I am a caretaker of the outer court.”
“My name is Li Qiye.” Li Qiye gently nodded.
In the last million years, the ones who knew his true origin and name could be counted ones fingers.
After Nan Huairens departure, Li Qiye did not sit idle. He began to clean up the yard and tidied up the whole mountain. After completing the task to an acceptable standard, the deserted mountain resembled more of a home.
Li Qiye did everything in a systematic and neat manner, slow but steady. If any accidental passersby were to witness his cleaning actions, they wouldnt believe that he was only thirteen years old.
The sky had darkened by the time the tedious task was completed. Li Qiye felt tired and hungry. He slowly sat down in front of the villa. Taking in a deep breath, he took out the wooden stick that was now placed by his waist. He carefully observed the stick that people used to move ashes. His memories slowly came back to him, causing him to show a bitter smile.
The world believed that if an Immortal Emperor succeeded in shouldering the Heavens Will, they would become immortal. However, if that was the case, then where were Immortal Emperor Min Ren, Immortal Emperor Tun Ri, and all the other peerless cultivators from each era? Where did they go?
Li Qiye slowly regained his composure and removed the dust and ash from the stick, eventually revealing its true form. This was a stick that measured one meter. Even after being doused in fire for thousands of years, it had retained its original form without faults. In the eyes of others, however, this was only an ordinary wooden stick without any magical properties.
Li Qiye whispered as he gently wiped the wooden stick: “Serpent Punishing Stick!”
Ads by Pubfuture
With this wooden stick in his hand, his memories caused him to feel unexplainable emotions.
Back in those days when Min Ren was without the Heavens Will, Li Qiye, as the master of this future Immortal Emperor, had taught a group of children that would be the loyal generals of Min Ren. Since Li Qiye wanted to groom them well, he specifically took the Serpent Punishing Stick from the Demon Forest.
Those teenagers that would stomp the Nine Worlds under their feet were all victims of this stick. After concluding their training, he left the stick here in the Cleansing Incense Ancient Sect, and here it has remained until now.
Gripping the stick tightly, Li Qiye immersed himself even deeper within his memories. Escaping the Immortal Demon Grotto was a success, and he finally regained his body and soul from the control of the Dark Crow.
However, time was not merciful. Everyone who used to be his friends and families, such as the Alchemy God, Immortal Emperor Xue Xi, Immortal Emperor Min Ren... and even the illustrious Black Dragon King that survived three eras, have all left this world.
At the beginning of the Desolate Era, he was only a young shepherd. In order to find a lost sheep, he went into the grotto and became imprisoned by the Immortal Demon Grotto. He was forced to follow the path his master envisioned in his crow body from era to era.
At that moment, Li Qiye was very scared. He flew without rest across the Forbidden Burials, traveling across the nine lands, across the Nine Worlds... And in the end, he still had no choice but to return to the Immortal Demon Grotto.
However, because of this, he had experienced the countless dangers and mysteries of the worlds. He trod through lands that even an unbeatable Virtuous Paragon would stay away from. His willpower, basked in hardships throughout the eras, became unshakable.
From then on, he was unwilling to forever stay as a slave of the Immortal Demon Grotto. He formulated a grand plan to cut off all the immortal spirit seals and formations within his soul.
In order to escape the body of the Dark Crow, for his own freedom and to regain his body, he continuously led many geniuses on the road of cultivation. The greatest of these young ones were able to fight on the peerless road under the sky to obtain the Heavens Will.
But today, when Li Qiye returned to his old body to become human once again, all his friends had left him.
Taking his last, deep breath to set aside his pain, he once again strengthened his resolve to destroy all obstacles and shatter the souls of those in the Immortal Demon Grotto.

View File

@ -0,0 +1,128 @@
---
title: "Chapter 4 : Cleansing Incense Ancient Sect (2)"
slug: "ch-4"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The news of a new prime disciple had spread across the sect. The upper echelons were unhappy, but they couldnt do anything with regards to this matter due to the ancient order. A useless person like Li Qiye was only lucky, that was all.
However, the third generation was extremely riled up. The prime disciple would have originally been one of them and would have to be the one with the greatest contributions as well as one who passed all the tests given by the elders.
He would be blessed with the sect masters teachings and gain exposure to emperor level techniques. Ultimately, he would most likely become the sect master in the future.
In the current situation, no one within the second generation of disciples was chosen, meaning that the prime disciple would definitely be chosen from the third generation disciples.
The ones that rebelled the most were the most gifted disciples with the highest aptitudes and origins; they felt cheated by Li Qiye. Thus, the commotion in the sect was chaotic.
A few geniuses angrily declared: “A mortal with a mortal physique, mortal life wheel, and mortal fate palace has no right to be the prime disciple.”
Another talented youth added: “He is the biggest disgrace to our sect.”
“Who can blame him for obtaining the Cleansing Incense Ancient Order? Even the elders have accepted it.” A few of the older geniuses lamented, but they could only accept the situation.
“Hmph, he is only the prime disciple for now. One without talent and strength cannot compete for the sect masters seat. Who is to say that the prime disciple will certainly become the next sect master?” The most arrogant and confident disciples shared this sentiment.
Someone who was a bit eager spoke: “If he doesnt know right from wrong, I wouldnt mind teaching him a little bit.”
Even when Li Qiye really didnt have the qualifications to compete for the sect masters seat, all the disciples still felt cheated inside when they have to call a useless youth like Li Qiye “First Brother”.
A disciple curiously asked: “Isnt the last remaining Cleansing Incense Ancient Order in the hands of Old Devil? How did it fall into the hands of that little brat?”
The fact that Old Devil possessed the last order was not a big secret. The sect had always wanted to reclaim it, but Old Devil never agreed. This was why everyone was perplexed about it coming into Li Qiyes possession.
Another disciple coldly replied: “Hehe, I heard that this brat has some wit, I just dont know how he fooled the perverted old man.
“I heard that when the elders ordered people to confirm this matter, Old Devil was having fun in the brothel. It could very well be that the brat invited him to play as much as he wanted in order to trade for the ancient order.” Here, this disciple scowled and felt nauseous.
Hearing this story, the other disciples contemptuously exclaimed: “So he and that perverted old man are the same!”
Even though rumor has it that Old Devil was a child of a certain sect master, the entire sect did not welcome such a perverted old man that only knew how to spend money and fool around. This was especially true for the third generation disciples, they did not have the slightest bit of respect for him. If it wasnt for the will of the last sect master, he would have been kicked out of the sect already.
If Li Qiye and Old Devil were the same type of people, then they would find Li Qiye even more distasteful.
Three days has yet to pass and Li Qiye had not yet greeted the ancestor, but the sect received an invitation from the Nine Saint Demon Gate.
“What! The Nine Saint Demon Gate wants to test Li Qiye?” After receiving the news, the six elders were shocked.
One of the elders became increasingly paranoid and lamentably spoke: “Theyve heard the news so quickly. He only became the prime disciple recently, yet they already want to test him.”
Another elder chimed in: “It seems like they want to escape the promise of the past. A piece of trash like Li Qiye will never pass their test. That is why they want to force and expedite the issue.”
“We no longer have a choice.” The first elder reluctantly spoke: “Right now, the Nine Saint Demon Gate rules an entire country. We cannot compare to them, so we are not in a position to negotiate.”
His words caused everyone to fall into silence. In the beginning of the Emperors Era, their sect was invincible, their reputation intoxicated the Nine Worlds, and their strength allowed them to rule an ancient kingdom. All other sects submitted to their might. No existence in the entire world could have been a threat to the position of the old Cleansing Incense Ancient Sect.
However, the glories of old disappeared with the passage of time. They no longer had the power to rule a regular country, let alone an ancient kingdom. They lost the privilege of granting titles such as Named Hero or Royal Noble to their followers.
Another elder asked: “What do we do now?”
All of the elders knew that a mortal like Li Qiye had no chance of passing the examination from the Nine Saint Demon Gate.
“Cure a dead horse into a living one, theres no other choice!” Another elder answered: “If he somehow succeeds, then we would become in-laws with the Nine Saint Demon Gate. If this were to be the case, then the Heavenly God Sect and the Heavenly Jewel Kingdom would not dare to look down upon us.”
Towards this impossible dream, the six elders could only forcefully laugh. No matter what, they still had to try.
***
Li Qiye was waiting in his villa for the ancestors ceremony when Nan Huairen approached him.
Nan Huairen quickly reported: “First Brother, the elders are calling for you in the grand chamber.”
Li Qiye nonchalantly asked: “Did something major happen?”𝚏𝐫𝚎𝗲𝕨𝐞𝐛𝕟𝚘𝐯𝚎𝗹.𝕔𝐨𝗺
Nan Huairen was a bit surprised, but he didnt hide anything. He nodded and replied: “I will not lie to you, First Brother. The Nine Saint Demon Gate sent us an invitation.”
He paused for a second and glanced at Li Qiye before continuing: “I heard your fiancee wants to test your abilities.”
“Nine Saint Demon Gate!” Li Qiye suddenly recalled an old memory when he heard this name.
Nan Huairen thought Li Qiye didnt know of this sect, so he quickly explained: “The Nine Saint Demon Gate is one of the biggest sects in the Grand Middle Territory. They rule over the Old Ox Country and has the rights to grant titles. Our two sects used to have an amicable and close relationship. The original patriarch of Nine Saint used to be called the Nine Saint Virtuous Paragon. He was the number one general under our Immortal Emperor Min Ren and followed him to sweep through the Nine Worlds. When we ruled over an ancient kingdom, even the Nine Saint Demon Gate had to pay tributes to us.”
“I have heard of the sect.” Li Qiye gently smiled. How could he not know about the sect? Moreover, he had met the Nine Saint Virtuous Paragon as well.
During the early days of the Emperors Era, Li Qiye spent an absurd amount of time and energy to trap this demonic monster named Nine Saint and forced him to be Min Rens fate protector.
Li Qiye asked: “Where did this fiancee come from?”
Nan Huairen answered: “From the legends of when our patriarch accepted the Heavens Will and became the Immortal Emperor, the Nine Saint Virtuous Paragon formed a pact with us. If their prime descendant was female while ours was male, we would become in-laws.”
After pausing for a moment, he dejectedly sighed: “At that time, they were climbing up the ranks.”
“I think that in the past, the Old Chicken had a female disciple.” After listening, Li Qiye quietly mumbled once again while recalled the past. He had forgotten about it after falling into deep sleep as it wasnt a matter of great importance.
“What did you say, Great Brother?” Nan Huairen inquired since he didnt hear it.
Li Qiye smoothly averted the inquiry: “Nothing. So their prime descendant right now is a woman?”
Ads by Pubfuture
“It is known that between the two of our sects, there has not existed any in-law relationships for a long time. In this era, their prime descendant is indeed a woman.” He paused for a second to look at Li Qiyes expression: “I also hear that their descendant, Li Shuangyan, has an innate king physique.”
Hearing Nan Huairens story, Li Qiye had a complete understanding of the situation. The Nine Saint Demon Gate naturally didnt want to marry off a descendant with such an aptitude and potential to a disciple of a declining sect.
Li Qiye slightly chuckled: “That makes things a little more interesting.”
Nan Huairen shockingly stared at the calm Li Qiye. He felt strange that an ordinary boy at the age of thirteen was able to face everything like a Royal Noble who had gone through numerous trials.
If it was someone else having heard Nan Huairens words, they would become anxious, frightened even. However, Li Qiye completely betrayed common sense and carried on with his nonchalant attitude.
***
The first elder coldly asked once Li Qiye entered the ancestral chamber: “Has Nan Huairen informed you of the current situation?”
Truth be told, the six elders did not welcome a wastrel like Li Qiye. However, due to the current situation, they hoped that he wouldnt be completely useless and that he could pass the trial of the Nine Saint Demon Gate through sheer luck. At this moment, the Cleansing Incense Ancient Sect truly needed a strong backing, such as becoming in-laws with a giant like the Nine Saint Demon Gate. Even though the chance of success was extremely small, they still wanted to try.
Li Qiye lightly nodded his head: “Honorable Elder, I understand completely.”
“Good! As long as you can pass the trial, we will handsomely reward you.” The first elders tone was as cold as ice as if to mock Li Qiyes calm demeanor.
Li Qiye elegantly smiled and politely said: “I am very willing to attend the trial, but I have three conditions.”
“Impudent!” One of the elders yelled: “You dare to negotiate in front of the elders?”

View File

@ -0,0 +1,98 @@
---
title: "Chapter 5 : The Fiance (1)"
slug: "ch-5"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Any other disciple would be afraid of facing the elders wrath, but Li Qiye only lightly scoffed: “Elders, dont be angry. If I were to actually pass the trials, it would be a great contribution to the sect. The hardworking should be rewarded, no? It should only be natural for me to provide some conditions considering the danger of the task.”
This elder was extremely unhappy with Li Qiyes attitude, so he roared his response: “Then wait until you have passed the trial, we can discuss them then!”
“So be it!” The first elder nodded his head then continued: “Dont you worry. As long as you pass the trial, you are free to select any cultivation methods with the exception of Heavens Will Secret Laws and Immortal Emperor merit laws. I dont think the other elders will have any objections to this.”
The six elders glanced at each other and contemplated the notion. If he indeed passes the trial, then the elders suggestion was completely reasonable.
“The other conditions can wait until after the trial.” Li Qiye finally smiled: “However, there is one condition that I must state beforehand so that there will be ample time for preparation. Once I reach the Physique Accumulation level, I require a medicinal paste of the Saint grade."
After hearing Li Qiyes request, the faces of all six elders turned sour; they collectively yelled out at the same time: “How greedy can you be?”
Li Qiye pretended to not hear their loud yell and continued while slowly enunciating each word: “Elders, the marriage between our two sects is a great matter. If things go well, it would be an enormous contribution to the sect. A Saint grade medicinal paste might be precious, but I believe that it is a fair trade.”
This elder was unhappy and coldly snorted: “Hmmph, you think a medicinal paste of the Saint grade is so easily obtainable?!”
The first elder then glanced at Li Qiye and said: "If you are successful, then rewarding a Saint grade paste isnt too outrageous. But right now, we cannot accommodate you because we lack certain integral efficacious medicines for the Saint paste recipe.”
Looking at the elders body language, Li Qiye secretly sighed in disappointment. He was thinking too highly of the Cleansing Incense Ancient Sect. In the past, its treasure trove was practically boundless. It even contained Immortal grade pastes, so Saint pastes were trivial in comparison.
“Fine, I will take one step back; I want the highest grade of King paste!”
The elders glanced at each other. Eventually, the first elder conceded: “This I can accept, but the condition is that you will still have to be successful.”
Li Qiye smiled at the first elder and replied: “Outside of this, I have another small request before I leave for the Nine Saint Demon Gate. Without knowing how dangerous it will be, I will need to learn some techniques and have one or two defensive weapons.”
Elder Cao, one of the six elders, spoke with discontent: “Ha, so it seems that you are still a bit wily and trying to taking advantage of this situation for personal gains.”
The first elder actually sympathized with this notion and nodded his head: “How about this, in the inner sect are techniques and weapons, you can pick one and only one. What do the other elders think?”
Even though the other elders didnt want to accommodate Li Qiye, they still agreed with the first elder. They knew the chance of success for Li Qiye was near zero. Even if they gave him weapons and techniques, it wouldnt raise the probability by much, but a bit is better than none.
“Elders are worrying too much, Im not that greedy.” Li Qiye naturally knew the thoughts of the elders and calmly smiled: “I heard that we have a technique named the Invisible Dual Blades that can be learned in no time at all. I want this technique as well as a pair of blades to accompany it. Would this be acceptable?”
The elders rolled their eyes from surprise after hearing Li Qiye. They originally thought that this greedy boy would ask for Emperor level techniques, but it turned out that he actually wanted a normal technique.
“Invisible Dual Blades eh?” The first elder stroked his beard.
Another elder quickly responded: “First Elder, it is only a martial technique and insufficient for practical use. In the world of cultivation, even the simplest merit law would outperform any martial art.” This elder was responsible for merit law assignments in the sect, so he was very knowledgeable with regards to their manuals.
“That is not a problem! Nan Huairen, bring the Invisible Dual Blades to his peak and give him the best pair of dual blades.” The first elder was happy with this simple request. His opinion of Li Qiye decreased from Li Qiyes unwise decision. One would think that the sect would want to give all the assistance they could afford to help Li Qiye, but deep down inside, all the elders knew that no matter what techniques and weapons they give to him, completing the trial would still be impossible. They only aimed to minimize the losses for their sect.𝒻𝑟𝑤𝑒𝑏𝑛𝘰𝓋𝑒𝓁.𝒸𝑜𝘮
Seeing Li Qiye not being greedy, an elder was satisfied and generously asked: “Do you have any other requests?”
Li Qiye humbly replied: “This little one does not need anything else at this moment.”
The first elder gravely said: “Good, go back and prepare, you shall depart in three days. After your return, you can complete the ancestral ceremony to ascend to your position.”
Of course, thats only if he could return alive . The elders had great doubts.
Nan Huairen brought the technique and blades to Li Qiyes peak right after he returned.
He was satisfied with the Crescent Moon Blades. The blades curves occasionally shone with sharpness. However, these were merely of Mortal grade and not fit for cultivators. No matter how sharp the edges were, it couldnt compare to magical armaments.
After Nan Huairen left, Li Qiye slowly read the “Invisible Dual Blades” technique. Every word and phrase spoken by him would be replicated in his mind.
Back then when he was still the Dark Crow, even though he had successfully escaped the Immortal Demon Grotto, his situation has yet to stabilize. Sometimes would still be affected by the grotto. Whenever he felt like this, he would immediately seal himself and force his soul to fall into a deep slumber.
He had spent many tortuous years in each era to go to the most dangerous locations. He had fallen to the hands of many masters and had to surpass many tribulations, but because of this, he was able to see many merit laws, even Emperor merit laws and immortal methods.
Because he was afraid that one day he wouldnt be able to control himself and be summoned back to the Immortal Demon Grotto, he always removed his memories regarding the methods and techniques he had learned to avoid them falling into the hands of the grotto. However, the Alchemy God and Immortal Emperor Xue Xi came up with a mysterious method that allowed Li Qiye to quickly understand the truths of these supreme techniques the moment he saw them again.
Right now, everything that was pertinent to mastering the “Invisible Dual Blades” had been recalled. Taking a deep breath and comparing the manual in his head against the version written in front of him, he found that the technique was lacking a certain something — this worried him greatly.
Ads by Pubfuture
In reality, it was normal for techniques such as the Invisible Dual Blades to be missing parts. In the end, it was not enough to reach the apex. In the eyes of cultivators, this was only a minor art. After millions of years, no many people in the Cleansing Incense Ancient Sect actually learned this technique.
Focusing his mind once again, Li Qiye finally understood the hidden truths behind the technique and softly smiled.
Even though his physique, life wheel, and fate palace were all of Mortal grade, his knowledge and willpower were above what all geniuses had.
What was even more important was that when he was the Dark Crow, he underwent numerous methods of torture. There was a time when he was imprisoned for ten thousand years without seeing the sun, so his willpower was extremely fortified. Nothing could ever shake it, and no difficulties could ever make him take a step back.
He gently patted the manual. His attempt at mastering the technique had awakened his memory of the past, a secret that no disciple knew in the current era.
That year, the young Min Ren used to practice the “Invisible Dual Blades” technique. Later, when he became an Immortal Emperor that ruled over the Nine Worlds, he reminisced about this technique. He once again cultivated it, slowly perfecting the normal martial technique.
Of course, this normal technique was not comparable to the Emperor merit laws that he had created as well, let alone the Heavens Will Secret Laws. Min Ren himself did not want his descendants to practice this technique, either. Thus, the technique had lied dormant in the library of the sect for millenniums. No one had understood the illustrious truths behind the technique moulded by an Immortal Emperor post ascension.
When Li Qiye saw Min Ren perfecting the technique, he would always tease him. Even if this martial technique was cultivated to its apex and was capable of slaying Royal Nobles, no one would want to use it. Normal cultivators could only see the external qualities, thus this martial technique resided in the darkness.
Even after being teased by Li Qiye, Immortal Emperor Min Ren only smiled. It was unexpected that Li Qiye actually guessed correctly about the fate of this martial art.
Emptying his mind of unnecessary thoughts, he picked up the dual blades and started to practice. He was extremely strict with himself. He slowly swung each stroke within the manual; each swing required perfection before moving on.

View File

@ -0,0 +1,105 @@
---
title: "Chapter 6 : The Fiance (2)"
slug: "ch-6"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Although he understood the truths behind the technique, his body couldnt keep up with his mind. He demanded perfection, but it was difficult to reach.
However, Li Qiye was not deterred. He kept on practicing the martial art that became more refined after each swing. After one night, he had swung the blades more than three hundred times and slowly grasped the profound truth. Slowly, each of his blades became more and more accurate.
Even though he had innumerable memories and heaven-frightening secrets, he understood that if he wanted to completely decimate the Immortal Demon Grotto, he must increase his efforts by ten fold, no, a hundred fold in order to achieve his goal. No one understood the Immortal Demon Grotto better than him in the current era.
In these three days, Li Qiye had not left his villa. He imprisoned himself in the inner sanctum to perfect his blades. There were too many uncertainties in life, so he must be in peak shape to combat any disaster that may come.
***
Three days later, the journey to the Nine Saint Demon Gate was about to begun. Only Nan Huairen and a sect protector with the surname Mo were coming along.
The Cleansing Incense Ancient Sect had a total of six elders, twelve protectors, and thirty-six sectional leaders. To visit a grand sect such as the Nine Saint Demon Gate with only three people, the highest ranked member being a mere protector... there were no words to describe this.
Before the departure, Li Qiye looked at the shabby members and asked: “Only us three?”
Protector Mo, the master of Nan Huairen, was very frugal with his words. After he heard the question, he only glanced at Li Qiye without answering.
Opposite of his master, Nan Huairen was a playful fellow; he coughed once in shame and opened his mouth: “First Brother, all of the elders are in secluded cultivation; they could not make the trip.”
Li Qiye perked his lips and coldly declared: “Secluded cultivation? They are only afraid of losing face. In the end, they believe I have no chance of passing the trial. Me not passing is a small matter to them, but them being there and losing face would be a big deal, right?”
Nan Huairen couldnt say anything and only shamefully smiled. How could a mortal expect to pass the trial of an Emperor level sect? The elders had the same thoughts. This was why they refused to go, since the result was already clear as day.
“Dont worry, Honorable Brother.” Nan Huairen kept his positive attitude: “The Nine Saint Demon Gate has kept its distance from us in recent times, this is why the elders dont want to go and create unnecessary conflicts.”
“Hmmph, it is only the Nine Saint Demon Gate, they cant reach the apex. In that era, even if the Nine Saint Virtuous Paragon was alive, they would still have to bow down to the Cleansing Incense Ancient Sect.”
Protector Mo could only ignore Li Qiyes arrogance. He only coldly snort, not bothering to say anything.
Nan Huairen was afraid that Li Qiye would say even more outrageous things, so he interrupted: “First Brother, this is my master, a protector of the sect.”
“Please take care of me on this trip." Li Qiye bowed with just the right amount of courtesy and respect — not too forced yet not too weak.
Protector Mo gave him another glance and said: “Let us go.”
Finished with his words, he turned around and walked away. Protector Mo was one of the older protectors, so his cultivation was above average. However, he doesnt know how to socially interact with others. Thus, his position in the sect was quite low relative to the other protectors. Otherwise, he would not be a part of this great expedition that was doomed from the start.
The upper echelons of the sect knew that this trip would become a comedic play with Li Qiye as the main character. If the audience was not happy, death might be inevitable, and that was another reason why the six elders evaded it. The other protectors were not willing to lead this group, so this assignment eventually fell on the shoulders of Protector Mo.
Protector Mo also thought that no positive results would come out of this trip, which was why his mood had been even sourer than normal.
The long trip was filled with silence until they reached the grand temple of the Cleansing Incense Ancient Sect. The grand temple was huge and could contain ten thousand people. Looking through all of the Grand Middle Territory, it would be difficult to find a comparable temple within the other heritages.
The jade-colored temple was extremely ancient. It was built with heavenly stones and crystals. Up above was calligraphy personally carved by Immortal Emperor Min Ren. The words exuded a courageous aura, deep beyond fathoming. Each word and phrase seemed as if it could erase existences. From this grand temple, one could appreciate the old power of the dying sect.
This temple was the starting point for all of the conquests the great Emperor took part in. Min Ren would conduct ceremonies here before embarking on his expeditions that would encompass the entire Nine Worlds. Only an Immortal Emperor sect could possess such a temple.
“Bang...” As the entrance was opened, a gateway could be seen inside. Colored and tempered by divine crystals, the hulk was covered by empty holes and Immortal Emperor carvings. The empty holes were there to be filled with refined jades.
Refined jades were formed by the natural spiritual power of the heaven and earth, the very essence of what makes cultivation possible. Its main purpose was to operate gateways in order to traverse far distances. The distance of travel was determined by the quantity and quality of the refined jades.
Unfortunately, the current gateway only had a few refined jades inside. Once again, Li Qiye was saddened by how far the sect had fallen. In the past, this gateway, with its abundance of jades, had brought many armies to faraway places in the Nine Worlds. Any location was possible as long as the coordinates were known.
They entered the gateway and, in the blink of an eye, warped to a different location.
The Grand Middle Territory was huge and spanned billions of miles. There were countless sects spread across fifteen countries. However, there were gigantic monsters like Kingdoms and Ancient Kingdoms that spanned billions of miles by themselves.
If one wanted to cross a country by flying, it would take many years unless they were an Enlightened Being or Heavenly King. Any Named Hero or Royal Noble would be wise enough not to attempt this feat. Plus, the Grand Middle Territory was only one part of the Mortal Emperor World.
The Mortal Emperor World was also known as the Emperor Boundary or Emperor Country and consisted of five different regions. In the north lies the Northern Grand Sea, the south has the Barren Earth, the east forms the Hundred Cities, the west contains the Desolate Wasteland, and the middle was the Grand Middle Territory.
“Bang...” Li Qiye and his companions arrived at the gateway of the Nine Saint Demon Gate.
As they stepped out, they felt that the natural spirit essence was denser than any place they had been to. This was truly a heavenly sect as far as the eye could see.
Ads by Pubfuture
The location of the Nine Saint Demon Gate spanned for millions of miles. It was filled with mountains and rivers with majestic waterfalls and heavenly trees that could pierce the heavens. There were also marble palaces floating and hiding in the clouds as far as the eye could see. In the deepest recesses, one could find penetrating auras that radiantly shone across the land. One would believe that the origin of these auras stemmed from shocking heavenly treasures.
This was the picture of a powerful sect. With this atmosphere and location, it was no wonder why it could rule over a country. In comparison, the Cleansing Incense Ancient Sect was akin to a destitute old man at the end of his life.
“I see that it is Older Brother Mo, long time no see.” When the three of them left the gateway, an old man could be seen leading his disciples for the welcoming party.
The man was a sectional leader of their sect. His last name was Fu, the owner of a cold and stoic face. His eyes contained a powerful gaze and his body radiated a shining aura. His natural disposition was one that could instill fear in weaker souls.
Even though he was only a sectional leader, he possessed the strength of a Named Hero made evident by the aura being exuded from his body. In the Cleansing Incense Ancient Sect, only an elder would be eligible for the title of Named Hero.
“Is this your prime disciple?”
“That is correct, Li Qiye is the prime disciple of my sect.” Protector Mo bitterly smiled. Li Qiyes talents and constitution were nothing to be proud of.
“The trial, it is but a friendly competition. Brother Mo does not have to worry about it.” Sectional Leader Fu showed a gentle smile.
Li Qiye smiled back at Sectional Leader Fu and elegantly expressed his feelings: “Only a trial, it cant reach the peak.”
Sectional Leader Fu ignored Li Qiyes sly remark and conversed with Protector Mo instead: “Brother Mo, please follow me.”
In his mind, a Named Hero arguing with a junior like Li Qiye would be unbecoming for a man of his status.
Protector Mo, on the other hand, angrily glared at Li Qiye.

View File

@ -0,0 +1,89 @@
---
title: "Chapter 7 : Nine Saint Demon Gate (1)"
slug: "ch-7"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Sectional Leader Fu led the three into a medium-sized meeting chamber. Such a room was only used for entertaining guests without great importance. For an event as influential as the marriage between two sects, the Nine Saint Demon Gate was letting a mere sectional leader take care of negotiations. Not only that, the courtesy they showed was the same for normal guests, making it obvious that they did not place heavy emphasis on the event.
After settling the guests into their resting area, Sectional Leader Fu spoke some flowery language without sincerity and quickly left. Protector Mo was mentally prepared for the lack of hospitality, so he was not angry, merely solemn.
Sectional Leader Fu headed straight into the inner sanctuary of his sect after helping settle Protector Mos group. Approaching an ancient temple, he met an elder. The elder was floating in the air and a heavenly halo was above his head. While it rotated non-stop, each strand of the worlds truths that took on a physical form was visibly covering his body; nothing was comparable to his pressure. A god was seemingly among us.
“How is the prime disciple of the Cleansing Incense Ancient Sect?” The thunderous voice of this elder struck the surroundings, but this voice that instilled fear into the hearts of others could only be heard within the temple.
When outside, Sectional Leader Fu was extremely arrogant with his title of Named Hero. However, he could only quiver in fear right now. He went down on his knees and spoke: “Dear Elder, it was but an ant, a mere mortal, an ignorant and arrogant young brat that is not worthy of discussion.”
“I see, take your leave.” The thunderous voice rang again. It was capable of instilling fear into others even when the elders eyes were shut.
Sectional Leader Fu politely bowed one more time and carefully left the temple. His body was sweaty after leaving. He was only a sectional leader, so he did not have the qualifications or status to meet an elder. Even a Royal Noble would need to be summoned before they could have the honor.
After Sectional Leader Fu left, the elder started to speak with someone else in the empty temple: “Picking a mortal with a Mortal physique, Mortal life wheel, and Mortal fate palace to be the prime disciple... there is no saving the Cleansing Incense Ancient Sect.”
“It is truly a shame for the emperor techniques of Immortal Emperor Min Ren. There is a good chance that they still reside in that sect.” A mysterious and noble voice rang in the air.
The elder continued: “Your Majesty, as long as Immortal Emperor Min Rens techniques remain there, it is only a matter of time for us to obtain them in one fell swoop! That mortal is not worthy of our prime descendant.”
The mysterious voice remained silent, as did the elder. If there were spectators, they would be shocked by the appearance of the Demon King. One has to know that the Demon King was an extremely dangerous character.
Legend states that his origin and true form were extremely formidable. The sect, under his lead, became increasingly radiant. Nothing could shake his tyrannical rule. Within the Old Ox Country, no one dared to oppose his heavenly reign.
***
Protector Mo remained seated in silence, but Nan Huairen had wittingly escaped the torturous room with the uncomfortable atmosphere.
Meanwhile, Li Qiye had left for his own room. He started to practice the “Invisible Dual Blades” technique without wasting a second. He wanted to ingrain the technique into his body and mind.
Over the years, Li Qiye had learned that it was one thing to understand the illustrious truths behind a technique, but another to reach the apex. Actually utilizing them was yet another aspect. Even a peerless genius with comprehensive knowledge of Immortal Emperor merit laws could not perform them without excruciating levels of practice.
“Whoosh, whoosh, wooooshh...” The two blades left Li Qiyes hands and gracefully traveled through the air like a pair of butterfly wings. They intersected each other multiple times before ultimately returning to Li Qiyes hands. He had practiced this particular move many times, but it still contained flaws.
“What impeccable swordplay. First Brother is so diligent, I feel ashamed to compare myself to your great efforts.” At this second, Nan Huairen came into the room. There was another teen next to his side.
Nan Huairen couldnt help but sigh with regret. He truly respected Li Qiyes earnest efforts. It was truly unfortunate that his innate talents were so underwhelming.
“To reach the apex, one must never stop self-improving.” Li Qiye sheathed his blades. Although he was sweaty and tired, his posture and expression remain at ease.
Nan Huairen respectfully smiled: “I will remember these words and strive to improve myself as well.”
He then introduced the young man standing next to him: “This is Big Brother Zhang, a good friend of mine.”
Nan Huairen had good talents, but he could not be considered a genius. However, he was different from his master. His ability to socialize allowed for a huge network; he had friends everywhere.
This Disciple Zhang was very similar, but in his eyes, a mortal like Li Qiye was not worthy of respect. He nodded his head toward Li Qiye because of his relationship with Nan Huairen. To him, whatever martial techniques Li Qiye practiced were meaningless.
“This is the first time First Brother is visiting the Nine Saint Demon Gate, so how about we walk around so that you can become accustomed to the scenery?”
Li Qiye suddenly remembered an event, so he smiled and responded: “Sure.”
Nan Huairen turned around to the disciple named Zhang: “Brother Zhang, this time we will have to impose upon you.”
“Brother Nan, you are too reserved." Disciple Zhang had no choice but to nod his head. Unwilling as he may be, he did not want to strain their friendship. After all, he had no desire of taking the scenic route with Li Qiye.
Ads by Pubfuture
The Nine Saint Demon Gate was the host, so they should be taking Li Qiye around in order to positively promote their relationship. However, since they did not consider Li Qiye to be worthy, courtesy and rules were set aside.
While Disciple Zhang led them around the premise, he only conversed with Nan Huairen and treated Li Qiye as if he wasnt there. Their presence created a lot of clamor amongst the disciples.
“Isnt that the prime disciple of that old sect?” From a distance, a disciple frowned after seeing that Li Qiye was only a mortal.
Another disciple of the sect scornfully laughed: “Heh, the Cleansing Incense Ancient Sect is only a second-rate establishment. If even a mortal can become their prime disciple, this position can be considered nothing but worthless.”
“A mortal wanting to marry Senior Li? Rotten chopsticks wanting a gold bowl; why not look in a mirror to see how lowly you are?” [1. The former sentence is a Chinese proverb, similar to how a frog wants to eat swan meat.]
Li Shuangyan was the prime descendant of the Nine Saint Demon Gate. Not only was she gifted in her talents, she was also extremely beautiful. Countless young talents in the sect had her as their secret desire. The numerous geniuses from other heritages that seeked to court her could form a line from one edge of the nation to the other. And the one thing they all had in common was the desire to spit onto Li Qiyes face for being so shameless.
Disciple Zhang was even more embarrassed; he could see the hostility from the eyes of his fellow disciples. He started to walk faster to maintain a distance with Li Qiye, eventually leaving him behind. However, Li Qiye seemed to pay no mind to his actions. He continued at his own pace in a calm and carefree manner as he absorbed the heavenly scenery of the Nine Saint Demon Gate.
Nan Huairen earnestly reminded Li Qiye: “First Brother, you have to be careful. Many people are courting your fiancé, and they will not hesitate to cause trouble for you.”
Li Qiye calmly answered: “It is only a girl, there is no need for such a commotion.” He had seen many country-destroying beauties, so he didnt keep his potential fiancé in mind; it was only a minor matter to him.
Unknowingly, they reached the training ground of the sect. This was a place where all of the disciples could enter. Once one was inside, they would truly feel tiny in comparison to the gigantic battle stage; they were like ants on top of a massive hill.

View File

@ -0,0 +1,95 @@
---
title: "Chapter 8 : Nine Saint Demon Gate (2)"
slug: "ch-8"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The battle stage consisted of huge meteoric stones. Each stone was inscribed with the words of many Virtuous Paragons; mysterious and powerful energies were being exuded from them continuously. It was this energy that protected the battle stage, rendering it impervious to any damage the contestants may inflict.
“A battle stage of the Virtuous Paragon level!”
Even though this was not his first time witnessing it, the battle stage still instilled Nan Huairen with awe.
Disciple Zhang was very proud and started to brag: “This battle stage was created by our Great Elder; it can even withstand the destructive power from multiple Virtuous Paragons.”
Nan Huairen couldnt help but mumble in a low volume: “In the past, our Cleansing Incense Ancient Sect also had a battle stage...”
The truth was that the Cleansing Incense Ancient Sect also had a battle stage, but it was not of the Virtuous Paragon level. Some say that it was nearly at the Immortal Emperor level, so it could withstand a fight between Heavenly Kings and Immortal Emperors alike. It was found by Immortal Emperor Min Ren in the depths of an unknown space.
Unfortunately, no one knew why this battle stage was sealed. From then on, no one was able to enter the arena.
“Great Four Stone Golems!” Li Qiye was there, but he missed the conversation completely. His eyes were focused on the four gigantic statues located at the four corners of the arena.
Each of them towered over one hundred meters tall. All of them had different expressions, yet they were all very realistic. It was apparent that they were carved by the hands of a renowned expert with a blade technique that was very natural and perfect.
This was what he wanted to see. After the death of the Nine Saint Virtuous Paragon, he had never visited this sect. It was surprising to see the four statues after all these years.
When Nan Huairen and Disciple Zhang were chatting, no one noticed Li Qiye. A moment later, Disciple Zhang finally saw what Li Qiye was trying to do. He raised his eyebrows and asked: “What is this idiot doing?”
Nan Huairen noticed that Li Qiye was trying to climb on top of the eastern statue. However, because of his weak cultivation, he couldnt make it to the top.
Right now, many students were surrounding the battle stage. They all watched Li Qiye struggle like a village boy that was visiting the capital for the first time. Laughter erupted and jeers filled the arena.
Nan Huairen was so embarrassed that he wanted to dig a hole and hide in it forever. He could not see what was special about these four statues that prompted Li Qiye to take action.
Li Qiye signaled for Nan Huairen to come over. Nan Huairen couldnt say no to the prime disciple, especially when the person was being singled out by an entire sect. He dejectedly walked over to Li Qiye under the scrutinizing gazes of all the disciples.
Li Qiye calmly commanded: “This statue is too high, take me up there.”
“Hah?!” Nan Huairen was dumbfounded. He was silently questioning whether Li Qiye had become insane. Climbing up the statue in front of this many Nine Saint Demon Gate disciples — this was a great slap to their faces.
“Are you going to take me up, or do you want to continue watching my monkey show?” Li Qiye nonchalantly commented as if all of this had nothing to do with him.
Without any other options, Nan Huairen grabbed Li Qiye and jumped. In one swoop, they arrived at the top of the statue.
Li Qiye sat on the shoulder of the statue and leisurely stared into the distance, embracing the scene in front of his eyes.
Nan Huairen wasnt quite as thick as Li Qiye. He immediately jumped down then waited at the bottom of the statue. He stood there, waiting, in case something did happen. He simply couldnt just abandon his fellow disciple.
Disciple Zhang, however, did not want to stand there for a second longer. He immediately left without a departing salutation.
“Does he think that he is a big shot, sitting on top of the statue?”
“This country bumpkin is being way too rude!”
Ignoring the comments the disciples of the Nine Saint Demon Gate were spewing, Li Qiye remained seated on the statues shoulder. He whispered to it as if he was having a conversation with it.
The crazy and nonsensical actions of Li Qiye caused the spectators to question their sanity. This was truly an idiot without fear. However, no one attempted to stop him. They felt that it was below them to interfere with a madman.
Eventually, Li Qiye seemed to have become bored of sitting. He once again waved his hand to signal for Nan Huairen. It was as if a boulder had been lifted off his shoulders; Nan Huairen was incredibly relieved that this madness had come to an end as he brought Li Qiye down to the ground.
“First Brother, the sun has set. Shall we go back and rest?” Nan Huairen was praying with all of his heart that this prime disciple could spare him from further embarrassment. Who knows what other things he would do if they were to continue their tour?
Noticing how Nan Huairen looked like a dead puppy, Li Qiye chuckled and nodded his head in agreement.
“Your mother!” A disciple couldnt help but yell out after seeing Li Qiyes devilish grin: “The Cleansing Incense Ancient Sect is a third-rate sect. Youre merely a toad that wants to eat swan meat! Pah! A dumb black turtle has the nerve to court our senior.”
Seeing that someone was challenging him directly, Li Qiye slowly turned around and said: “Court your senior? Dont think too highly of yourselves. Even if a heavenly angel or godly fairy wanted to marry me, they would have to pray for my acceptance. As for your senior? It is a long line until it is her turn."
Ads by Pubfuture
“Your mother, you are tired of living!” All of the male disciples roared after hearing Li Qiyes shameless words.
“Calm down, calm down, everyone should value peace and prosperity!” The current situation sent chills down Nan Huairens spine. He immediately took Li Qiye and left. He couldnt leave this madman outside for a second longer.
After safely arriving at their guest house, Nan Huairen cried: “First Brother, please! This isnt a place where we can say and do whatever we wish. Take a step back and appreciate the high sky and deep sea. Please keep yourself under control.”
“Hold back?” Li Qiye nonchalantly proclaimed: “A general shall stop an incoming army, a dam will deter the incoming current!” [1. This is another Chinese proverb. It tells someone to not worry, almost like que sera sera. It sounds really good in Chinese since it only consists of 8 words; 4 for each prose with the same tonal structure.]
Nan Huairen froze. Taking care of someone like Li Qiye was akin to finding trouble for oneself. He was truly regretting taking on this mission to go to the Nine Saint Demon Gate.
***
After the events at the battle stage, many of the Nine Saint Demon Gate disciples were outraged. Du Yuanguang was one of those who truly wanted to kill Li Qiye. He was an outer disciple, but his innate talents were above average, so many referred to him as the “Little Genius”. He had only joined the sect for five years, but he had already reached the pinnacle stage of Provisional Palace. As long as he could successfully pass this years examination, he could become an inner disciple.
Du Yuanguang had a strong crush for Li Shuangyan. During his entrance exam, she was one of the main organizers. It was love at first sight. He also thought that she recognized his skills and talents since she accepted him.
He had great confidence in his abilities and wished for her to become his dao partner, so Li Qiyes very being naturally became a thorn in his eyes.
Du Yuanguangs eyes revealed his killing intent as he murmured to himself: “This mortal does not know his own limits. If I dont teach him a little lesson, he will continue to think that he is above the heaven and earth.”

View File

@ -0,0 +1,87 @@
---
title: "Chapter 9 : Brutal (1)"
slug: "ch-9"
novel: "Emperor's Domination"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The next day, Li Qiye woke up and immediately asked if Nan Huairen wanted to go on another sight-seeing tour. He wanted to see if there was anything left from his era lying around.
Nan Huairen did not want to go at all. It didnt matter whether Li Qiye was crazy or stupid, his intuition told him that Li Qiye would definitely cause trouble; going with him was simply masochistic.
Unfortunately, Li Qiye already turned around and began his trip around the sect. Nan Huairen had no choice but to follow him. The most important event during this trip was the marriage trial. If something actually happened to Li Qiye, he wouldnt be able to escape unscathed.
However, not long after their departure, they were surrounded by Du Yuanguang and his outer disciple friends. These disciples didnt see eye-to-eye with Li Qiye. With Du Yuanguang leading the way, it was a wondrous opportunity to teach this arrogant bastard a lesson.
“Ah, it is Brother Du, I have heard of your great reputation long ago.” Nan Huairen knew that trouble was coming, but he still kept his calm and friendliness.
Du Yuanguang only gave Nan Huairen a short glance and said: “Nan Huairen, you dont have any business here. Move to the side or well deal with you as well.”
Nan Huairens expression darkened, but he knew that the strong ate the weak. Thus, he slightly bowed and asked: “Brother Du, what is the meaning of this?”
Du Yuanguang completely ignored Nan Huairen this time around. He gave an icy cold look toward Li Qiye that was full of killing intent.
With his usual carefree attitude, Li Qiye stepped forward towards Du Yuanguang and said: “A smart dog does not block the road. If you dont want to be a dog, then get out of my way.”
After he heard this, Nan Huairen knew that everything was ruined. Especially when he saw the thirst for blood in Du Yuanguangs eyes, he knew that this would not end without conflict.
An angry disciple yelled out: “Do you not want to live? The Cleansing Incense Ancient Sect no longer has the qualifications to be considered an Immortal Emperor lineage. You dare to jump around like a clown in front of us? A mere ant dares to be disrespectful?”
Li Qiye was ready to retort, but Nan Huairen quickly stopped him and whispered: “Forget about it, First Brother. Dont worry about them. Du Yuanguang is an outer disciple that is getting a lot of attention. He is also the latest disciple of Protector Hua. If he passes the yearly examination, he will immediately become an inner disciple.”𝕗𝚛𝚎𝚎𝐰𝗲𝗯𝗻𝚘𝚟𝚎𝗹.𝕔𝐨𝕞
Nan Huairens intention was to remind Li Qiye that they could not afford to antagonize someone like Du Yuanguang. He had the support of a protector from the Nine Saint Demon Gate. A protector in this sect had a higher standing than an elder of the Cleansing Incense Ancient Sect.
Du Yuanguang did not make a move, he only coldly said: “We of the Nine Saint Demon Gate rule the Old Ox Country. Even if you are from a small sect, you are still a guest; we would like to treat you with the minimum courtesy befitting our status. However, one of my brothers has recently lost a treasure — this is not a common occurrence in our honorable sect.”
Nan Huairens complexion sank as he started to panic: “Brother Du, what is the meaning of your words?”
Du Yuanguang glanced over at Li Qiye and said: “In the last two days, there were no other guests besides the people from your sect.”
Du Yuanguang clearly implied that the thief was from the Cleansing Incense Ancient Sect. This matter did not only affect one person because it also greatly influences the reputation of an entire sect. Even someone as wily as Nan Huairen couldnt help but show an ugly expression.
“Brother Du, please watch what you say!” Nan Huairen wanted to treat this matter diplomatically, but it now concerned the reputation of his own sect. He would not stand for such insults.
“Watch what I say? Your sect is desolate and as poor as a beggar, who could guarantee that a thief did not infiltrate your sect? Your prime disciple is just a piece of trash, so to say that your sect recruited thieves would not be unreasonable.”
Nan Huairens face reddened with rage. As a person who truly cared for his sect, he could not stand for this mockery, so he replied: “Brother Du, we want to meet with Sectional Leader Fu of your sect. No matter what happens, we demand an answer from your sect regarding this baseless accusation.”
Du Yuanguang exploded in laughter for a while before he confidently replied: “Meet Sectional Leader Fu? Nan Huairen, its not that I dont want to reserve some dignity for you, but you and this trash do not have the qualifications to request a meeting with Sectional Leader Fu. Our sectional leaders are capable of being bestowed the title of Named Hero, and it is unknown whether your elders are capable of the same feat. Maybe your elders are qualified to meet with Sectional Leader Fu, but you and this trash? Dont even think about it.”
After he finished his speech, Du Yuanguang coldly stared at Li Qiye. The other disciples clapped in agreement and started to taunt Li Qiye with nasty words again.
Nan Huairen was shaking from anger, but Li Qiye maintained his composure and carefully retorted: “To me, it doesnt matter if this plan stems from you, the leader, or even your protector. To be frank, it is because you are smitten with your senior; I think her name was Li Shuangyan? Even though I have never seen her before, you are too petty. The engagement of your prime descendant, Li Shuangyan, is merely a one-sided affair. Because I respect your sects current status, I would consider having her as a maid.”
“And as for you?” Li Qiye continued: “You are too naive. If your goddess had such talents, she wouldnt put you in her sight. I already dont care for her, so why would you try to compete with me for her like a fool? Get out of the way, you should find a place with shade and take a break to cool off your hot head.”
“You bastard! If you want to die this badly, Ill gladly show you to your death!” Du Yuanguang, enraged by those words, summoned his sword as well as his aura.
“Du Yuanguang, if you want to fight, I will not turn a blind eye.” Having witnessed Li Qiyes bravery, Nan Huairen, who was burning with rage, felt a lot better. However, he knew that Li Qiye had never cultivated before, so he immediately stood guard in front of him.
“Fine, I will take care of you first, then Ill kill the little bastard!” Fiery anger was being exuded from Du Yuanguangs eyes. To him, Li Shuangyan was an untouchable goddess, yet Li Qiye dared to insult her.
Ads by Pubfuture
Li Qiye slowly pushed Nan Huairen back and calmly said: “Huairen, if someone wants to take my life, Ill be the one to put an end to him. You should stand back and watch.”
“Good! Good! Excellent!” Du Yuanguang was no longer angry and instead burst out into laughter: “This is the funniest thing I have ever heard. A piece of trash like you wants to kill someone who is at the Provisional Palace stage like me? So be it, I will give you a chance to fight!”
Knowing that he was a mortal, everyone knew that Li Qiye could not use any merit laws. The other disciples pitied Li Qiye: “Martial techniques versus merit laws? You dont even know the basics, yet your arrogance is through the roof. It is such a pity.”
Li Qiye could not be bothered by such comments. He calmly stated: “That is fine, everyone can witness this battle.” With that said, he walked towards the battle stage.
“You cant!” Nan Huairen was filled with fear. He grabbed Li Qiye and said: “First Brother! This is impossible! Du Yuanguang has reached the pinnacle of the Provisional Palace stage. You cannot be his match.”
“Its fine, hes only at Provisional Palace and not Royal Noble! And even if a Royal Noble of the Nine Saint Demon Gate dares to mess with me, I would mince him into tiny pieces all the same depending on my mood.”
Li Qiye lightly smirked then pushed Nan Huairen away.
Nan Huairens head started to hurt. His first thought was that his first brother had gone senile. Li Qiye had only joined the sect for a few days and had yet to begin practicing even the most basic of cultivation techniques. He only had access to the “Invisible Dual Blades” martial technique.
A person who only practiced martial arts could not fight against a cultivator. Comparing martial techniques to merit laws was the same as comparing the heaven and earth. Not to mention, Du Yuanguang was also an expert at the Provisional Palace stage.
Nan Huairen regained his wits and immediately went to find his master, Protector Mo. He knew that if this fight takes place, only death would be the result.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

View File

@ -0,0 +1,33 @@
---
title: "Emperor's Domination"
slug: "emperors-domination"
author: "Yan Bi Xiao Sheng"
authorAvatar: "https://i.pravatar.cc/128?u=yanbixiaosheng"
authorBio: "Chinese web novelist specializing in xianxia cultivation stories"
cover: "https://images.unsplash.com/photo-1542736667-4f2357f4ef38?w=400&h=600&fit=crop"
description: "A young man who was imprisoned in an underground cemetery for years, guarding the burial grounds for the deceased, suddenly finds himself free and in possession of a mysterious power. With his newfound abilities, he embarks on a journey to dominate the cultivation world, facing powerful enemies and uncovering secrets of his past."
status: "ongoing"
genres:
- "xianxia"
- "fantasy"
- "action"
- "adventure"
rating: 4.8
views: 32500000
followers: 1250000
chapters: 4200
language: "English"
tags:
- "cultivation"
- "reincarnation"
- "overpowered"
- "harem"
- "martial-arts"
- "chinese"
createdAt: "2016-05-12"
updatedAt: "2024-03-20"
---
A classic xianxia tale of power, revenge, and cultivation. Emperor's Domination follows the journey of an ancient being reincarnated into a new era, using his vast knowledge and unparalleled skills to climb the ranks of the cultivation world. With a harem of beautiful women, countless powerful enemies, and secrets spanning millennia, this epic story explores themes of power, legacy, and what it truly means to dominate.
The protagonist, Li Qiye, navigates through ancient tombs, forgotten realms, and powerful sects with the confidence of someone who has seen empires rise and fall. His journey is not just about accumulating power but about reclaiming what was once his and shaping the destiny of entire worlds.

View File

@ -0,0 +1,28 @@
---
title: "Homepage Configuration"
description: "Featured, trending, and recent novels for the homepage"
featured:
- "solo-leveling"
- "the-beginning-after-the-end"
- "omniscient-readers-viewpoint"
trending:
- "solo-leveling"
- "the-beginning-after-the-end"
- "omniscient-readers-viewpoint"
- "reverend-insanity"
- "legend-of-the-northern-blade"
- "nano-machine"
- "reincarnation-of-the-strongest-sword-god"
- "my-disciples-are-all-villains"
recent:
- "nano-machine"
- "the-player-hides-his-past"
- "turns-out-im-in-a-villain-clan"
- "solo-leveling"
- "emperors-domination"
- "omniscient-readers-viewpoint"
- "reaper-of-the-drifting-moon"
- "silent-witch"
---
This file defines the novel slugs to display in each homepage section for optimized loading.

View File

@ -0,0 +1,48 @@
---
title: "Chapter 1: The Awakening of Natasha"
slug: "ch-1"
novel: "i-am-the-sorcerer-king"
number: 1
views: 1420000
likes: 105000
wordCount: 3100
createdAt: "2018-01-15"
---
The coffee shop where Natasha regained consciousness was called "Starlight Café," according to the faded sign visible through the grimy window. Her surroundings were utterly alien—the architecture, the vehicles outside, the strange glowing rectangles everyone carried in their hands. Her last clear memory was of ancient towers and magical arrays spanning across continents.
She sat up carefully, cataloging her situation with the analytical mindset of someone accustomed to survival. A young man across from her was watching with obvious concern, the same expression humans everywhere wore when confronted with the inexplicable.
"Are you okay?" he asked in heavily accented Korean—or was it English? Natasha's understanding of modern languages was fragmentary at best. "You collapsed on the street. I brought you here."
Natasha's hands trembled. Her power was there—still accessible, still resonant within her being—but it was muted, as if filtered through heavy glass. She'd been a Sorcerer King, capable of reshaping reality through pure mana manipulation. Now she could barely sense the ambient magical energy.
"What year is this?" she asked.
"2024," the young man replied, his concern deepening. "Are you from a different country? Your accent is—"
Natasha closed her eyes. Two thousand and twenty-four. If she'd died in 1847, and somehow been reborn or transported... that was nearly two centuries. Two entire centuries had passed.
"I need to understand this world," she said aloud. "Everything. How society functions, how magic is perceived, what forces currently hold power."
The young man—whose name was Park Min-jun—became her unlikely guide. Through him, Natasha learned that magic was real but hidden, known only to a select few called "Awakened." Public society believed magic to be myth. Governments maintained this facade through careful information control.
More troubling: someone was hunting for her specifically. Within the first week, assassins appeared—skilled practitioners using magic in ways that seemed crude compared to her knowledge but effective enough against ordinary targets.
"There are organizations watching for powerful Awakened," Min-jun explained. "The government, private corporations, ancient sects hiding in plain sight. Your power level—if assessments are accurate—makes you a resource worth fighting for."
Natasha understood immediately. She was a relic, a being from an era when magic was commonplace. If her knowledge became known, every faction would want her captured, studied, or controlled.
"I need to fake my death," she decided. "Create a history for myself, integrate into society without revealing my true nature. Only then can I understand what has changed."
Using magical techniques forgotten by modern practitioners, Natasha created false identity documents, established a history as an exchange student from a remote country, and began the long process of learning how civilization had evolved in her absence.
What she discovered was simultaneously fascinating and disturbing. Magic in the modern era was systematized, commodified, controlled. The raw, untamed power of her original world had been refined into a regulated system where practitioners were licensed, ranked, and monitored.
Worse, there were glimpses of something massive moving behind the scenes—an organized force with resources spanning nations, capable of suppressing magical incidents and erasing evidence of the supernatural. A shadow government that made the old kingdoms look primitive by comparison.
And somehow, they had known she would awaken. There were records, decades old, describing her appearance. Protocols in place for her emergence. As if someone in her original timeline had predicted her rebirth and left instructions.
"We need to find whoever created these records," Natasha told Min-jun. "Because whatever force prepared for my arrival will not rest until they've located me."
The hunt was beginning, and Natasha—once a king of sorcerers—would have to navigate a world that had moved on without her, learn to use her diminished power in this new context, and answer the fundamental question: why had she been brought back, and by whom?

View File

@ -0,0 +1,29 @@
---
title: "I Am The Sorcerer King"
slug: "i-am-the-sorcerer-king"
author: "Park Sung Woo"
authorAvatar: "https://i.pravatar.cc/128?u=parksungwoo"
authorBio: "Korean web novelist exploring magic systems"
cover: "https://placehold.co/400"
description: "Natasha, once a powerful sorcerer king, is reborn in the modern world with no recollection of his past life. As he regains his memories and powers, he discovers that magic has been hidden from mankind for centuries. With his resurging abilities and the mystery of his rebirth, he must navigate a world where both modern and ancient magic coexist."
status: "ongoing"
genres:
- "fantasy"
- "magic"
- "adventure"
rating: 4.5
views: 7800000
followers: 480000
chapters: 268
language: "English"
tags:
- "rebirth"
- "magic"
- "modern-fantasy"
- "power"
- "korean"
createdAt: "2018-01-15"
updatedAt: "2024-03-12"
---
A captivating blend of modern fantasy and ancient magic. I Am The Sorcerer King explores what happens when prehistoric power awakens in the contemporary world, with stakes that threaten both realities.

View File

@ -0,0 +1,254 @@
---
title: "Chapter 1"
slug: "ch-1"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"......Waaaah!"
Terror filled the eyes of the pretty little child with a red ribbon in her hair, and soon tears welled up. The next moment, she burst into loud, desperate sobs, as if she had seen a monster.
Duke Ferio Voreoti narrowed his brows, irritation evident on his face, and waved his hand dismissively. An orphanage staff member, who had been anxiously watching from behind the door, quickly rushed in and took the crying child away.
As the childs wails gradually faded—
“How long do I have to keep doing this?”
With a short sigh, his black bangs shifted slightly. His dull black eyes were filled with boredom, and as that emotion flickered across his gaze, he briefly looked at the spot where the child had been before turning his attention elsewhere. A bottle of whiskey sat on the desk used by the orphanage director.
“This was your decision, Your Grace,” came the response from his secretary, Lupe, who stood right behind him.
“This is a new record,” Lupe added.
“What is?”
“The children start crying the moment they see your face.”
This was the fifth orphanage Ferio Voreoti had visited.
“The instant they see you, theyre terrified...”
“Come to think of it, my sword hasnt tasted blood in quite some time.”
“...How rude, truly. Thats exactly why ignorant children act this way.”
Not even recognizing the greatness of the Duke.
Lupe, who had quickly adjusted his stance, was just as exhausted. Even though they needed to return to the Voreoti territory as soon as possible, they were constantly stopping by orphanages along the way, making the journey unnecessarily tiring.
Lupe gazed wistfully at Ferio Voreoti, who sat before him. As the Duke of Voreoti, he ruled over the farthest northern lands, a territory known for its harsh and perilous nature. Even from childhood, he had possessed striking features—both in terms of good looks and sheer intimidation.
His hair and eyes were a deep, endless black. His lips, which had a slight tint of color, were well-shaped and moderately full. A sharp nose and defined jawline completed his chiseled features, and beneath them was a strong, masculine neckline. His broad, muscular frame—built from years of rigorous training—was obvious even through his clothes. As one of only two Ducal houses in the empire, he was undoubtedly the most eligible bachelor.
However, despite his remarkable appearance, Ferio Voreoti exuded an overwhelming presence that overshadowed his looks. He had been born embodying the title of his family—the "Black Beast of the North." He was a living example of what it meant to kill with a single glance.
Even Lupe, who had served him for a long time, sometimes flinched. How much worse must it be for those children?
But why is he suddenly looking for a child...?
Lupe recalled the moment this whole situation had begun just a few days prior.
"Im going to adopt a child."
After returning from the imperial palace, Ferio Voreoti had casually tossed his coat to his butler and uttered those shocking words as if they meant nothing. And now, he was personally traveling from orphanage to orphanage, making every single child cry.
Wouldnt it be easier to just get married?
If he did that, then in a few years, he would have his own biological child. Lupe simply couldnt understand his masters reasoning. No matter how intimidating he was, he was still the empires most eligible groom. There was never a shortage of women and noble families hoping to marry into the Voreoti line.
Lupe suddenly remembered last winter. Back then, mere rumors that Ferio Voreoti was considering marriage had sent noble families scrambling. They had sent countless letters, hoping to introduce their marriageable daughters. Thanks to that, the mansion had stayed quite warm throughout the season.
“Was that the last child?”
Just as Lupe was reminiscing about the roaring fireplaces, the Dukes voice pulled him back to reality.
“Yes, that was the eighteenth and final child.”
Lupe signaled to a knight nearby. Understanding the message, the knight stepped outside to prepare for departure. As the large, imposing Voreoti carriage neared readiness, Ferio and Lupe emerged from the orphanage.
“Youre leaving already?”
The orphanage director hurried after them, rubbing his hands together eagerly. Despite the chilly weather with winter fast approaching, his flushed face was covered in sweat and grease.
“I deeply regret that we could not host you more properly,” he added.
His tone feigned disappointment, but his expression was one of relief. At the same time, greed flickered in his eyes.
“The children here are truly beautiful and well-behaved. Just meeting Your Grace even once is a stroke of lifetime fortune. But, well... winter is coming soon. I fear how these poor children will survive...”
Lupe was skeptical. The other orphanages they had visited were not in great financial shape either. Yet, those places had ensured their children had warm winter clothes and well-maintained facilities.
This orphanage, however, was different. The playground equipment had long been broken, the large decorative flowerpots hid shattered windows behind them, and cracks ran along the walls. It was obvious the director had no interest in properly running the orphanage.
The children, too, reacted differently. In the other orphanages, the terrified children had sought comfort from their teachers. But here, the children flinched at the mere touch of the staff members leading them away.
Right now, Ferio Voreoti was assessing the orphanage, searching for a child to adopt under the pretense of financial support. This orphanage, too, would soon receive Voreotis funding. But looking at the directors greedy hands, Lupe felt, for the first time, that it was a waste of Voreotis wealth.
Though, compared to Voreotis fortune, its nothing more than dust.
Just then—
“Nia!”
A sharp voice rang out from behind them.
Everyone turned to see who had dared to behave so rudely in the Dukes presence. A startled teacher was holding a small child, scolding her.
“Let go!”
The child fiercely bit down on the mans hand.
“Argh!”
With a cry of pain, the man let go, and the child wasted no time dashing forward, coming to a stop directly in front of the Duke.
Ferio Voreoti, who had been the only one not to turn around earlier, slowly took in the defiant little thing standing before him with her arms and legs spread wide as if to block his path.
The first thing he noticed was her unkempt, greasy hair and filthy clothes. All the other children they had seen today, at the very least, had been clean. But this child was unwashed, and her clothes were no better than rags used by mansion maids.
Yet, despite her appearance, her eyes sparkled like gold hidden in mud.
“Mister!”
Gasps filled the air.
This translation is the intellectual property of Novelight.
Lupe and the knights paled at her audacity. Ferio Voreoti, a mere "mister"? That was a crime with no room for excuses. Some knights looked as if their own heads would roll.
“...My god.”
Lupe, barely regaining his composure, was astonished by the childs sheer nerve. She was the first child who had not cried upon seeing Ferio Voreoti. But that wasnt the most shocking part.
Her hair and eyes...!
The childs hair and eyes were the same pitch-black color as Ferio Voreotis.
“S-Sorry! Ill take care of this immediately—”
The orphanage director stepped forward in a panic, but Ferio Voreoti raised a hand, stopping him. The director froze mid-motion, his body trembling under the Dukes cold black gaze.
“Lupe.”
At the Dukes call, Lupe swiftly reviewed the orphanages records.
“Shes not on the list.”
The director quickly tried to explain.
“T-That child is unruly and always causing trouble, so—”
“So you ignored the Dukes orders? I distinctly told you that His Grace wished to see every child in the orphanage.”
“S-Sorry! Please forgive me!”
The director and the other staff members immediately dropped to their knees, their heads bowed in terror. The child, however, simply watched them with disinterest.
“And what,” Ferio Voreoti said, his voice low, “is your name?”
“I dont have one.”
“Even orphans have names.”
“The adults here call me Nia. But I hate that name.”
They usually just yelled Hey! at her, but whenever they hit her, they suddenly remembered to call her Nia. And when she found out that the name had been taken from a prostitute in one of the smutty novels the director liked to read, she had been horrified.
Ferio Voreoti stared into the childs glittering black eyes.
“...Youre not afraid.”
His sharp black eyes narrowed, and a crimson savagery flickered in them. An indescribable pressure choked the air in the orphanage. The child instinctively hunched her shoulders—but she neither backed away nor lowered her outstretched arms.
“Do you even realize whose path youre blocking?”
Ferio put a little more weight behind his words, and at last, the childs arms began to tremble. For the first time, fear flickered across the face that had been so bold just moments ago. Her dark eyes glistened with unshed tears.
“I could take your head off right now, and no one would question it.”
As Ferio stepped forward, the child shrank back. But still, she refused to back down. Gritting her teeth, she stood her ground through sheer stubbornness.
“......”
Then, Ferio Voreoti halted.
He looked at the child, whose black eyes were the same as his own. Just for a moment, her gaze shimmered—like gold dust scattered in the darkness.
“...A beast cub.”
The words left his mouth before he even realized it.
A beast cub.
He ran a hand along his jaw, contemplating the small child who barely reached his thigh. Bold and unafraid—or rather, afraid, yet refusing to back down. It was... quite interesting.
“That name certainly doesnt suit you.”
Nia was far too soft and tame a name for such a wild and fearless beast cub.
The dangerous red gleam in Ferios eyes faded, returning to a deep, pure black. He decided to give her a name that suited her far better.
“Leonia Voreoti.”
The childs mouth fell open slightly.
“...Thats too long.”
“Leonia is your name, you idiot.”
“Im not an idiot!”
“When we return to the territory, Ill need to call for a tutor.”
Muttering about how there was far too much to teach her, Ferio effortlessly lifted Leonia and tossed her into the carriage.
She flopped onto a plush seat with a thud, then let out a shriek of protest.
Behind them, Lupe and the knights stood frozen, staring blankly at the scene as if they had lost their minds.
“Y-Your Grace!”
Snapping out of his shock, Lupe rushed to the carriage door.
“Wait a moment! What is—?!”
But just as Lupe reached out, he was met with an even more absurd sight.
The infamous Black Beast of the North, Ferio Voreoti, was casually holding back the tiny and frail Leonia with a single finger pressed to her forehead. And he was smirking.
“You—!”
Leonia was seething with rage as she glared at him.
“Do you enjoy playing with kids? Is this fun for you?”
“More fun than I expected.”
“Ugh, youre a pervert!”
“The way you talk...”
So this was why all the old men sighed whenever they talked about their ◈ Nоvеlіgһт ◈ (Continue reading) children.
Briefly amused by the thought, Ferio released her.
Leonia narrowed her big round eyes and growled at him—just like a beast cub.
“Leonia.”
For the first time, Ferio Voreoti called her by name.
On the side of the carriage they rode, the crest of House Voreoti gleamed in the dimming light—a roaring black lion.
A lion that roars (Ferio).
A lion cub (Leonia).
No name could be more fitting for the daughter of House Voreoti.

View File

@ -0,0 +1,372 @@
---
title: "Chapter 10"
slug: "ch-10"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Reaching the living room, father and daughter settled onto a couch near the crackling fireplace.
"Wheres your storybook?"
Ferio asked as Leonia received a book from a maid. Its title: Life is Meaningless.
Despite having a full collection of the most beloved childrens books, Leonia had dismissed them as boring.
"Theyre too childish."
"Youre supposed to read those at your age."
"I already finished them."
Leonia replied dismissively as she opened the book.
Ferios brow twitched.
It was hard to believe she had read through all of them, but somehow, it seemed possible with her.
"...Where did you even get that book?"
"Your study. You said I could read anything there."
"And you chose this one?"
"Based on my experience, life really is meaningless."
Leonia let out an old-soul sigh, lamenting how no matter how hard someone tried in life, one small misstep could ruin everything.
"...Do you miss your real parents?"
Ferio asked, misinterpreting her sigh.
Leonia blinked her round eyes in surprise.
"Uncle."
Then, she said something astonishing.
"I dont know who my real parents are."
Ferio's eyes, usually half-lidded in laziness, widened.
"I have no memory of anything before I entered the orphanage."
Ferio straightened, pulling away from the couch. The child's once-lean face had filled out in just a short time, looking much healthier than when he first met her.
"So, do you want to see them?"
"No."
She answered without hesitation.
"You're my parent now."
"...."
"And..."
Leonia pressed her lips together tightly.
She had no memories of the people who had given birth to this body. If they were alive, it might have been cruel to say, but she felt no love or pity for them.
But within the secret she carried alone, her parents—the ones she remembered—were deeply missed.
And yet, she could never meet them again.
That, too, was a secret she could never tell Ferio.
She also felt guilty towards him in many ways.
Caught in her tangled thoughts, silence stretched longer than intended.
"...Do you need to remember them?"
Leonia glanced up at Ferio hesitantly. His gaze was steady, as lazy as ever, watching her in silence.
"Its fine if you dont."
Sensing her unease, Ferio pulled her onto his lap and popped a candy into her mouth from his pocket.
Her small lips pursed as she sucked on the candy.
"At least you remember that Im your parent."
Leonia, still sucking on the candy, tilted her head up.
Ferio was bothered by the And... she had left unfinished earlier, but he decided not to pry.
What mattered now was that he was the one responsible for her, and they were a rather decent father-daughter pair.
"I thought you forgot, since you refuse to call me Dad even if your life depended on it."
"Th-Thats because Im not used to it yet...!"
"Excuses, excuses."
"Ugh, youre so annoying!"
Leonia flailed her short arms in frustration.
Of course, her tiny fists didnt even ruffle Ferios clothes.
The Duke of Voreoti—who was also the commander of the Gladiago Knights—found her attacks as harmless as a pillow tap.
"Leonia."
Leonia, still huffing in frustration, narrowed her eyes at him.
"What now? If you keep teasing me, Ill bite your chest!"
"Look at me."
"...At your face?"
She was confused by the sudden request, but she shrugged and set aside her book.
Ferio met her black eyes and added—
"Dont look away."
He then grabbed her tiny hands and pulled them away from where they had been resting on his chest.
"And take your hands off there."
"You act like Im the only one whos obsessed."
"Dont talk. Your breath smells like meat."
"You fed it to me!"
Despite the petty argument, neither of them looked away.
Leonia, deciding this was a staring contest, widened her eyes, putting effort into keeping them open.
Ferio, meanwhile, dismissed the tiny growling sounds he heard as mere imagination.
The staring continued.
...What are we even doing?
Just as Leonia furrowed her brows, questioning the entire situation—
Something changed in Ferios gaze.
In his dark irises, a trace of red appeared.
A mere speck at first, but then it grew, slowly spreading until it covered half of his pupils.
Leonia stared at it, mesmerized.
It wasnt scary.
Then, suddenly—
"Ah."
Her eyes burned as if dipped in fire.
Startled, she flinched back.
At the same time, Ferio slowly leaned away, the red fading from his eyes.
"W-What was that...?"
Leonia pressed her fingers against her eyes.
The searing sensation had disappeared as if it had never existed.
She pressed her hands against her eyelids again—nothing but a faint pressure.
"Uncle?"
She turned to him for an explanation.
"Everyone, leave."
Ferios voice was calm but absolute.
The servants, knowing better than to delay, left the room silently, closing the door behind them.
Once they were alone, Ferio spoke.
"I hate beating around the bush."
"Huh?"
"Talking like that is something fools do to act important."
Leonia gave him an odd look.
Did he have some deep-seated trauma about indirect speech?
Ferio ran his fingers through her short black hair, smoothing it down before giving the yellow headband a light flick.
"Lets get straight to the point."
He paused before saying—
"It seems youre my niece."
Leonias jaw dropped.
***
The sudden revelation left Leonia unable to think.
...You had a niece?
Wait. No. Hold on.
Ferio, seeing her frozen expression, patiently waited.
Not out of kindness—just a sort of indifferent courtesy.
Leonia frantically tried to recall the details she knew.
The Black Beasts Companion.
A novel she had read in another world.
The title said it all. It was a story about the Duke of Voreoti, the ruler of the North, and his fated partner, Lady Baria Erbanu.
A typical cliché romance, but well-written.
Leonia realized she was inside that very novel the moment she saw the Voreoti crest on the carriage that had picked her up from the orphanage.
A black lion—the unmistakable emblem of the Voreoti family.
At first, I really thought Id just become a maid.
One day, she woke up as an orphan.
Desperate to escape the abusive orphanage, she gambled her life—only to end up as Ferios adopted daughter.
But now Im his niece?
She replayed the novels plot in her mind.
Nowhere did it mention Ferio having a niece.
Wait, before that...
He was revealing this right after breakfast?!
Dont people usually wait at least a few months to drop a family secret like this?!
It hadnt even been a full month since she was adopted!
Leonia was more shocked by Ferios absolute lack of consideration than the actual news itself.
Of course, she wasnt going to break down crying over this revelation—she wasnt just a normal seven-year-old, after all.
"Im an orphan. You picked me up from an orphanage."
She countered.
Accepting that she carried Voreoti blood wasnt something she could grasp so easily.
"But you bear the mark of Voreoti on your body."
"It could be a coincidence."
"Black hair and eyes are only inherited within the Voreoti bloodline."
"T-Thats...."
Leonia knew that better than anyone.
"At first," Ferio continued, "I thought you were a mage."
"...Huh?"
What made you think that?!
The first time they met had been anything but pleasant.
A filthy orphan had boldly stood in front of the feared Duke of Voreoti, only to be crushed by his overwhelming presence.
"When you looked at me in the orphanage, your eyes shimmered."
He had bared his crimson fangs to intimidate her, and for just a brief moment, her eyes had glowed.
Back then, he assumed it was a manifestation of latent magic.
Some untrained mages instinctively released mana in self-defense.
Thats what Ferio had believed.
But he had been wrong.
"You know what fangs are, right?"
"They're the unique power that only runs in the Voreoti bloodline."
According to the book Leonia had read, when a beasts fangs manifested, a distinct color mixed into the persons black irises. That was why she had been so startled earlier when Ferios dark eyes suddenly turned red.
Why did he suddenly activate his fangs at me?
And more importantly—
Why didnt I feel the same suffocating pressure I did back at the orphanage?
"Your eyes shimmered because they resonated with my fangs."
What Ferio had seen in the orphanage—that strange glimmer in Leonias eyes—hadnt been a release of mana.
It had been her own fangs making a tiny, hesitant appearance.
Her instincts had reacted to his crimson fangs, and she had unconsciously bared hers in return.
"So, that resonance thing... I did that?"
"Fangs respond to fangs."
A beasts fangs were a power that only passed through bloodlines. Unlike aura or mana, which varied from person to person, fangs carried a unique energy wave that remained consistent within the lineage.
Because of that, when someone with fangs encountered another of their kind, they could sometimes involuntarily awaken their own power.
What had happened earlier had been exactly that—a resonance between their fangs.
That was why she hadnt felt any oppressive pressure. Ferios crimson fangs hadnt been unleashed to intimidate, but to confirm their connection.
"So I really am a Voreoti...."
Leonia reached up with small hands and pinched her cheek.
It hurt.
But everything still felt like a dream.
Waking up one day to find herself an orphan.
Suffering from the cruel abuse of the orphanage.
Meeting Ferio and realizing she had somehow entered the world of a novel.
And now—discovering that they were actually related by blood.
"Then...."
No matter how dreamlike everything felt, there was still one thing she couldnt comprehend.
"Who gave birth to me?"
Even as someone who had read the novel, Leonia didnt know the answer to this.
As with many stories of this type, the novel had established that Ferio was the only member of the Voreoti family.
His parents had died early, and he had no siblings.
At that moment, Ferios expression darkened slightly with irritation.
"...My cousin."
He added with an exasperated sigh—
"The most infuriating woman in the world."

View File

@ -0,0 +1,280 @@
---
title: "Chapter 2"
slug: "ch-2"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
“The reason why Duke Ferio Voreoti suddenly decided to adopt a child was incredibly trivial.”
“My son spoke yesterday!”
It was a single offhand remark from his only friend.
Two years ago, Count Carnis Rinne, who had welcomed his second child, would take any chance he could to brag about how adorable and precious his children were. Ferio always found it strange that his friend would go on and on about his kids every time they met, and yet, despite all that talking, he never seemed to lose his voice.
But that was just the way Carnis was.
Count Carnis Rinne was one of the few people who could approach Duke Ferio Voreoti without hesitation and have an honest conversation with him. If Ferio was a towering, merciless snow-covered mountain, then Carnis was a warm, sunlit meadow. Despite their polar opposite personalities, the two got along surprisingly well.
“So, when are you getting married?”
“When youre dead.”
“I really want to be in-laws with you!”
Carnis would constantly talk about the joys of marriage and the adorable nature of children. The plump little bottoms in diapers, the chubby arms, the way his eldest daughter would run to greet him whenever he came home exhausted—he wasnt just bragging at this point; it was practically evangelism.
Normally, Ferio would have let it go in one ear and out the other, but for some reason, that day, he couldnt ignore Carnis words. Maybe he had heard them so often that they had been permanently carved into his brain.
“A father is truly a noble existence.”
But the one saying this didnt look noble at all. His upper lip stretched in a sappy grin so exaggerated that it was almost disgusting. Before marriage, he had made that same face whenever he talked about his fiancée, and now, he wore it every time he gushed about his children.
“Theyre really adorable! Why dont you believe me?!”
Ferio had scoffed and told him to look in a mirror before saying nonsense like that, then climbed into his carriage.
That day, the streets were unusually full of families. Everywhere he looked, he saw parents and children laughing together. They all looked... happy.
Was it really that great?
Resting his head against the carriage window, Ferio closed his eyes.
***
“...So thats why you adopted me?”
Leonia was dumbfounded.
Even though the adoption had happened so suddenly, the carriage was still parked in front of the orphanage. Lupe had gone inside to fill out the adoption paperwork, while the knights stood guard around the vehicle. In the meantime, Ferio had decided to tell his new daughter the reason he had adopted her.
He adopted a child... because of something his friend said?
During the two years she had spent at the orphanage, Leonia had seen many adults come looking for children to adopt, and each had their own reasons. Some had struggled to have children for years. Some simply loved kids. Others had come to volunteer and couldnt bear to leave without taking a child with them. Some had lost their own children and wanted to fill that void.
But no matter what, they had all shown some form of affection or interest in the children.
Ferio had not.
“Youre an idiot, arent you?”
She had never heard such a ridiculous reason for adoption before. Leonia openly sneered at him.
“What a lovely way for my only child to speak.”
Ferio clicked his tongue, but he wasnt actually displeased. In fact, he much preferred her bold and defiant attitude over the children who had shied away and cried before him.
“Either way, wasnt this what you wanted? Otherwise, you wouldnt have stood in my way.”
“...Yeah.”
Leonia reluctantly admitted it.
She had chosen this man because she wanted to escape the miserable orphanage. But it had been nothing more than a gamble. Unexpectedly, luck had been on her side.
Even so, she didnt feel entirely at ease just yet.
“Hey.”
Gazing at the orphanage building, Leonia spoke up. Just then, Lupe appeared, stepping out of the building, with the orphanage director groveling behind him. Leonias round eyes narrowed.
“...I have a request.”
The orphanage director looked uneasy. The other teachers werent any better.
“The director and the teachers here are embezzling funds.”
“I suspected as much.”
“They also abused us. And lately, theyve been in contact with a pimp.”
Ferio, who had been looking distastefully at her tattered sleeves, suddenly froze.
“...Do you even know what a pimp is?”
“Of course I do! They sell people to bars and brothels.”
Leonia grit her teeth.
“...They were planning to sell one of the older girls to him.”
“......”
“So, can you punish them?”
“All of them?”
At Ferios question, Leonia quickly corrected herself.
“Except for Teacher Connie. She was the only one who looked after us.”
“The woman with brown hair and an injured finger. Is that right?”
“Yeah!”
How did he know that? Leonia was amazed.
Ferio didnt mind her wide-eyed admiration. The way she stared at him made his chest feel oddly ticklish, as if a loose thread had gotten caught inside his clothes.
“She was the only one worried about you children.”
Unlike the director and the other teachers, who either groveled or watched cautiously, Connie had kept a close eye on the Duke. Each time a child had burst into tears, she had shot him looks filled with resentment.
She was the only one in that place who had been truly concerned about the children.
“Whenever he got drunk, he always hit us.”
“The director?”
“Yeah.”
Ferios gaze dropped to Leonias arm, where a faint bruise peeked out from under her short sleeves.
“Did he do that one?”
“No, that was another teacher.”
Leonia subtly pulled her sleeve down, hiding the bruise.
“The ones the director gave me are on my back.”
She spoke as casually as if she were brushing off dust from her clothes.
Leonia then proceeded to tell Ferio about every cruel thing she had endured at the orphanage.
As he listened in silence, his dark red eyes grew sharper.
“So, punish them.”
“How?”
Should I just kill them?
Ferio asked without hesitation.
But Leonia shook her head.
This translation is the intellectual property of Novelight.
“Torture them until they beg for death.”
Her black eyes glistened.
Ferio stared at them intently, watching as they sparkled like scattered gold dust.
...Is she really a child?
The first image that came to mind was Carnis eldest daughter, Ufikla.
“The little girl, who resembled a red fox, had the guts to look Ferio Voreoti in the face without shedding a single tear. If he remembered correctly, Ufikla, the eldest daughter of his friend Carnis, was six years old this year. But Leonia was even smaller than her.
Even taking into account the poor conditions of the orphanage, she was far too thin. At first glance, she looked no older than five. But in contrast, the way she spoke was far more mature than children her age. Words like embezzlement and torture were not ones a child that young should even know.”
“Your Grace.”
At that moment, Lupe returned with the adoption documents. Ferio didnt bother with praise, simply gesturing with his fingers for him to hand them over. The papers contained Leonias personal information.
She was seven.
“Lupe.”
“Yes, Your Grace.”
“Youre staying here.”
“...Excuse me?”
Just when he had finally relaxed, thinking he would be returning to the territory, Lupe received a devastating blow. Leonia pitied his despair, but Ferio remained indifferent. He didnt seem to care at all.
“Its filthy here. You should at least clean up.”
Lupe opened his mouth a few times, then let his shoulders sag. His complexion turned pale, as white as his hair.
“Make sure you clean thoroughly. Dont leave a single speck of dust.”
“...Understood.”
“Mister!”
Leonia gave Lupe an enthusiastic cheer.
“While youre cleaning, you should break their arms and legs! Whip their backs with a leather belt! Dunk their heads in dishwater! Shake them until every last speck of dust falls off! Make sure they never get back up again.”𝑓𝑟𝑒𝘦𝓌𝑒𝑏𝑛𝑜𝘷𝑒𝘭.𝒸𝘰𝑚
Lupes face turned as blue as his hair. Ferio, on the other hand, was quite pleased by her fiery spirit.
“Oh, but leave Teacher Connie alone! She was good to us.”
“The evidence of embezzlement is behind the picture frame, in the safe!”
The carriage began moving. Lupe, along with two knights who had been left behind, stood silently as they watched the carriage disappear into the distance. Leonia kept sticking her head out the window, waving until the orphanage was completely out of sight.
“...Your Grace, she isnt actually your secret daughter, is she?”
Knight Manus asked hesitantly. Had he scoured orphanages so thoroughly because he was searching for his hidden child? That was how shocking Leonias presence was. Not to mention, she shared the same black hair and black eyes as Ferio.
“Youre saying something quite outrageous with a straight face,” replied Probo, another knight, agreeing with his comrades sentiment.
“...Anyway.”
Lupe looked completely exhausted. The knights pitied him.
“We should get started.”
If they wanted to return to the territory quickly and rest, they first needed to carry out Ferios command—to clean up. Lupes eyes sharpened. There was a mountain of filth to get rid of.
***
Two days after leaving the orphanage, Leonia had finally rid herself of the grime that clung to her body.
During a stop at an inn, she washed herself three times in warm water before she was finally clean. Meleis, the only female knight among Ferios retinue, helped her.
Once she was clean, Leonias small body was revealed to be covered in scars. Scratches and bruises were everywhere, and on her back were several bright red welts, as if she had been beaten with a leather whip. Meleis immediately reported this to Ferio.
Upon hearing the news, Ferio ordered a knight to return to the orphanage and bring back every single person who had laid a hand on the children. He would deal with them personally.
The next day, Leonia was dressed in a soft blue dress and a thick, long fur cloak that Ferio had somehow procured. Her roughly chopped black hair was neatly arranged with a red ribbon, thanks to Meleis help.
“Ive never worn something like this before!”
Excited, Leonia spun around and eagerly asked how she looked. Even she thought she looked quite nice now.
“It suits you well.”
Meleis, who had helped her bathe, smiled warmly.
But inside, she felt heartbroken. Not only had this child suffered in an orphanage, but she had never even worn proper clothes before. Meleis had a younger brother around Leonias age, which made it even harder for her to accept.
Meanwhile, Ferio remained silent for a long time.
“...Now you actually look like a person.”
When he finally spoke, his words were nothing but sarcasm.
“I was always a person,” Leonia shot back.
She was clearly expecting a compliment.
“Youre not even pretty. What would I compliment you for?”
“Arent you being too harsh? Youre my dad now.”
“And yet, you still call me Mister.’”
“Because Dad doesnt feel natural yet!”
“Well, Im not used to giving compliments either.”
Ferio smirked unapologetically.
Leonia, irritated, puffed up her cheeks in frustration. But because she was still so thin, the effect was more pitiful than cute. Ferio frowned. The lighthearted mood he had been enjoying a moment ago immediately vanished.
“If you want to hear compliments, put on some weight.”
The only child Ferio had ever known was Carnis daughter, Ufikla, and Leonia was so scrawny in comparison that he couldnt even begin to compare the two. A sudden surge of irritation welled up in him. Of course, the target of his anger was not Leonia—but the orphanage staff, whom he would soon meet in the underground dungeons of the Voreoti estate.

View File

@ -0,0 +1,316 @@
---
title: "Chapter 3"
slug: "ch-3"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
And so, from that moment on, every meal Leonia ate contained plenty of meat.
Ferio refused to leave for the Voreoti territory until she had eaten to the point that her stomach was full and she let out a proper burp.
“...Im so full.”
Having eaten too much, Leonia lay sprawled across the carriage seat, sluggish and drowsy. A few small hiccups escaped her lips.𝒻𝘳𝑤𝒷𝘯𝓋𝘭.𝑐ℴ𝑚
“What if you throw up?”
“Then I will.”
Ferio answered flatly, reviewing documents in his seat.
“But this carriage is expensive. It would be a waste. And it would be hard for the cleaners.”
“...Why are you worrying about that?”
Ferio was genuinely curious.
Only then did Leonia slowly sit up.
The bright blue dress, the fur cloak, and the red ribbon neatly tying her hair together—it all suited her so well that it was as if she had always worn such things.
Theres a lot to buy.
The Voreoti mansion had absolutely nothing meant for a child. The only things that came close were Ferios own childhood belongings, but those were long buried in a storage room, covered in dust.
And he didnt want to give her those.
“......”
For a brief moment, memories he didnt want to recall surfaced in Ferios mind. He set the documents aside.
Leonia was still staring at him.
“You are now the Lady of House Voreoti.”
As he met her gaze, he continued.
“If we have to throw out a carriage, so be it. Even as you breathe right now, Im earning enough to buy a new one. Whatever you want, just say it.”
“Ohhh!”
Leonia exaggerated her admiration.
“Mister, youre actually kind of cool.”
Then she chuckled, mumbling about how money was the best.
For a moment, Ferio felt like there was a stingy old miser sitting across from him instead of a child.
She wasnt acting like this because she was a commoner. No, her mannerisms resembled that of an adult who had seen all the hardships of life.
And that bothered him—like a tiny splinter stuck in his finger.
“I still dont want to throw up.”
Throwing up hurts. Leonia muttered this as she gazed out the carriage window. Ferios eyes followed hers. Outside, the trees were painted in brilliant colors, barely clinging to the last traces of autumn.
“And a person should be rich in spirit.”
“Thats all nonsense.”
“Yeah, it is.”
Leonia shrugged, her tone indifferent. It was just something poor people told themselves to feel better.
“You actually understand something for once, Mister.”
On their first day as father and daughter, they found that they got along surprisingly well in many ways. Ferio was rather satisfied with this family relationship that had formed on a whim.
A moment later, a knight tapped on the carriage window. When Ferio lowered it, Meleis bowed slightly and informed them that they were about to arrive at their destination.
Leonia recognized her and immediately brightened, waving excitedly.
“Meleis unnie!”
Leonia greeted her cheerfully. Meleis returned a small smile and bowed her head.
“I like her.”
“Shes an excellent knight.”
Only then did Ferio realize that he needed to assign knights for Leonias protection. He didnt just need things—he needed people, too. A tutor, a governess, and personal guards. Meleis was already a strong candidate to become Leonias escort knight.
“But Leonia.”
As Ferio quickly sorted through the things that needed to be done once they arrived at the territory, he suddenly asked,
“Have you ever used a gate before?”
***
“Uweeegh!”
Leonia clung desperately to a withered tree as she emptied her stomach.
Just moments ago, the forest had been filled with the vibrant hues of autumn. Now, all around them, towering evergreen trees stood blanketed in pristine white snow. The scene was breathtaking.
But Leonia had no time to admire it.
The recoil from using the gate to instantly cross into the Voreoti territory had hit her hard, leaving her completely overwhelmed by nausea.
“Young Miss, are you alright?”
Meleis gently patted her small back.
“How pathetic.”
Ferio clicked his tongue in disapproval.
When the carriage had arrived near the gate, Leonia, wide-eyed, had immediately asked what it was. Ferio explained that it was a method of traveling long distances in an instant, but that a small number of first-time users sometimes experienced motion sickness.
So, like a tunnel or something?
She had mumbled something incomprehensible to herself before nodding.
Ive never used one before, but I should be fine.
She had been wrong.
She was one of the rare few who suffered extreme motion sickness from their first gate travel.
“Im dying...”
Weakly leaning into Meleis arms, Leonia looked like a withered weed.
“No one has ever died from motion sickness.”
Seeing her so frail and miserable irritated Ferio once again. The child was already too thin, and now she was listless and groaning in pain.
But this irritation was different from his usual kind.
It felt similar to the anger he had felt when he first noticed the bruises on her arm.
“Youre awful, Mister...”
Even as she suffered, she still had the energy to complain.
“See? Youre not dead yet.”
Ferio took off his fur-lined cloak. Then, carefully pulling Leonia from Meleis arms, he wrapped her snugly in the thick fabric. In an instant, she became a small, bundled lump.
“Phew...”
Leonia sighed in relief.
Watching her closely, Ferio hesitated before awkwardly patting her back.
“Ugh, dont do that...”
Leonia whined.
She felt like she would throw up again.
Ferio immediately stopped.
“You sure do talk a lot.”
He grumbled, telling her to just shut up and rest if she wasnt feeling well.
For once, Leonia didnt argue back. She only let out a soft groan before growing quiet.
“...Can I throw up on your cloak?”
“Do you take me for a fool?”
Ferio scowled.
This translation is the intellectual property of Novelight.
But despite his irritation, his pats remained careful and gentle.
Before long, steady breathing could be heard.
Leonia had fallen asleep in his arms.
“...Ugly little thing.”
Ferio muttered, staring at her sleeping face.
But despite his words, the corners of his lips curled up ever so slightly.
As soon as Ferio gave the quiet order to move, the knights waited until he had entered the carriage with Leonia before beginning their preparations for departure.
They were utterly shocked by what they had just witnessed.
“...Did you see that?”
“I saw it.”
“I thought I was hallucinating.”
“He hasnt hit his head recently, has he?”
“...No way. She really is his hidden daughter.”
Duke Ferio Voreoti, the most formidable ruler in the Voreoti bloodline, was infamous for his indifference toward others. Like the lords before him, he was known for his lack of emotions, his cold nature, and his ability to disregard anything he deemed unimportant.
And yet, here he was—gently cradling a child he had picked up from an orphanage just the day before, lowering his voice so he wouldnt wake her up.
To the knights who had served him for years, this was more terrifying than any monster lurking in the Northern Mountains.
“The Young Miss isnt ordinary either.”
Meleis, who had briefly looked after Leonia at the inn, suddenly spoke up.
She already considered Leonia a Voreoti, treating her with the respect due to the Dukes daughter. Ferio had acknowledged her as such, and so, as loyal knights, they had no reason to object.
“Yesterday, she even kicked His Grace in the back.”
“WHAT?!”
The knights turned pale.
“What kind of lunatic does that?!”
Even Meleis looked just as shocked as them as she continued.
“His Grace had just come out of the bath and made a comment about how even after washing # Nоvеlight # up, the Young Miss was still ugly.”
At that, the knights winced.
Of course, their lord would say something like that.
“So then, the Young Miss immediately shot back, Did you contribute anything to my face? and started arguing with him. But even that wasnt enough for her, so she kicked him.”
The knights frantically rubbed their ears, convinced they had misheard.
But Meleis expression was dead serious.
The shock among them deepened.
There were two things that astounded them.
First, Leonias sheer audacity.
Second, Ferios reaction.
He had teased a child.
He had joked with her.
It was such a small, simple thing—yet it was unthinkable.
“...She really must be his biological child.”
Otherwise, how could such a tiny little thing be so fearless in front of the Duke?
The only explanation was that she was his blood.
And so, as they whispered among themselves, the knights slowly began to settle on the same conclusion:
Leonia Voreoti was the Dukes trueborn daughter.
***
Voreoti Territory.
The name referred to a single northern region, but it had earned several nicknames—the den of monsters, the land of eternal snow, and the home of black beasts.
The "black beasts" referred to House Voreoti, the ruling family of the land. Known for their exceptional strength beyond human limits, they were among the few in the empire who possessed black hair, a trait that inspired both reverence and fear. The roaring black lion on the family crest was a reflection of that legacy.
“Youre lucky.”
Ferio Voreoti spoke as Leonia stirred awake. Half-asleep, she lazily smacked her lips and blinked up at her father.
“You have the same black color as me.”
“Hmmm.”
Still wrapped tightly in his cloak, Leonia turned her drowsy gaze to the window. After settling her stomach and getting some rest, she found that the sun was now high in the sky.
“Theres so much snow.”
“Snow stays on the ground here until spring.”
“Is it very cold?”
“Youll get used to it.”
“I like the cold.”
Leonia smiled brightly.
Ferio found himself unconsciously relaxing at the sight.
“Is this your first time seeing snow?”
“Mm-mm.”
Leonia shook her head.
Her reflection in the glass held a deep, lingering expression that didnt belong to a child.
Ferio quietly observed his daughter. He had felt it from the very first time they met—she was too mature.
The orphanage records had listed her age as seven, but she looked more like five due to her frail frame. Yet, despite this, she used complex words and sometimes carried a quiet, knowing expression that startled him.
She might not be a commoner.
Ferios sharp black eyes carefully studied her.

View File

@ -0,0 +1,375 @@
---
title: "Chapter 4"
slug: "ch-4"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
At first, he had assumed she was just another orphan of low birth. Her casual, cheeky remarks and bold behavior were nothing like those of a noble child.
But after just one day with her, he saw things that made him doubt that assumption.
She used a fork and knife effortlessly, ate her meals neatly, and—even when she argued—never crossed the line.
Perhaps she had once belonged to a noble family.
...But shes my daughter now.
Even if her real parents were aristocrats, Ferio had no intention of sending her back.
If anything, he would scold them for letting their child end up in such a miserable state.
Besides, Leonia had turned out to be far more entertaining than he expected.
Time spent with her was never dull.
And, more importantly, she did not fear him.
Her sharp tongue and audacious behavior were fitting for a daughter of House Voreoti.
For the first time, Ferio felt he could understand why Carnis always boasted about his children.
“Mister.”
“What.”
“Im hungry.”
Before he realized it, Ferio let out a small chuckle.
No matter how sharp-tongued she was, she was still just a kid. After throwing up and groaning earlier, she was already back to normal.
“Just wait a little longer.”
He replied in a casual tone, telling her that they would arrive at the mansion soon.
Her stomach was empty from vomiting, but Leonia obediently nodded.
“Mister.”
“What now?”
Even though she was hungry, her energy remained high.
Her eyes sparkled even brighter at the mention of the mansion.
Then, with a mischievous grin, she said—
“Mister, your chest is really firm.”
The sound of muffled laughter came from where her head rested.
For the first time in his life, Ferio Voreoti had been sexually harassed by his own daughter.
He felt strangely conflicted.
***
“Wow.”
Leonia pressed her nose against the carriage window, taking in the scenery of the Voreoti estate.
The grim nicknames "den of monsters" and "land of eternal snow" felt laughable in contrast to the peaceful view before her.
For a territory said to be remote and isolated, it was surprisingly well-developed.
Paved roads stretched ahead, glimpses of a large marketplace flickered through the streets, and lampposts dotted the paths.
She could easily imagine the lights glowing warmly when night fell.
“This is amazing! Ive never seen anything like this before!”
“Its still much smaller than the capital.”
“Ive never been to the capital, so I wouldnt know.”
“......”
“That means, for me, this place is the best.”
Pulling back from the window, Leonia grinned.
Ferio found her smile ridiculous—but not unpleasant.
Soon, the carriage arrived at the mansion.
As the door opened, Leonia was the first to jump out excitedly.
Ferio followed right after her, picking her up again almost immediately.
“Im not sick anymore.”
“I know.”
Still, he didnt put her down.
He had noticed how her legs had trembled the moment she landed.
Inside the mansion, the gathered servants welcomed their lords return.
But their greetings quickly faltered when they saw the strange little girl in his arms.
“This place is huge!”
The child, who shared the Dukes black hair and black eyes, looked up in admiration.
“But mansions like this are always where murders happen.”
Her expression was so serious that an eerie silence filled the room.
Ferio tilted his head slightly.
“How did you know?”
“What?! Someone really died here?”
“Theres a dungeon underground.”
Leonia nodded in admiration.
“Oooh, torture chambers.”
“Do you want to see?”
“There are probably bugs, so no thanks.”
The servants stood frozen, completely overwhelmed by the disturbing conversation.
At that moment, a brave soul stepped forward.
Kara, the butler who had managed the mansion in Ferios absence, greeted him.
“Welcome back, Your Grace.”
However, Kara was a veteran of many years.
He held back his curiosity and focused on performing his duty.
“Youve done well overseeing the estate in my absence.”
After this brief, polite acknowledgment, Ferio immediately ordered for renowned tailors and furniture craftsmen to be summoned.
The sudden command made Kara hesitate.
“...Forgive my impertinence, but...”
Having served House Voreoti for years, Kara had never once questioned his masters orders.
Until now.
“...Why do you need them, Your Grace?”
“Theres no suitable space for a child to live in this mansion.”
“A... child?”
Instinctively, Karas gaze fell to the girl in his masters arms.
The child—who shared the Dukes black hair and eyes—looked up at him with an alert expression, then gave a small, polite wave.
“Hello.”
Then, she bowed her head slightly and introduced herself.
“My name is Leonia.”
“No, thats not right.”
Ferio immediately corrected her.
“The name I gave you was longer than that. Did you already forget?”
“...Am I supposed to say the whole thing?”
“Are you planning to keep introducing yourself with half a name?”
With a scolding tone, Ferio urged her to say it properly.
After a brief pause, Leonia nodded several times.
As she did, Ferio noticed the tips of her ears turning red.
For the first time, she looked her age.
“...Leonia Voreoti.”
This translation is the intellectual property of Novelight.
A large hand suddenly landed on Leonias head.
It was Ferio, patting her as if to say well done.
For the first time in her life, Leonia had received praise.
Her face immediately flushed red, and she covered it with both hands, shaking her head wildly.
“......”
Kara adjusted his slipping glasses.
“...Ill inform the kitchen to prepare another meal.”
Hiding his confusion, Kara returned to his duties.
After instructing a nearby maid to prepare food for the child, he followed Ferio down the hall, watching as the maid hurried off.
***
“I swear its true!”
“The Master came back with a child!”
“She had black hair!”
“He kept carrying her the whole time.”
From the young maids to the cooks, gardeners, and stable hands, the entire Voreoti estate was buzzing about one topic—the child their Duke had brought home.
“Did His Grace have a woman?”
“Of course, he must have. Do you think a man with that face would ever be desperate?”
“Watch your words unless you want to die.”
“But hes so intimidating...”
“The Young Miss wasnt scary, though.”
One of the maids—assigned to assist Leonia under Karas orders—had already met the rumored child.
Tightly braiding her dark brown hair, she shared her impressions with a sympathetic expression.
“She was way too skinny.”
Anyone who saw her could immediately tell that she had been neglected.
Her frail body, her messy, unkempt hair—they were impossible to forget.
And yet, the child greeted everyone cheerfully.
Even Kara, the butler, had taken pity on her and had specifically instructed the staff to take extra care of her.
The other servants fell silent.
They had heard rumors that the girl was from an orphanage, and now, imagining the conditions she had lived in, some clicked their tongues in disgust.
A few even muttered curses at the place she had come from.
“But her round eyes were really cute.”
The maid quickly added.
“Kids are always cute.”
“...Then she really is His Graces...?”
Most of the servants were convinced that Leonia was the Dukes secret daughter.
The only mystery left was who her mother could be.
Naturally, this led to wild speculation.
“Maybe shes the child of that noblewoman who used to send love letters? What was her name... Lady Hieina, from the Counts family...?”
“There was also the Kapher family.”
“I heard Count Rinnes daughter was interested in His Grace, too.”
“Shes only six, you idiot!”
While the estate was drowning in useless gossip, Ferio had summoned three key figures to his office.
Kara, the butler responsible for managing the household.
Mono, the vice-commander of the Gladiago Knights, the familys elite force.
And Meleis, who would soon be appointed as the captain of Leonias personal guard.
To them, Ferio revealed the reason behind Leonias adoption.
“...Thats why you adopted her?”
After hearing the ridiculous story, the three of them were left speechless.
The reasoning was so impulsive, so reckless, that they were stunned.
Especially Kara, who openly scolded Ferio for being irresponsible.
Meanwhile, Ferio leaned against the window, gazing outside, completely unbothered.
“A child is not a pet, Your Grace.”
Kara criticized him harshly.
It felt as if the Duke had picked up a stray cat or dog on a whim and was planning to raise it like a toy.
“Do you really think I dont understand that?”
Ferios sharp eyes narrowed, irritation flashing across his face.
The mere thought of comparing Leonia to some animal disgusted him.
Still, Kara remained firm.
The Dukes impulsiveness would not be good for the child.
Amidst the tense atmosphere, it was Mono who broke the silence.
“Are you absolutely sure shes not related to you by blood?”
He rubbed his stubbled jaw thoughtfully.
“That black hair...”
It was a fact that only the blood of House Voreoti carried black hair.
It was so rare in the empire that it was impossible to ignore.
Naturally, this led to the assumption that Leonia was Ferios illegitimate daughter.
And Ferio did not deny the possibility outright.
But, at that moment, he had more pressing matters to address.
“First, we need to fatten her up.”
That mattered far more than anything else.
Kara sighed heavily, finally accepting defeat.
“Your Grace, what exactly do you plan to do with her?”
“What else? Raise her.”
Ferios gaze returned to the window.
“Obviously.”
Kara could not bring himself to suggest sending the child back to the orphanage.
The girl had done nothing wrong.
This was entirely Ferios responsibility.
And, despite everything, Ferio was trying to do right by her.
In just a few days, the estate had been flooded with merchants, craftsmen, and furniture makers—all hired to prepare a proper living space for Leonia.
A soft, luxurious bed had been placed in her newly decorated room.
A playroom had been built beside it, filled with storybook-lined walls and piles of plush toys.
Across the hall, a dressing room was set up, soon to be stocked with expensive clothes and jewelry.
At least this is better than neglect.
Kara forced himself to accept that reasoning.
“By now, rumors about the Young Miss must be spreading through the territory.”

View File

@ -0,0 +1,378 @@
---
title: "Chapter 5"
slug: "ch-5"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Ferio had summoned so many craftsmen that word had inevitably gotten out.
Despite their attempts to silence the gossip, it was impossible to stop the flow of information.
Just that morning, two maids had returned from the market, reporting that the entire region was talking about the new child in House Voreoti.
“How will you handle this, Your Grace?”
Ferio simply smirked.
His gaze remained fixed on the window, watching the small, round black head moving outside.
Wrapped in a thick fur coat, Leonia was wandering through the snowy garden with the maids.
Her wildly cut hair had been neatly trimmed, now tied back with a bright red ribbon.
Even from a distance, it was obvious how much her complexion had improved in just a few days.
With a beaming smile, she trotted through the snow, looking like a tiny black-furred creature.
The maids following her seemed enamored, constantly offering her things and chatting with her.
It was charming to watch her run around so boldly.
“...Shes already making herself at home.”
Watching her, Ferios lips curled up slightly.
The unexpected sight before them left Kara, Mono, and Meleis in disbelief.
They had never imagined they would witness their Duke smiling so gently.
For a moment, they genuinely worried that the eternal snow of the north might melt overnight.
Finally, Ferio gave a delayed answer to the question he had asked earlier.
“For now, leave it alone.”
His gaze remained fixed outside the window.
“...However.”
Meleis hesitated before speaking up, knowing she was being impertinent.
When Ferio shifted his gaze to her, his expression was not particularly harsh or angry, yet she instinctively tensed.
Still, she could not stay silent.
“There may be unpleasant rumors.”
The northern nobles were more loyal to the Duke of Voreoti than to the Emperor himself.
Their respect came not only from witnessing the Voreoti familys strength for generations but also from pride in their own survival under his rule.
That did not mean they would completely submit like tame beasts.
The biggest topic of discussion in the territory was, of course, the Dukes newly adopted daughter.
A story so intriguing was bound to spread, twisted and exaggerated into endless speculation.
And those kinds of rumors were never kind.
"The Young Miss will become the subject of gossip..."
Meleis clenched her fists, her hands trembling.
Leonia had brought a warmth to the cold, rigid mansion that no one else had.
Wherever the Young Miss was, laughter followed.
As her assigned knight, Meleis had unknowingly grown attached to her.
The thought of people whispering about her behind her back was infuriating.
“I see.”
Ferio turned his eyes toward Meleis, watching her in silence.
A faint satisfaction flickered across his otherwise indifferent face.
"No one would be foolish enough to speak openly."
Now that he had returned, people would not dare to voice their rumors publicly.
However...
If, by any chance, such disgusting gossip reached Leonias ears—
“Then theyll die.”
Unlike himself, Ferio did not want Leonia to hear a single vile word.
It had only been a few days since he had adopted her, yet he already hated the idea of her being tainted by cruel rumors.
No matter how mature she acted, she was still a child.
He could still picture her, sitting in the carriage, marveling at the snow-covered Voreoti lands with wide, excited eyes.
And even now, she was outside, playing in the snow, filled with pure joy.
“If you find anyone spreading filth, I will grant you the honor of staining your blade with their blood.”
Meleis bowed her head.
“Yes, my lord.”
Just then, there was a knock on the door.
Ferio granted permission to enter.
A large man with pulled-back brown hair stepped in, offering a knights salute.
It was Manus, the knight who had stayed behind at the orphanage with Lupe.
Before Manus could even speak, Ferio rose from his seat.
“Our guests have arrived.”
His previously calm black eyes gleamed with a red glint.
***
After spending plenty of time outside, Leonias pale cheeks had turned a rosy pink from the cold.
“Did you have fun?”
Madam Felica, the head maid who had escorted Leonia to the dining hall, asked with a warm smile.
Leonia eagerly nodded and began chattering away about everything she had seen.
“The snow reached my ankles! It felt like it was grabbing onto me every time I walked!”
“Shall I have the servants clear the paths?”
“Mmm-mmm!”
Leonia quickly shook her head, flashing a wide grin.
“I love snow.”
She then announced her grand ambition—she would build a snowman the next time she went outside.
Meanwhile, the maids placed Leonias damp cloak and shoes near the fireplace to dry.
The soft crackling of the logs and the rising warmth filled the dining hall, wrapping it in cozy comfort.
Soon, the head chef arrived, carrying a tray.
"Wow!"
Leonias black eyes sparkled at the sight before her.
On the tray sat:
A steaming cup of milk, topped with fluffy white foam.
Small, bite-sized focaccia bread filled with colorful vegetables, meat, and cheese.
But what caught her attention most—
The tray itself had a tiny black lion painted on it.
A sign that it was Leonias personal dishware.
“Thank you for the food!”
Leonia bowed politely to the chef, who smiled warmly in response.
She took a big bite of the focaccia, chewing eagerly.
A salty flavor spread across her tongue, followed by a rich, nutty aftertaste.
After swallowing, she blew gently on her warm milk before taking a sip.
The gentle warmth melted comfortably in her mouth.
This translation is the intellectual property of Novelight.
“Mmm!”
Her expression softened, almost melting from happiness.
“Its delicious!”
The adults around her watched with satisfaction.
In the week since arriving, Leonias health had improved noticeably.
Her once oily, unkempt hair was now soft and clean, thanks to the scented oils used daily.
Her stick-thin arms and legs had begun to fill out with healthy weight.
And, most notably—
Her once hollow, pitiful face now had a roundness to it, making her look like a proper child.
Just as she finished her snack, a familiar voice called out.
“Young Miss.”
Meleis had entered the dining hall.
"Meleis unnie!"
Leonia immediately jumped down from her chair and ran up to her.
“Did you enjoy exploring the mansion?”
“Yes!”
“You should speak casually with me.”
At the familiar scolding, Leonia hesitated, her lips twitching as if trying to say something.
Meleis found the sight adorable.
“But... its more comfortable using formal speech..."
"A Young Lady of House Voreoti speaking formally to a mere knight is absolutely absurd."
"But being a knight takes a lot of effort."
Leonia insisted that knights worked too hard for the word mere to suit them.
Hearing this, Meleis knelt and kissed the back of her hand in gratitude.
She was relieved to find that the young ladys skin was softer than when they first met—proof that her health was improving.
Looking up, Meleis saw Leonia glancing away shyly.
"Young Miss."
She gently called out, remembering the reason for her visit.
"His Grace is requesting your presence."
"Mister?"
Leonia tilted her head, squinting suspiciously.
“...Is he going to make me do something cute again?"
Ferio had provided her with everything—a bed, books, even a pony with a ribbon around its neck for riding practice.
What kind of rich lunacy is this?
That was Leonias blunt reaction to receiving such extravagant gifts.
And the servants who overheard her had a similar thought.
"She really must be his daughter."
"They speak exactly the same way."
"How can they both be so indifferent?"
But Meleis knew better.
Leonias ears had turned red—a dead giveaway that she wasnt as indifferent as she pretended to be.
Still, no matter how much Ferio spent, his wealth remained untouched.
For House Voreoti, it was the equivalent of pricking a finger with a needle—it didnt even hurt.
However, he had set one condition in return.
“People say that a childs cute gestures are the most heartwarming thing.”
Citing the wise words of his only friend, Count Carnis Rinne, Ferio ordered Leonia to perform one cute act per day.
When she heard this, her face twisted as if she had swallowed a cup of saltwater.
“What happens if I dont?”
She asked weakly.
Ferio shrugged.
"That would just mean I raised my child poorly."
"......"
"I wont kick you out if you refuse."
"......You really are a pervert, arent you?"
Leonias narrowed eyes filled with disbelief as she slowly took a step back.
Ferio flicked her forehead.
"When are you going to call me Dad?"
"Ill... try."
And so, Leonia began her daily performance of forced cuteness.
"You seem to enjoy it, though."
Meleis smiled, recalling Leonias efforts at acting cute.
As her personal knight, Meleis had witnessed it many times.
"I dont enjoy it..."
Leonia pouted, pushing her lips into a duck-like shape.
She simply felt obligated to show some gratitude toward Ferio, since he had taken her in.
And, surprisingly, her efforts worked well.
Whenever Leonia performed her awkward displays of affection, Ferio visibly relaxed.
And as a reward—
He always gave her a piece of candy.
Specifically, a strawberry milk-flavored candy wrapped in a cute little package.
"His Grace... and strawberry milk candy?"
It was an odd combination, but the way Ferio handed it to Leonia was undeniably fatherly.
And Leonia, who carefully stored each piece in a delicate glass jar by her bedside, was undeniably his daughter.
A maid had even giggled as she reported that Leonia spent every night pouring the candies out of the jar and putting them back in over and over again.
Meleis, aware of Leonias painful past, had initially been worried.
But now, she felt relieved seeing how they were building their own unique bond.
"Truly, every day brings new surprises."
The Voreoti mansion, once as cold and silent as a snowy mountain, now felt warmer—like a gentle haze rising in the sun.
"So, why is Mister calling for me?"
Leonia asked.
Meleis gazed down at the small girl in her arms.
"We have guests."
Her gentle expression hardened.
Leonia reached up and touched Meleis cheek.
"Are you angry?"
"Theyre not good guests."
"Why?"
"...Theyre the ones who hurt you."
Meleis stopped walking.
"His Grace ordered me to bring you, but... Im honestly worried."
She hesitated.
"I dont want you to be hurt again by seeing them. If you dont want to go, I can take you back to your room. Ill explain everything to His Grace."
Leonias black eyes widened.
Then, slowly, she opened her mouth.

View File

@ -0,0 +1,395 @@
---
title: "Chapter 6"
slug: "ch-6"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The Grand Voreoti Mansion
House Voreotis estate was vast.
Beyond the large arched iron gates, a front garden stretched toward the main mansion.
A grand fountain stood in the center, surrounded by symmetrical landscaping, before finally revealing the main residence.
Its tall, pointed black rooftops contrasted sharply with the white snow, making it look both majestic and imposing.
Beyond the ornate black lion-adorned doors, a wide hall and grand staircase welcomed visitors.
But todays visitors...
Were not welcomed.
The six guests knelt in the vast entrance hall, bound with their hands tied behind their backs.
Their clothes were tattered, their faces pale with fear.
At the front, the orphanage director knelt, with the teachers and staff behind him, forming a perfect triangle.
Ferio stood before them, meeting each pair of trembling eyes as he spoke.
"What happened to the orphanage?"
A man stepped forward and saluted.
It was Manus, the knight who had stayed behind with Lupe at the orphanage.
Before he could answer, Lupe entered, dark circles under his eyes, and handed over ✧ NоvеIight ✧ (Original source) a report.
"It burned down in an unfortunate fire, Your Grace."
Ferio took the document, flipping through it lazily.
"A fire?"
Lupe nodded.
"Yes. The local authorities confirmed that everyone inside perished. A tragic loss. The children... and even the kindhearted Teacher Connie. Such an unspeakable tragedy."
He sighed dramatically.
"If only we had arrived earlier, we might have saved them."
Ferio hummed in mock agreement, his black eyes tinged with red as he gazed at the report.
The white paper in his hands suddenly burst into flames, disintegrating into a pile of ash at his feet.
The prisoners' faces turned even paler.
But for those who served House Voreoti, this sight was nothing new.
This was the power of the Voreoti family.
Lupe massaged his temples, exhausted.
The Voreoti Dukes had long ruled the North, unchallenged even by the Imperial Family.
Some attributed it to their warlike nature, others to their long-standing history and countless military achievements.
But Lupe knew the real reason.
Its that power.
This translation is the intellectual property of Novelight.
The power of the Voreoti bloodline was neither Aura, which warriors honed through martial prowess, nor Mana, the foundation of magic.
It was something entirely different—a strange and mystical force that only those born into House Voreoti could possess.
Whenever this power was invoked, the black irises of the Voreoti heir would become tinged with a distinct color, symbolizing their ability.
At the same time, an eerie energy would rise from their body, forming a peculiar pattern in the air—sharp and menacing, reminiscent of a beasts fangs.
People called this phenomenon “The Fangs of the Beast.”
However, using this power did not always result in those fang-like markings appearing.
What Ferio had done just now required only a minuscule amount of energy, causing only a faint red hue to mix into his black eyes.
Even so—
It was more than enough to instill fear.
The instant the calm, beast-like gaze turned red, the kneeling guests began shuddering in terror.
"Mister!"
A cheerful voice, completely out of place in this ominous atmosphere, broke through the tension.
Lupes eyes widened in shock.
The knights and servants standing nearby were equally startled.
Still cradled in Meleis arms, Leonia had arrived at the entrance hall.
The moment her feet touched the ground, she scampered forward, clutching a small ornate box adorned with sparkling jewels.
"Youll hurt yourself."
Ferio caught her in his arms, issuing a calm warning.
But Leonia simply scoffed.
"Why are you so worried? I was the best at escaping the orphanage!"
"Maybe youll finally come to your senses when you crack your nose open."
"Why are you always so extreme?"
"And why were you even running away from the orphanage in the first place?"
"Because those people tried to hit me."
With perfect honesty, she ratted them out completely.
Ferios expression—which had just started to settle—twisted once more.
The warm atmosphere of the mansion was instantly chilled.
The orphanage staff kneeling on the floor shrank even further.
Even Lupe and the Voreoti household members felt a shiver run down their spines.
But Lupe understood.
Right now, Ferio was doing everything in his power to contain his rage, lest he frighten the daughter in his arms.
Yet even while holding back, his very presence exuded overwhelming menace.
"Oh! It's Secretary Mister!"
Leonia, completely oblivious to the thick tension, brightly greeted Lupe, waving a small hand.
"...It is a pleasure to see you again, Lady Leonia."
Lupe, momentarily delayed, lowered his head in greeting.
The title "Mister" still felt strange, but so did speaking normally in this terrifying situation.
"Please, just call me Lupe. I see youve been doing well."
"Ive been eating and sleeping really well!"
"That is truly a relief."
Lupe couldnt hide his astonishment.
It had only been a short time, yet Leonia looked completely different.
Her once grimy skin was now clear and smooth.
Her black hair, tied with a red ribbon, was neatly brushed.
She wore a thick woolen dress, lined with fur from a beast of the Northern Mountains, along with cozy stockings and fur-trimmed boots adorned with tiny red pom-poms.
She was the very image of a beloved noble daughter.
The worries he had about her impulsive adoption now felt almost laughable.
"...Nia?"
A weak voice broke through the silence.
"Nia, Nia! Its us! The teachers!"
"You're safe! We were so worried!"
"Why didnt you send us a single letter? Have you been eating well?"
"Oh my, you've become so beautiful we almost didnt recognize you!"
The orphanage staff, sensing a sliver of hope, desperately reached out.
The cold weather had left their faces stiff, yet they forced smiles, making their numb facial muscles tremble.
Their eyes clung desperately to Leonia, as if she were a lifeline.
"Nia!"
Even the orphanage director teared up, his voice trembling.
"It's me! The headmaster!"
He cried out pitifully, as if he were truly a victim of injustice.
But Leonia merely stared at him, silent and unreadable.
Becoming more frantic, the director tried to paint a nostalgic picture, speaking of memories that only existed in his own mind.
"I remember the day you first came to the orphanage. It was such a hot summer. Do you know how adorable you were? Just like a tiny little mouse—so delicate, so pitiful. And I was the one who gave you your name—"
"Mister."
Leonia interrupted him.
She reached for Ferios coat, tugging gently.
Ferio cast a brief glance at the orphanage staff, then lowered her to the floor.
The moment some of the staff members tried to lunge forward, Voreoti knights immediately restrained them, pressing them face-first into the floor.
"Theyre here for you."
Kneeling, Ferio gently wiped the corner of Leonias mouth with his sleeve.
This translation is the intellectual property of Novelight.
A few crumbs from her earlier snack transferred onto the fabric.
"As your father, I have an obligation to host them properly."
"Mhm."
"But before I do that, I need to ask you something."
"What is it?"
Leonia tilted her head, genuinely puzzled.
The two of them had already discussed what they were going to do with the "guests."
So, why was he asking for her opinion again?
"I need to know if you still want what you asked for before."
He had no intention of sparing them.
But if Leonia felt pity and asked for mercy, he was willing to grant it.
Of course, he'd still deal with them in his own way—just out of her sight.
"Mmm..."
Leonias dark eyes blinked slowly.
For a moment, she pretended to consider.
Then, she opened the small box in her hands.
A gentle, melodic tune filled the vast hall.
The soft, elegant chime was so completely out of place that Ferios brow twitched in confusion.
"What is this?"
Leonia turned to face the trembling prisoners and grinned mischievously.
"A gift for our guests."
She tilted her head playfully.
"A Requiem."
***
The little beast did not go back on her word with her father.
"Why should I forgive them?"
Rather, Leonia sneered at the adults who had once been so cruel to her, now awkwardly pretending to care while calling her Nia.
And then, with no hesitation, she said—
"Crazy bastards, talking out of their asses."
The carriage carrying them was long gone.
So, Leonia seized the moment to start tattling.
"This one here always pinched my arm."
She pointed with her boot.
"That bastard over there took pride in beating kids with a leather belt."
She gave another tap.
"And that teacher?"
She grinned, shifting her boot toward another trembling figure.
"Had an affair with a married woman using orphanage funds."
Despite the fact that she hadn't seen them in a week, Leonia was absolutely thrilled to see familiar faces—
Because now she could torment them.
Giddy, she slipped off one boot and tapped it lightly against each of their foreheads—just enough to be deeply insulting.
"Woohoo! Its time for a fun torture session!"
The little beast twirled gleefully, her footwork light and playful.
"Should've lived your lives better, huh?"
She smiled brightly, her eyes sharp with amusement.
Every time the music box stopped, she would step forward, snap the lid shut, then open it again to restart the requiem.
It was such a cruel act, that one of the adults finally broke down, screaming for mercy.
At last, she reached the final guest.
The orphanage director.
He no longer looked at her desperately, no longer pleaded like she was his last hope.
His eyes, hollow with despair and terror, no longer saw the grandeur of the Voreoti mansion around him.
"We sure do have a lot of memories, dont we?"
The shimmering chandelier overhead looked like a noose to him.
The delicate music box melody sounded like a funeral march.
The grand staircase before him blurred into the path to the underworld.
"Why did you contact a brothel keeper?"
Leonia crouched down, her tone deceptively light.
"If you sold my friend, I suppose I wouldve been next, huh? Or maybe one of the younger ones?"
Her gaze darkened slightly.
"Why did you make our lives so miserable?"
The director did not answer.
Because it did not matter anymore.
No excuse, no desperate plea would change his fate.
Behind Leonia, Ferios silent, crimson gaze weighed down on them all, sealing their doom.
"You know..."
Leonia tilted her head.
"People like you—people who work in orphanages—arent you supposed to protect kids?"
Her round black eyes gleamed innocently.
Her fur-lined boot tapped against the directors forehead—
Once.
Twice.
Slow.
Deliberate.
And completely indifferent.
Like she was simply watching an insect cry.
"So why did you live like this?"
She asked, her voice calm and detached.
"Hm? Why did you do it?"
The director could not answer.
Because he finally understood—
That nothing he said would matter now.
"Oh, and by the way—"
Her voice brightened as she gave his forehead one last tap.
"I entered the orphanage in autumn, not summer."
With that correction, she swung her foot back—
And slammed her boot down onto his forehead.

View File

@ -0,0 +1,469 @@
---
title: "Chapter 7"
slug: "ch-7"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"You're not going far."
Satisfied, Leonia gave them her final farewell.
"Meeting you again was revolting."
"Dont ever crawl back to the surface."
"Go to hell."
Instead of waving, she raised her middle finger high.
The orphanage staff, dragged toward the underground prison, wore expressions of utter despair.
Before they could even think of biting their tongues, the knights had gagged them.
Leonia happily nestled into Ferios arms, clutching her music box.
"Ahhh, that was satisfying."
Her grin was as pure and bright as a summer sky.
"Youre only seven."
Ferio pointed out, raising an eyebrow.
"...Its a figure of speech."
She huffed, as if annoyed that he didnt understand.
With zero hesitation, Ferio placed a strawberry milk candy in her hand.
She blinked at it, then looked up at him in confusion.
"I didnt do anything cute today, though?"
"You did."
"What, that?"
She gestured toward the orphanage staff, now disappearing down the prison hallways.
"Messing with those bastards?"
"You acted like a true member of House Voreoti."
Her eyes widened.
Then—
She covered her face with both hands, hiding her embarrassment.
Between her fingers, her small round ears peeked out, tinged red.
Over the past week, Ferio had come to understand something very important.
One: Leonia was bold and sharp-tongued, but surprisingly shy.
Two: Whenever she got embarrassed, she always hid her face.
It was a habit.
And Ferio found it endlessly amusing.
A young father and his little daughter, chatting happily over a handful of candy.
To an outsider, it was a heartwarming sight.
But—
Lupe was on the verge of collapsing.
"Are you going to torture them yourself?"
Leonia rolled the candy around in her mouth, peering up at him.
The one she hadnt eaten was tucked safely in her pocket, destined for her glass jar.
"Of course. They were your guests."
"Mister, youre so cool!"
This was not a normal father-daughter conversation.
"Youve got a talent for this, too, you know."
"For what? Torture?"
"Yeah. Want to learn one day?"
"Stabbing people with swords?"
She made a stabbing motion.
Lupe, watching, clutched his stomach as if he had been the one stabbed.
"Come to think of it, you should learn swordsmanship, too."
"Mmm, but I dont really like hurting people with weapons."
Her nose scrunched slightly.
"The screaming is annoying, and blood gets everywhere. Its messy."
"No! No, stop!"
Inside his mind, Lupe was screaming.
"Please, just have a normal conversation!"
"Who teaches a child things like this?!"
"I mean, Your Grace, fine, youre already beyond saving, but—"
"The child should at least be normal!"
"Truly, are you sure she isnt your biological daughter?"
At this point—
Lupe was convinced.
They had to be related.
Then—
"Young Lady!"
The maids rushed in with beaming faces.
"You were absolutely magnificent!"
A roar of applause filled the hall.
"......Am I the weird one?"
Why is everyone else celebrating?
Lupe turned to look at the cheering servants, dumbfounded.
Even the head butler, Kara, removed his glasses to wipe his tears.
What part of that was emotional?
I would like to be told. I want to cry with you.
Lupe's eyes met Meleis'.
Out of everyone in the Voreoti estate, she was one of the few who had common sense.
Yet—
Even Meleis was moved to tears, her hands covering her mouth, unable to hide her overwhelming pride.
"We can't just kill them right away, okay?"
"Of course not. That would be wasteful."
"Exactly! Gotta make them pay first."
"...Where did you even learn to say that?"
"...The orphanage?"
Leonia's earlier remark had just escalated the intensity of the torture awaiting the guests from the orphanage.
"Oh, I have a great idea!"
Her eyes lit up.
"We tie a rope to their bodies and push them off a cliff!"
She raised her hand, then lowered it, demonstrating.
"That way, they'll fall, then bounce back up from the tension—"
Her hand went up.
"—then fall again, then bounce back up—"
It went down again.
"—and again, and again...."
She grinned, mimicking the motion of a ball bouncing off the ground.
"And when they finally stop, we leave them hanging there until the rope snaps."
Ferio nodded approvingly.
"That does sound worthwhile."
He stroked his chin thoughtfully.
"There's a perfect cliff behind the mansion for that kind of experiment."
"But dont overdo it."
Leonia added, her expression serious.
Of course—
She wasnt talking about the victims.
She was talking about Ferio and the knights.
"You have to keep them healthy—"
Her little finger extended forward, demanding a promise.
"—so they can be tortured for a long, long time."
Their large pinkies intertwined.
"If you break your promise, I get to flick your forehead!"
The father and daughter duo chattered cheerfully, their bonding moment warm and affectionate.
Lupe wanted nothing more than to wake up from this nightmare.
This translation is the intellectual property of Novelight.
***
Ferio headed for the underground prison.
Meanwhile, Leonia returned to her room with Meleis.
And there, Lupe finally heard the truth from Kara.
"...Shes not actually his biological child?"
His brain short-circuited.
Kara adjusted his round glasses and nodded, lowering his voice.
Luckily, it was just the two of them in the conference room next to Ferios office.
Following Ferios orders, Kara proceeded to explain everything about Leonia in detail.
"...Dear gods."
Lupe rubbed his forehead, utterly wrecked.
All his guesses were completely wrong.
Sure, there were plenty of people who resembled each other without being related.
But in this case...
Even without the black hair, there were too many things that didnt add up.
Especially—
That temperament of hers.
"That black color and that personality..."
He muttered.
Black hair was a symbol of the Voreoti bloodline, something only they could possess.
And after just one week, Leonia had grown eerily similar to Ferio.
Her face, now a little healthier, bore clear traces of him.
And earlier—
When she had been gleefully tormenting the orphanage staff—
She had fully embodied the sinister nature of the Voreoti lineage.
"No way..."
A few faces flashed through Lupes mind.
But he shoved them away immediately.
"I saw it with my own eyes."
He had seen the wrecked carriage himself—
Torn apart and washed away by the raging river.
Kara, watching Lupes turmoil, spoke quietly.
"...Doesnt she remind you of Lady Regina?"
Lupe froze.
He turned—
And met Karas wistful gaze.
The old butlers expression was heavy with sentiment.
And Lupe understood exactly what he meant.
His sharp eyes narrowed.
"...Honestly, the idea that shes Ferios illegitimate child makes more sense."
He stated, firmly.
Because—
When he had first seen Leonia, dirty and starving, he had never once thought of Regina.
The child had looked like a beggar.
How could he have ever associated her with Lady Regina?
Of course—
Todays Leonia was different.
Dressed in fine clothes, well-fed, and radiating the air of a noble lady—
She was a true Voreoti.
"Exactly like that person was..."
A voice echoed in his memory—
"Lupe!"
That warm, cheerful voice—
That person who would call everyones name so brightly—
Had once filled this cold mansion with warmth.
But...
Leonia didnt resemble her.
And that was the problem.
If Leonia had even the slightest resemblance to Regina—
Then her name would have immediately surfaced in his mind.
Not just as a passing thought.
But it hadnt.
Lupe exhaled slowly.
"Lady Regina is dead."
It had been a stormy night.
A rare, torrential downpour had drenched the Voreoti lands.
And in the chaos—
Regina had fled.
With the man she loved.
Ferio and the knights had searched.
But they returned soaked, empty-handed.
Lupe could still picture it clearly.
The raindrops glistening on their cloaks.
The storm clouds looming outside the doorway.
And Ferio, removing his soaked mantle, stating—
"Regina is no longer a Voreoti."
With that, the search was called off.
And from that day forward—
Her name was erased from the mansion.
"Afterward, I personally oversaw the recovery of the carriage."
Lupe continued, voice firm.
The carriage, having raced through the rain-slicked roads, had plunged into the river.
By the time they retrieved it, it was completely shattered.
Barely even a carriage anymore—
Just a pile of broken wood, tangled with river debris.
The floodwaters had carried them far away.
As if answering their desperate desire to escape.
"However..."
Kara hesitated, lowering his gaze.
"...Their bodies were never found."
Lupe snapped his head up.
His entire body tensed.
"If they somehow survived that accident—"
Karas voice was calm.
Measured.
But his eyes held a quiet conviction.
"And if they truly escaped from Voreoti estate..."
***
"Achoo!"
With a loud sneeze, Leonia staggered. It was so forceful that she could barely keep her balance. The maids nearby giggled, finding it utterly adorable. Embarrassed, Leonia covered her face with both hands.
After a week of proper meals, she had gained a little weight, though her body was still quite thin. However, it was no longer to the point where she looked pitiful.
"Why are you embarrassed?"
"You were so cool just a moment ago."
"...Really?"
Through the gaps between her small fingers, a pair of black eyes peeked out. The maids exchanged glances in the air. For a brief moment, they seemed hesitant to speak.
"Well, to be honest, you were a little scary."
"But we really meant it when we said you were cool."
Leonia had been eerily cheerful, humming a tune as she skipped between the restrained guests. And behind her, Ferio had watched with satisfaction, his gaze exuding a quiet yet overwhelming intimidation toward the guests. It had been terrifying—but not in an unpleasant way.
The maids had worked in the Voreoti manor for years, and they had their own share of resilience. They, too, were far from ordinary by normal standards. After all, most people in the Voreoti household were like that.
They were Voreoti people.
"Look at this."
Leonia picked up a glass jar from the nightstand. Inside were strawberry milk-flavored candies that Ferio had given her. She opened the lid and dropped in the candy she had just received. The soft clink as it landed made the corners of her mouth twitch.
"One, two, three..."
Before she knew it, the candies in the jar had surpassed twenty.
Ferio had given her sweets even when she wasnt being particularly charming.
"You've collected quite a lot."
Hugging the jar, Leonia nodded.

View File

@ -0,0 +1,291 @@
---
title: "Chapter 8"
slug: "ch-8"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"What will you do when it's full?"
"I'll share them with you, sisters."
Oh my, the maids were genuinely touched.
"Then, well leave you to rest."
"If you need anything, just ring this bell."
The maids placed a small silver bell with a finely crafted handle into Leonias hand. When she shook it lightly, a clear, delicate chime rang out. Skeptical that such a soft sound could actually summon someone, Leonia frowned slightly, but the maids explained.
"Its a magic bell."
"All the servants can hear it."
They lifted their sleeves to reveal thin bracelets. The silver pendants attached to the leather cords matched the bells color.
"Ooh..." Leonia pursed her lips into a small 'O'.
"It's amazing..."
"Right? We think so too."
"Its expensive, though."
The maids whispered that only a household like the Voreoti family could afford such things.
After wishing her a good rest, they withdrew. Left alone in the room, Leonia turned the bell over in her hands, examining it curiously. Since it was enchanted, it had to be quite valuable. She placed it carefully on the table, admiring its smooth, polished surface.
She had once seen a musician line up bells like this in a row and create a beautiful melody by striking them one by one with swift, precise movements.
In her past life.
***
After an intimate session with his "guests" in the underground prison, Ferio returned to his chambers and soaked in the warm water that had been prepared in advance. As always, he bathed alone, without any attendants.
Its been a while since I cleaned up properly. Quite tiring.
Tomorrow, as Leonia had suggested, he considered tying them up with ropes and dangling them off the cliff. But at that rate, they might die too soon. He figured he should at least keep them alive until spring.
Leaning back against the tub in a languid pose, he closed his eyes, almost drifting off. A droplet of water from the ceiling suddenly plopped down, causing his eyes to snap open.
"Idiots. What a pathetic mess."
At that moment, his lips curled as he recalled Leonia entertaining their guests.
Where does she even come up with these ideas?
The child hadnt even received proper education yet, as he was still in the process of selecting a tutor. And yet, she had already managed to surprise him with her sharp wit and unexpected amusement. The way she pranced around, holding a boot in one hand—utterly delightful.
"A child is not a pet."
He remembered what Kara had said before. The ever-worried old butler had been the most concerned about Ferios impulsive decision to adopt. But Ferio considered it unnecessary meddling.
"How could anyone see her as a pet?"
He had always prided himself on his keen judgment, but perhaps age was making him shortsighted. Leonia wasnt some fragile creature to be tamed with a leash. From the moment he first saw her, she had exuded an unyielding spirit.
Even under the abuse of the orphanage adults, she had never lost herself. That resilience was pure instinct—just like a beast.
If anyone tried to collar and tame her, they would end up suffering greatly. Just like the guests currently rotting in the underground prison.
Still...
Something about the child was peculiar.
"How does she know a requiem?"
There was no way that orphanage had provided the children with a proper education. So where had she learned a requiem?
As the thought crossed his mind, Ferio finished bathing and reached for a plush towel that had been prepared in advance.
A requiem. Embezzlement.
The words she had spoken were not something even a noble child of her age would easily use. According to the orphanage records, she had entered at the age of five. That meant she must have had a guardian before then.
Ferio wasnt particularly interested in the child's past, but perhaps it wouldnt hurt to look into it. Now that the adoption was legally finalized, even if a biological parent appeared and tried to claim her, there would be no issues.
Or maybe shes just a genius.
Draping a pair of pants over himself, Ferio stepped out of the bathroom, already convinced that his daughters peculiar insights were proof of exceptional talent.
What would have been a dull year had become endlessly entertaining thanks to Leonia.
An impulsive adoption, perhaps.
But one of the best decisions of his life.
"You're out."
Ferio, in a rather good mood after his bath, was greeted by Lupe.
"I dont recall telling you to come in."
Ferio walked past him. On the table, as always after his bath, a light drink had been prepared. A round ice cube clinked into the transparent glass, followed by a slow pour of light amber liquor. Since he was in a pleasant mood, he chose not to rebuke Lupe for his impudence.
"I have something to report."
"With that face?"
Lupe looked as if he was about to collapse and remain unconscious for several days.
Lupe felt deeply wronged. It was all because of Ferio, who dumped all the work onto him and enjoyed his leisure with a drink. Yet, the poor subordinate couldnt dare nag his superior. Status aside, Ferios piercing gaze alone was enough to make him shrink.
"I apologize for entering without permission, but I thought this was important."
At Lupes plea for forgiveness, Ferio lowered his glass and leaned lazily against his desk, tilting his head slightly—a silent gesture to go ahead and speak.
He was in a good mood, so he was willing to be lenient.
At that moment—
Knock, knock.
A small voice followed the sound of knocking.
"Uncle, are you there?"
Ferio and Lupe both turned their heads toward the door.
"Uncle? Are you not here?"
"He might still be bathing."
One of the maids accompanying Leonia answered. She mentioned that she had seen the servants preparing his bath earlier.
"Should we come back later?"
"Hmm..."
After a brief moment of thought, the child decided to wait.
"Sister, are you afraid of Uncle?"
The question came out of nowhere. Ferio and Lupe shut their mouths completely, listening intently to the conversation outside. Without hesitation, the maid answered.
"The master is the Duke of Voreoti in the North. He is the strongest man in this world—its only natural to be afraid of him. After all, I am just a humble maid."
In short, the very existence of Ferio was terrifying. Lupe marveled at how bluntly she answered. She truly lived up to being a servant of the Voreoti estate. He stole a glance at Ferio, who appeared utterly unfazed, as if he had heard it all before.
"But Uncle is nice to me."
Leonia proudly declared that she had already received two pieces of candy from him today.
"The master cares for you very much."
"Is that it?"
"Isnt it?"
"Hmm..."
Leonia trailed off. Inside the room, the two adults could easily picture the child tilting her head in thought. Her short hair must be swaying along with the movement. That round little head—so very adorable.
"...I hope thats true."
A small, shy voice rang out. Ferio imagined Leonias flustered face and smirked.
"But what if Uncle ends up an old bachelor because of me?"
Lupe, who had been touched by the childs earnest feelings just moments ago, barely stopped himself from bursting into laughter. He quickly glanced at Ferio. The Duke was staring at the door with an expression of sheer disbelief.
"The master is quite popular."
"Looks arent everything."
Leonia declared sternly.
"He has a terrible temper."
And now he even had her, she sighed, as if lamenting the fate of an unmarried neighborhood son.
Lupe bit his lip, but that wasnt enough. He ended up pinching his cheek to stop himself from laughing.
"Do I have to support him?"
A small snort escaped Lupe as his shoulders trembled.
"Our dear Uncle...."
"A bad temper and a child hanging from him like a burden..."
Now even the maid had gone quiet, possibly struggling to hold back her laughter. Lupe gave up entirely, leaning against the sofa as he laughed silently. It was beyond amusing—it was downright painful to his stomach.
For a child to worry and pity the great Duke of Voreoti like this... She was no ordinary person.
"Because of me...."
Just as Leonia was about to once again express sympathy for Ferio—
The tightly shut door swung open.
The maid shrieked and collapsed onto the floor in shock.
Beyond the open doorway stood Ferio, wearing only his trousers, staring down with an expression of utter displeasure.
"Oh, Uncle, you were here?"
Leonia, completely forgetting everything she had just said, beamed innocently.
"Why did you pretend—"
Her black eyes trailed downward to Ferios bare upper body. Then, they shifted toward Lupe, who was standing up from the sofa with a flushed face, barely suppressing his laughter.
"...Huh?"
Short fingers alternated between pointing at Ferio and Lupe.
"Uncle is half-dressed, and Lupe Uncle was on the sofa..."
"Miss! Thats not whats happening!"
The panicked maid rushed to correct the misunderstanding. She looked as if she had aged ten years in mere seconds.
As realization dawned on them, Ferio and Lupe immediately put distance between themselves. Though they were already standing apart, both visibly recoiled, even going so far as to turn their heads sharply.
"...Come in."
Ferio finally spoke, calling Leonia inside. The maid remained outside the door.
"Uncle...."
"Its not what you think."
"Unc—"
"I said its not that."
Ferio emphasized his denial with a weary sigh, filled with self-loathing.
"Do I really seem like that kind of man to you?"
He was genuinely wounded.
"Uncle, liking the same gender is nothing to be ashamed of—"
"Not that!"
Ferio immediately shut down that train of thought.
"Now stop imagining things."
"But will Uncle really be less popular just because he has me?"
Leonia mulled over the question seriously before shaking her head. Satisfied, Ferio smirked confidently.
"Uncle is very impressive."
"Glad you understand."
"But still, someday, you should find a good person to be with."
How old am I, and why am I having this conversation?
Ferio exhaled sharply, dumbfounded by her old-soul remark.
"Not right now."
"Because of me?"
"Because I simply havent met someone I like."
By this point, Ferio was questioning why he was even discussing this with a child.
He reached out to pull Leonia into his arms—then hesitated.
"...What?"
Leonia stretched out her arms, ready to be embraced, tilting her head in curiosity.
Her dark eyes, gesturing impatiently for him to hold her, were fixed on her fathers solid chest. Feeling uneasy under her intense gaze, Ferio grabbed a nearby shirt and buttoned it up meticulously before finally pulling her into his arms.
"Tch."
He ignored the disappointed click of her tongue.

View File

@ -0,0 +1,305 @@
---
title: "Chapter 9"
slug: "ch-9"
novel: "I Became the Male Lead's Adopted Daughter"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"Why did you put on clothes?"
Leonias voice was filled with obvious discontent.
"Who do you think made me?"
"Its not like youll wear out if I look!"
"Ive really reached my limit. Even my own daughter harasses me now."
"Hmm, okay, sorry then."
Leonia repented immediately, linking her pinky finger as if making a vow.
"Ill sneak peeks from now on."
Instead of meeting her pinky with his own, Ferio muttered about how he needed to find her a proper etiquette teacher as soon as possible. Leonia puffed up her cheeks in protest.
"So, why are you here?"
"Ah, right."
Remembering her reason for coming, Leonia rummaged through her pocket and pulled something out.
"This is for you, Uncle."
Inside a small ribbon-wrapped pouch were clumsily shaped cookies.
"You worked so hard torturing people in the underground prison earlier, right? You must be tired, so I baked cookies with the head chef. Eat these and regain your strength."
She explained that she had reduced the sugar content since Ferio didnt like sweets.
"You always give me candy, so this time, Im giving you something."
Ferio alternated his gaze between the cookies and Leonia.
"Not that it matters, but the ingredients for these cookies were bought with my money anyway."
From the grand mansion to the toilet paper in the bathroom, everything in this estate belonged to the Duke of Voreoti, Ferio himself.
"...I really hate it when you do that."
Leonia pouted, complaining about his complete lack of romance. How could someone look so cold and grim while bragging about money? It was exasperating.
"If youre not going to eat it, give it back!"
She reached out to snatch the cookies back, but it was futile. Ferio swiftly tucked the pouch into his pocket.
"Who said I wasnt eating them?"
"I dont want to give them to you anymore. Do you think people can survive without money?"
"Your money is mine now, anyway."
"Uncle, I was joking earlier."
Understanding what he meant, Leonia quickly backtracked, tapping her tiny fist against her forehead with a playful grin. She even stuck out her tongue, her winking eye fluttering awkwardly.
These two...
Having become an outsider in the room, Lupe silently watched the father and daughter.
Did they forget I was here?
They had completely lost themselves in their own world, leaving Lupe utterly ignored.
***
Only after Leonia left the room did Lupe finally find an opening to speak.
"Oh, youre still here."
So, they really had forgotten him. Lupe let his shoulders slump in defeat. He hadnt even done anything, yet his exhaustion deepened. Honestly, he just wanted to rest for a few days—maybe even three or four.
"What {N•o•v•e•l•i•g•h•t} did you come to say again?"
"I havent even started yet."
"Then say it now."
Ferios tone was dry, vastly different from how he had just spoken to Leonia.
He unwrapped the cookies and examined one. Though they looked crude, they were baked to a nice golden brown. The scent was pleasantly nutty. Taking a bite, he tasted ginger—perfect for when he was tired.
Lupe found himself genuinely surprised.
He actually looks like a real person.𝑓𝘳𝑒𝑒𝓌𝘦𝘣𝘯𝑣𝘦𝑙.𝘤𝑜𝑚
Normally, Ferio was indifferent to everything and everyone, a figure of cold detachment. But when that tiny girl appeared, he instinctively pulled her into his arms, met her eyes, and had an actual conversation.
His tone, though laced with teasing, carried warmth and responsibility.
The Duke of Voreoti, when with the child, was no longer as terrifying.
"...Its about Miss Leonia."
Ferio, mid-chew, shifted his gaze toward him.
Yes. That was the look.
Lupe felt a chill run down his spine as Ferios atmosphere returned to its usual menacing presence.
"I think we should investigate her background."
"Why?"
"First, I ask that you not get angry when you hear me out."
"Useless request."
Ferios flat response made Lupe flinch.
Still, he steeled himself, determined to proceed.
"Please, Im saying this knowing it could cost me my life."
"Are you going to offer a pinky promise, too?"
Ferio scoffed, popping another cookie into his mouth. It was surprisingly to his taste.
Lupe took Ferios rare joke as a sign of approval and took a deep breath before speaking.
"I believe Miss Leonia is connected to Lady Regina."
The room fell into complete silence.
Realizing he had stepped on a landmine, Lupe clenched his eyes shut.
Voreoti territory experienced winter sooner than any other place. Yet, despite the chilling atmosphere in the room, sweat trickled down Lupes back.
An unbearable, suffocating silence stretched between them.
"...Regina is dead."
After a long pause, Ferio finally spoke.
Though Lupe couldnt bring himself to meet his gaze, the mere sound of his voice made it clear that he was in a terrible mood.
"But her body was never found."
Just as Kara had said.
At the time, the search party had only found the carriage—neither Regina nor her lovers bodies were ever recovered. The rapids downstream had been vicious, so everyone assumed they had perished. Even Ferio had never questioned that conclusion.
"If they survived and had a child, and if that child is Miss Leonia, then we need to correct the rumors of her being an illegitimate child."
"I see..."
Lupe felt hopeful at Ferios murmured response.
"I actually had considered looking into Leonias past myself."
"Then—"
"But hearing your theory makes me think I shouldnt do it."
Lupe, who had just begun to relax, looked up in shock.
"We met Leonia in an orphanage."
"Thats exactly why we need to confirm her parents!"
"To do what? Tell her we found her dead parents?"
Ah.
Lupe finally understood.
Leonia being in the orphanage meant that—regardless of whether Regina and her lover had survived initially—they were now dead.
Lupe bit his tongue, chastising himself for his thoughtlessness.
"And being Reginas daughter wouldnt be good for her."
A runaway noblewoman from a collateral branch who fled with a man her family opposed.
The illegitimate daughter of the most powerful man in the empire, the Duke of Voreoti.
Both labels were scandalous in their own right, but if one had to be chosen as Leonias title, the latter held far greater legitimacy. At least with that story, Ferio was assumed to be her biological father.
"...I made a mistake."
Lupe admitted his fault without resistance. He had been too caught up in the past and failed to consider the present. It was a clear miscalculation.
"Still, youre better than me."
"...Excuse me?"
Expecting a withering glare, Lupe instead received an unexpected compliment, making him respond with a dumbfounded voice. Looking up, he finally met Ferios gaze.
"Reginas daughter, huh...."
His expression was calm.
"I never even considered that possibility."
It was almost peaceful.
Why hadnt I thought of that?
Was it because the child was too thin? Or because she looked like a beggar?
If Lupe had drawn that connection, then Kara, the butler, likely would as well. The current staff at the estate had all been hired after Ferio became Duke. While they may have heard rumors of Regina, they wouldnt have recognized her face. It made sense that none of them thought of her when seeing Leonia.
But Ferio was different. He had grown up with Regina. He knew her better than anyone.
Yet, not once had he thought Leonia looked like her. Not even close. Until Lupe mentioned it, he had never considered any resemblance.
I swore to forget you, who wanted to escape from Voreoti... and I suppose I really did forget.
A bitter smirk twisted Ferios lips.
"Do you think Leonia resembles Regina?"
"Honestly? No."
If anything, she looked more like Ferio.
Ferio felt reassured that his perception wasnt failing him.
"...Confirming it is simple."
He felt no need to ask Leonia herself or search for Reginas traces.
He had seen Leonias black eyes shimmer like gold dust in the orphanage. At the time, he assumed she had mana. Some children, when born with latent magical ability, instinctively cast protective spells in moments of crisis.
But what if it wasnt mana?
What if, like himself and Regina, she had inherited the fangs of a beast?
If the child truly carried Voreoti blood—
***
The blizzard raged.
The snowfall was so dense that nothing could be seen beyond it. This was the true arrival of winter in the North.
The Voreoti territory always welcomed winter earlier than the rest of the empire. It had been cold when Leonia first arrived, but compared to the current frigid storm, that had been nothing.
"Leonia."
Leonia, who had been staring at the large poached egg on her plate with sparkling eyes, looked up.
"Well have to postpone Dangling until later."
Ferio, who had been cutting into his morning steak, spoke casually, popping a bite into Leonias mouth. Dangling was a new torture method Leonia had devised the day before. The name had been Ferios idea.
Munching contentedly, Leonia glanced at the rattling window, shaken by the harsh wind.
"Because of the weather?"
Today, she was dressed in a thickly lined pair of overalls with a soft white shirt underneath. A yellow headband rested on her short black hair.
Her round cheeks looked fuller than they had the day before.
"The knights would freeze to death before the guests did."
Ferio muttered lazily, regretting that he hadnt strung them up yesterday.
After finishing their meal, the maids draped a light red indoor cloak over Leonias shoulders. No matter how warm the mansion was, Ferio had ordered extra precautions for the child, given her still-fragile health.
"I look like Superman."
"Who?"
"A man who wears his underwear over his clothes."
Ferio frowned at the mental image.
"...There are perverts like that?"
"Hes not a pervert. Hmm... He just wears his underwear outside. Its his personal taste."
"That is a pervert."
Ferio, who was often accused of being a pervert by Leonia, felt unjustly wronged. There was a far worse pervert out there, yet his daughter was defending him.
Leonia, oblivious to his thoughts, continued praising Supermans muscular physique.
Is this love for strong men in her nature?
Just how bad had her life at the orphanage been for her to turn out like this?
The intensity of hospitality awaiting the "guests" in the underground prison would increase yet again.
Clicking his tongue, Ferio watched as Leonia skipped ahead, her red cloak fluttering. Turning back with a grin, she waved enthusiastically at him.
"Youre going to trip and break your nose."
His lazy steps quickened.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

View File

@ -0,0 +1,28 @@
---
title: "I Became the Male Leads Adopted Daughter"
slug: "i-became-the-male-leads-adopted-daughter"
author: "Ahn Soo"
authorAvatar: "https://i.pravatar.cc/128?u=ahnsoo"
authorBio: "Korean web novelist specializing in fantasy romance and family-centric narratives"
cover: "https://images.unsplash.com/photo-1551650976-6de8f6e4e8a4?w=400&h=600&fit=crop"
description: "After being reborn into the world of a dark fantasy novel she once read, a young woman finds herself as the adopted daughter of the story's cold and ruthless male lead. Armed with knowledge of the tragic future, she must use her wits and affection to melt his icy heart, change fated disasters, and build a warm family—all while hiding her true identity and the secrets of the plot."
status: "ongoing"
genres:
- "fantasy"
- "romance"
- "family"
rating: 4.7
views: 8700000
followers: 540000
chapters: 312
language: "English"
tags:
- "transmigration"
- "adoption"
- "family-fluff"
- "redemption"
- "korean"
createdAt: "2021-05-22"
updatedAt: "2024-04-10"
---
A heartwarming yet suspenseful tale of found family and changing destiny. *I Became the Male Leads Adopted Daughter* masterfully blends familial bonding with fantasy intrigue, following a protagonist who uses foreknowledge not for power, but for love and protection. The story explores themes of healing from trauma, the meaning of family, and whether a written fate can be rewritten through genuine connection and courage.

View File

@ -0,0 +1,326 @@
---
title: "Chapter 1: Encountering Magic (Part 1)"
slug: "ch-1"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"Waaah. Waaah."
The cries of a newborn echoed through the mountains, shattering Vincents early morning slumber.
"Ugh..."
Even as he rubbed his sleep-tousled hair, the pitiful sound of life continued to reach his ears.
"Dear gods... what did I do to deserve this?"
Kicking off the blankets, he rose from bed, his hunters muscles tensing in the dark.
Who the hell is out there at this hour?
Vincent glanced at his sleeping wife.
He hoped she was dreaming peacefully.
If she heard this noise, shed be plunged into misery all over again.
"Hah..."
After seven years of marriage, Vincent and his wife still had no child.
Theyd spent a fortune consulting physicians, only to be told there was no discernible reason.
—"Sometimes, its just fate. Theres nothing wrong with you or Olina, so just keep trying, eh? Heh heh!"
At first, Vincent had laughed it off.
But as time passed with no change, hed been forced to accept the truth by their fifth year:
He could not father a child.
Olina never showed disappointment, but whenever a lonely shadow crossed her face, Vincent had never hated his own body more.
"What kind of bastard—who in their right mind leaves a baby out like this?!"
Pushing aside his tangled emotions, Vincent grabbed his single-edged axe and stepped outside.
"Whos there?! Whos making such a racket in the dead of night?!"
His shout echoed through the mountains.
No answer came.
In the heavy silence, Vincents expression hardened.
A trap?
Most hunters lived deep in the mountains.
They had to check traps at dawn, and tracking large game sometimes meant spending days in the wilderness.
Naturally, security was their own responsibility—and bandits often preyed on that vulnerability.
Of course, it could also be a merchant passing through, but no torchlight flickered in the darkness.
"You rotten bastard! Ill chop you to pieces!"
If this was the worst-case scenario, blood would have to be spilled.
Moving cautiously, he reached the stable where the sound had come from and swiftly kicked the door open.
His hunters sharp eyes scanned the interior.
Whuff.
The snort of a horse reached his ears.
Animals didnt lie, and the sound soothed Vincents agitation slightly.
Nowhere to hide.
There were no signs of an intruder, either.
"Then how...?"
His gaze landed on a bundled cloth resting neatly atop a pile of hay.
A baby—perhaps two months old—was scrunching its face and wailing.
Vincent hastily hid the axe behind his back.
By the time he knelt before the bundle, hed discarded the weapon entirely and simply stared.
"Waaah. Waaah."
A child as lovely as the moon itself lay there.
A child who knew nothing yet, newly born into the world, waiting to carve its name into existence.
The moment the baby saw Vincents face, its cries stopped, and a gummy smile spread across its tiny features.
Vincents pupils trembled.
Then, as if struck by lightning, he bolted upright and stormed back outside.
"WHOS OUT HERE?! WHOS PLAYING THIS CRUEL JOKE?! ABANDONING A BABY—YOU SICK MONSTER! SHOW YOURSELF!"
The mountains rang with his fury.
"COME OUT! YOU WONT?! HOW COULD YOU DO THIS?! YOURE A REAL PIECE OF WORK, YOU KNOW THAT?!"
Still, no reply came.
"YOU REALLY LEFT IT, HUH?! LAST CHANCE—SHOW YOUR FACE OR ILL SMASH IT TO PASTE!"
Vincent screamed with every ounce of his strength.
If he ever looked back on this day, he refused to regret holding back.
"Hah... hah..."
After glaring into the darkness a while longer, Vincent steadied his breath and returned to the stable.
Exhausted from crying, the baby had fallen asleep.
Hands shaking, he cradled the child and pressed an ear gently to its tiny chest.
"Ah..."
A heartbeat far quicker than an adults.
"Honey, whats going on?"
His wife, roused by the shouting, rushed over.
Instead of answering, Vincent simply showed her the sleeping child in his arms.
"What... whose baby is that?"
Vincent hesitated. He didnt know how to explain.
"Well... I think its ours."
Early Summer.
The stream was cold, the breeze refreshing.
Vincent, a dead roe deer slung over his broad shoulders, hurried home.
More than the successful hunt, he was eager to see the family waiting for him.
"Shirone! Daddys home!"
"Dad!"
A twelve-year-old boy came scampering to the porch, beaming.
Unlike Vincent, whose face was rough-hewn like stone, the boys features resembled a meticulously crafted jewel.
Hair like spun gold, shimmering even from afar, and striking blue eyes that gleamed.
Every time Vincent saw his beautiful son, his chest swelled with pride.
Dropping the deer, he buried his face in the boys embrace.
"Yeah, thats my boy. My treasure. You been good?"
"Yes! I helped Mom cook and read lots of books."
Cooking and books.
The dissonance between the two words made Vincent pause, but he didnt let it show.
"Heh, you like reading that much?"
"Well... theres not much else to do."
Whenever Shirone flinched like hed done something wrong, Vincents heart ached.
Deep down, he knew.
This heaven-sent miracle of a child was far more brilliant than his peers.
After learning letters from his mother, hed progressed from stumbling through books to devouring complex texts alone.
And thats what makes it harder.
A hunter could never afford proper schooling for his son.
The only thing Vincent could teach him was the craft hed honed his whole life.
—An herbalists child becomes an herbalist. A hunters child becomes a hunter. Thats the safest path.
Even humble trades required knowledge and tricks passed down through generations.
But Vincent couldnt bring himself to say it.
"No, youre doing great, Shirone. Learnings the key to success, no matter what. Next time I go to town, Ill buy you more books."
"Its okay. The ones you got me before werent that interesting anyway."
Vincent laughed at his sons fib.
Popular books were too expensive, so hed only managed to scavenge discarded noble texts from antique shops.
He knew they werent exactly childrens material.
Such a kind kid.
Shirones consideration for his parents made Vincents nose sting.
"Alright! How about we go chop some wood, then? Learnings important, but a mans gotta be strong too. Today, Ill teach you how to swing an axe."
"Wow! Do I get my own axe?!"
"Heh, of course! Lets cut down every tree on this mountain today!"
Vincent handed Shirone a small axe—expensive for their means, but unlike books, this was an investment.
In the end... hell become a woodsman.
If reality couldnt be changed, building his frail body and stamina was crucial.
But... is that really it?
A sudden doubt gnawed at him.
His face has nobility in it, and his minds sharp. Could he be... a nobles child?
Vincent shook his head.
Whenever such thoughts arose, he felt both overwhelmed by fortune and crushed by guilt.
Enough. Shirone is MY son. Not some child from a stable—my own flesh and blood.
Steeling himself, Vincent led Shirone to a logging area a kilometer from their cabin.
"Watch closely. Ill show you how its done."
Spitting into his palms, Vincent swung with practiced ease.
Thwack. Thwack.
After a few strikes, the tree groaned and toppled.
Though not a lumberjack, ten clean strokes were impressive for an amateur.
"Aim for the same spot, then tilt the tree with its own weight. Got it?"
"Yeah, Ill try!"
Vincent picked a tree for him, and Shirone mimicked his fathers motions perfectly—down to the spit and hand-rubbing.
So sharp...
Vincent watched proudly—until Shirone raised the axe.
His stance was... off.
Brains alone wont cut it.
The axe was heavy, and swinging it required raw strength.
Weve got to build him up now. Otherwise, how will he marry? Have kids?
No woman would wed a man who couldnt provide.
"Hng! Ugh!"
Gritting his teeth, Shirone swung wildly, each strike landing haphazardly.
Vincent offered advice.
"Dont exhaust yourself. Use less force, but aim true."
Shirone understood—but no matter how precisely he struck, the wood wouldnt budge.
Since when was he this weak?
Vincents mood dimmed.
"Hah... its tough."
"Its okay. No—Im sorry. Truth is, I know this isnt for you. But as a hunters son..."
Vincents voice cracked.
"Youre so bright. Smarter than Barun the herbalists boy, sharper than Stella the fruit sellers girl. Dont feel bad about your strength. My greed is just..."
Tears welled in his eyes.
But Shirone, lost in thought, didnt notice and asked:
"Dad, how do you REALLY chop wood well?"
Vincent blinked.
He hadnt expected his bookish son to press the question.
"You... really want to learn?"
"Yeah! Its fun."
Heartened, Vincent guided Shirones gaze to the groove in the wood.
"See this? Strength comes with age. But the trick isnt force—its technique. Earlier, I said to hit the same spot, but if you angle it slightly..."
"Oh... I see."
Vincent finally examined the marks Shirone had made.
This...
He was stunned.
For a beginner, the strikes were impossibly precise—all landing in the exact same spot.
In fact, without brute force, this precision made it harder to fell the tree.

View File

@ -0,0 +1,284 @@
---
title: "Chapter 10: A Life-Changing Opportunity (Part 5)"
slug: "ch-10"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
The Great Training Hall.
Shirone arrived precisely on time and saw Rian already waiting for him.
The battle had already begun in spirit.
Neither moved from their positions, their eyes locked onto each others swords.
Rian: "Lets begin."
Rians weapon was also a longsword.
The bold, sweeping techniques of the Ozent swordsmanship were traditionally better suited for greatswords rather than longswords—but that was only after unlocking ones Schema.
Thus, Rian hadnt chosen the longsword out of consideration for his opponent, but because it suited him.
His gaze scrutinized Shirones stance—the Jeongjoongdong posture, a fundamental swordsmanship stance Shirone had learned as a beginner.
His center of gravity was far more stable than before.
Is this really possible?
Having glimpsed Rais talent in Shirone, Rian suddenly wondered:
Maybe he really never learned swordsmanship before.
More importantly... how can he be this composed when its his first time holding a sword? Isnt he afraid of death?
Rian was afraid of death. That was why he trained endlessly—to forge courage.
No matter how talented he is, he cant match the years Ive poured into training. So how...?
Of course, Shirone knew it too.
As a novice, he couldnt navigate a life-or-death duel as fluidly as Rian.
So he had prepared in his own way.
If you cant overcome fear, then understand it.
He called it "Jumping off the Cliff."
If one didnt imagine the next moment, anyone could leap from a cliff.
Fear exists in the future. And the future is nothing but an illusion—it doesnt exist yet.
Like a tyrant with absolute power calmly dining while rebels stormed his gates, Shirone imagined himself standing at the edge of a cliff.
His right foot stepped forward into the void, his left following—and in his mind, his body hovered in midair.
You havent fallen until you actually fall. You arent dead until you die.
Understanding the nature of danger—this was why cold intellect could sometimes be more terrifying than a warriors bravery.
And with that icy clarity, Shirones Spirit Zone surged with unprecedented stability.
Rian: "Haaah!"
Rian was already upon him.
A flash of steel streaked across Shirones vision—a swordsmanship far beyond his own level.
But... I can feel it.
Through his heightened senses, Shirone perceived the swords trajectory and calmly leaned back.
His eyes remained open as he evaded, and shock flickered across Rians face.
Hes tracking the blade?
Even seasoned swordsmen couldnt dodge a real sword by sight alone.
But the sword, too, was infinite.
As Rians attacks grew faster, gaps began appearing in Shirones perception.
A blade grazed his chest—his Spirit Zone shuddered violently.
Shirones heart sank.
Damn it!
At this rate, hed lose.
But contrary to his expectations, Rian continued with sweeping, exaggerated strikes.
This allowed Shirone to predict the next trajectory and twist away, narrowly escaping death.
Why is he...?
A single slash to the flank would have ended it.
Yet Rian pressed on with broad movements, as if unaware of Shirones panic.
Only then did Shirone realize:
His understanding of swordsmanship is shallower than I thought.
Though skilled in execution, Rian lacked deeper insight into its essence.
Then...
Shirone adjusted his estimation of Rians ability.
Complacency was dangerous, but overestimating an enemy robbed one of counterattacking opportunities.
Attack.
The moment Shirone switched to offense, Rian faltered and retreated.
Rian: "Tch!"
Dozens of exchanges later, exhaustion set in—the tension of being on the defensive drained Shirones stamina rapidly.
Damn it! This cant be happening!
Rians strikes were basic, yet—
Why are they so hard to block? I can barely even see them!
Suddenly, Rais face flashed in his mind.
That infuriating smirk from two years ago, when hed disarmed Rian with one hand.
Rian: "Dont mock me!"
Rian roared, charging forward.
Rian: "I will become the greatest swordsman in the world!"
Shirone was baffled.
While he admired Rians tenacity, this recklessness would only get him killed.
Doesnt he want to win? Why is he so stubborn? Does he even think?
Then, in an instant—
Huh?
Shirone could no longer read Rians movements.
His emptied mind made his strikes unpredictable, chaotic.
Rian: "I wont lose! I will surpass you!"
As Rian seized momentum, Shirones stamina hit its limit.
He had conserved energy as efficiently as possible, but the sheer difference in training was undeniable.
His sword felt heavier by the second.
Rian: "This ends now!"
Rian lunged, his longsword aimed to cleave Shirones jaw upward.
Shirone: "Ghk—!"
With the last of his strength, Shirone swung downward.
CLANG!
A sword spiraled into the air before embedding itself into the far wall.
Silence.
Amidst ragged breaths and locked gazes, Rian was the first to lower his eyes.
The tip of Shirones blade rested against his solar plexus.
Right before impact...
Shirone had twisted his wrist, striking Rians sword from below and knocking it skyward.
The force, combined with Rians exhaustion, had wrenched the weapon from his grip.
How is this possible?
This wasnt a technique one could execute with mere confidence.
Only a mind honed to icy precision could decide victory like this.
Shirone didnt relax.
Shirone: "Haah... haah..."
He wanted to collapse, but he couldnt throw away the life hed fought so hard to keep.
Then—
Rian: "Tch. I lost."
He admitted defeat without resistance.
Rian: "Ah, damn it. Lost again."
He scratched his head roughly, but the hostility had already vanished.
Hed trained to his limits and fought his hardest—there were no regrets left.
Rian: "You won. Kill me if you want—Ive got nothing to say."
The childishness of the statement irritated Shirone more than anything.
Was it possible to be this immature?
Shirone: "Are you joking right now?"
Rian: "Huh?"
Shirone: "If I kill you, do you really think Id get to live? How can you say something so absurd?"
Rian: "Absurd? We fought risking our lives, and Im admitting defeat cleanly."
Shirone: "You were the only one risking your life! I was just fighting to survive! This whole duel was ridiculous from the start—you pinned a crime on me just because you didnt want to train!"
Rian stiffened.
After such an intense battle, shouldnt there at least be some lingering passion, if not camaraderie?
Rian: "Hey! Whos pinning crimes on you? You were the one acting shady! Any decent person wouldve shown some loyalty in that situation!"
Shirone: "Loyalty? Thats what you call it?"
Shirone had held back until now, but with the immediate threat gone, his anger boiled over.
Shirone: "Did you ever once consider the pressure Id face caught between the young master and the sword instructor? And you still asked me to cover for you?"
Rian: "Uh... well—"
Shirone: "If you were truly a man of loyalty, youd have been ashamed to burden a mere servant and faced the instructor yourself. That wouldve been the noble, loyal thing to do."
Rians mouth snapped shut.
He didnt argue or make excuses—Shirone could tell.
Rian wasnt the type to lie. If he had nothing to say, he simply stayed silent.
But that only annoyed Shirone more. He gave up on lecturing and slumped down.
Shirone: "Haah... I almost died."
Rian studied him quietly.
The boy who had faced deaths terror and pushed him to the brink was gone.
Who is he?
He was undoubtedly a genius—but he wasnt Rai.
Unlike his brother, who had disarmed Rian with a single contemptuous strike, this boy had fought with his entire being.
Rian: "Hey. Whats your name?"
Shirone looked up. From his seated position, Rian seemed even larger.
Shirone: "Arian Shirone."
Rian: "Im Ozent Rian."
The idea of a noble and a commoner exchanging names was laughable, but what baffled Shirone more was—
Did Rian genuinely not know the name of his own familys youngest son?
Before he could dwell on it, Rian stepped closer, forcing Shirone to tilt his head further back.
A hand the size of a pot lid thrust toward him.
Rian: "Lets be friends. What do you say?"

View File

@ -0,0 +1,285 @@
---
title: "Chapter 2: Encountering Magic (Part 2)"
slug: "ch-2"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"Ill try again."
Vincent stepped back, but Shirone didnt move—still studying the groove.
At first, Vincent wondered if he was slacking off—but quickly dismissed the thought.
Hed never deceive me.
He waited impatiently, yet Shirone remained still.
Whats he looking at? Chopping wood is about the body, not the mind. Just lift the axe, Shirone. Swing with all youve got.
Contrary to Vincents thoughts, Shirone was experiencing a quiet revelation.
So thats it.
Strike the same spot—but twist slightly.
Though the principle was ancient, in Shirones mind, it transformed into something far greater.
And that understanding was evolving into something... powerful.
"I think thisll work. Like this, here."
Finally, Shirone pointed to a notch in the tree and spoke.
"Dad."
"Hm?"
"Should I try to break it in one swing?"
"Hahaha! You havent even chopped halfway through—you think itll snap like that?"
"If Im lucky, maybe."
Of course, a seasoned woodcutter could exploit a trees weak point to fell it with fewer strikes. But even Vincent, skilled as he was, struggled with such precision—let alone a child like Shirone.
"Alright! Lets trust my sons luck!"
Vincent humored him anyway. Whether Shirone succeeded or not didnt matter; his eagerness alone was commendable.
"If I break it, grant me one wish."
"Oh? A wish?"
Vincent tensed. Was he about to ask to learn letters? Or to attend school like the wealthy kids? What if he begged to be sent away?
"When you go to the city to sell goods this time... take me with you."
Vincent nearly sighed in relief but masked it with a booming laugh.
"Thats all? Gladly! Ill grant that anytime!"
Shirone hefted his axe, smiling—until his expression stilled moments later. Vincent shuddered.
The boys gaze fixed on the tree as if seeing something invisible.
The axe swung.
It struck the notch perfectly, yet with a subtle twist no human could perceive.
Craaaack!
A sound like thunder split the air. Vincents eyes widened.
"What—?"
The axes impact splintered the wood, and with a groan, the tree collapsed under its own weight.
"Yahoo! I did it!"
Vincent couldnt believe it. Shirone had just performed Thunder Split—a legendary technique among lumberjacks.
Even Ive only managed it once, and that was pure luck.
It relied on a precise confluence of factors: structure, load, grain alignment—a near-impossible feat. Most woodcutters stumbled into it accidentally; few could replicate it deliberately.
Not that anyone needs to. Trying too hard just exhausts you.
But in the world of swordsmen, where how you strike matters, this phenomenon was studied. A technique even novices dared not attempt.
"I did it! Success!"
Shirones joy stemmed less from the feat itself and more from the promise of visiting the city.
"Dad! Youll keep your word, right?"
As the boy bounced excitedly, Vincents mind churned.
What do I do?
He no longer knew if Shirone was meant to be a woodcutter—or if forcing that path would doom him.
The cart passed through the city gates.
Vincent gripped the reins, leading the way, while Shirone—perched atop the cargo—gazed around with sparkling eyes.
Its been so long.
The sheer number of people in the streets set his heart racing.
Theres plenty of time.
The cart was laden with goods from the mountains: hides for weapon shops, meat for grocers, organs for apothecaries or magic stores. The rounds would take at least four hours, including haggling.
At the grocer, Vincent hoisted a sack of meat and turned to Shirone.
"Be back before sunset."
"Dont worry. I memorized the way."
"Stay on main roads. No alleys. If anyone asks why youre alone, point to the nearest shop and say youre waiting for me."
"Got it. Last time was fine, anyway."
Vincents chest ached at leaving his son, but their survival hinged on the deals ahead.
Shirones first stop outside the market was Creas grandest library.
The boys pulse quickened as he stared up at the colossal, ornate building.
Knowledge.
Did this place hold all the worlds wisdom?
Curiosity urged him inside, but entry was forbidden to non-nobles.
Two schoolgirls exited, arms stacked with books. Shirone hastily sidestepped.
Nobles.
They were just people. Every society had its villains, and surely some nobles were kind.
Yet Vincent had warned him like a ghost story:
—Never provoke them.
Nobles wielded the wealth and power to shatter commoners lives on a whim.
That might be true. But...
Shirone watched the girls retreating backs.
I just want to read.
Driven by stubborn longing, he trailed them toward the noble district.
What lives did they lead?
But his wonder crumpled under the districts opulence.
People built this... to live in?
The crown jewel was a school so vast it dwarfed mountains.
Shirone halted, reading the archaic script carved into its archway:
Alpheas Magic Academy
Magic.
The one word whose meaning eluded him.
Countless books mentioned it, yet none explained its principles—as if non-mages were unworthy of understanding.
"Hey! Whatre you doing here?"
Guards at the gate barked at him. His ragged clothes stood out like a stain.
"Scram! This isnt a place for gutter rats."
"S-sorry!"
Shirone fled—but after running endlessly along the academys towering wall, he stopped, breathless.
How big is this place?!
Then an elderly voice carried from beyond the wall:
"Now, todays topic: What is Magic?"
"Aww, no! Show us magic! Just one more spell!"
"Fire! Make fire, Headmaster!"
Peering up, Shirone spotted an ancient tree whose branches overhung the wall. The headmaster seemed to teach beneath its shade.
The children sounded young—unsurprising, given noble heirs early education.
"Hohoho, setting fires at school would earn you scoldings. But if you answer my riddle, Ill show you something fun."
"Yay! Whats the riddle?"
Shirones curiosity hooked him.
"What talent is most crucial to learning magic?"
Silence fell.
The question was subjective, but these were gifted children. Soon, answers trickled in:
"Effort! Magic takes lifetimes to master!"
"Knowledge! Ive read over a hundred spellbooks!"
Others cited focus, memory—all reasonable, yet the headmaster remained silent. Shirone imagined him smiling.
"Money! Magic needs so many expensive things!"
Laughter erupted, the headmasters guffaws mingling in.
Now Shirone burned to know:
Not effort, knowledge, or money? Then what?
Finally, the headmaster spoke.
"The most vital talent is insight."
Another pause.
"Whats insight?"
The headmaster groaned playfully before explaining:
"Insight is more precise than knowledge, swifter than effort. For example: Whats one plus one?"
"Two, duh!"
The children chorused, baffled by the simplicity.
"Indeed. Now, why is one plus one two?"
"Huh? Because..."
They faltered. None knew how to explain the obvious.
Alpheas smiled.
"That frustration is insight. Long ago, people didnt know one plus one equaled two. It took ages of study to prove. Yet you know it instinctively, without proof. Thats insight—the fastest way to grasp truths."
Shirone was enthralled.
"Magic is like that. It existed before we understood it. Some uncover it through toil, others see it naturally. Insight is the key."
"So... we dont need to study?"
"Hohoho! Put that way... yes, thats true."
Sometimes, harsh truths were packaged as common sense to soften the blow.
Shirone sensed Alpheass reluctance.
"Then why go to school?"
"Insight is rare. Scholars spent centuries proving why one plus one is two. Yet some know without proof. We call them geniuses."
"Mom says Im a genius!"
"Shes not wrong. Everyone is born with talent. Cultivate it, and anyone can become a genius."
Shirones heart swelled.
—Anyone can be a genius.
But was that true?
Would he ever get the chance to scale this towering wall?
"Ah, child behind the wall. What do you think?"

View File

@ -0,0 +1,397 @@
---
title: "Chapter 3: Encountering Magic (Part 3)"
slug: "ch-3"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
Shirone flinched.
Wh-what do I do?
Run? Answer? Did a commoner even have the right to speak?
Alpheas continued, gentle.
"No need to panic. Come over here. Id like to see you."
After a hesitation, Shirone approached, as if drawn by fate.
If I dont climb this wall now, I never will.
Over the wall, he saw a kindly white-haired elder—a nationally recognized 4th-class mage, renowned even abroad.
Alpheas waved from his rock seat.
"Come, join us. Will you humor an old mans chatter?"
Heartened by his warmth, Shirone vaulted into the school grounds.
Under the tree, noble children sat in a circle. One scowled.
"Headmaster, hes not a noble. Looks like a peasant."
"Ew! Peasants cant be here! Get out!"
Alpheas briefly frowned but soon beckoned Shirone closer.
"Pay them no mind. Now, what part of my ramblings caught your ear?"
Shirone hesitated.
He yearned to step forward, but the childrens glares pinned him in place.
"Show me magic."
"Oh? Have you never seen it?"
"Only in books."
A boy sneered.
"Peasants shouldnt touch magic! Leave!"
Yet Shirone stood his ground, eyes locked on Alpheas.
This might be his only chance.
Chapter 3
"Liar! How could a commoner read books?"
Alpheas studied Shirones expression and realized it didnt seem like a lie.
But children that age were known to deceive adults with innocent faces as easily as eating a meal.
"Fine. What kind of magic do you want to see?"
"Anything is fine. I dont care what it is—just show me, please."
As Shirone bowed his head, acknowledging his place, Alpheas waved his hand and laughed.
"This old mans only joy is showing magic to our little ones. Very well! Then this time, Ill show you a spell that conjures wind."
"Wooaaah! Wind, its wind!"
While the other children clapped their hands in excitement, Shirone clenched his fists, tense.
Wind? How can wind...?
The moment Alpheas raised his hand, Shirones eyes widened in shock.
"Huhk!"
His body lost all weight, and he soared over twenty meters into the air.
The countless buildings of the magic academy and even the mountain ranges beyond came into view at a glance.
"Aaaah!"
A scream tore out of him involuntarily, but the other children were flipping through the air, enjoying themselves.
A moment later, the children began falling like rain.
The speed of their descent was terrifying, and Shirone squeezed his eyes shut as the ground rushed up to meet him.
"Huh?"
There was no bone-shattering impact.
Confused, Shirone cautiously opened his eyes—and found himself floating just above the ground.
The children burst into laughter at his reaction, and Alpheas grinned mischievously.
"Well? This is what magic is."
Of course, he was a kind man by nature, but he wasnt so dry that he couldnt enjoy a childs reaction.
Perhaps that was why he had been more dramatic than usual, but Shirone couldnt respond.
All he could hear was the pounding of his own heart.
This... is magic.
The phenomenon he had just experienced completely surpassed even the wildest fantasies hed ever had as a boy.
When Shirone finally regained his composure, he asked:
"What is magic?"
"Hmm, lets see. Magic is..."
"Its fine if I dont understand. Just tell me the truth as it is."
The other children stiffened.
Though they were young, they knew Alpheas standing in the magical world. That was why even the proudest noble children behaved like mere students in his presence.
Even the teachers wouldnt dare speak to him like that.
At first, Alpheas found Shirones boldness audacious, but after a moment, his opinion shifted.
This child is sharp.
He wasnt trying to understand right away.
He knows what kind of opportunity this is. Thats why he isnt asking for an explanation simplified for a childs level—he wants difficult but accurate information so he can study it himself later.
If Shirone couldnt receive formal magical education, this approach was undoubtedly brilliant, but...
Really?
Did he truly believe he could do it alone?
Realizing this, Alpheas studied Shirone with a different gaze.
The boy was tense, like a man gambling with his life.
"Keke! Relax. Its not that complicated. But since you asked, Ill raise the difficulty a little. Magic is an act that defies common sense. In other words, its a mental exercise that explores the truth of phenomena."
Shirone fell deep into thought.
"Its fine to admit if you dont understand."
"Its not an easily explainable phenomenon, but is that really the truth?"
Alpheas blinked.
"Where did you learn that?"
"Uh, well... books."
"There are books that discuss such things?"
"No. I just thought about why books exist in the first place. If they only contained facts everyone already knew, no one would read them. Truth must differ from common sense—thats why books are written and read."
Alpheas nodded.
Anyone can memorize and recite. But understanding the concept of books requires unique insight. He has real perception. Is he truly a commoner? What a shame.
Judging by his appearance, he was likely an outcast, not even a city commoner.
Shirone asked another question.
"How can I learn magic? Do I need some special power?"
"I dont know what you mean by special power, but considerable mental strength is required."
The answer was unexpectedly mundane.
"Is that really all there is to it? If I just think of wind, can I fly?"
"Hmm, thats a difficult question. But to exaggerate, yes. Of course, ordinary thoughts alone wont suffice. A mages mind must align with the world. You could say its an extremely heightened mental state."
The children didnt dare interrupt Alpheas serious demeanor.
"What is this heightened mental state?"
Alpheas smiled.
This isnt mere curiosity. He genuinely intends to learn magic here.
Yet, he also felt concern.
Unfortunately, hes a commoner. He cant receive formal training. Encouraging him further would only bring misery to his life.
Before the conversation could deepen, Alpheas glanced at the other children, intending to cut it short.
"When a mage focuses, their mind becomes so sharp they can sense everything around them. Mages call this entering the Spirit Zone. Ill demonstrate. Watch what this child here does. Shuamin, can you enter the Spirit Zone?"
"Yes, Headmaster."
A girl with braided hair answered confidently.
These were children of extraordinary talent—of course theyd want to show off.
As Shuamin closed her eyes, the other children naturally fell into a reverent silence.
As if their attitude alone proved her superiority.
"Ive entered the Zone."
"Then lets begin."
Alpheas took out a coin, shook it in his palm, then suddenly snatched it and held out his hand.
"Now, how many coins are in here?"
"Six."
When he opened his palm, six silver coins lay there.
As Shirone watched in amazement, Alpheas repeated the process.
"Three."
Again, she was correct.
No matter how many times he tried, the result was the same.
"Thats enough, Shuamin. You did very well."
"Huu..."
Shuamin exhaled deeply.
Despite only guessing the number of coins, her forehead was drenched in cold sweat.
Alpheas turned to Shirone.
"This is what an extremely heightened mental state looks like. The moment a mage enters the Spirit Zone, they can perceive the external world with superhuman senses. Skilled mages can even count the leaves on a distant tree. Though, Shuamins performance was impressive in its own right."
Shirone had relied on instinct to master Thunder Fist, so he vaguely understood.
She didnt count the coins.
Instead, she sensed the totality of primal information that existed long before counting.
She felt the entire situation unfolding before her.
The claim that a Spirit Zone master could count distant leaves wasnt an exaggeration.
A natural question followed:
Could I do it? No—maybe I can do it?
Alpheas spoke.
"Anyone can do it."
Entering the Spirit Zone was something anyone could achieve—but not everyone could.
Magic was the culmination of relentless effort and talent, pushing the limits of humanity.
"Practice in a quiet place. First, focus on feeling yourself. Then, erase yourself. If you succeed, a different world will unfold before you. Do you understand?"
"Yes."
Shirone understood.
"If I cant feel myself, then erasing myself would be impossible."
Alpheas was impressed again. This wasnt the kind of insight a twelve-year-old could grasp.
Two possibilities came to mind:
Either this boy was a natural genius, or some mischievous acquaintance had sent him as a prank.
"Would you like to try? Right here."
Shirone had no reason to refuse. He nodded eagerly and closed his eyes.
Ill use my experience with Thunder Fist.
But true concentration was on a completely different level from finding weak points in wood.
How much do we really know about ourselves?
Who am I?
For the first time, Shirone realized how difficult it was to define himself.
I was mistaken.
There were too many definitions of "me"—and yet, none of them were precise.
What... am I?
At that moment, a simple truth leaped into his mind like a fish breaking the waters surface.
An extremely heightened mental state.
Alpheas description was chillingly accurate.
The brain.
Not the physical organ.
I... dont know the world beyond the brain.
The concept of the brain.
The realization that all his senses and perceived reality were, in truth, subjective.
I dont need to define it. I just need to feel it. Its not about my existence becoming heightened...
Only the heightened mind remains.
Instead of defining himself, Shirone began erasing everything he thought constituted "him."
If he erased it all, eventually, nothing would remain.
And finally—
....
Even Shirones thoughts vanished.
At some point, his eyes snapped open.
"Haa... Haa..."
The scene before him was peaceful.
The children were yawning, and Shuamin was fiddling with her hair.
Unbeknownst to Shirone, ten minutes had passed.
"Well? Did you feel anything?"
Alpheas wasnt expecting much.
Though Shirones ten-minute focus was commendable, that alone wasnt enough to succeed.
"Yes. I heard it."
The unexpected answer made Alpheas raise an eyebrow.
"Oh? What did you hear?"
"Sound. I heard every sound."
"Hoho, I see."
Alpheas nodded as if he had expected this.
As I thought, he didnt make it.
His senses had sharpened, but the Spirit Zone was on another level entirely.
First came synaesthesia—
Where sounds carried scent, light had taste, and the shapes of landscapes brushed against the skin.
A shame. The talent is there.
If he had been a noble, if he had trained since childhood, perhaps he could have matched the achievements of the children here.
Of course, that alone wouldnt have impressed Alpheas.
The world was full of children far more skilled than these.
"You did well. Keep practicing, and youll hear even more."
Even if he hadnt entered the Spirit Zone, concentration training would benefit the boys life.
"Now, this special lesson is over. All of you, return to the academy."
As Alpheas led the children away, Shirone didnt hesitate—he scaled the wall and left.
He had sensed Alpheas disappointment.
The fact that the old man had left first to spare him further embarrassment was kindness enough.
"Haa... Haa..."
Only after crossing the wall did Shirone collapse to the ground, gasping for air.
His heart pounded so hard his chest ached.
"It... really happened."

View File

@ -0,0 +1,373 @@
---
title: "Chapter 4: Encountering Magic (Part 4)"
slug: "ch-4"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
He had heard a massive sound.
Or perhaps it wasnt sound at all—but he had no other way to describe it.
As if the entire world had mouths, whispering to him, all those sounds merging into one until they ceased to be sound at all.
At that moment, I wasnt myself.
He was the world itself.
As he recalled that boundless vastness, a single truth struck him:
I am infinite.
"Hng... Ugh..."
Shirone, overwhelmed by emotions that transcended mere joy, clenched her eyes shut and sprinted forward.
She couldnt bear it—if she didnt run, she felt like she would collapse.
Though her body had been confined once more, her spirit still remembered that fleeting moment of liberation.
I am free.
How much time had passed?
Even with her eyes open, Shirone couldnt see ahead—until a dull impact struck her face.
"Ugh!"
She tumbled onto her backside, and when she looked around, she saw the filthy scenery of an alleyway.
How did I end up here?
The emotions had been so overwhelming that she couldnt even remember what had just happened. But now, reality crashed down on her.
"What the hell? Annoying brat."
A group of vagrants glared at Shirone like predators spotting prey.
The man she had bumped into grabbed her by the collar.
"Hey, you. Out of your damn mind?"
"S-sorry!"
"You think sorry cuts it? Spit it out—youre one of those Wolf gang punks, arent ya? Just tried to shank me, didnt you?"
"N-no! I didnt!"
They took one look at Shirones eyes and knew.
This scrawny kid, adorable even when sprawled on the ground, didnt have the guts to throw a punch, let alone wield a knife.
The only thing left to do was rob her, but judging by her clothes, she probably didnt have any money.
Still, her delicate features had an air of nobility—if they sold her off to the slavers in the South, theyd make a hefty sum.
Definitely a commoner. No need to worry about consequences.
Just as they were thinking that, a girls voice echoed from the alley entrance.
"Whatre you guys up to? Something fun?"
The men immediately turned.
"Lady Amy!"
Shirone, sensing a savior, looked toward this "Amy" person—
...Shes just a kid.
A girl around her own age, with reddish bangs covering one eye.
"Hehe, what brings you here? Bored again?"
Though her tone was light, the mens hands clasped together in deference as they approached her.
Anyone who knew her identity would understand.
Karmis Amy.
The youngest daughter of the Karmis family—nobility of the First Class, second only to royalty in the kingdoms hierarchy.
For a noble girl to mingle with street trash was beyond common sense, but for a rebellious teenager sick of her gilded life, delinquency was her only joy.
"This runt tried to kill me! We were just teachin her a lesson," one thug lied smoothly.
"N-no! I just bumped into him by accident!"
"Liar. You expect us to buy that?"
A burly man drove his foot into Shirones stomach, making her curl up in pain.
"Ugh...!"
"You owe us compensation, brat! Wheres your mom, huh? What kinda woman births a shameless brat like you and then disappears? Go get her!"
Shirone was stunned.
How could these men, who surely had parents themselves, insult someone elses mother like that?
"Oi, this brats eyes changed. You pissed, kid?"
The vagrants, sensing Shirones rage, swarmed her, kicking and stomping.
Even then, Shirone didnt understand why they avoided hitting her face.
Then Amy spoke.
"Enough. Youll kill her at this rate."
The men immediately backed off, and Amy hopped down from a wooden crate, approaching Shirone.
"You okay?"
"I-I didnt do anything..."
"Who said you did? I asked if you were okay."
"I... dont know if I am."
Amy studied Shirones face intently.
Dont make that world-weary face over something this small. Ive had it way harder than you.
To outsiders, the Karmis familys youngest daughter lived a life of privilege.
I work way harder than you, so why do you get all the pity?
Her dominance over the alleys thugs was born from that resentment.
Even if it was childish, when a noble did it, the rules changed.
Amy turned away.
"So, what now? Anything fun left?"
Shirone, who had assumed Amy would send her home, was stunned.
Meanwhile, the thugs, familiar with Amys cruel whims, answered smoothly.
"We were gonna rob her, then sell her to a brothel."
Amy smirked.
Of course, she had no intention of indulging their crimes—just roughing Shirone up a bit before sending her home.
"Hmm."
Studying Shirones face, Amys sadistic side stirred.
"Brothel workers cant have flaws. Why not strip her and check?"
Lately, shed been curious about such things—and since Shirone was a commoner, thered be no consequences.
Besides... hes kinda cute.
Shirones looks were undeniably good.
"Strip. If you do as youre told, maybe well let you go."
Shirones mind went blank.
This didnt feel real. The people before her seemed like demons.
"How... How could you? Thats evil!"
"You didnt know? The worlds always been like this. Youre just a victim cause youre weak. Everyone only cares about themselves."
The thug leader scoffed.
Criticizing the world made him feel mature, smarter than the rest.
Youre wrong, little girl.
You talk of cruelty, but you dont know true cruelty.
You chase suffering, but you dont know true pain.
Youll never understand.
Life is much longer than you think.
"Hey! The lady said strip! You wanna get hit again?"
"..."
Shirones lack of response made Amy uneasy.
Did we break her?
But Shirone wasnt broken.
Her mind was sharper than ever, hyper-focused on the changes unfolding within her.
The violence had triggered something—her heightened senses catapulted her into the Spirit Zone.
This is...?
The second time was different. Now, real-world information flooded in.
She could hear the thugs blinking.
The boundary between herself and the outside world dissolved as her consciousness instinctively sought a path—
—and landed on the memory of Alpheas casting magic at the academy.
"Ah..."
Her insight began etching Alpheass emotions, senses, posture, and movements into her mind like a printing press.
Countless patterns combined, and at last, the fundamental truth surfaced.
"Brat! Hurry up and drop your pants! The lady wants a show!"
A thug grabbed Shirones collar and shook her—nearly ejecting her from the Zone.
The Spirit Zone demanded extreme focus, leaving her vulnerable to outside disruptions.
It was like walking a tightrope while someone shook the rope.
As Shirones eyes darkened, Amy suddenly shouted:
"Wait! Stop—!"
But it was too late.
Shirones will violently distorted the natural order.
BOOM!
A gale of incredible density erupted, lifting everything in the alley—
Wooden crates, stones, the thugs, even Amy.
"AAAAH! HELP!"
The screams snapped Shirone back to reality.
The alley was eerily empty—until the bodies began falling.
THUD! THUD! THUD! THUD!
The sickening cracks of bones hitting the ground echoed.
Gravity, often overlooked, was a merciless force.
The thugs limbs shattered on impact, bones jutting through skin.
"Guhhh...!"
"M-my arm... my leg...!"
Legs bent grotesquely; forearm bones tore through flesh.
Shirone panicked.
She hadnt expected a moment of anger to cause such carnage.
Only one person landed unharmed—Amy.
Nobles trained their bodies from childhood, and as a First-Class heir, she was no exception.
Holding down her fluttering skirt, she stared at Shirone in shock.
"What... are you?"
The scene Shirone had created was a stark reminder of why mages were feared.
Even Amy, with her honed reflexes, hadnt resisted the winds fury.
"Answer me! Where did you learn magic? How can a commoner—?!"
She cut herself off.
The screams had drawn the guards.
If her identity got out, her family wouldnt let it slide.
"Tch!"
Pushing off a wall, she zigzagged up the alleys sides and vanished.
Shirone, dazed by the superhuman feat, snapped back to reality.
This is bad.
If the guards arrived, theyd pin everything on her.
Dad...
The city had taught her one thing: the world was cruel to the weak.
No one will listen to me.
She turned and ran—
—toward the only person she could trust.
Karmis Manor
The Karmis family—First-Class nobility, pillars of the kingdom.
Though not based in the capital, their influence stretched across Tormia.
Only two remained in the main house: the retired family head, Shakora, and Amy.
"Im home."
"Whereve you been? Skipping lessons again?"
Despite being past sixty, Shakora had no trace of white hair, his tall frame and sharp glasses exuding pride.
"Ive learned everything already. Its boring."
"So you played with street trash instead? Even geniuses get overtaken if they laze around. A gem must be polished. Grow complacent, and one day, youll get stabbed in the back."
"Ugh! Enough lecturing!"
Shakora chuckled.
He knew her teenage rebellion stemmed from frustration—both at her genius and her gilded cage.
The grass is always greener.
He let her be because, unlike her siblings, shed inherited his talent in full.
When she realizes what she holds, the scales will balance themselves.
That was the fate of a genius.
Amy froze. His scolding had dredged up the days events.
What was that kid?
Shed trained relentlessly, hating the idea that her status was all she had.
He looked my age...
How had someone with no training or education wielded magic?
An accidental awakening? A latent talent?
No other explanation came to mind.
—Grow complacent, and one day, youll get stabbed in the back.
Amy bit her lip.
Ill never lose.
Yet today, shed been struck down by someone shed always looked down on.
"Dad."
Shakora set aside his paper, surprised by her initiative.
"Hm?"

View File

@ -0,0 +1,120 @@
---
title: "Chapter 5: Encountering Magic (Part 5)"
slug: "ch-5"
novel: "Infinite Mage [Remake]"
number: 1
views: 2850000
likes: 198000
wordCount: 3600
createdAt: "2020-01-17"
---
"Why do you ask?"
"Its not that I want to do it, but there is a field Im curious about."
"Oh?"
Shakoras eyes gleamed with intrigue.
From childhood, if she was taught one thing, she mastered a hundred. Whatever she pursued, she excelled.
"Go on. Your father will support you fully."
"No, Im not saying I want to—just that Im interested."
"Then Ill support that interest."
Amys lips twisted bitterly.
Of course. I already know.
With the power and wealth of a first-tier noble family, nothing in this world was beyond reach.
Expecting her parents to simply cheer her on like doting fools was nothing but childish selfishness.
I have no choice but to accept.
Only after being humbled by commoners did she realize how petty it was to deny the Karmis familys influence.
Ill become the best.
Having made her decision, Amy spoke.
"Magic."
"Huh? What?"
"If you know anyone at the magic academy, introduce me."
Shirone kept silent about what had happened in the city.
This wasnt a simple matter. If he spoke up, hed have to explain everything—including the incident at the magic academy.
He already understood just how extraordinary that day had been.
Whether it was a blessing or a curse, one thing was certain: once that line was crossed, there was no going back.
Geniuses know theyre geniuses. And Shirone had vaguely sensed since childhood that he was different.
He never felt superior, but his desire to surpass his own limits burned fiercer than anyones.
Yet he couldnt show it.
His parents were the most precious people in his world. Even in poverty, they never forced him down a wrong path—so the last thing he wanted was to burden them.
Life continued as usual.
He helped his mother with chores, and in the afternoons, he went to the nearby forest to chop wood.
But most of his time there wasnt spent swinging an axe—it was spent in meditation.
Ever since his awakening, Shirone had secretly trained in the Spirit Zone without missing a single day.
By the time a month passed, his speed in entering the Spirit Zone had improved dramatically.
But not everything came easily.
No matter how familiar he became with the Spirit Zone, he couldnt recreate the magic hed cast in that alley.
Of course not.
That magic had been born from desperation—an unconscious surge of power.
Even if he replicated the same situation, the same emotions, knowing hed succeeded once made imitation impossible.
To cast magic rationally, Id need to understand every step of the process—beyond just insight.
But Shirone, with no formal training, had no way to learn.
Instead, he obsessively honed the one thing he could do: the Spirit Zone.
After meditation, he practiced Thunder Strikes.
Unlike before, once he began consciously attempting them, his success rate dropped.
The power of insight is incredible.
Sometimes, beginners succeed not through knowledge, but sheer instinct.
But unlike magic, chopping wood allowed for endless repetition.
Shirone corrected his mistakes one by one, swinging his axe dozens of times.
CRACK!
The tree fell with a satisfying crash.
But Shirone showed neither joy nor satisfaction—just calm focus as he began sawing.
Hed found an error. Hed fixed it. That was all.
"Tomorrow, and then tomorrow again."
He repeated the basics, over and over.
For the day my chance comes.
As he carried the wood home, Shirones gaze burned brighter than ever.

Some files were not shown because too many files have changed in this diff Show More