Backend: Spring Boot (Java) Frontend: React Native (Expo) - Reference Implementation Database: H2 (Dev) / PostgreSQL (Prod) Deployment: Heroku (Backend) & Vercel (Web)
The Product Review Application is a full-stack system designed to demonstrate modern software architecture patterns. It allows users to browse products, filter by categories, view detailed reviews with AI-generated summaries, and submit their own feedback.
The project emphasizes clean architecture, REST API design, performance optimization (pagination, server-side filtering), and cross-platform development.
Assignment: You must choose and implement only one of the following frontend stacks:
- iOS (Swift): See mobile/README-iOS-Swift.md for requirements.
- Android (Kotlin): See mobile/README-Android-Kotlin.md for requirements.
Note: The current
mobile/folder contains a React Native implementation. This serves as a reference for how the UI should look and how to consume the Backend API. You are expected to build a native version (Swift or Kotlin) matching these features.
The system follows a layered architecture:
- Presentation Layer: Mobile/Web App (React Native, Swift, or Kotlin)
- API Layer: Spring Boot REST Controllers
- Business Layer: Service Interfaces & Implementations
- Data Layer: JPA Repositories & Database
- Server-Side Pagination: Efficiently loads data in chunks.
- Dynamic Filtering: Filter products by category and reviews by rating.
- Rating Breakdown: Server-calculated distribution of star ratings.
- AI Review Summary: Automatically generates a summary of user reviews using AI logic.
- AI Assistant: Interactive chat interface for product queries.
- Dependency Inversion: Controllers depend on Interfaces, not concrete classes.
- DTO Pattern: Strict separation between Database Entities and API responses.
- Optimized SQL: Custom queries for aggregation and performance.
- Spring Security Integration: Integrate Spring Security 6.
- JWT Authentication: Implement stateless authentication using JSON Web Tokens.
- Role-Based Access Control (RBAC): Differentiate between Admin and User roles.
- Secure Endpoints: Protect sensitive actions like
POST /reviews.
- Centralized Validation: Use Aspect-Oriented Programming (AOP) to handle request validation globally.
- Consistent Error Handling: Unified error response structure across all endpoints.
- Reusable Aspects: Create custom annotations for business rules.
- Testcontainers: Use Docker containers to spin up real database instances for testing.
- Reproducible Tests: Ensure tests run consistently across different environments (CI/CD, Local).
- End-to-End Testing: Validate full user flows from API to Database.
cd backend
./mvnw spring-boot:runSee backend/README-SpringBoot.md for more details.
cd mobile
npm install
npx expo start- Press
wfor Web - Press
afor Android (Emulator) - Scan QR code for iOS (Expo Go)
- /backend: Spring Boot application source code.
- /mobile: React Native (Expo) application source code (Reference).
- mobile/README-iOS-Swift.md: Instructions for iOS implementation option.
- mobile/README-Android-Kotlin.md: Instructions for Android implementation option.
The final submission must include the following items:
- System Architecture: An [Excalidraw link] explaining the overall system design.
- Frontend Code Walkthrough: A 3–5 minute demo video [Google Drive Link] explaining the frontend codebase.
- Backend Code Walkthrough: A 3–5 minute demo video [Google Drive Link] explaining the backend architecture.
- Application Demo: A 3–5 minute video [Google Drive Link] showcasing all features on an emulator or real device.
- Build Artifacts: A [Google Drive Link] to download the generated APK (Android) or IPA (iOS).
- Web Access: A public web application link (e.g., Vercel) for testing in a browser.
- Future Improvements: A section describing potential enhancements (see Roadmap below).
- Final Presentation: A slide deck summarizing the project and learnings.