CASE STUDY
GCP E-Commerce Platform
An Express.js and TypeScript commerce application with secure payments, asynchronous processing and GCP deployment.
Problem / Goal
Build a cloud-ready e-commerce application with REST APIs, authentication and authorization, payments, relational persistence, caching, asynchronous processing, automated tests and cloud delivery.
Architecture
React, TypeScript, Vite, native Fetch and CSS form the frontend. Node.js, TypeScript and Express.js expose REST APIs through Controller → Service → Repository boundaries. PostgreSQL connection pooling keeps database access bounded; Redis / Memorystore supports caching. Cloud Run hosts Docker services, Cloud SQL supplies PostgreSQL and Google Cloud Storage stores objects.
Backend design
REST APIs use JWT, Keycloak OIDC and RBAC. Razorpay payments and webhooks include HMAC verification and idempotency to handle duplicate requests and events.
Data & caching
PostgreSQL owns durable commerce state. A transactional outbox records pending events with business changes. An outbox relay publishes to Google Pub/Sub, and a notification worker processes events asynchronously. Retries and idempotent processing address repeat delivery; Kafka and DLQ concepts are architectural learning topics rather than claims that Kafka is the deployed broker.
Reliability concerns
Idempotency, verified payment webhooks and transactional outbox processing address duplicate delivery and failures across service boundaries. These implementation patterns do not imply measured production reliability.
Testing & delivery
Unit, integration, API health and end-to-end cloud tests cover application and deployment boundaries. Terraform defines the GCP infrastructure. GitHub Actions uses GitHub OIDC and Workload Identity Federation for delivery without long-lived cloud keys. Artifact Registry, Secret Manager, VPC / Direct VPC Egress, scoped IAM and service accounts support deployment. Structured logs, Cloud Logging and Cloud Monitoring provide operational visibility.
Engineering decisions
Express.js provides the HTTP backend, with relational persistence, caching and background workers serving distinct responsibilities. Payment verification, idempotency and the transactional outbox make external and asynchronous boundaries explicit.
Technologies
Node.js · TypeScript · Express.js · React · Vite · PostgreSQL · Redis / Memorystore · REST APIs · JWT · OIDC · Keycloak · RBAC · Razorpay / webhooks · HMAC verification · idempotency · Google Pub/Sub · transactional outbox · background workers · Google Cloud Storage · Docker · Cloud Run · Cloud SQL · Artifact Registry · Secret Manager · VPC / Direct VPC Egress · IAM / service accounts · Terraform · GitHub Actions · Workload Identity Federation · Cloud Logging · Cloud Monitoring · automated tests
Lessons & next improvements
Keeping HTTP handling separate from business rules makes payment and persistence behavior easier to test. Future improvements should be driven by measured latency, retry behavior and recovery drills; no throughput or availability guarantees are claimed here.
Project screenshots
Real project screenshots will be published here when available.