Back to projects
sys://project.detail

Keiyomi

2024-05-14
SvelteKit 5ElysiaJSBunPostgresQL

//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.”