// the find
quangdangfit/goshop
E-Commerce system via Golang and ReactJS
A full-stack e-commerce reference implementation in Go — REST + gRPC backend with a React/TypeScript frontend. It covers the full order lifecycle including Stripe payments, Redis caching, email notifications, and a ports-and-adapters layout per domain. Aimed at developers who want a realistic Go project to study or fork, not a production SaaS.
The ports-and-adapters structure is genuinely well-applied — each domain has its own model, repository, service, and port layers with no cross-domain bleeding. The test setup is serious: mockery-generated mocks for unit tests plus testcontainers-backed integration suites that run against real Postgres and Redis, gated behind build tags so they don't slow down the unit job. Versioned SQL migrations via golang-migrate replacing GORM AutoMigrate is the right call and shows the author learned from real operational pain. The dual HTTP+gRPC server with a shared JWT interceptor is a clean pattern for teams that need both.
Cart is client-side only with no persistence — fine for a demo, but any real shop needs server-side carts for abandoned cart flows and cross-device continuity, and that design decision will be painful to retrofit. The authentik integration (OIDC middleware, a full pkg/authentik client, a dedicated docs plan) is half-finished and mixed into the same codebase as standard JWT auth, creating two parallel auth paths with unclear precedence. Stock reservation logic exists but there's no distributed lock or saga pattern — concurrent order placements can race past the reservation check under load. The notification system sends email synchronously in the request path via a retry wrapper rather than via a queue, so a flaky SMTP host will leak latency directly into order responses.