Prototype Design
- The focus was to create a clean, intuitive UI with minimal designs and transitions, allowing for efficient navigation
- The application is designed considering users across different technological proficiency
- Clear call to actions to guide the user through the UI
Design Document:
Ideally, this is the architecture we want to implement. The reasoning behind implementing a micro-frontend architecture is as follows:
- Independent Development and Deployment:
- Each area of the application can be developed, tested and deployed individually
- Scalability:
- Each module could scale individually according to the changing requirements
- Tech Stack Independent:
- Each module could use a tech stack most appropriate according to it's functionality and use case
- Maintainability:
- Each code base would be smaller, focused and easier to understand
- Testing would be more targeted
- Modular components would allow developers to minimize downtime

However, for the Proof of Concept (POC), we went ahead with a monolithic implementation because of the following factors:
- Development Speed and Simplicity:
- Since we were building the product out from scratch, development speed and protoyping was the focus.
- Having a single codebase makes it easier for developers to understand, test and implement the code
- Deployment Efficiency:
- Since we had limited Google Cloud credits and other deployment constraints from Iowa State University' Gitlab infrastructure, we were able to create a streamlined deployment pipeline with a single Docker container, a single production environment and simple CI/CD pipeline
- Resource Utilization:
- Since we had limited cloud capabilities, a microfrontend approach would mean setting up multiple smaller projects, adding to computer overhead.
Current Structure:
- Our current implementation follows a simple client-server architecture.
- Frontend:
- Acts as an abstraction for all the user interactions and makes calls to the backend routes according to the functionality being used (semantic search or AI Assistant)
- Backend:
- Backend receives the call from the frontend and makes necessary calls to the OpenAI API or Qdrant Database according to the query.
- Calls are made to the OpenAI API for chat completion and embedding queries
- The Qdrant Database is our vectorized database of choice, which has the vectorized content of about a 100 papers (scraped from ISU's digital repository).

Desktop View:



Mobile View:



Midterm presentation:
Final Design
Here's the final implementation of the project:





Final Project Report
Senior Design Final Demo (PDF)