/lnshop-frontend

A Light Novel eCommerce website. Java using Spring Boot for backend and React SPA for frontend. Hosted on AWS.

Primary LanguageJavaScript

LNShop

Build Status

Live Link

Overview

A Light Novel eCommerce website. Java using Spring Boot for backend and React SPA for frontend.

Backend hosted on AWS Elastic Beanstalk with multi-docker config. EC2 instance on public subnet while AWS RDS on private subnet. Frontend assets on AWS S3. Image uploads are on S3 too. Both S3 buckets are behind AWS CloudFront CDN and are not directly accessible except only through AWS CloudFront by using Origin Access Identity. AWS Cloudfront SSL/TLS certificates for custom domain are provided by AWS ACM. Outbound emails are handled by AWS SES while inbound emails are handled by Yandex which provides free email hosting with custom domain. Stripe is used for payment processing. Domain registration and DNS service handled by AWS Route53.

Frontend repo goes through TravisCI pipeline which builds the assets and uploads to S3 bucket. Backend repo also goes through TravisCI pipeline which builds and uploads the docker image to Docker Hub, then triggers a central GitlabCI pipeline which handles deployment to Elastic Beanstalk for all projects (includes other projects which are also hosted in the same single EC2 instance). Traefik is used as reverse proxy for multiple containers and to automate Let's Encrypt SSL/TLS certificate generation/management.

Project Flow Diagram

Flow.jpg

Inside Elastic Beanstalk

ElasticBeanstalk.jpg

Features

  • Account creation with email confirmation for activation
  • Forgotten password reset request via email
  • CRUD for products by admin
  • Search, pagination and multi-genre query for products
  • Shopping cart system
  • Card payment via Stripe
  • Order confirmation with email notification
  • View orders on user profile and all orders on admin side

Overall Project Tech Stack

Frontend

Backend

AWS

Misc/Others

  • OpenJ9 - JVM for OpenJDK for low memory footprint, used for building docker image of backend
  • Docker - Containerization
  • TravisCI - CI/CD for building the frontend assets and deploying to S3; CI/CD for building docker image of backend and pushing to dockerhub
  • GitlabCI - CI/CD for aggregating projects for deployment to AWS
  • git-secret - Encrypt git files at rest and decrypt during CI/CD on Gitlab private repo that deploys to AWS
  • Traefik - Reverse proxy and automatic SSL/TLS management
  • Let's Encrypt - SSL/TLS certificate
  • Yandex Connect - Email hosting for inbound email

Overall Project To-Do List

General

  • Code refactoring
  • Code cleanup
  • Add tests
  • Add update profile info
  • Add change password
  • Add product out-of-stock functionality
  • Add product-in-cart limit
  • Etc...

Frontend Specific

  • Improve frontend design a bit
  • Improve mobile design
  • Scroll up on page change
  • Add visual feedback on add-to-cart button click
  • Add favicon
  • Change page title
  • Etc...

Backend Specific

  • Add swagger documentation
  • Improve error messages
  • Centralize config of modelmapper
  • Add simple response on http get on root url
  • Etc...