Giter VIP home page Giter VIP logo

property-andalucia-frontend's Introduction

Property Andalucia

am-i-responsive

Property Andalucia is a property marketplace platform designed for selling and buying property. It allows the user to create their own listings and sell their property. As a visitor you can also search for property using a variety of search filter methods. The users can register for the website as a seller or a buyer, and gain access to further features such as saving posts and following other users. It also contains a blog feature where users who are staff can published blog posts.

This part of the project serves as the Frontend, created using React.js, which connects and interacts with the backend API through HTTP requests.

  • Frontend Deployment can be found here.

  • Backend API Deployment can be found here.

  • Backend API Repository can be found here.

Table of content

UX

The goal of this project was to build a marketplace for sellers to be able to display their properties and for potential buyers to be able view and interact with said items, and get in touch with the post owner. Key criterias in achieving this goal were identified as below:

  • Build a site that distinguishes between sellers and buyers with different access points
  • Build a site that provides the functionality to create a property
  • Create functionality for a collection of specific search filters to narrow down interests
  • Registered users should be able to save a post for future viewing
  • Registered users should be able to follow sellers to stay up to date with their listings
  • Both sellers and buyers can update their information in a profile page to better personalise their information and advertise themselves to potential sellers or buyers.

Additionally:

  • Build a site that also distinguishes between buyers, sellers and staff with different access points.
  • Include a blog feature part of the site with full CRUD functionality.
  • Create a search feed to be able to narrow down blog posts by title or user.
  • All users are able to view blog posts.
  • Only staff users are able to create, modify and delete blog posts.

Please see inspiration section on this README to view the helpful sources inspired the UX design and choices.

Project Scope

  • Functionality

    • To be able to sign-up with a username and password creation
    • To be able to login and logout of an account successfully
    • To be able to visually view web app state changes for logged-in and logged-out users
    • To be able to create an account for sellers
    • To be able to create an account for non-sellers or buyers
    • To be able to create/view/edit/delete a post as a user
    • To be able to view a feed of listed posts by other users
    • To be able to access a detailed view of a particular post
    • To be able to use search filters to narrow down search results
    • To be able to create/view/edit/delete notes
    • To be able to save posts by another user
    • To be able to unsave posts by another user
    • To be able to view a feed of all saved posts
    • To be able to create/view/edit user profile information as a user
    • To be able to store, change and retrieve avatar image
    • Tp be able to view a list of popular profiles ordered by followers
    • To be able to follow another user profile
    • To be able to unfollow another user profile
    • To be able to view a feed of posts by followed users
    • To be able to change username
    • To be able to change password
    • To be able to receive feedback about form-submitted incorrect information

Strategy

Selling a property can be an arduous task; selling several properties more so. It is often hard to find a simple web property application with an easy and engaging interface, hence this website was created to engage both sellers (non-professional individuals, agents or businesses) and buyers who can engage and network with each other.

User Stories

  • User stories are based on four types of users: anonymous users, buyer users, seller users and staff users.
    • Anonymous users are defined as those who are not authenticated but have limited access to the web application.
    • Buyer users are defined as those who have not marked themselves as a seller upon sign up, but have access to more features across the web application.
    • Seller users are defined as those users who signed up as selling property, and therefore have access to more features across the web application.
    • Staff users are defined as those users whose accounts have been created by admin in the backend, and who have been marked as "is_staff" and as a result having access to the blog features of the web application.
      • Note: These accounts can only be made in the backend using the admin panel. They are treated as employee accounts, and thus can only be made for special use, unlike the previous two users.

Epics, User Stories and Backend Tasks can be found in this GitHub repository project Kanban board, and particularly for this project, all user stories can be found here.

Design

Web Structure

  • Website is structured into 15 principal pages
  • All pages extend and produce a consistent style across the application
  • Pages are the following:
Page Description
Navigation Bar Navbar header with site logo and collapsable link for media query sizes
Sign Up Where users can create an account
Login Where users can login with an account
Home A landing page consisting of a general feed of posts
Feed A list of all posts of followed accounts
Saved A list of all posts saved by the current user
Add Property A large form page where sellers can fill out their property data
Edit Property A large form page where sellers can modify pre-existing fields
Post List A list view of the property posts featuring concise information
Post Detail A detailed view of the post featuring additional information
Search Filters A UI component where users are able to access a variety of search filter methods
Add Blog Post A form page where staff can create a blog post
Edit Blog Post A form page where staff can modify pre-existing fields for their blog post
Blog Post List A list view of all blog posts with a shortened description and search tab
Blog Detail A detailed view of the blog post featuring full description
User Profile A profile dashboard displaying information and user posts
Edit Profile A large form page where users can modify pre-existing input
Edit Username A form where the user can change their username
Edit Password A form where the user can modify their password

