Git Product home page Git Product logo

finterest's Introduction

Finterest

Where Wisdom Meets Wealth

Finterest is a web application delivering up-to-date financial news empowered with generative AI. It empowers readers to not only access the latest news, but also to foster deep understanding and engagement with the articles. With Finterest, you can seamlessly query, seek clarifications, and gain profound insights into every article, making complex financial information easily accessible and digestible.

If you are someone seeking to delve deep into the world of financial news, look no further. Try out Finterest here today! πŸ’ΈπŸ“°

Installation for Local Testing

  1. Ensure that you have NodeJS installed.
  2. Clone the repo to your computer.
git clone https://github.com/qreoct/finterest.git
  1. Change directory into finterest.
cd finterest
  1. Download dependencies for the application.
npm install
  1. In the root directory of finterest, create a new file called .env.local. Paste the following content into the environment file. Then, you would need to create your Firebase project and obtain your OpenAI, NewsData and Google Analytics keys. Finally, replace the values in the curly brackets accordingly.
NEXT_PUBLIC_OPENAI_API_KEY={apiKey}
NEXT_PUBLIC_FIREBASE_API_KEY={apikey}
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN={domain}
NEXT_PUBLIC_FIREBASE_PROJECT_ID={projectid}
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET={storagebucket}
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID={senderid}
NEXT_PUBLIC_FIREBASE_APP_ID={appid}
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID={measurementid}
NEXT_PUBLIC_NEWSDATA_KEY={newsDataKey}
NEXT_PUBLIC_GOOGLE_ANALYTICS={googleAnalyticsKey}
  1. Run Finterest on your local server.
npm run dev

About the Creators

Finterest is a product proudly created by the following contributors:

Kleon Ang Cunrong (A0223905J)

Contributions:

  • Built the article recommendation system using the Naive-Bayes algorithm, keeping track of the number and types of articles that a user has read.
  • Created the profile page, integrating it with the statistics of the users.
  • Designed database schema for Finterest.
  • Improved on layout and resolved bugs, such as date parsing and authentication issues during refreshing.

Jefferson Lim (A0217512N)

Contributions:

  • Created the branding and image of Finterest.
  • Designed hi-fidelity prototypes and design system via Figma.
  • Enhanced the parsing of raw news information from NewsData into OpenAI before storing into the database.
  • Implemented the summary caching feature where AI summaries of articles would be generated on-demand by the user, and cached for future users to view.

Elvis Teo Chin Hao (A0218206M)

Contributions:

  • Implemented the fetching and parsing of news articles from NewsData API into Finterest.
  • Set up OpenAI integration with NextJS
  • Created basic chatbot logic and interface.
  • Set up Firestore database.

Eugene Tang KangJie (A0233828Y)

Contributions:

  • Designed database schema for Finterest.
  • Set up Firebase authentication and implemented relevant features, such as login and registration.
  • Implemented the feature to view one's history of article chats
  • Converted the hi-fidelity prototypes into mobile-responsive interfaces, including the landing pages, chat interfaces and dashboard.

Joonghyun Eo (A0190907Y)

Contributions:

  • Experimented with different AI LLM models and frameworks.
  • Conducted prompt engineering for the chat bots present in Finterest.
  • Developed marketing and monetisation strategies for Finterest.
  • Carried out quality assurance testing after Finterest has been built, identifying bugs and layout issues.

Acknowledgements

In the course of developing Finterest, our team utilised a variety of online resources. We would like to sincerely thank the authors and creators of these resources.

  1. NewsData API for fetching of articles from NewsData
  2. OpenAI API for integration of OpenAI with NextJS
  3. TailwindCSS documentation for responsive layouts
  4. Firebase documentation for authentication and Firestore features
  5. Firebase Authentication with NextJS tutorial by Nangialai Stoman
  6. Landing page design inspiration by Honk
  7. How to Add Google Analytics to a Next.js Application by Mohammad Faisal
  8. ChatGPT for asking questions related to debugging and coding

