A modern, full-stack manga reading platform built with Next.js, TypeScript, and integrated web scrapers. Browse, search, and read manga from multiple sources with a sleek dark-themed interface.
- Multi-Source Scraping: Integrated scrapers for Mangapill and Asurascans
- Fast Search: Search manga across multiple providers simultaneously
- Responsive Design: Beautiful dark-themed UI optimized for all devices
- Chapter Management: Browse chapters, view manga details, and track progress
- Local Storage: Save reading progress and bookmarks
- Type-Safe API: Full TypeScript support with Zod schemas
- Server-Side Rendering: Optimized with Next.js App Router and ISR
- Production Ready: Tested and deployed on Vercel
- Frontend: Next.js 16.1.1, React 19, TypeScript
- Styling: Tailwind CSS, Shadcn/ui components, Framer Motion
- API: Hono for REST API routes, Axios for HTTP requests
- Scraping: Cheerio for HTML parsing
- State Management: React hooks, Context API
- Validation: Zod for schema validation
- UI Components: Radix UI, Lucide Icons
new-manga-site/
βββ app/
β βββ api/ # Hono API routes
β β βββ [[...route]]/
β β βββ route.ts # All scraper endpoints
β βββ manga/ # Manga detail pages
β βββ page.tsx # Homepage
β βββ layout.tsx
βββ lib/
β βββ scrapers/ # Scraper implementations
β β βββ mangapill.ts
β β βββ asurascans.ts
β β βββ types.ts
β β βββ index.ts
β βββ services/ # API client services
β β βββ manga.actions.ts
β β βββ manga.service.ts
β βββ api-client.ts # Type-safe frontend API client
βββ components/
β βββ custom/ # Custom components
β β βββ landing/
β β βββ info/
β β βββ reader/
β βββ ui/ # Shadcn/ui components
βββ public/ # Static assets
βββ [config files]
- Node.js 18+ or Bun
- npm, yarn, pnpm, or bun package manager
- Clone the repository
git clone <repository-url>
cd new-manga-site- Install dependencies
bun install
# or
npm install- Run the development server
bun run dev
# or
npm run dev- Open in browser Navigate to http://localhost:3000
GET /api/mangapill/search/:query- Search mangaGET /api/mangapill/info/:id- Get manga detailsGET /api/mangapill/pages/:id- Get chapter pagesGET /api/mangapill/newest- Get newest mangaGET /api/mangapill/recent- Get recently updatedGET /api/mangapill/images/:imageUrl- Proxy images
GET /api/asurascans/search/:query- Search mangaGET /api/asurascans/info/:id- Get manga detailsGET /api/asurascans/pages/:id- Get chapter pagesGET /api/asurascans/popular- Get popular mangaGET /api/asurascans/latest/:page- Get latest updatesGET /api/asurascans/genres/:type- Get by genreGET /api/asurascans/genre-list- List available genres
Use the type-safe API client in React components:
import { scrapersAPI } from "@/lib/api-client";
// Search manga
const results = await scrapersAPI.mangapill.search("naruto");
// Get manga info
const info = await scrapersAPI.mangapill.info("/manga/12/solo-leveling");
// Get chapter pages
const pages = await scrapersAPI.mangapill.pages(chapterId);Fetch data directly in server components:
import { MangapillService } from "@/lib/services/manga.actions";
export default async function MangaPage() {
const manga = await MangapillService.getNewest();
return <div>{/* render manga */}</div>;
}bun run build
# or
npm run buildbun run start
# or
npm run startFor detailed API documentation and examples, see:
- SCRAPER_DOCS.md - Integration status and features
The API automatically handles special characters in IDs (slashes, spaces, etc.):
// Works automatically - no manual encoding needed
const manga = await scrapersAPI.mangapill.info("/manga/12/solo-leveling");- Hot Reload: Changes to files are automatically reflected in the browser
- TypeScript: Full type checking with strict mode enabled
- Linting: ESLint configured for code quality
- Formatting: Prettier configured for consistent code style
Contributions are welcome! Please feel free to submit pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
- Mangapill - Manga source
- Asurascans - Webtoon/Manga source
The UI is built with Tailwind CSS and Shadcn/ui components, making it easy to customize:
- Dark Theme: Primary color scheme is dark with accent colors
- Components: Located in
components/directory - Styles: Global styles in
app/globals.css - Tailwind Config: Customize in
tailwind.config.ts
Happy Reading! πβ¨