Git Product home page Git Product logo

curator's Introduction

Curator


Live Website Link

This web app is a clone of Feedly, a popular news aggregator. With so many sources of news today, this site allows users to subscribe to their preferred news sources and organize them into feeds. Curator makes use of RSS Feeds, which hold raw data from news sources and allow users to bypass social media and advertisements while retaining access to their favorite articles. Curator enables users to curate and view their own personalized news page, with their favorite topics and sites neatly organized in one place.

Technology

This app uses Ruby on Rails and PostgreSQL on the back-end, and Javascript/React/Redux to render the front-end, with HTML and SCSS for styling.

Features

Curator has a range of features including:

  • User authentication
  • Automated article scraping of RSS feeds
  • Article and feed pop outs
  • Follow and unfollow feeds
  • Dynamic search bar
  • Read and unread article marking

A few highlighted features include:

Article Floating Modals

Users are able to click on individual articles on the show page, and a modal popout will appear on the right side of the screen. This was accomplished with a modal passing relevant articles props to a popout container, and also makes use of this.props.children.

render() {
        return (
            <div onClick={this.handleClick} className={"pop-out-screen" +
                (this.state.appeared ? "" : " appearing")
            }>
                <Popout {...this.props} handleClose={this.handleClose}>
                    {this.props.children}
                </Popout>
            </div>
        );
}

Dynamic Search Bar

Users are able to search for feeds by keyword, feed title, or rss url, through a search bar that dynamically re-renders as users continue typing. This is accomplished with the use of the #ransack method (Ruby on Rails) on the backend to filter search results, as well as React onChange event handlers and .setState on the frontend to dynamically re-render the results.

----In main class----

 handleInputChange(e) {
        console.log('onChange result', e.target.value);
        this.setState({
            query: e.target.value
        })
        this.props.fetchFeedResults(e.target.value);
            // .then(res => 
            //     this.setState({filtered: res.data})
            //     console.log(res);
            // );
        //the action .fetchFeedResults takes care of the filtering for us, see feeds_controller.rb index method
        //we use the .ransack method to search
    };

----In function searchBar----

<div className="form-input-container">
        <input value={query} onChange={handleInputChange} type='text'
            placeholder='Search by topic, website, or RSS link'
            autoCorrect="on"
            style={styles}
            className="search-form-input" />
        <div className="search-form-overlay">
            <i className="search-icon"></i>
        </div>
</div>

Acknowledgements

I would like to acknowledge Elliot Grieco, as I referenced and got inspiration from his code for his Feedly clone, easyFeeds. I would also like to thank my project advisor, Michelle Kim, and my classmates at App Academy, for all their help and support.

curator's People

Contributors

c-kan-42 avatar dependabot[bot] avatar

Watchers

James Cloos avatar  avatar

curator's Issues

Project Proposal #1

Wiki Page Home

  • Is the first page you see upon entering the wiki
  • Contains a welcome message
  • Contains a link/placeholder for a link to the live page
  • All links in the right sidebar should contain each wiki page and link to the correct page
  • Correctly formatted
    • each wiki page is listed in bullet points
    • all links route the correct page

Comments

  • missing a link for your MVP list

MVP List

  • Should have 7 MVPs.
    • 3 of those are User Auth, Heroku, and Production README.
    • The other 4 are from the MVP List or they have clarified them with you
  • Contains a description sentence of the app
  • Includes two to three detailed bullets on functionality and presentation of feature
  • At least one CRUD feature, which states what CRUD operations are planned (creation, reading, updating, deletion)
  • Estimates how long it will take the code each MVP
  • Correctly formatted
    • MVPs are listed in an ordered list
    • Each MVP is broken down into bullet points

Comments


Database Schema

  • Contains correct datatypes
  • Contains appropriate constraints/details
    • primary key
    • not null
    • unique
    • indexed
    • foreign key
  • Contains bullet points after the table that state which foreign keys will reference to which table, or references to the associations which will be made
    • foreign key and table name are lowercased, snake_cased and back_ticked
  • Correctly formatted
    • schema is written in a table format
    • the table's name are lowercased, snake_cased and back_ticked
    • the table header column names are bolded
    • columns names are lowercased and snaked_cased and back_ticked

Comments

  • in your users table, missing an e in datetime for updated_at
  • last table reads isn't back-ticked

Sample State

  • State shape is flat!
  • State's keys are camelCased
  • All keys within the values in the state are accessible in the schema
  • Correctly formatted
    • Sample state is rendered with triple backticks, and the language ```javascript...```). This will display the state as a code block instead of a giant line of text
    • Top level slices
      • entities
      • session
      • errors (here or in ui)
      • ui (if needed)
    • Should NOT have nested slices, aka comments inside of posts
      • Some info from other tables is ok, for instance:
        • the author username and imageurl for a post. basically any info that the user can't change
        • like count and a boolean on whether the user likes the post instead of a likes slice

Comments


Backend Routes

  • Contains the following sections: HTML, API Endpoints(Backend)
  • Each route has a description
  • API Endpoint routes contains wildcard variables written in snake_case
  • Routes does not contain superfluous routes
  • Have API routes that will allow the front end to get all info it needs and does not have unneeded routes:
    • probably doesn't need a GET likes api endpoint because that info comes through the post show

Comments


Frontend Routes

  • Frontend routes contains wildcard variables written in camelCase
  • Correctly formatted
    • Routes are displayed with inline coding text (backticks)

Comments

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.