Wireframes

Images for the wireframes can be found in a separate page here.

Colour

The colour design used for this site has been a mixture of white, peach and shades of orange. The colour orange is a colour practically and argubly synonymous with the Iberian peninsula, which emits a feeling of sweetness, holiday and summer. This helps the website convey a feeling of being otherwise Spanish in design, feel and soul.

The hex codes are (in descending order as seen on the palette): #CC5500, #F99417, #FFF5EE, and #FFFFFF.

colour-palette

Fonts

Google Fonts was used for the font in this project.

The principal font used is Lora, which is in use across the application and with a light font weight for aesthetic ease.

Iconography

The logo brand used for the web application was made using Looka.

The interactive icons found across the web application were imported from Font Awesome.

Features

Existing features

Navigation Bar

  • Contains links for site navigation throughout application
  • State changes links depending on logged-in status versus logged-out
    • If a user signs up as a seller they will be able to see the link to 'Add Property', as well as the other collective iconed links: view 'Saved' properties, view property 'Feed' (property listed by other followed sellers), their profile and the 'Logout' icon.
    • If a user signs up as a non-seller they will be able to see all the aforementioned links save the 'Add Property' icon.
    • If a user is staff of Property Andalucia, they will be able to see the 'Create post' icon.
    • Additionally if a user is both staff and seller, they have access to both 'Add Property' and 'Create post' icons.
  • The brand logo is a clickable button that returns the user to home page.

navbar-logged-out navbar-logged-in navbar-logged-in-2 navbar-logged-in-3

  • Designed to be responsive depending on screen size; links form a dropdown button when viewed on smaller viewport. navbar-small-viewport

Home Page

  • The home page is the first page seen upon visiting the web app and logging in.
  • It contains the navigation bar, a list of property posts made by users, and the search filter component so visitors are able to interact with site content.

home-page

Sign Up

  • Visitors are able to sign up for an account which allows them to add property posts, save posts, management of their profile and view property listing information.
  • Visitors who wish to make a sellers account must simply check the checkbox indicated with "I am selling property" statement.
  • Visitors must create a unique username and a password.

signup-form

Login

  • Upon successful registration, the user is redirected to the 'login' page, where they can sign in with the created credentials.
  • Users are requested to enter their username and password credentials.

login-form

Add Property Form

  • Authenticated sellers have exclusive access to the 'Add Property' icon, which directs them to the property post creation form.
  • This form is not available to non-sellers, who are redirected back to the home page if attempted entry.
  • Users are able to upload an image of their property
  • If the image field is left empty, an automated default image will be rendered from the API
  • Some fields are required and users are alerted by the API via warnings if there are any missing or invalid fields.
  • Input fields vary in type, some are text, some are numbers and some are checkboxes.

add-property-form

Edit Property Form

  • Edit property form mimics the property creation form, thus all of the fields are identical
  • The form contains pre-populated input and image fields, which are easily editable.
  • Save changes are evident from the moment of clicking the 'Save' button.

edit-property-form

Property List View

  • This view contains the shortened, listed view of all available properties.
  • Contains a property listing count at the top, which increases/decreases with each addition or deletion.
  • Property detail view can be accessed via the "View more..." link at the bottom of each listed property.
  • Each listed object contains brief but important information about the listing, such as the image, the title, address, the price, description, measurement and bedroom/bathroom count.
  • Each listing also contains the profile avatar and name of each object owner, as well as a save button.
  • All listings are ordered by creation date, the latest post being the top and first-seen post.
  • When a property has been sold, an image overlay with "Sold" appears over the property image.

property-list-view

Property Detail View

  • When accessed, the detail view reveals further information about a property object, such as the "Basic characteristics" and "Additional information".
  • It contains a button to reveal the object owners telephone and email information. This can only be accessed by authenticated users and not by anonymous visitors.
  • Contains a "Location" section, featuring the Google Maps component with the location of the property.
  • Contains the "Notes" section at the bottom of the page, where all authenticated users can leave a private note.
  • When a property has been sold, an image overlay with "Sold" appears over the property image.

