# πŸ“š Bookmann A self-hosted ebook management system built with Go, PostgreSQL, HTMX, and Tailwind CSS (fully integrated into a single service) featuring multiple beautiful dark themes with Tokyo Night as default. ## ✨ Features - **πŸ”’ Multi-User Authentication**: Complete user system with registration/login, JWT-based sessions, and bcrypt password hashing - **βœ… Server-Side Validation**: Comprehensive input validation with detailed error messages - **πŸŒ™ Multiple Themes**: 11 beautiful themes including Tokyo Night, Dracula, Nord, Solarized Dark, Monokai, One Dark Pro, Material Dark, and Catppuccin variants (Mocha, Macchiato, FrappΓ©, Latte) with user preferences saved to database - **🎨 Theme Persistence**: User theme choices sync between browser and server - **πŸ“– Reading Progress**: User-specific reading progress tracking - **πŸ”§ RESTful API**: Clean API endpoints with JWT authentication - **🐳 Docker Ready**: Single-container deployment with PostgreSQL - **πŸ§ͺ API Testing**: Complete Bruno collection for testing all endpoints - **πŸ“± Responsive Design**: Mobile-first responsive interface using Tailwind CSS - **⚑ HTMX Integration**: Dynamic interactions without JavaScript frameworks - **🎯 TypeScript Support**: Client-side scripting with TypeScript compilation ## Quick Start ### Prerequisites - Docker and Docker Compose ### Running the Application 1. Clone the repository 2. Run the application: ```bash docker-compose up --build ``` 3. Access the application at http://localhost:8765 ### Database PostgreSQL runs on port 5432 with default credentials: - Database: ebookdb - User: postgres - Password: password ## Development ### Backend ```bash cd backend go mod tidy go run github.com/sqlc-dev/sqlc/cmd/sqlc@latest generate go run cmd/server/main.go ``` The application uses Go HTML templates for server-side rendering with HTMX for dynamic interactions. Templates are located in `backend/templates/`. **✨ Enhanced Features:** - **Authentication**: Login/Register forms with multiple theme support at `/login` and `/register` - **JWT Management**: Secure token storage with localStorage and session persistence - **Theme Switching**: 7 popular dark themes with dropdown selector and database persistence - **HTMX Integration**: Form submissions and dynamic updates without page reloads - **Input Validation**: Server-side validation with detailed error messages - **Multiple Themes**: Beautiful dark themes with smooth transitions - **Responsive Design**: Mobile-first approach with optimized layouts for all screen sizes **Note**: The frontend is fully integrated into the Go backend using HTML templates and HTMX. ## API Endpoints ### Auth (Public) - `POST /api/auth/register` - Register new user - `POST /api/auth/login` - Login user (email or username) - `GET /api/auth/profile` - Get user profile (requires JWT) - `PUT /api/auth/theme` - Update user theme preference (requires JWT) ### Ebooks (Protected) - `GET /api/ebooks` - List ebooks - `GET /api/ebooks/:id` - Get specific ebook - `POST /api/ebooks` - Create new ebook - `PUT /api/ebooks/:id` - Update ebook - `DELETE /api/ebooks/:id` - Delete ebook ### Reading Progress (Protected) - `GET /api/ebooks/:id/progress` - Get reading progress - `PUT /api/ebooks/:id/progress` - Update reading progress ### Ratings (Protected) - `GET /api/ebooks/:id/rating` - Get user's rating for ebook - `POST /api/ebooks/:id/rating` - Create or update ebook rating - `PUT /api/ebooks/:id/rating` - Create or update ebook rating - `DELETE /api/ebooks/:id/rating` - Delete user's rating - `GET /api/ebooks/:id/ratings` - Get all ratings for ebook ## API Testing Use the included Bruno collection in the `bruno/` directory for testing the API: 1. Install [Bruno](https://www.usebruno.com/) 2. Import the `bruno/` folder as a collection 3. Select the "localhost" environment 4. Run the application and test the endpoints ## Project Structure ``` . β”œβ”€β”€ backend/ β”‚ β”œβ”€β”€ cmd/server/ # Application entry point β”‚ β”œβ”€β”€ internal/ β”‚ β”‚ β”œβ”€β”€ config/ # Configuration management β”‚ β”‚ β”œβ”€β”€ database/ # Database connection and queries β”‚ β”‚ └── handlers/ # HTTP handlers (auth + ebooks) β”‚ β”œβ”€β”€ migrations/ # Database migrations β”‚ β”œβ”€β”€ templates/ # Go HTML templates with HTMX β”‚ └── sqlc.yaml # sqlc configuration β”œβ”€β”€ bruno/ # Bruno API testing collection β”œβ”€β”€ docker-compose.yml └── README.md ``` ## 🎨 Recent Enhancements ### Backend Improvements - **Server-Side Rendering**: Replaced static frontend with Go HTML templates - **Theme System**: Database-backed user theme preferences with 7 popular dark themes - **HTMX Integration**: Dynamic interactions using HTMX for modern UX - **Enhanced Security**: JWT authentication with theme persistence ### Frontend Redesign - **Beautiful Homepage**: Hero section with features showcase and modern design - **Multiple Themes**: 11 beautiful themes including Tokyo Night, Dracula, Nord, Solarized Dark, Monokai, One Dark Pro, Material Dark, and Catppuccin variants (Mocha, Macchiato, FrappΓ©, Latte) with CSS variables - **HTMX Forms**: Real-time form submissions and updates without JavaScript frameworks - **Theme Switcher**: Dropdown selector that saves preferences to database - **Responsive Design**: Tailwind CSS for mobile-first responsive layouts - **Smooth Animations**: CSS transitions and scroll effects ### Technical Updates - **Go Templates**: Server-side rendering with template inheritance - **Tailwind CSS**: Utility-first CSS framework via CDN - **TypeScript Support**: Client-side scripting with TypeScript compilation - **Database Schema**: Added theme column to users table - **API Expansion**: New theme update endpoint ## License GPL-3.0