Project Artifacts

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

Design Document

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).

current-design-doc

Desktop View:  

Product-Screenshot-1

 

Product-Screenshot-2

 

Product-Screenshot-3

 

Mobile View: 

Product-Screenshot-Mobile-1

 

Product-Mobile-Screenshot-2

 

Product-Screenshot-Mobile-3


Midterm presentation: 

Presentation Link

Final Design

Here's the final implementation of the project: 

final-screenshot-1-web

 

final-web-screenshot-2

 

web-screenshot-3mobile-screenshot-1

 

mobile-screenshot-2

Final Project Report

Senior Design Final Demo (PDF)

Videos

Demo Video