A modern book writing platform built with a monorepo architecture. Bookora enables authors to write, organize, and manage their books with an intuitive interface, rich text editing, and powerful organizational features.
- Overview
- Architecture
- Getting Started
- Project Structure
- Available Scripts
- Technology Stack
- Documentation
- Development
- Contributing
- License
Bookora is a full-stack web application that provides a comprehensive platform for authors to create, organize, and manage their books. It features automatic saving, drag-and-drop chapter organization, rich text editing, and support for both manual and AI-assisted book creation.
- ✨ Modern UI/UX - Clean, intuitive interface built with Next.js and Radix UI
- 📝 Rich Text Editor - Powerful writing experience with Tiptap
- 🔐 Authentication - Secure user registration and login
- 📚 Book Management - Create, edit, delete, and organize books
- 📖 Chapter Organization - Drag-and-drop interface for managing chapters and sections
- 🌍 Internationalization - Multi-language support (English, Spanish, German)
- 🎨 Dark Mode - Comfortable reading and writing in any lighting
- 📱 Responsive Design - Seamless experience across all devices
- 🤖 AI-Assisted Creation - Generate book structures with AI assistance
- ☁️ Auto-save - Automatic saving while you write
This monorepo uses Turborepo to manage a multi-package workspace with the following structure:
bookora-mono-repo/
├── apps/
│ ├── api/ # Express.js REST API backend
│ └── client/ # Next.js frontend application
├── packages/
│ ├── ui/ # Shared UI component library
│ ├── eslint-config/ # Shared ESLint configuration
│ └── typescript-config/ # Shared TypeScript configuration
└── ...
- Node.js >= 20.x
- pnpm >= 10.4.1 (or use the built-in package manager)
- MongoDB (for the API backend)
-
Clone the repository:
git clone https://github.com/yourusername/bookora-mono-repo.git cd bookora-mono-repo -
Install dependencies:
pnpm install
-
Set up environment variables:
- API: Copy
apps/api/example.envtoapps/api/.envand fill in the required values - Client: Copy
apps/client/example.envtoapps/client/.env.localand configure
See individual app READMEs for detailed environment variable documentation.
- API: Copy
-
Start the development servers:
pnpm dev
This will start both the API server (default:
http://localhost:8080) and the client application (default:http://localhost:3000).
-
apps/api- Express.js REST API backend- MongoDB integration
- JWT authentication
- Swagger documentation
- Book, Chapter, Section, and User management
-
apps/client- Next.js frontend application- Server-side rendering
- NextAuth.js integration
- Rich text editor with Tiptap
- Multi-language support
-
packages/ui- Shared UI component library- Radix UI primitives
- Tailwind CSS styling
- Reusable React components
-
packages/eslint-config- Shared ESLint configuration- Base configuration
- Next.js specific rules
- React internal rules
-
packages/typescript-config- Shared TypeScript configuration- Base configuration
- Next.js configuration
- React library configuration
Run these commands from the root of the monorepo:
| Command | Description |
|---|---|
pnpm dev |
Start all apps in development mode |
pnpm build |
Build all apps and packages |
pnpm lint |
Lint all apps and packages |
pnpm format |
Format code with Prettier |
pnpm check-types |
Type-check all TypeScript code |
To run commands for a specific app or package, use Turborepo's filtering:
pnpm --filter api dev # Run dev only for API
pnpm --filter client dev # Run dev only for client
pnpm --filter ui build # Build only UI package- Framework: Next.js 15 with App Router
- Language: TypeScript
- Styling: Tailwind CSS
- UI Components: Radix UI + shadcn/ui
- Rich Text Editor: Tiptap
- State Management: Easy Peasy, SWR
- Forms: React Hook Form + Zod
- Animation: Framer Motion
- Internationalization: next-intl
- Authentication: NextAuth.js
- Runtime: Node.js
- Framework: Express.js
- Database: MongoDB with Mongoose
- Authentication: JWT (JSON Web Tokens)
- Documentation: Swagger/OpenAPI
- Logging: Pino
- Monorepo: Turborepo
- Package Manager: pnpm
- Code Quality: ESLint, Prettier, TypeScript
- Deployment: Vercel
- API Documentation - Backend API guide and endpoints
- Client Documentation - Frontend application guide
- UI Components - Shared component library documentation
For API endpoint documentation, visit the Swagger UI when the API is running:
- Local:
http://localhost:8080/api-docs - Production:
https://bookora.vercel.app/api/api-docs
- Create a new directory under
packages/ - Initialize
package.jsonwith the workspace protocol - Update
pnpm-workspace.yamlif needed (usually automatic) - Add the package to
turbo.jsontasks if it has build steps
- Create a new directory under
apps/ - Initialize the app with appropriate framework
- Configure it to use shared packages (
@workspace/ui,@workspace/eslint-config, etc.) - Add relevant tasks to
turbo.json
- Formatting: We use Prettier with default configuration
- Linting: ESLint with shared configurations
- Type Checking: TypeScript strict mode enabled
- Commits: Follow conventional commit messages
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Make your changes
- Run tests and linting (
pnpm lint,pnpm check-types) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Please ensure your code follows the existing style and includes appropriate tests.
Distributed under the MIT License. See LICENSE for more information.
Built with ❤️ using Turborepo