Skip to content

Commit c354cbd

Browse files
committed
feat: add eLibrary (Nintrea) project details and media assets
1 parent 28ca788 commit c354cbd

5 files changed

Lines changed: 90 additions & 8 deletions

File tree

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
---
2+
title: "eLibrary (Nintrea)"
3+
slug: "ebook-nintrea-top"
4+
description: "A Khmer-focused digital eLibrary web app for browsing categories, viewing book details, and reading content with a responsive Next.js interface."
5+
image: "/assets/projects/ebooks.nintrea.top/light-1.webp"
6+
tags: ["Library", "Education", "Khmer"]
7+
languages: ["Next.js", "TypeScript", "TailwindCSS", "Supabase"]
8+
source:
9+
-
10+
name: "source"
11+
type: "source"
12+
url: "https://github.com/nintrealab/elibrary"
13+
-
14+
name: "demo"
15+
type: "demo"
16+
url: "https://ebooks.nintrea.top"
17+
18+
authors:
19+
-
20+
name: "PPhat Dev"
21+
profile: "https://github.com/pphatdev.png"
22+
url: "https://github.com/pphatdev"
23+
-
24+
name: "Nintrea Lab"
25+
profile: "https://github.com/nintrealab.png"
26+
url: "https://github.com/nintrealab"
27+
28+
published: true
29+
createdAt: "2026-03-16T10:12:15.648Z"
30+
---
31+
32+
<div class="blog-gallery" data-layout="snap" data-captions="true">
33+
<img src="/assets/projects/ebooks.nintrea.top/light-1.webp" alt="eLibrary home page" className=""/>
34+
<img src="/assets/projects/ebooks.nintrea.top/light-2.webp" alt="eLibrary content page" className=""/>
35+
</div>
36+
37+
<br/>
38+
39+
# **About Project**
40+
41+
eLibrary (Nintrea) is a web-based digital reading platform focused on Khmer educational and literary content.
42+
It provides structured category browsing, searchable book listings, detailed book pages, and an integrated reader experience in a clean sidebar-driven interface.
43+
The project is built with Next.js and modern component patterns to support responsive layouts, reusable UI blocks, and progressive expansion toward a full online library system.
44+
45+
# 🛠️ **Project Tech Stack**
46+
47+
- **Core:**
48+
- Next.js
49+
- React
50+
- TypeScript
51+
52+
- **UI & Styling:**
53+
- TailwindCSS
54+
- Shadcn-style UI components
55+
- Lucide icons
56+
- Radix primitives
57+
58+
- **Data & Backend Integration:**
59+
- Supabase client setup
60+
- Database typing for books, authors, genres, members, and loans
61+
- Structured content models for category and book metadata
62+
63+
- **Features & Utilities:**
64+
- Sidebar navigation with breadcrumbs
65+
- Category and book listing pages
66+
- Search inputs and filtering controls
67+
- PDF reader integration for in-app viewing
68+
- Loading and transition enhancements
69+
70+
# 🌈 **Project Features**
71+
72+
- Khmer-focused digital library experience
73+
- Book category browsing and detail views
74+
- Breadcrumb-based navigation for deep pages
75+
- Responsive layout for desktop and mobile
76+
- Integrated PDF reader for online reading
77+
- Expandable architecture for library data workflows
78+
79+
# 💻 **Preview**
80+
81+
Here is the screenshot preview:
82+
83+
![elibrary-nintrea](/assets/projects/ebooks.nintrea.top/light-1.webp)
84+
![elibrary-nintrea](/assets/projects/ebooks.nintrea.top/light-2.webp)
68.4 KB
Loading
73.8 KB
Loading

src/app/posts/page.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ const PostsContent = () => {
141141
<div className="flex flex-wrap max-sm:justify-center items-center gap-1.5">
142142
<p className="text-xs font-medium">Tag: </p>
143143
<Button
144-
className={cn("mt-0 py-1 sm:py-2 px-2.5 !h-fit text-xs leading-4 text-foreground/80 hover:text-primary transition-all", !selectedTag && "ring-1 !px-4 bg-primary/5 text-primary")}
144+
className={cn("mt-0 py-1 sm:py-2 px-2.5 h-fit! text-xs leading-4 text-foreground/80 hover:text-primary transition-all", !selectedTag && "ring-1 px-4! bg-primary/5 text-primary")}
145145
onClick={() => handleTagChange("")}
146146
aria-pressed={!selectedTag}
147147
>
@@ -156,7 +156,7 @@ const PostsContent = () => {
156156
type="button"
157157
onClick={() => handleTagChange(isActive ? "" : tag)}
158158
className={cn(
159-
"mt-0 py-1 sm:py-2 px-2.5 !h-fit text-xs leading-4 text-foreground/80 hover:text-primary transition-all",
159+
"mt-0 py-1 sm:py-2 px-2.5 h-fit! text-xs leading-4 text-foreground/80 hover:text-primary transition-all",
160160
isActive && "ring-1 bg-primary/5 text-primary"
161161
)}
162162
aria-pressed={isActive}
@@ -176,7 +176,7 @@ const PostsContent = () => {
176176
</p>
177177
</div>
178178
)} */}
179-
<article className="grid max-w-5xl mx-auto p-5 grid-cols-1 xs:grid-cols-2 lg:grid-cols-3 gap-4 min-h-[300px] relative">
179+
<article className="grid max-w-5xl mx-auto p-5 grid-cols-1 xs:grid-cols-2 lg:grid-cols-3 gap-4 min-h-75 relative">
180180
{filteredPosts.map((post) => (<PostCard key={post.id || post.slug} post={post} />))}
181181
{filteredPosts.length === 0 && (searchQuery || selectedTag) && (
182182
<div className="col-span-full text-center py-12">
@@ -205,13 +205,12 @@ const Posts = () => {
205205
<Suspense fallback={
206206
<main className="w-full flex flex-col gap-7 pb-5">
207207
<NavigationBar />
208-
<div className="flex justify-center items-center min-h-[400px]">
208+
<div className="flex justify-center items-center min-h-100">
209209
<Spinner variant={'bars'} />
210210
</div>
211211
</main>
212212
}>
213-
<PostsContent />
214-
<Footer />
213+
<PostsContent />
215214
</Suspense>
216215
);
217216
};

src/app/projects/page.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ const ProjectsContent = () => {
191191
</InfiniteScroll>
192192
</article>
193193
</BlurFade>
194-
<Footer />
195194
</main>
196195
);
197196
};
@@ -207,7 +206,7 @@ const Projects = () => {
207206
</div>
208207
</main>
209208
}>
210-
<ProjectsContent />
209+
<ProjectsContent />
211210
</Suspense>
212211
);
213212
};

0 commit comments

Comments
 (0)