## Inspiration

Kingston's website is the place to go when having questions about having life in Kingston or when searching for events going on in the city, but navigating through the hundreds of the city's webpages for an answer can be gruesome. We were all interested in AI and wanted to challenge ourselves to build a chatbot website.

## What it does

Kingsley is a chatbot built to help residents in Kingston with their inquiries. It takes in user input, and responds with a helpful answer along with a link to where more information can be found on the city of Kingston website if applicable. It has an option for voice input and output for greater accessibility.

## How we built it

* Kingsley uses a GPT-3 model fine-tuned on data from the city of Kingston website.
* The data was scraped using Beautiful Soup.
* A GloVe model was used to find website links relevant to the user's question.
* Jaccard similarity was used to find relevant text that specifically mentioned key words in the user's question.
* Relevant texts were narrowed down and passed as part of the prompt to GPT-3 for an answer completion.
* The website along with the voice functionality were created using React.

## Challenges we ran into

The CityOfKingston website has a huge amount of pages, a lot of which are archived, calendars, or not very useful. OpenAI's API on the other hand only allowed a limited context. so to have the bot be able to read relevant pages as its context, we had to go through multiple methods of data filtering to find the relevant pages.
We spent a great amount of time implementing speech-to-text and text-to-speech for our webapp. Many of the solutions on the internet were of little help, and we tried using several npm packages before being successful in the end.

## Accomplishments that we're proud of

We successfully made a working chatbot!
And it references real facts! (sometimes)

## What we learned

Throughout the project, we gained experience working with various APIs. We learned how to use and combine different natural language processing techniques to optimize accuracy and computation time. We learned React hooks useState and useEffect, Javascript functions, and how to use React developer tools to debug components in Chrome. We figured out how to link backend Flask with frontend app, setup a domain, and use text-to-speech and speech-to-text libraries.

## What's next for Kingsley

Due to free trial limits, we chose to use the Ada GPT model for our chatbot. In the future if we had more credits, we could use a better version of GPT-3 in order to produce more relevant and helpful results.
We are also interested in expanding Kingsley to reference data from other websites. It can also be adapted as an extension or floating popup that can be used directly on top of Kingston's website.
## Inspiration

The Canadian winter's erratic bouts of chilling cold have caused people who have to be outside for extended periods of time (like avid dog walkers) to suffer from frozen fingers. The current method of warming up your hands using hot pouches that don't last very long is inadequate in our opinion. Our goal was to make something that kept your hands warm and *also* let you vent your frustrations at the terrible weather.

## What it does

**The Screamathon3300** heats up the user's hand based on the intensity of their **SCREAM**. It interfaces an *analog electret microphone*, *LCD screen*, and *thermoelectric plate* with an *Arduino*. The Arduino continuously monitors the microphone for changes in volume intensity. When an increase in volume occurs, it triggers a relay, which supplies 9 volts, at a relatively large amperage, to the thermoelectric plate embedded in the glove, thereby heating the glove. Simultaneously, the Arduino will display an encouraging prompt on the LCD screen based on the volume of the scream.

## How we built it

The majority of the design process was centered around the use of the thermoelectric plate. Some research and quick experimentation helped us conclude that the thermoelectric plate's increase in heat was dependent on the amount of supplied current. This realization led us to use two separate power supplies -- a 5 volt supply from the Arduino for the LCD screen, electret microphone, and associated components, and a 9 volt supply solely for the thermoelectric plate. Both circuits were connected through the use of a relay (dependent on the Arduino output) which controlled the connection between the 9 volt supply and thermoelectric load. This design decision provided electrical isolation between the two circuits, which is much safer than having common sources and ground when 9 volts and large currents are involved with an Arduino and its components.

Safety features directed the rest of our design process, like the inclusion of a kill-switch which immediately stops power being supplied to the thermoelectric load, even if the user continues to scream. Furthermore, a potentiometer placed in parallel with the thermoelectric load gives control over how quickly the increase in heat occurs, as it limits the current flowing to the load.

## Challenges we ran into

We tried to implement feedback loop, ambient temperature sensors; even though large temperature change, very small changes in sensor temperatures. Goal to have an optional non-scream controlled system failed because of ultimately not having a sensor feedback system.
We did not own components such as the microphone, relay, or battery pack, we could not solder many connections so we could not make a permanent build.

## Accomplishments that we're proud of

We're proud of using a unique transducer (thermoelectric plate) that uses an uncommon trigger (current instead of voltage level), which forced us to design with added safety considerations in mind.
Our design was also constructed of entirely sustainable materials, other than the electronics.
We also used a seamless integration of analog and digital signals in the circuit (baby mixed signal processing).

## What we learned

We had very little prior experience interfacing thermoelectric plates with an Arduino. We learned to effectively leverage analog signal inputs to reliably trigger our desired system output, as well as manage physical device space restrictions (for it to be wearable).

## What's next for Screamathon 3300

We love the idea of people having to scream continuously to get a job done, so we will expand our line of *Scream* devices, such as the scream-controlled projectile launcher, scream-controlled coffee maker, scream-controlled alarm clock. Stay screamed-in!
## Inspiration

Pro bono law firms often serve clients who are systematically marginalized or in dire need without means for help. Additionally, these lawyers have limited resources to assist these cases. We are changing that through our JustinCase. We are able to create a community of pro bono lawyers - connecting them with each other and providing a simple way to search decades of cases in order to create stronger arguments.

## What it does

JustinCase utilizes law APIs to simplify access and search of previous law cases, arguments, and results. It is a web platform with a built in AWS chatbot that utilizes numerous legal APIs to effectively search previous cases based on a number of descriptors. With a user dashboard, it allows the user to keep track of the case at hand and compare it to other cases on the database, classified by both recency and court level.

## How we built it

We built the core chatbot on AWS Lex, and made it more intelligent through lambda functions with python. The front end of the website was built using HTML/CSS and Javascript. The chatbot is sever-less as it uses AWS backend and incorporates APIs directly to the chatbot. For the user dashboard and main website backbone, we utilized Google App Cloud to host our server and allow the user's information to be stored for more functionality and convenience.

## Challenges we ran into

Throughout the making of the backend, we found it challenging to incorporate the API into the website because of many incompatibilities between Python 2 and the request modules needed to access information from APIs. Furthermore, we spent a lot of time researching how to use the AWS Lex chatbot and how to debug on it. However, we were able to resolve these by implementing creative solutions to overcome incompatibilities and bugs.

## Accomplishments that we're proud of

As we made our project, we were able to gain familiarity quickly with the new technologies we used, from Google App Cloud to chatbots. We're proud of how much we improved in debugging and that we were able to reach a functional minimal viable product that can make a positive impact on our users.

## What we learned

While making JustinCase, we learned a lot about the integration of different services and how all these technologies can be leveraged together most efficiently. We also learned the importance of planning beforehand to ensure that we have a minimal viable product and that we are delegating tasks according to our strengths and weaknesses as team members. By working together on JustinCase, we bonded as a team and have been inspired to continue using these technologies to make a positive impact on the world around us.

## What's next for JustinCase

While we reached our core goal with JustinCase, we have a lot of room for added functionality and efficiency. We are planning to continue expanding it to include neural networks that streamline the chatbot service and provide cutting-edge guidance to lawyers utilizing database information for them to find more relevant data, form stronger arguments, and provide better defense for the clients who need it the most.