https://github.com/stefanbobrowski/gglist
https://github.com/stefanbobrowski/gglist
cloudsql css express gcp javascript nodejs postgres postgresql react typescript vite
Last synced: 6 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/stefanbobrowski/gglist
- Owner: stefanbobrowski
- Created: 2025-06-23T00:03:50.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-07-07T22:19:28.000Z (6 months ago)
- Last Synced: 2025-07-07T23:16:07.377Z (6 months ago)
- Topics: cloudsql, css, express, gcp, javascript, nodejs, postgres, postgresql, react, typescript, vite
- Language: TypeScript
- Homepage: https://gglist-frontend-177352903615.us-central1.run.app/
- Size: 529 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# GGList β Developer Overview
https://gglist.app/
GGList is a full-stack app for tracking and ranking user favorites. This version uses PokΓ©mon cards, but itβs built to work with anything β games, movies, books, whatever. Users log in with Google, favorite up to 10 items, and see a leaderboard of top picks across all users.
---
## π§ Stack Overview
### Frontend
- **React + Vite + TypeScript**
- Auth via **Google Sign-In**
- Uses **React Context** for auth state
- REST API calls with `fetch`
- No CSS frameworks β all custom styles
- Deployed on **GCP Cloud Run**
### Backend
- **Node + Express + TypeScript**
- Auth with **JWT** (signed server-side)
- Routes for `/auth`, `/favorites`, `/top`, `/pokemon`
- Local cache layer for PokΓ©mon dataset (cache/pokemon.json) avoids API/database calls
- Protected routes using middleware
- Rate limiting with `express-rate-limit`
### Database
- **PostgreSQL** via Google **Cloud SQL**
- Table: `favorites (user_id, card_id)`
- Seeded with a JSON list of PokΓ©mon cards
---
## βοΈ Google Cloud Platform
- **Cloud Run** (frontend and backend separately containerized)
- **Cloud SQL** for PostgreSQL
- **GitHub Actions** for CI/CD with **Workload Identity Federation**
- **Artifact Registry** for Docker images
- All environment secrets stored securely (nothing committed)
---
## What Makes GGList Reusable
This isnβt just a PokΓ©mon demo β the whole setup is meant to be repurposed:
- Swap in any dataset (games, movies, etc.)
- Favorites system stays the same
- Leaderboard auto-updates from the database
- Minimal changes needed in seed script and UI copy
---
## Local Dev
```bash
# Frontend
cd frontend && npm install && npm run dev
# Backend
cd backend && npm install && npm run dev
```
## Repo Structure (simplified)
```
gglist/
βββ backend/
β βββ src/routes/
β βββ src/middleware/
β βββ src/utils/
β βββ Dockerfile
βββ frontend/
β βββ src/
β βββ Dockerfile
βββ .github/workflows/
```
## Repo
π github.com/stefanbobrowski/gglist
## Author
### Stefan Bobrowski
π stefanbobrowski.com
π¦ github.com/stefanbobrowski