property-detail-view

Search Filter

  • Search filter can be accessed on home page, saved posts page and followers feed page.
  • It can be interacted with by all users, authenticated or anonymous.
  • Users are able to filter by province, property type, price range, bedroom count and bathroom count.
  • Filters work in coordination with each other, meaning that a property can be filtered gradually, an example would be: first by province, then by price, then by bedroom count.
  • Contains a "Clear Filter" button which clears the search filters and restores the page to normal.

search-filter

Notes

  • Notes can be found at the bottom of all property detail views.
  • The note form is easily accessible and instantly creates a note made by an authenticated user.
  • All notes are made private in the API, thus only the current user can view notes.
  • Anonymous users cannot make any notes without creating an account first.
  • All notes made can be instantly edited via the dropdown menu.
  • All notes amde can be instantly deleted via the dropdown menu.

notes

Saves

  • Save icon can be found on both the list and detail view of a property post.
  • Its state changes instantly upon clicking and unclicking.
  • All saved property posts are filtered as listings under the "Saved" feed icon.
  • Authenticated sellers cannot save their own posts.
  • Anonymous visitors cannot make use of the save functionality.

saves saves-1 saves-2

Saved Feed

  • "Saved" feed can be accessed in the navigation bar by both sellers and non-sellers.
  • The icon on the navigation bar is not visible to anonymous visitors.
  • Posted objects in this filtered feed can increase/decrease saving/unsaving more posts.
  • Akin to the home page, it contains a list view and detail view of all post listings.

saved-feed

Popular Sellers

  • Popular Sellers component can be viewed on the home page, saved page, follow feed page and logged-out page.
  • Contains a list of the most followed sellers profile.
  • Contains the Follow/Unfollow buttons, visible only to authenticated users.
  • Does not contain any non-seller profiles as it is filtered in the API.
  • Anonymous visitors cannot follow or unfollow profiles.
  • User profiles can be accessed and viewed via the visible avatars.

popular-sellers

Follow Feed

  • "Feed" icon can be accessed in the navigation bar by both sellers and non-sellers.
  • The icon on the navigation bar is not visible to anonymous visitors.
  • Contains a feed of all posts by a user that is being followed
  • Posts increase/decrease according to the follow/unfollowing of a user
  • Akin to the home page, it contains a list view and access to detail view of displayed listings.

follow-feed

Profile

  • Profiles pages are visible to both authenticated users and anonymous.
  • Seller accounts are public whereas non-seller accounts are private
  • Profiles pages are editable for both sellers and non-sellers, with fields such as email, telephone and image to match their desired brand.
  • A dropdown button is available in which to modify username, password and profile.
  • Seller profiles have post listings which can be accessed via their profile, revealing posts specific to the profile owner.
  • Profiles contain follower and following counts.
  • Profile pages contain a "Follow"/"Unfollow" button.
  • Profile owners cannot follow their own pages

profile profile-2

Edit Profile Form

  • Edit profile form can be accessed by dropdown menu by the owner of a profile object
  • The form contains pre-populated fields with the current, modifiable inputs
  • All inputs are updated when the "Save" button is clicked
  • Email field is validated via the API and warns the user if the email entered is not standardised.
  • The telephone field is also validated via the API, requesting users enter a Spanish number (9 digits, beginning with 6, 7 or 9).

edit-profile-form

Blog Creation Form

  • Authenticated staff users have exclusive access to the 'Create post' icon, which directs them to the blog creation form.
  • This form is not available to sellers, non-sellers and anonymous users, who are all redirected back to the home page if attempted entry.
  • Users are able to upload an image for their blog post
  • If the image field is left empty, an automated default image will be rendered from the API

blog-creation-form

Blog Edit Form

  • Edit blog form mimics the blog creation form, thus all of the fields are identical
  • The form contains pre-populated input and image fields, which are easily editable.
  • Save changes are evident from the moment of clicking the 'Save' button.

blog-edit-form

Blog List View

  • This view contains a shortened content field of blog posts, with a "Read more..." link.
  • All blog posts are ordered by creation date, the latest post being the top and first-seen post.
  • Features the publication date.
  • Features blog post owner avatar, which links to their profile.
  • Features blog post owner name for further information.

blog-list-view

Search Feed

  • Search bar is available and accessible at the top of blog list view.
  • It can filtered post titles and blog post owner usernames.
  • It can be used by all users including anonymous users.

