PageTurner is a tool to track what you're reading.
- import a book from a goodreads link
- update reading status (page read, finished)
- edit book details
- Golang API
- PostgreSQL
- Vite + React + TypeScript
- React Router for navigation
- React Query for data fetching
- TailwindCSS for styling
- Docker Compose for Container setup
| Method | Endpoint | Description |
|---|---|---|
GET |
/health |
Health check |
POST |
/auth/register |
Register new user |
POST |
/auth/login |
Login and get JWT token |
POST |
/books |
Create a book |
POST |
/books/import |
Import book from Goodreads link |
GET |
/books |
List books (query: ?limit=20&offset=0) |
GET |
/books/{id} |
Get book by ID |
PUT |
/books/{id} |
Update book |
GET |
/me/books |
Get authenticated user's reading list (auth required) |
GET |
/me/books/{bookId}/status |
Get reading status (auth required) |
PUT |
/me/books/{bookId}/status |
Update reading status (auth required) |
{
"title": "The Pragmatic Programmer",
"authors": ["David Thomas", "Andrew Hunt"],
"blurb": "Your journey to mastery",
"goodreads_link": "https://goodreads.com/book/123"
}{
"url": "https://www.goodreads.com/book/show/12345.Title"
}{
"pages": 400,
"pages_read": 150,
"status": "reading"
}Valid status values: reading, finished, paused
{
"username": "johndoe",
"email": "[email protected]",
"password": "secret123"
}{
"username": "johndoe",
"password": "secret123"
}{
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": "uuid",
"username": "johndoe",
"email": "[email protected]"
}
}Protected endpoints require Authorization: Bearer <token> header.
docker-compose up --build