Files
bookhoard/README.md
T

136 lines
5.1 KiB
Markdown

# 📚 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**: 7 popular dark themes (Tokyo Night, Dracula, Nord, Solarized Dark, Monokai, One Dark Pro, Material Dark) 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
## 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
- **Multiple Themes**: 7 beautiful dark themes (Tokyo Night default) 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
### 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