-
Front-end Repo: https://github.com/ND56/Fin_Client
-
Deployed Front-end: https://nd56.github.io/Fin_Client/
-
Back-end Repo: https://github.com/ND56/Fin_API
-
Deployed Back-end: https://fin-api.herokuapp.com/
Fin is a conversational companion and personal assistant built using Google's natural language processing platform, Dialogflow, as well as an assortment of other technologies. Users are prompted to create a profile upon logging in, after which they are free to engage with Fin and edit or delete their profile as they see fit.
Interactions with Fin are processed through the use of web sockets and each client interaction is siloed from others, which is achieved through a combination of (1) having each client generate a unique Dialogflow session and (2) having the Fin API socket only broadcast Fin's responses to the client that prompted the response.
In it's current iteration, users can prompt Fin to do the following:
- Tell jokes
- Muse on the meaning of life
- Engage in simple conversation
- Provide a random fact
- Send text messages
- Report on the weather
- Search the web
- Provide playlist recommendations
- HTML/CSS/Bootstrap
- JavaScript/jQuery/AJAX
- Web Sockets - Socket.io
- Google Custom Search Engine ('CSE') API
- Node.js
- Express
- Mongoose
- MongoDB
- Web Sockets - Socket.io
- Dialogflow API
- World Weather Online API (via Web Hook)
- Twilio (via Web Hook)
- Spotify API
The following are improvements that I hope to continue working on:
- Broaden Fin's practical skill set
- Implement a method for user's to request specific functionality or to report intent mis-matches.
- Allow for vocal input/output
- UI improvements
- Improve Fin's conversational abilities and overall functionality
- This last one is both important and tricky. Fin operates in large part by matching user queries to pre-programmed user "intents." It's difficult to keep these intents separated because---due to the machine learning algorithms that power Dialogflow---Fin will often unpredictably place undue emphasis on key words in a user's query, which causes Fin to accidentally prioritize a mis-matched intent. I continue to test and re-test Fin's intents, but have not yet had the capacity to put Fin through the rigorous trials a production-ready AI would no doubt be subjected to. For now, bear with him! Every interaction helps to improve his functionality.
- As a user, I want to be able to sign up to use this app.
- As a user, I want to be able to sign in to use this app.
- As a user, I will want to be able to change my password that I use for signing in to this app.
- As a user, I want to be able to create a profile that will provide Fin with useful information about me.
- As a user, I want to be able to have a username as part of my profile. (I will use this to speak with Fin)
- As a user, I want to be able to have my telephone number saved as part of my profile. (In future iterations, this will allow Fin to set reminders for me)
- As a user, I will want to be able to edit and delete my profile.
- As a user, I want to be able to chat with Fin.
- As a user, I want this experience to feel like I'm speaking with a human.
- As a user, I want Fin to be able to perform a wide variety of helpful functionality through the use of third-party API calls.
- Wireframe
- User Stories
- ERD
- Build resource (user profile) into database
- curl CRUD all user and profile actions
- Build basic UI
- CRUD user resource through UI
- CRUD profile resource through UI
- Build out UI for chat
- Implement chat functionality
- Tailor API socket broadcast to only the emitting client
- Implement unique session ID for each client interaction with Fin
- Improve AI generally (conversational skills, etc.)
- Implement practical AI functionality
- Weather API
- Twilio API
- Google API
- Spotify API
- Style
- ReadME
- Debug/Test