finterest's People

Contributors

eugenetangkj avatar qreoct avatar kleonang avatar tlchicken avatar joongeo avatar

Watchers

 avatar  avatar

finterest's Issues

As a user, I want to navigate around Finterest once logged in

As a

user

I want to

navigate around Finterest once logged in

So that

I can use all the cool features

Acceptance criteria

Let's define a couple of (authenticated) routes for now. This means these routes are only accessible once logged in.
The nesting indicates what subroutes are accessible from the top route, and [id] is the dynamic url slug

  • /home
    • /topic/[id]
      • /topic/[id]/chapter/[id]
  • /news
    • /news/[id]
  • /chat
  • /account

I should be able to navigate through these routes via clicking on a navbar in the app. My page shouldn't refresh (i.e. typical single page app stuff)

Development Considerations

Screens

Nitpicks to fix

  • Navigation between 'home' 'pricing' and 'login' on landing page shouldn't have a page refresh
  • increase text tracking on pricing page
  • Add premium features to pricing page
  • Improve graphics on landing page
  • fix flickering that briefly shows the login page when you're already authenticated

backend:

  • improve article counting logic for trending (fixed in PR #41 )

Trending Articles

As a user, I want to view trending articles so that I can read what most people are currently reading.

As a user, I want to be onboarded onto Finterest

As a

user

I want to

see onboarding steps on Finterest

So that

I can understand how to use the app, as well as state some of my preferences

Acceptance criteria

  • User chooses their interests and they are saved. Multi select. Choose at least 1.
    • "What are you interested in using Finterest for?"
      • To learn more about saving
      • To make more money
      • To understand the keywords in the finance world
      • To keep up to date with finance news
      • ??
  • Onboarding can show 1 screen with description of our value proposition. i.e. we have 2-minute long articles jam-packed with information. Just keep scrolling!
  • Extension: Prompt the user to name some personal things (e.g. friends' names, what they're saving for, etc) and these will be used by the AI to customize and personalize the stories
  • LOW PRIORITY Extension: Product Tour

Development Considerations

Screens

As a user, I want to be able to highlight words within chapters to get additional explanations

As a

User

I want to

Highlight words while reading chapters

So that

I can get ask the Finterest AI for additional context and explanations about what I had highlighted

Acceptance criteria

  • User can highlight words
  • Will ask the AI about more context about the highlighted words
  • Renders the response from the AI on the screen
  • Has an X button to close the response pop up from the AI after the user is done reading the response

Development Considerations

  • Do we want the AI to automatically provide the response once some words are highlighted?
  • How big should the pop up be and what should it look like?
  • Do we want the user to be able to reply to the response from the AI about the explanations?

As a maintainer, I want to easily generate content

⚠TERMINOLOGY⚠

  • Topic: these are high-level concepts which cover various ideas and cannot be explained simply. Topics consist of multiple chapters.
  • Chapter: these are the building blocks of topics, and provide a progressive way to cover an entire topic. Chapters must be under 2 minute long in length.
  • What, So What, Now What: the framework in which we structure our chapters so that they are easy to read, Based on Kolb's experiential learning reflective model.
    • What: An explanation of the concept. Can provide examples.
    • So what: Why it's relevant to our user. Why should we care? Why is this important? What are the implications, what are the limitations?
    • Now what: How can this be improved? What are some related Chapters/Topics? How do we apply this to our lives for immediate impact?

As a

maintainer

I want to

easily generate content

So that

i can quickly create trusted educational knowledge for my users

Acceptance criteria

I want a prompt that we can throw into our AI tool to generate Topics and Chapter.

The Topic generation prompt might look like "Generate n topics for financial literacy for youths. Each topic should be able to be explained by a few short articles"

The Chapter generation prompt might look like "Write a 2-minute long article about the topic of [topic], focusing on the specific [chapter]. Structure it according to What, So What, Now What"

Topics List (WIP)

  1. Why is financial literacy important?
  2. What is Money?
  3. What is Entrepreneurship?
  4. What is Investing?
  5. What is the Economy?
  6. What are Savings?
  7. Life Events as a Teen
  8. Psychology of money (e.g. FOMO from not having the latest gadgets, seeing people of different financial backgrounds being able to afford different things)
  9. What is Risk?
  10. Financial Terms
  11. Spending money wisely

Development Considerations

  • how should we store topics/chapters in our database schema? should chapters support image, markdown formatting, etc?
  • how should we store topics/chapters when communicating within our team? gsheet? gdocs? just read the database?
  • should we format topics as Questions ("What is Money?") or just Concepts ("Money"). should we necessitate that each topic has a short description?
  • EXTENSION: order the topics based on priority for development
  • EXTENSION: order the topics based on different user preferences
  • LOW PRIORITY EXTENSION: upon clearing certain topics, you unlock the "In-app investing" feature

Screens

As a user, I want to create an account on Finterest

As a

user

I want to

create an account on Finterest

So that

I can log in

Acceptance criteria

Account created successfully if it doesn't already exist.

Development Considerations

  • Fields to support? I suggest
    • Name, email, password (default firebase provides email validation & password complexity validation)
    • Ignore profile picture, or can autogenerate with Gravatar or assign random emoji or something
  • Extension: support "Sign In with Google", we just need to fetch name from the firebase api

Screens

As a user, I want to be able to ask the Finterest AI to summarise the article so that I can read it faster

As a

User

I want to

Ask the Finterest AI to summarise the financial article

So that

I can finish reading the article more quickly

Acceptance criteria

  • A UI to for the user to choose to get the AI to summarise the current article
  • Will get the Finterest AI to summarise the original article into a shorter version

Development Considerations

  • How far should the article be summarised?
  • Maybe an option like { 3 min, 5 min, 7 min } can adjust the duration?
  • Should give the user an option to show the original article but it should not be on by default?
  • Should we put the option to do this together with the level of technicality option?
  • Should we put this as an option whether all articles should be summarised during onboarding? (Makes good use of user accounts)

As a user, I want to reset my password on Finterest

As a

user

I want to

reset my password

So that

I can get back into my account when I forget my password

Acceptance criteria

Password can be reset via original provided email. User gets a link to reset their password.

Development Considerations

  • Password reset screen

Screens

As a user, I want to log in to Finterest

As a

user

I want to

log in

So that

I can use the app.

Acceptance criteria

Log in using username and password created in #2 should work.

Extension: I can "Sign In via Google" with 1 click
Extension: I can select "remember me" and stay logged in

Development Considerations

We can navigate to finterest.com/home for now when the user is logged in. This means that if unauthorized users hit the /home endpoint, they will be routed to /login instead.

Screens

Recommendation System

As a user, I want recommendations tailored to my interests.

I also want to see trending articles which are popular amongst all users.

Article Stats

As a user, I want to see how many articles I have read to track my reading progress motivate me to hit my reading goals.

As a user, I want to read a Chapter

As a

user

I want to

read a Chapter

So that

πŸ† I LEARN πŸ† GET RICH πŸ† KNOWLEDGE IS POWER πŸ†

Acceptance criteria

  • can read the article
  • will deduct the cost of a Chapter
  • renders all appropriate images (?) and bold/italic (?) formatting
  • will suggest the next Chapter to be read in an infinite scroll format

Development Considerations

  • do we want Chapters to include links to sources?
  • do we want Chapters to include links to other Topics/Chapters within its body?
  • do we want Chapters to link to other Topics/Chapters outside of the body?

Screens

As a user, I want to be able to change the level of technicality of each article with AI

As a

User

I want to

Change the level of technicality of an article that we want to read using Finterest's AI to modify the article

So that

The article will suit my current level of financial knowledge

Acceptance criteria

  • A UI to choose what level of technicality the user wants
  • Will query the Finterest AI to modify the original article to that level of technicality that was requested

Development Considerations

  • How many possible levels of technically should we offer to the user?
  • Should we save the article after we generate it?
  • Should we put this as an option too of what level of technicality do users prefer during onboarding? (Makes good use of user accounts)

As a user, I want to navigate through Topics

As a

user

I want to

navigate through topics

So that

I can see what content is in this app

Acceptance criteria

  • View all topics
  • View chapters in topics
  • View completion in each topic (e.g. 4/8 chapters completed)

Development Considerations

  • Link to currency system because we don't want users to bypass paywalls and read chapters by accident if they don't have credit
  • Route would be /topics? /learn?

Screens

As a user, I want to be able to interact with Finterest AI in a quiz section to test what I learnt from the article

As a

User

I want to

Ask the Finterest AI to generate a quiz section

So that

I can test myself on the article's learning points

Acceptance criteria

  • A UI to for the user to interact with the AI to do the quiz about the article
  • The Finterest AI should generate the quiz in the context of the article
  • The Finterest AI should check the user's answer and provide feedback

Development Considerations

  • What should the quiz be like? What type of questions?
  • How difficult should the quiz be?

As a user, I want to log out from Finterest

As a

user

I want to

log out from Finterest

So that

I can ... hmm ... let my friend use their account...?? I'm not sure why I would need to log out tbh. But it seems like something that apps have. πŸ€”

Acceptance criteria

After logout, navigate back to the Landing Page and I'm able to log back in again from there. I shouldn't be able to access authenticated routes

Development Considerations

Screens

Key Feature: In App Currency

Mechanics

Finterest has an in app currency to facilitate our pricing strategy, but also to show the value of money to users. Learn by example.

Gain

  • +15 initial sign on credits
  • +10 daily credits if you log in, resets at midnight
  • each day of consecutive log in to the app increases your daily bonus by +1, capped at +30 credits a day.

Cost

  • Chapters cost 1 credit to unlock. Once unlocked, you can go back and read as many times as you like
  • AI explainer tool costs 5 credits per use. each usage is saved, so you can go back and read that explanation as many times as you like
  • News summarizer tool costs 5 credits.

FinterestPLUS

  • $6.99 a month (the cost of a coffee!)
  • increases base daily credits to +30
  • better interest rate tiers for in app investment system
  • more milestones/achievements

Future

  • We are thinking of an "in app investment system" in which you "invest" your credits at a predetermined interest rate to gain more credits in the future. We could model certain financial instruments e,g, fixed deposits, savings accounts, bonds, etc etc.
  • Milestones/achievements (e.g. 5 day log in streak = +10 credits, complete 1 topic = +10 credits)
  • quizzes/gamification as a way to earn credits
  • Referral system (1 referral = +50 credits)

Modelling (WIP)

Might need to model this in Excel to balance out this system.

  • Cautious user
    • doesn't spend much, only reads 3-4 chapters each session, uses the app once a week. problem: will she have a massive stockpile?
  • Ambitious user
    • maximizes his credit usage daily, aims to complete the syllabus asap. problem: will he be bored once everything is done? how long would a f2p user theoretically take to finish our app?
  • FinterestPLUS user
    • problem: will our subscribers finish the content too quickly? how do we retain them?

As a user, I want to discuss with the Finterest chatbot about the app's content

As a

User

I want to

Be able to chat with a chatbot to ask questions about an article that I just read

So that

I can understand the article better or find out more about certain parts about the article

Acceptance criteria

  • Able to send text to a chatbot
  • The chatbot replies to the question sent by the user
  • The reply should take into consideration the context which consists of previous messages sent by the user and the content of the article
  • There is a close button for the user to go back after the user is done interacting with the chatbot

Development Considerations

  • Should past chats be permanently saved in the database?
  • How does the user access this chatbot?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.