{"id":48667598,"url":"https://github.com/stefanbobrowski/upload-center","last_synced_at":"2026-04-10T11:13:26.429Z","repository":{"id":290478918,"uuid":"952823569","full_name":"stefanbobrowski/upload-center","owner":"stefanbobrowski","description":"Upload Center - Stefan Cloud Playground - GCP Template","archived":false,"fork":false,"pushed_at":"2025-10-01T21:55:20.000Z","size":1217,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-01T22:22:05.790Z","etag":null,"topics":["cloud-sql-database","express","google","google-cloud","google-cloud-platform","react","vite"],"latest_commit_sha":null,"homepage":"https://upload-center-177749780343.us-central1.run.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stefanbobrowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-22T00:26:53.000Z","updated_at":"2025-10-01T21:55:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"49acc01f-aa2a-425c-a787-42a320fb5e5f","html_url":"https://github.com/stefanbobrowski/upload-center","commit_stats":null,"previous_names":["stefanbobrowski/upload-center"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stefanbobrowski/upload-center","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanbobrowski%2Fupload-center","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanbobrowski%2Fupload-center/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanbobrowski%2Fupload-center/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanbobrowski%2Fupload-center/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stefanbobrowski","download_url":"https://codeload.github.com/stefanbobrowski/upload-center/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanbobrowski%2Fupload-center/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31639618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-sql-database","express","google","google-cloud","google-cloud-platform","react","vite"],"created_at":"2026-04-10T11:13:25.871Z","updated_at":"2026-04-10T11:13:26.422Z","avatar_url":"https://github.com/stefanbobrowski.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud Playground ☁️ - Upload Center 🌆\n\nA full-stack web application for uploading, analyzing, and managing data using **Google Cloud Platform** services. Built for scalability, security, and modern DevOps workflows.\n\n👉 React + Vite Frontend  \n👉 Express + Node.js Backend  \n👉 Google Cloud Storage, BigQuery, Cloud SQL  \n👉 Cloud Run deployment with secure Cloud SQL Proxy  \n👉 Full API security protections (Rate Limiters, CORS, Helmet, IP Logging)\n\n---\n\n## 🔗 Live Demo\n\n\u003e 🔗 [upload-center on Cloud Run](https://upload-center-177749780343.us-central1.run.app/)\n\n---\n\n## 🔠 Project Overview\n\nWelcome to the Cloud Playground — Upload Center!\n\nExplore hands-on examples to see it in action, showcasing the power of modern backend development, scalable cloud infrastructure, and AI integrations — all built on **Google Cloud Platform (GCP)**.\n\nThis project demonstrates a secure, production-grade full-stack architecture featuring:\n\n- **Cloud SQL (PostgreSQL):** Structured data storage\n- **Cloud Run:** Dockerized backend + full app delivery\n- **Cloud Storage:** File uploads (text, images, JSON)\n- **BigQuery:** Large-scale JSON analysis\n- **Vertex AI \u0026 Gemini Pro:** Text and image understanding\n\n---\n\n## 🛠️ Technology Stack Overview\n\n| Layer    | Technologies Used                              |\n| -------- | ---------------------------------------------- |\n| Frontend | Vite + React (TypeScript, SWC)                 |\n| Backend  | Node.js, Express                               |\n| AI       | Gemini 2.5 (text + image), Vertex AI       |\n| Big Data | BigQuery                                       |\n| Database | Cloud SQL (PostgreSQL)                         |\n| Storage  | Google Cloud Storage                           |\n| Security | IAM, Helmet, CORS, Rate Limiting, reCAPTCHA v3 |\n| Build    | Docker                                         |\n| CI/CD    | GitHub Actions (Docker build \u0026 deploy)         |\n| Hosting  | Cloud Run, Artifact Registry                   |\n\n---\n\n## 🔐 Focus on Security\n\nBuilt with real-world production security in mind. Heavy focus on securing access and preventing abuse of cloud resources from users and bot traffic. Measures include:\n\n- Global \u0026 route-based API rate limiting\n- reCAPTCHA v3 integration\n- IP logging \u0026 strict CORS rules\n- Hardened HTTP headers with Helmet\n- Role-based access controls via Google Cloud IAM\n\n---\n\n## 🚀 Why It Matters\n\nUpload Center is more than a learning sandbox — it's a blueprint for building secure, scalable, cloud-native web applications using today's most powerful tools from Google Cloud. Whether you're testing uploads, analyzing data, or integrating AI, this platform offers a real-world, extensible foundation for modern web development.\n\n---\n\n## 📆 Features\n\n- ✅ Secure PostgreSQL access with Cloud SQL Proxy\n- ✅ Text sentiment analysis with Gemini AI\n- ✅ Upload and analyze images with Gemini AI\n- ✅ Vertex AI text file sentiment analysis\n- ✅ Upload and validate JSON files to Cloud Storage\n- ✅ Load and analyze uploaded files with BigQuery\n- ✅ Rate limiting on all sensitive routes\n- ✅ GitHub Actions CI/CD for Dockerized Cloud Run deployment\n- ✅ Persistent Light/Dark Mode Theme\n\n---\n\n## 📂 Project Structure\n\n```\n/frontend            # Vite + React frontend\n/backend             # Express server + API routes\n/backend/db.js       # PostgreSQL connection (via Cloud SQL Proxy)\n/backend/routes      # Upload, BigQuery, Sentiment, Image Analysis\n/.env                # Environment variables (gitignored)\n/.github/workflows/  # GitHub Actions CI/CD workflow files\n```\n\n---\n\n## ⚙️ Local Development\n\n### 1. Clone the repo\n\n```bash\ngit clone https://github.com/stefanbobrowski/upload-center.git\ncd upload-center\n```\n\n### 2. Set up backend environment variables\n\nCreate `backend/.env`:\n\n```env\nDB_USER=your-db-user\nDB_PASSWORD=your-db-password\nDB_HOST=your-cloud-sql-ip (or socket path)\nDB_NAME=your-db-name\nDB_PORT=your-db-port\nGOOGLE_APPLICATION_CREDENTIALS=path-to-your-service-account.json\nRECAPTCHA_SECRET_KEY=your-recaptcha-key (optional for bot protection)\n```\n\n### 3. Start the frontend\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n### 4. Start the backend\n\n```bash\ncd backend\nnpm install\nnode server.js\n```\n\n---\n\n## ☁️ Cloud Deployment (Cloud Run + Cloud SQL Proxy)\n\n### 1. Build the frontend\n\n```bash\ncd frontend\nnpm run build\n```\n\n### 2. Docker build \u0026 push (CI/CD or manual)\n\n```bash\ndocker build -t gcr.io/YOUR_PROJECT_ID/upload-center .\ndocker push gcr.io/YOUR_PROJECT_ID/upload-center\n```\n\n### 3. Set Cloud Run environment variables\n\n```\nDB_USER=your-db-user\nDB_PASSWORD=your-password\nDB_NAME=your-db-name\nDB_PORT=your-db-port\nINSTANCE_CONNECTION_NAME=your-project:region:cloudsql-instance\nGOOGLE_APPLICATION_CREDENTIALS=inline-json-or-mount-secret\nRECAPTCHA_SECRET_KEY=your-recaptcha-key (optional)\n```\n\n### 4. Deploy via GitHub Actions or `gcloud run deploy`\n\n---\n\n## 🤔 Future Work\n\n- User login / authentication\n\n---\n\n## 👨‍💻 Author\n\nCreated by [@stefanbobrowski](https://github.com/stefanbobrowski)\nWebsite: https://stefanbobrowski.com\n\n---\n\n## 📄 License\n\nLicensed under the **Apache License 2.0**.  \nSee [LICENSE](./LICENSE) for full details.\n\n---\n\n## 📁 Full Code Repository\n\nFeel free to view the code or contribute with a pull request.\nYou can explore the full source code for Upload Center here:\n[📁 GitHub – Upload Center](https://github.com/stefanbobrowski/upload-center)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanbobrowski%2Fupload-center","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstefanbobrowski%2Fupload-center","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanbobrowski%2Fupload-center/lists"}