- Frontend - https://lnshop.jctiru.com
- Backend - https://api.lnshop.jctiru.com
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.
Spring Boot Backend on https://github.com/jctiru/lnshop-backend
- 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
- React - JS library for building user interfaces
- React Router - Routing for react
- Redux - JS library for managing application state
- Redux-Saga - Redux middleware for handling side effects
- Redux-Persist - Library for saving redux store in local storage
- Bootstrap - CSS framework
- Bootswatch - Bootstrap themes
- Axios Promise based HTTP client
- Stripe - Payment gateway
- Spring Boot - Preconfigured spring framework
- Spring Data JPA - JPA data access abstraction
- Spring Security - Auth framework for spring
- Spring Cloud AWS - Integrates AWS with spring
- MySQL - Relational database
- Stripe - Payment gateway
- JJWT - JSON web token for java, used for auth
- ModelMapper - Object mapper, used for DTO conversions
- AWS Elastic Beanstalk - PaaS for hosting webapp
- AWS S3 - File storage for images and static front-end assets
- AWS Cloudfront - CDN for S3
- AWS SES - For outbound email
- AWS RDS - For MySql database
- AWS Route53 - Domain registrar and DNS service
- AWS ACM - SSL/TLS certificates for cloudfront with custom domain
- AWS IAM - Manage permissions to allow and deny access to AWS resources
- 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
- 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...
- Improve frontend design a bit
- Improve mobile design
Scroll up on page change- Add visual feedback on add-to-cart button click
Add faviconChange page title- Etc...
- Add swagger documentation
- Improve error messages
- Centralize config of modelmapper
- Add simple response on http get on root url
- Etc...