search-feed

Blog Detail View

  • A detail view version of the blog post which contains an expanded, full blog content feature.
  • It is individual and stand-alone.
  • If user is the blog post owner, there is a dropdown icon available with the edit and delete functionality.
  • Features the publication date.
  • Features blog post owner avatar, which links to their profile.
  • Features blog post owner name for further information.

blog-detail-view

Username and Password Forms

  • Username form contains functionality to change the username.
  • Users cannot enter the same username and will receive an alert if they do.
  • Password form contains functionality to modify the current password.

username-form password-form

No results found

  • "No Result" pages are as follows:
    • When there are no saved property listings
    • When the following feed is empty
    • When the user comes across a non-existent page (404 HTTP error)

not-found-saves not-found-follow not-found-404

Components

Components in React.js are independent pieces of UI design that are split into reusable code blocks that can then be further developed and treated as a piece of code in isolation. This means that rather than having a single file for a web application page with hundreds to thousands of lines of code, variables and functions, different groups of code relating to a specific area of the page can be isolated and worked on separately.

There are several components used and managed in this project and they are the following:

  • Asset/Spinner

    • This component is used in several places in the application, moreover wherever data may be loading. When the Search Filter is used this component is utilised while the data is being fetched.
    • Due to this, the UX is greatly improved as the page does not refresh redundantly and while the search filter is in use (such as clicking the dropdown option).
  • Avatar

    • Used to display the user profile image throughout the site.
    • UX experience is improved as users are able to instantly identify the owners of a publication and their information.
  • Map

    • This component was used to create a map location on the property detail view pages.
    • It improves UX as it allows users to orientate themselves with relation to the property location.
    • It requires the user to enter a latitude and longitude to form a centre point. These can generally be found by going into Google Maps, holding right-click on a desired location which will then reveal the latitude and longitude points.
    • The react-google-maps/api package was used to create this component. An API key is also needed from Google Cloud.
  • MoreDropdown

    • This component is used in the property detail view page, published notes, user profile and blog detail view page. It is a UX improvement as it allows users to access a dropdown menu to be able to modify or delete their own data.
  • NavBar

    • The NavBar component is present on every page of the application.
    • It contributes to improved UX as the user can access most of the site features in one place from all pages across the app.
    • The NavBar design collapsed into a burger menu with a smaller viewport size.
  • NotFound

    • This component appears whenever a user tries to access an invalid or non-existent URL.
    • It contributes to improved UX as the user is informed that the page does not exist.
    • It also appears where there are no saved posts or followed profiles with posts via the "Saved" and "Feed" buttons on the NavBar.

Future features to implement

Ideas for possible future implementation are as follows:

  • Blog section which features staff employed by the company that can produce blog posts with full CRUD functionality.
  • Implementation of a more active buyer account, i.e., buyer profiles should be more individual and particular to their nature
  • Implementation of more diversified search filters, such as being able to narrow down search results by size, state (new-build, renovated etc.), numbers of floors, by date of publication and so on
  • A direct messaging service where users can send private messages to another user
  • Implementation of a rental market, where users can promote their property for rent at a monthly fee with further information
  • Add a Google Translator tool which allows for the website to be translated across as many languages as possible
  • A credit system for buyers or renters which acts as a guarantee of their reliability and reputation

Testing

Testing can be found in a separate document here.

Bugs during development

Fixed Bugs

  • To find a list of fixed bugs that were mended during development, click here.

Additional fixed bugs on main branch:

Remaining Bugs

  • On the detail view of the property page, the .toLocaleString() JavaScript function doesn't work with the price data field. It causes the entire page to go blank. It does however work on the list view version.

  • When clicking "View More" on the property list view, it takes the user to the middle of the detail view page, rather than the top.

  • There is one warning in the terminal via react-hooks/exhaustive-deps, saying that the useEffect hook has a missing dependency. However when it is added, it compiles more warnings, and when followed through, eventually break the web application. This bug has no impact on the running or functioning of the web application in general and it is only seen when in development mode (i.e. when npm start is ran). This bug is hidden for now with the placement of // eslint-disable-next-line above the line of code (PropertyList.js : line 71).

  • Some of the images used across the website are large and high quality, affecting the Lighthouse performance score of the application. However when the same test is ran on the developers mentors' network, it scores a higher number. This can be referred to here.

