This full-stack application lets users search for books using the Google Books API, create an account, log in, save books to their profile, and remove them — all powered by a modern MERN stack with Apollo GraphQL.
🛠 Built with TypeScript, Apollo Server & Client, MongoDB Atlas, and Vite
- 🔍 Search for books via the Google Books API
- 🔐 User authentication (signup/login/logout) with JWT
- 💾 Save books to your profile
- ❌ Remove saved books
- ⚡ Fully built with GraphQL and Apollo Client
- 📦 MongoDB Atlas + Mongoose for flexible storage
- 🌍 Fully deployable to Render & Netlify
- Frontend: React, Vite, TypeScript, Apollo Client
- Backend: Node.js, Express, Apollo Server, Mongoose
- Database: MongoDB Atlas
- Styling: Bootstrap 5
git clone https://github.com/your-username/google-books-graphql.git
cd google-books-graphqlcd server
npm installCreate a .env file in the server/ directory:
MONGODB_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/books
JWT_SECRET_KEY=yourSecretKey
NODE_ENV=developmentRun the backend server locally:
npm run start:devcd ../client
npm installCreate a .env file in the client/ directory:
VITE_GRAPHQL_URI=http://localhost:3001/graphqlStart the dev server:
npm run devnpm run build # compiles TypeScript to dist/
npm run start # runs dist/server.jsnpm run build # outputs to /dist for deploymentmutation {
saveBook(input: {
bookId: "abc123",
authors: ["Author Name"],
title: "GraphQL Book",
description: "Awesome book",
image: "https://example.com/image.jpg",
link: "https://example.com"
}) {
username
savedBooks {
title
}
}
}- Backend: Render
- Frontend: Netlify
- Database: MongoDB Atlas
.
├── client/ # React frontend (Vite + Apollo Client)
├── server/ # Node/Express backend (Apollo Server)
│ ├── src/
│ └── dist/
├── README.md
Tate Sutter
📍 Lawrence, Kansas
🧠 Built for mastering MERN & GraphQL stack
This project is licensed under the MIT License.