Keiyomi
//The next generation of light novel tracking. Dive into a vast library, track, review, and connect with fellow enthusiasts.
Keiyomi: The Next Generation of Light Novel Tracking
Keiyomi is a comprehensive platform designed to help users dive into a vast library of light novels. Built to be more than just a reading tool, it serves as a central hub for enthusiasts to track their progress, review their favorite series, and connect with a dedicated community.
Core Features
- Vast Library: Explore and track hundres of light novels across various genres and categories.
- Community Hub: Engage in discussions, share thoughts, and connect with other light novel enthusiasts.
- Rate & Review: Leave detailed reviews, rate series, and help others discover their next favorite read.
- Smart Recommendations: Get personalized, curated suggestions tailored specifically to your reading history and interests.
The Architecture Stack
Under the hood, Keiyomi is powered by a bleeding-edge, full-stack TypeScript ecosystem designed for maximum performance and developer velocity.
- Frontend: SvelteKit 5 provides the reactivity and server-side rendering required for instant page loads.
- Backend: Built on Bun and ElysiaJS, the API handles thousands of simultaneous requests with sub-millisecond latency.
- Database: PostgreSQL paired with Drizzle ORM ensures type-safe schema management and lightning-fast complex queries for content filtering and user libraries.
export const activitiesRoute = new Elysia({ name: 'activities', tags: ['Activities'] })
// Get recent activities for a user
.get(
'/activities/user/:username',
async ({ params: { username }, query }) => {
const limit = query.limit ?? 10;
const results = await db
.select({
id: activities.id,
type: activities.type,
metadata: activities.metadata,
createdAt: activities.createdAt,
series: {
id: series.id,
title: series.title,
slug: series.slug,
cover: series.cover
}
})
.from(activities)
.innerJoin(user, eq(activities.userId, user.id))
.leftJoin(series, eq(activities.seriesId, series.id))
.where(eq(user.username, username.toLowerCase()))
.orderBy(desc(activities.createdAt))
.limit(limit);
return results;
},
{
params: t.Object({
username: t.String()
}),
query: t.Object({
limit: t.Optional(t.Number({ minimum: 1, maximum: 50 }))
}),
detail: {
summary: 'Get User Activities',
description: 'Fetch recent activities for a specific user'
}
}
); Design Philosophy
The application’s interface is built on standard Tailwind CSS and shadcn-svelte, adhering to a strict “content-first” methodology.
“Keiyomi proves that utility-first web applications can be blazing fast and visually striking, ensuring the reading experience always takes precedence.”