- User authentication with JWT and Google OAuth
- Book listing and management
- Search and filter functionality
- Responsive design for all devices
- Error monitoring and reporting
This project is a monorepo managed with Turborepo and pnpm, containing:
- Frontend (Web): Next.js application with TypeScript and Tailwind CSS
- Backend (Server): NestJS application with TypeScript, TypeORM, and PostgreSQL
- Shared Packages: Common utilities and configurations
- Next.js
- TypeScript
- Tailwind CSS
- Sentry for error monitoring
- NestJS
- TypeScript
- TypeORM with PostgreSQL
- JWT Authentication
- Google Auth integration
- Sentry for error monitoring
- Node.js (v18 or higher)
- pnpm (v9.0.0 or higher)
- PostgreSQL
-
Clone the repository:
git clone https://github.com/yourusername/bookmarket.git cd bookmarket
-
Install dependencies:
pnpm install
-
Configure environment variables:
- Copy
.env.example
to.env
in both/apps/web
and/apps/server
directories - Update the values in the
.env
files with your configuration
- Copy
-
Setup the database:
cd apps/server pnpm run migration:run
To run the project in development mode:
pnpm dev
This will start both the frontend and backend applications in parallel.
pnpm --filter bookmarket-web dev
pnpm --filter bookmarket-server dev
Run tests across all packages:
pnpm test
Build all applications:
pnpm build
This project uses ESLint, Prettier, and TypeScript for code quality:
- Run linting:
pnpm lint
- Format code:
pnpm format
- Type checking:
pnpm check-types
Generate a new migration:
cd apps/server
pnpm run migration:generate migration-name
Run migrations:
cd apps/server
pnpm run migration:run
Revert the last migration:
cd apps/server
pnpm run migration:revert
- Fork the project
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License.
If you have any questions, feel free to reach out!