Technologies and libraries used

Languages

The languages used are:

Libraries and other resources

  • React-Bootstrap: a component library that provides Bootstrap components in a React.js environment.
  • Axios: HTTP client (Promise-based) for the browser and node.js. Used to make network requests throughout the application.
  • react-router-dom: Routing library for the React Javascript library to display different components based on URL entered into the browser.
  • react-infinite-scroll-component: external package used to install an infinite scroller which manages the loading of paginated content.
  • react-google-maps/api: external package used to install and show Google Map location of a property based on latitude and longitude.
  • Google Lighthouse: used to access website performance.
  • Google Fonts: used to import font utilised throughout site.
  • Font Awesome: used for icons across website.
  • Icons8: used for favicon.
  • GitHub: used to store, develop and maintain project code.

Deployment and development

The development environment used for this project was GitPod. Regular commits, pushes and merges to 'main' branch in GitHub via a 'development' branch were employed to be able to track and trace the development process of the website. All merges have been linked to their corresponding issues.

Additionally a 'blog' branch was used to implement a blog feature, which was created as an additional feature by the developer due to excess time before submission date. All work was produced on the 'blog' branch and then merged with main.

For local deployments instructions shall be written below, along with instructions with deployment to Heroku, the hosting service used to deploy this particular website. Heroku was chosen as the hosting service due to its database maintenance capabilities.

