How ratancloud/rklibrary works
Purpose and runtime
RK Library is a full-stack, multi-user library-operations application for configuring a library, managing students and subscriptions, assigning seats by floor/shift, handling bookings and inquiries, and tracking expenses. It runs on Next.js 16 App Router/React 19 with TypeScript; server behavior is implemented through route handlers and Prisma against PostgreSQL/Neon. Primary entry points are app/layout.tsx, app/(main)/page.tsx, and app/api/auth/[...all]/route.ts.
Route shells, access, and application UI
The App Router separates authentication/onboarding from the principal application surface. Auth pages cover login, signup, and initial library setup; the main layout hosts operational modules such as dashboard, students, bookings, seats, settings, and renewals. Client components own interactive screens while their page.tsx wrappers define routes. Relevant paths: app/(auth)/layout.tsx, app/(main)/layout.tsx, app/(main)/dashboard/DashboardClient.tsx.
Authentication and tenant boundary
Better Auth provides account and session handling through a catch-all API route, with server and client integration modules. The presence of library setup and library-scoped models implies the library is the key operational ownership boundary for configuration, floors, shifts, students, and subscriptions. Route protection/routing mediation is likely centralized in proxy.ts. Paths: lib/auth.ts, lib/auth-client.ts, proxy.ts.
Core persistence model
Prisma is the persistence boundary. Its schema models User/session identities plus Library, Floor, Seat, Shift, Student, Subscription, SeatAssignment, Inquiry, and Expense operational records. Generated Prisma sources are derived artifacts; schema and migrations are the authoritative evolution path. Paths: prisma/schema.prisma, prisma/migrations/20260427171553_add_schema/migration.sql, lib/prisma.ts.
Library configuration and seat-capacity lifecycle
Administrators establish library metadata, floors, shifts, and seat maps, then maintain them through settings and library APIs. Seat-map UI renders floor/seat availability and supports assignment details; API endpoints expose floor, shift, setup, map, and seat-removal operations. This establishes capacity before student allocation. Paths: app/api/library/setup/route.ts, app/api/library/seat-map/route.ts, components/seat-map/SeatMap.tsx.
Student registration, subscriptions, and allocation
Student creation/registration captures student and document data, then subscriptions represent dated, paid/discounted access and can be renewed. Assignment is a separate booking operation linking a student to a seat and shift, protecting against double booking at the data-model/API boundary. Public registration is supported alongside staff-managed student records. Paths: app/api/student-register/route.ts, app/api/subscriptions/[id]/renew/route.ts, app/api/booking/assign-seat/route.ts.
Operational workflows and reporting
The dashboard aggregates library metrics; booking endpoints calculate availability and shifts; history surfaces prior activity. Inquiries form a lead-management funnel, while expenses are independently recorded for operations tracking. A scheduled endpoint updates subscription status, requiring an external scheduler/platform cron invocation in deployment. Paths: app/api/dashboard/route.ts, app/api/inquiry/route.ts, app/api/cron/update-subscriptions/route.ts.
Client state and external services
React Query manages server-cache interaction; Zustand holds client library/shift state. Zod and React Hook Form enforce form input handling. ImageKit is the media boundary for student/document uploads, authenticated via server routes; PDFs are generated client-side for student exports. Deployment targets Vercel, with PostgreSQL/Neon, Better Auth secrets, and ImageKit credentials supplied by environment. Paths: store/useLibraryStore.ts, app/api/imagekit/public-auth/route.ts, components/pdf/StudentPDF.tsx.
Main entry points: prisma.ts Prisma client · route.ts Student registration API · layout.tsx App Router shells · DashboardClient.tsx Dashboard client
Components 22
App UI
- App Router shells · Separates auth/onboarding from the protected operational surface.
app/(main)/layout.tsx - Dashboard client
app/(main)/dashboard/DashboardClient.tsx - Library client state · Holds active library and shift state.
store/useLibraryStore.ts - Student PDF export
components/pdf/StudentPDF.tsx
Identity & tenancy
- Auth API
app/api/auth/[...all]/route.ts - Auth server integration
lib/auth.ts - Route protection · Mediates protected routing.
proxy.ts
Library operations
- Library setup API · Establishes library metadata, floors, shifts, and capacity.
app/api/library/setup/route.ts - Seat map UI · Renders floor capacity and assignment details.
components/seat-map/SeatMap.tsx - Seat map API
app/api/library/seat-map/route.ts - Student registration API · Supports public student registration and document capture.
app/api/student-register/route.ts - Subscription renewal API
app/api/subscriptions/[id]/renew/route.ts - Seat assignment API · Allocates a student to a seat and shift.
app/api/booking/assign-seat/route.ts - Dashboard metrics API
app/api/dashboard/route.ts - Inquiry API · Manages the lead funnel.
app/api/inquiry/route.ts - Subscription status job · Updates subscription status when invoked by deployment cron.
app/api/cron/update-subscriptions/route.ts
Persistence
- Prisma client
lib/prisma.ts - Operational schema · Defines tenant-scoped library, capacity, student, subscription, booking, inquiry, and expense records.
prisma/schema.prisma
External services
- PostgreSQL / Neon
- ImageKit auth API · Issues server-authenticated upload access.
app/api/imagekit/public-auth/route.ts - ImageKit · Stores student and document uploads.
- Deployment scheduler
Connections 21
- Route protection → App Router shells: guards main routes
- App Router shells → Dashboard client: hosts
- Dashboard client → Dashboard metrics API: loads metrics
- Library client state → Seat map UI: provides library context
- Seat map UI → Seat map API: reads availability
- Auth API → Auth server integration: uses
- Auth server integration → Prisma client: persists identities and sessions
- Library setup API → Prisma client: creates capacity setup
- Seat map API → Prisma client: queries seats and assignments
- Student registration API → Prisma client: creates students
- Subscription renewal API → Prisma client: updates subscriptions
- Seat assignment API → Prisma client: enforces allocation
- Dashboard metrics API → Prisma client: aggregates operations
- Inquiry API → Prisma client: records leads
- Subscription status job → Prisma client: updates statuses
- Prisma client → Operational schema: implements
- Prisma client → PostgreSQL / Neon: reads and writes
- Deployment scheduler → Subscription status job: invokes
- ImageKit auth API → ImageKit: authorizes uploads
- Student registration API → ImageKit auth API: obtains upload authorization
- Student PDF export → Student registration API: exports student data