Local deployment

  1. Go to the project repository
  2. Click on the "Code" button.
  3. Choose one of the three options (HTTPS, SSH or GitHub CLI) and then click copy (i.e., https://github.com/keironchaudhry/property-andalucia-frontend.git).
  4. In your IDE, open terminal and run the git clone command (i.e., git clone https://github.com/keironchaudhry/property-andalucia-frontend.git).
  5. The repository will now be cloned in your workspace.
  6. This instruction list assumes that Node.js and npm are installed locally, if not, please install them.
  7. In the terminal, type the command npm install to install all project dependencies.
  8. Then finally run the command npm start to initiate the application.

Deployment to Heroku

  1. Log in to Heroku and navigate to your personal app dashboard.
  2. Select 'Create new app'.
  3. Give your application a unique name, select a region and click the 'Create app' button.
  4. Select the 'Settings' tab and click 'Reveal Config Vars' in the Config vars section. Enter the following key value: Key: REACT_APP__MAPS_API_KEY, value: Google Maps JavaScript API key. Click the Add button.
  5. Go to the 'Deploy' page at the top of the page.
  6. Select 'GitHub' from the 'Deployment method' section and you will be able to 'Connect to GitHub'.
  7. From there you will be able to search for your repository in the search tab.
  8. Once searched and the repository has appeared, click 'Connect'.
  9. At the bottom of the same page, go to 'Manual deploy', select the 'main' branch in the drop down and click the 'Deploy' button.
  10. Once deployment is complete, you will then be able to view your deployed project.

Credits

Inspiration

  • Idealista, a popular property service in Spain, was helpful in guiding me in crafting ideas toward frontend design and functionality (such as the property detail view, a service for professional sellers and search filter ideas).

  • Code Institute's Advanced Frontend 'Moments' walkthrough was momentous in providing guidance, teaching, code structures and the general idea for this project, all of which has been credited in the project as having provided the code or having been an adaptation of said code.

Code

The following websites proved to be both insightful and helpful during development of this project, in addition to the aforementioned sources:

Acknowledgments

For inspiration, guidance and inputs, thank you to:

  • Spencer Barriball

    Absolutely fantastic mentor at Code Institute with brilliant insight into React.js, JavaScript in general and Frontend design.

  • Jack Crymble

    Friend and guide, thank you for your knowledge and insight!

  • Jody Murray

    Fellow student and colleague, thank you for your input and constant support!

property-andalucia-frontend's People

Contributors

keironchaudhry avatar

Watchers

 avatar

property-andalucia-frontend's Issues

User Story: Logged In Status

As a User, I can verify whether I am logged in or not so that I can log-in if necessary.

Epic

User Authentication #2

Acceptance Criteria

  • Users should be able to visually verify when they are logged-in by changes to the web application.

Tasks

  • Create a responsive NavBar that adjusts its links and accessibility when a User is logged in.

User Story: Search Feed

As a User, I can search through my feed and saved posts so that I can filter my posts to my interests.

Epic

Site Navigation #1

Acceptance Criteria

  • Users should be able to use a search tab options on the saved posts page and feed page.

Tasks

  • Create a search tab that can narrow down searches by keywords.
  • Display the filtered results.

User Story: Edit Private Note

As a User, I can modify an existing private note so that I can edit any relevant information regarding the property post.

Epic

Property #3

Acceptance Criteria

  • Users should be able to modify their already-created private notes

Tasks

  • Create a button that allows users to edit private notes (which they own).
  • Make sure the data is updated in the database in the backend API when changes are saved, and that all contents of the private note change according to user modifications.
  • Create a cancel and save button(s) on the edit form.

Epic: Site Navigation

Web application is presented with a consistent interface through which the site user is able to navigate with ease.

User Story: Unsave Property

As a User, I can unsave a property post so that I no longer have it saved.

Epic

Property #3

Acceptance Criteria

  • Users should be able to unsave any property post after having saved it in the property post containing the same id.

Tasks

  • Create a button state to reflect when a property has been unsaved.
  • Make sure data is removed from the backend API.

User Story: User Profile

As a User, I can have a unique profile to maintain so that I can personalise my experience in the web application service.

Epic

Profile #4

Acceptance Criteria

  • Users should be able to display their default profile created for all users upon sign-up.

Tasks

  • Create a profile page.
  • Create a profile component.

User Story: Logout

As a User, I can successfully log out of my account so that I can maintain a secure account on shared devices.

Epic

User Authentication #2

Acceptance Criteria

  • Users must be able to successfully logout of their account without errors.

Tasks

  • Create a logout link in the NavBar for logged-in Users.

User Story: Delete Blog Post

As a Staff User, I can delete a blog post that I have created so that I can erase my blog post from the web application.

Epic

Blog #88

Acceptance Criteria

  • A blog post can be deleted using a link within the individual blog view.

Tasks

  • Create a link to delete a blog post, visible to the individual post owner.
  • Make sure the database has updated the deletion in the backend API.

User Story: Edit Blog Post

As a Staff User, I can modify a blog post content so that I can make any necessary and desired changes.

Epic

Blog #88

Acceptance Criteria

  • Staff Users should be able to modify the content of their original post.
  • Staff Users should be able to access an edit form separately.
  • Prepopulated information from original post should already be present.
  • When saved, the newly entered information will replace the original.

Tasks

  • Create a Blog Edit Form page.
  • Edit Form page should be accessible via a clear link.
  • Make sure that information has been successfully updated in API.

User Story: Navigation Bar

As a User, I can find the Navigation Bar on every page so that I can easily navigate the web application and know where I am in the application.

Epic

Site Navigation #1

Acceptance Criteria

  • Navigation Bar should be visible on every page of the application
  • Navigation Bar should adjust to a suited layout depending on screen size

Tasks

  • Create NavBar component
  • Configure site routing between different pages
  • Make responsive for different screen sizes

User Story: User Profile Description

As a User, I can create a profile description so that I can further personalise and describe my brand or experience in the web application service.

Epic

Profile #4

Acceptance Criteria

  • Users should be able to add and edit their profile description.

Tasks

  • Within the Edit Profile form, allow for a change/modification of user profile description.
  • Make sure any modified information is updated in the backend API.

User Story: Create Private Notes

As a User, I can create private notes on property posts so that I can add information for my own purposes when reviewing the post.

Epic

Property #3

Acceptance Criteria

  • Users should be able to create private notes on individual property posts.

Tasks

  • Create a form for note creation.
  • Make sure data is saved to the database in backend API.
  • Create notes so that they are displayed on the property post and add an infinite scroll component to load paginated notes from the API when a user scrolls down the page.

User Story: Account Management

As a User, I can manage my account information so that I can maintain secure control over my account.

Epic

Profile #4

Acceptance Criteria

  • Users should be able to modify and update any information on their profile and account, such as username and password changes.

Task

  • Create username/password change buttons for the profile.
  • Create forms to modify username and password information.
  • Make sure any updated user credential information is updated in the backend API.

User Story: Delete Private Note

As a User, I can delete an already-created private note so that I can erase any information that I deem unnecessary.

Epic

Property #3

Acceptance Criteria

  • Users should be able to delete private note information from the individual post in which it was created.

Tasks

  • Create a 'Delete' button so that users can delete any private note that they own.
  • Make sure data is removed from the backend API.

Developer: Testing

Tasks:

  • Test all available and necessary aspects of the web application available to the user.
  • Carry these tests out using the React Testing Library.
  • Document these tests into the README.md

User Story: Sign Up

As a User, I can create a new account so that I can use the web application services to list my property/or browse other properties.

Epic

User Authentication #2

Acceptance Criteria

  • Site Users are able to register with a unique username and password.
  • Site Users are able to distinguish themselves between a buyer and seller.

Tasks

  • Create a sign up link in NavBar
  • Create a sign up form in NavBar

User Story: Advanced Search Feed

As a User, I can use an advanced search option to filter prices or regions so that I can further narrow down my search to my interests.

Epic

Site Navigation #1

Acceptance Criteria

  • Users should be able to filter their preferences and search on the feed page to narrow their search..

Tasks

  • Create a property search component.
  • Create and display the necessary filters for price range and region.
  • Display the search results according to filtered preferences.
  • Display the search results as a list of posts associated with the filtered preferences.

User Story: Sign In

As a User, I can sign in to my account so that I can use the web application using my existing account.

Epic

User Authentication #2

Acceptance Criteria

  • Users can log into their account using the username and password they used in the Sign Up feature.

Tasks

  • Create a Sign In link on NavBar
  • Create a Sign In form
  • Redirect users so that a successful sign-up will be redirected to Sign In form
  • Redirect users so that a successful sign-in will be redirected to the home page

User Story: Unfollow Profiles

As a User, I can unfollow a profile so that I can better manage posts that appear in my feed.

Epic

Profile #4

Acceptance Criteria

  • Users should be able to click an unfollow button to stop following other user.

Tasks

  • Create an 'Unfollow' button.
  • This button should adjust its state to reflect the state of following or not-following.

User Story: Following Count

As a User, I can display the total count of profiles that I follow so that I can correctly manage my feed.

Epic

Property #4

Acceptance Criteria

  • Users should be able to view count of the number of profiles a User is following on their profile page.

Tasks

  • Create the logic to display the total count of profiles that a User profile is following.

User Story: Create Property Post

As a User, I can create a post for my property listing so that I can use web app services to advertise my property for sale.

Epic

Property #3

Acceptance Criteria

  • User can enter information into a form and save their property data into an API.
  • User input should be validated with all errors reported to the User.

Tasks

  • Create a 'Add Property' link to NavBar
  • Create a Property submit form
  • Data should be successfully saved into the backend API.

User Story: Refreshing Access Tokens

As a User, I can maintain my logged-in status until I choose to log out so that my user experience is not compromised.

Epic

User Authentication #2

Acceptance Criteria

  • Users should not be automatically logged-out of their account unless by their own means, or after 24 hours of inactivity.

Tasks

  • Configure interceptors to refresh expired access-tokens if the refresh token is still valid.

User Story: View Profiles

As a User, I can view another User's profile so that I can learn about them.

Epic

Property #4

Acceptance Criteria

  • Users should be able to view another separate profile in the web app.
  • Profiles should display their posts and products.
  • Profiles should display all relevant information related to the other User.

Tasks

  • Create logic that allows for Users to view other User profiles.

User Story: View All Property Posts

As a User, I can view a list of all properties that have been posted so that I can explore my options on my feed.

Epic

Property #3

Acceptance Criteria

  • All property posts should be viewing in a single descending list
  • Property post listing should be organised by the most recent post.

Tasks

  • Create a page to display a list of properties.
  • Create a most-recent filter for post ordering.

User Story: Popular Profiles

As a User, I can view on my feed a list of popular profiles so that I can view other products and/or expand my network.

Epic

Profile #4

Acceptance Criteria

  • Users are able to view a list of the 10 most popular profiles on the web application.

Tasks

  • Create a component that displays the most followed profiles.
  • Allow Users to be able to follow and unfollow other profiles from this component.

Refactor: CSS modules + JS components

Acceptance Criteria

  • React components and pages should be contained within singular folders
  • CSS files should join relevant components and pages within folder structures

Tasks

  • Create relevant folders within directory
  • Bring React components into folders + modify imports across application
  • Bring CSS modules out of styles folder + modify imports where necessary
  • Eventually delete styles folder

User Story: Delete Property Post

As a User, I can delete a property post that I have created so that I can erase my property from the web app service.

Epic

Property #3

Acceptance Criteria

  • A property post can be deleted using a link within the individual property view.

Tasks

  • Create a link to delete a property listing, visible to the individual post owner.
  • Make sure the database has updated the deletion in the backend API.

Epic: Blog

Site users that are employed by Property Andalucia (who are therefore classed as "staff") can create and maintain a blog which informs visitors and users about recent ongoings and promotes the business brand.

User Story: User Profile Image

As a User, I can display a profile image so that I can personalise and brand my profile to my taste or necessity.

Epic

Profile #4

Acceptance Criteria

  • Users should be able to upload and display a profile Avatar.
  • The Avatar should be displayed around the web application next to any posted content.

Tasks

  • Create a Profile Edit form which allows users to upload an image.
  • Allow for a preview of the selected image
  • Validate the image size.
  • Make sure the file is updated in the backend API.

User Story: View Blog Post

As a User, I can view a blog post so that I can find out more about the web application brand.

Epic

Blog #88

Acceptance Criteria

  • Users should be able to individually view a blog post individually.

Tasks

  • Create a blog page to individually display the component in question.

User Story: Edit Property Post

As a User, I can edit the content of my post listing so that I can make any necessary and desired changes.

Epic

Property #3

Acceptance Criteria

  • Users should be able to modify the content of their original post.
  • Users should be able to access an edit form separately.
  • Prepopulated information from original post should already be present.
  • When saved, the newly entered information will replace the original.

Tasks

  • Create an Edit Post page.
  • Edit Post page should be accessible via a clear link.
  • Make sure that information has been successfully updated in API.

User Story: View all Blog Posts

As a User, I can view a list of all blog posts available so that I can explore and learn more about the web application brand.

Epic

Blog #88

Acceptance Criteria

  • All blog posts should be viewed in a single descending list
  • Blog posts should be organised by the most recent post.

Tasks

  • Create a page to display a list of all blog posts published.
  • Create a most-recent filter for post ordering.

Epic: Property

Site-users are able to create and manage their own property listings and can view properties according to their preferences.

Epic: User Authentication

Site user is able to create an account in which they can authenticate and determine their user-authentication status.

User Story: Followers Count

As a User, I can view the total count of Users following my profile so that I can estimate my profile popularity.

Epic

Property #4

Acceptance Criteria

  • Users should be able to view the number of followers on their profile and other User profiles

Tasks

  • Create the logic to display the total amount of followers on a profile.

User Story: Follow Profiles

As a User, I can follow another profile so that I can keep up to date with their posts.

Epic

Profile #4

Acceptance Criteria

  • Users are able to follow another User profile via a button.

Tasks

  • Create 'Follow' button to a User profile page
  • Change state to reflect if a user has followed a profile.
  • Make sure data is updated in the backend API.

User Story: Create Blog Post

As a Staff User, I can create a blog post so that I can write about the recent events and promote the web application brand.

Epic

Blog #88

Acceptance Criteria

  • User can enter information into a form and save blog data into an API.
  • User input should be validated with all errors reported to the User.

Tasks

  • Create a 'Create post' link to NavBar (specific to staff users)
  • Create a Blog Creation form
  • Data should be successfully saved into the backend API.

User Story: Infinite Scroll

As a User, I can continuously scroll and find additional property listings so that I do not have to navigate between different pages.

Epic

Property #3

Acceptance Criteria

  • All additional content beyond a certain amount of posts should show without the need for pagination.

Tasks

  • Create an infinite scroll component that loads additional data from the API as the user scrolls.

User Story: View All Saved Posts

As a User, I can view a list of all my saved property posts so that I can easily view, revisit and compare my preferences.

Epic

Property #3

Acceptance Criteria

  • All property posts saved by the user should be displayed in their own view.

Tasks

  • Create a route to list property posts saved by a user.

User Story: View Property Post

As a User, I can view an individual property post so that I can find out more detail and further investigate.

Epic

Property #3

Acceptance Criteria

  • Users should be able to individually view a property on its own.
  • Users should be able to easily obtain information regarding property and details of the post owner.

Tasks

  • Create a post page to individually display the property in question.

User Story: Save Property

As a User, I can save a property post so that I can return to the same post at any time and track updates.

Epic

Property #3

Acceptance Criteria

  • Users can save posts that they are interested via a 'Save' button when viewing the property post.

Tasks

  • Create a 'Save' button to the property post component.
  • Ensure the state of the button is visible to show the post has been saved.
  • Make sure all and any data is saved to the backend API.

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.