Giter VIP home page Giter VIP logo

gh-jobs's People

Contributors

dependabot[bot] avatar

Watchers

 avatar

gh-jobs's Issues

πŸ”Ή Less Data Interaction

Given that I make a request and get a response, when I use a body in the request, then the data in the body should be minimal.

Suggestion: Don't save the whole Job, just save the id


  • Rewrite Add Saved Job
  • Rewrite Remove Saved Job
  • Cypress Testing
  • Check TODO's
  • Fix ESLint Errors

✏️ Rename `created_at`

Given that a job is received from the GitHub Jobs API, when it is added to the database, then it's created_at field is renamed to listingDate (or similar).


  • BE - Rename created_at to listingDate
  • FE - Rename created_at to listingDate
  • Update Test Fixtures
  • Purge Local DB
  • Adjust Controller to modify Job before creating in DB
  • Lint
  • Fix OptionsPanel Test Stub
  • Test

πŸ“„ Direct Page Access

Given that I type a direct URL to a page, when the page loads, it should display the proper content.


  • /signup should be accessible
  • /login should be accessible
  • /jobs/202228a1-a793-447d-861d-6c6a38e1cfef should be accessible
  • Add Test Case(s)
  • Lint
  • Test

πŸ‘¨β€πŸš€ Avatar

Given that a user creates a profile, when they access their profile, then they have the ability to select from a list of pre-chosen avatars.


  • Select Avatars
  • Add Avatar assets
  • Add Avatar Selection Modal
  • Add Ability to Select Avatar
  • Add Test Case(s)
  • Lint
  • Test

πŸ’¬ User Not Found Message

Given that a user attempts to log in, when the email address is not found in the DB, then a message should display that is different than "Invalid credentials."


  • Modify UserController
  • Add test case
  • Lint
  • Test

β›” No Job - No Call

Given that a user has 0 saved/hidden jobs, when the user clicks "Show Hidden/Saved Jobs", then the api call to the BE should not be made.


  • Add check for length
  • Add test case
  • Lint
  • Test

πŸ¦Έβ€β™‚οΈ Profile

Create a profile for a user

Stories

  • I should be able to log in if I'm a current user.
  • I should be able to create a new account.
  • I should be able to view my profile.
  • I should be able to log out of this device.
  • I should be able to log out of all devices.
  • I should be able to reset my password.
  • I should be able to edit my profile.

  • Add UserState to RootState
  • Add setIsLoggedIn() to UserAction
  • Create <Navigation /> component
  • Add <Header /> and link for LogIn to <Navigation />
  • Only display link for LogIn if user is not logged in
  • Create Login Page
  • Add basic email field
  • Add basic password field
  • Add basic login button
  • Add Title and Logo
  • Add Copyright to Login Page
  • Add basic Create an account button
  • Create User Controller
  • Handle creating a new user
  • Handle logging in a user
  • Handle logging out a user
  • Ability to Log In
  • Add LoginState to RootState
  • Add setUserType() to LoginAction
  • Create SignUp page
  • Ability to Create an Account
  • Style Login page
  • Style Signup page
  • Create <FormError /> component
  • Add <FormError /> to Login and Signup
  • Update validation messages
  • Mobile Optimized Login Page
  • Mobile Optimized Signup Page
  • Style Login link in <Navigation />
  • Add Login Cypress Test
  • Add Signup Cypress Test
  • When user isLoggedIn is true, send them back to "Search" but logged in
  • Do not allow user to sign up with existing credentials
  • Create Profile Page
  • Profile Link in Navigation (if Logged in)
  • Display un-styled name and email in Profile page
  • Add un-styled reset password button
  • Add initializeApplication() logic
  • Add un-styled edit button
  • Add un-styled log out / log out all buttons
  • Style Profile page
  • Create <Button /> component
  • Replace old buttons with new <Button />
  • Add Log Out functionality
  • Add Log Out All functionality
  • Add Reset Password Functionality
  • Add Edit functionality
  • Mobile Optimize Profile Page
  • Testing - Profile Page
  • Testing - Edit Profile
  • Testing - Reset Password
  • Testing - Log Out & Log Out All
  • No logging if in test
  • Handle confirmPassword validation - Create New User
  • Handle confirmPassword validation - Reset Password
  • Rename LoginResponse type
  • Create single "fetch" method in util.ts
  • Style <Button /> secondary style
  • Refactor <FormError /> into <Notification />
  • Ensure notificationMessage and notificationType are reset on initial load
  • Ability to reset message on <Notification />
  • Additional Logging Suppression in 'test'
  • Form Button Disabled State
  • Refactor Redux Reducers
  • Handle ErrorResponse on Log Out / Log Out All
  • Reset Password Server Side Validation
  • Server Side Password Validation - Sign Up
  • Check if need error catch statement logic on UserController
  • Double check no more// TODO comments
  • Fix ESLint Errors

⏹️ Redesign Button Component

Given that the design of GitHub Jobs is changing, when the Button component is displayed, then it is the new design.


Activate
Trash
Upload
Hover

  • Find inspiration to go off of
  • Rewrite Primary Button
  • Rewrite Secondary Button
  • Rewrite Danger Button
  • Smaller box-shadow
  • Adjust OptionsPanel
  • Adjust SearchInput
  • Adjust ProfileAccountDetails
  • Adjust ProfileAccountStats
  • Adjust Settings
  • Adjust ResetPassword
  • Adjust DeleteProfile
  • Adjust EditProfile
  • Remove 'OldButton'
  • Lint
  • Test
  • Fix Tests
  • Re-test

πŸ’» DB Jobs

Given that I see a list of jobs on GitHub Jobs, when a request is made, it's coming from the server and the database.


  • Create a JobsModel
  • Modify JobsController
  • Move daily job logic to Server
  • Remove FE fetchedAt Logic
  • Add FE TODOs
  • Add BE TODOs
  • Modify GET /jobs
  • Adjust DB to store Jobs as individual Jobs
  • Cypress Testing
  • Check TODO's
  • Fix ESLint Errors

βŒ› LoadingIndicator Stops Before Jobs Response Received

Given that there are no jobs and a request to /jobs is made from the app, when the screen displays, then the LoadingIndicator should be displayed until the response is sent back and results are ready to display to the user.


  • Adjust thunk
  • Add test case
  • Lint
  • Test

πŸ”” Icon Notification

Given that the Notification component uses react-toastify, when the Notification appears, then it should contain an icon along with some text.


  • FE - Figure out a way to make it work in TypeScript
  • Add Test Case
  • Lint
  • Test

πŸ’… Styled Components

Given that I'm a developer, and the code is getting large, when I use CSS, then it should be in the component file itself


  • Install styled-components
  • Add Cypress Visual Regression
  • Convert Button CSS
  • Convert Checkbox CSS
  • Convert Copyright CSS
  • Convert Header CSS
  • Convert Input CSS
  • Convert JobCard CSS
  • Convert LoadingIndicator CSS
  • Convert Navigation CSS
  • Convert Notification CSS
  • Convert OptionsPanel CSS
  • Convert Pagination CSS
  • Convert PaginationItem CSS
  • Convert PaginationMore CSS
  • Convert PaginationNavigation CSS
  • Convert ProfileDelete CSS
  • Convert ProfileDisplay CSS
  • Convert ProfileEdit CSS
  • Convert ProfileReset CSS
  • Convert ProfileSavedJobs CSS
  • Convert SearchInput CSS
  • Convert Details CSS
  • Convert Login CSS
  • Convert Search CSS
  • Convert Signup CSS
  • Analyze remaining CSS
  • Double Check Outstanding TODO's
  • Fix ESLint Errors

πŸ” Modify Search

Given that a user makes a search, when the BE is hit, then it does not hit the GitHub Jobs API, but makes a DB query.

Taken from #40.


  • BE - Modify GET /jobs/search to include DB query (No Location)
  • BE - Modify GET /jobs/search to include location
  • Cypress Testing
  • Double Check TODOs
  • BE - Ensure unique jobs
  • FE - Add period at end of notification about results.
  • Fix ESLint Errors
  • Test

πŸ“† Filter By Contract

Given that a user is on the Search page, when they want to search by jobs that are of type "Contract", then they have a checkbox to do so.


  • Add Contract option below "Full Time"
  • Add Test Case(s)
  • Lint
  • Test

βœ… OptionsPanel Search

Given that a user uses the OptionsPanel, when they make a selection, then they should have the ability to initiate a search from the OptionsPanel.


  • Create OptionsPanel Button
  • Add Search Functionality into OptionsPanel
  • Add Test Case
  • Lint
  • Test

πŸ’» Add MongoDB

Need to add back MongoDB support. Look to previous projects for guidance. Also create a cluster on MongoDB Atlas

Stories

  • Given that I am a GH Jobs user, when I use GH Jobs, then it should connect to a MongoDB server (not on localhost)

  • Replace Local MongoDB code
  • Create a cluster on MongoDB atlas
  • Allow access from anywhere
  • Replace production MONGODB_URL with cluster url
  • Remove env from git

βœ‰οΈ Signup - Welcome Email

Need to send a welcome email when someone joins GH Jobs

Stories

  • Given that I am a new user, when I sign up, I should get a welcome email.

  • Decide on Provider - "SendGrid"?
  • Enroll Provider
  • Install dependencies
  • Edit UserController to send email upon successful signup
  • Make sure NOT to send email if mode is "test"
  • Test out with new account
  • Decide on Welcome Email Template
  • Edit Email Template with Custom Welcome Copy
  • Double check no more// TODO comments
  • Fix ESLint Errors

πŸ“– CurrentPage Reset

Given that I'm not on page 1 on Search, when I go to view my SavedJobs, then the currentPage should be reset to 1.


  • Reset currentPage in thunk
  • Add Test Case
  • Lint
  • Test

🌐 Access Details with Direct URL

Given that a user opens a job link in a new tab, or accesses the url for a job directly, when the page loads, then it should display the Details page correctly (and not the BE response in JSON format).


  • Change url for Details page
  • Adjust stubs
  • Fix applicationError.spec.js
  • Fix details.spec.js
  • Fix directPageAccess.spec.js
  • Fix hiddenJobs.spec.js
  • Fix savedJobs.spec.js
  • Lint
  • Test

πŸ§ͺ Update Cypress

Given that I want to use Cypress for integration testing, when I open it, then it should be v4.12.1.


  • Update Cypress
  • Test

⚠️ React Error Boundary

Given that a user is in the application, when an error occurs, then the error boundary is displayed.

https://reactjs.org/docs/error-boundaries.html


  • Add Error Boundary
  • Add error to ApplicationState
  • Style ErrorFallback
  • Add Sentry
  • Report Error to Sentry
  • Reset Application State on button click
  • Remove Test Error
  • Add Test Case
  • Only initialize Sentry when not in test mode
  • Lint
  • Test

🎨 Redesign Profile Display

Given that I am a GitHub Jobs User, when I view my Profile, then I see the new Profile redesign.

Take inspiration from this example.


  • Add Hero
  • Add Account Details (Unstyled)
  • Add Account Details (Styled)
  • Add Account Stats (Unstyled)
  • Add Account Stats (Styled)
  • Remove Old Profile Sections
  • Ability to Edit in Page
  • Add Settings Button
  • Add Modal
  • Add Modal Content
  • Add Settings Modal
  • Ability to Log Out
  • Ability to Log Out All
  • Ability to Delete Profile
  • Ability to Reset Password
  • Style Modal
  • Mobile Optimization
  • Lint
  • Ability to View Saved Jobs
  • Ability to View Hidden Jobs
  • Update Test Cases
  • Test
  • Clean up Unused Files / Functions
  • Retest

Failed Tests

  • Hidden Jobs
  • Notification
  • Profile
  • Saved Jobs
  • Search

✏️ Hidden/Saved No Results Text

Given that a user is viewing the hidden/saved jobs, when 0 results come up (or there are 0 hidden/saved jobs), then the text should read "No results."


  • Edit Text
  • Add Test Case
  • Lint
  • Test

🌐 Domain Name

Hook up Heroku with domain: githubjobs.io

Stories

  • Given that I want to visit GH Jobs, when I view the site, then it should be hosted on githubjobs.io

  • Modify Heroku to be a Hobby dyno
  • Add custom DNS with Heroku and Hover
  • Change any url that was pointing to Heroku, and point it to new domain
  • Update whitelist (possibly not needed)

πŸ“„ Details Page Request

Given that a user clicks on the job link, when they land on the Details page, the client should request information from the server using that job's id.


  • FE - Modify FE to make request to BE
  • BE - Modify JobController to handle request for specific job
  • Fix Details when receiving data
  • Double Check TODOs
  • Lint
  • Fix Cypress Test
  • Test

Jobs API Broken

Chicago Gives Zurich Result - Actually this is just a straight up issue with the GitHub Jobs API. The service isn’t great, in my opinion, aside from just listing all the jobs they have available. For instance, full_time doesn’t work as a search, even if you follow their docs. Same with searches. It’s not very good. I plan to implement a new version that just takes all the jobs they have, and then any searches are automatically filtered based on my own filter/search logic.

⬇️ Account Details Bottom Margin

Given that a the Profile page is being viewed, when the content hits the bottom of the screen, then there is a bit of bottom margin.


  • Add bottom margin to Account Details
  • Lint
  • Test

Other Ideas

ROUGH IDEAS

  • User Profiles
  • Suggested Jobs
  • Ability to β€œSave” jobs for later
  • Ability to β€œThumbs Up” / β€œThumbs Down” jobs. Up => you see more of that in your suggestions. Down => you don’t see that job again.
  • Move away from the GitHub Jobs API, aside from collecting all new jobs it serves.
  • Redesign.
  • CSS in JS.
  • Better OptionsPanel / Search functionality

πŸ”₯ Remove Visual Regression

Given that visual regression doesn't work really (at least the plugin you're currently using), when you run npm test, then it shouldn't test using the plugin anymore.


  • Remove tests
  • Remove plugins
  • Remove commands
  • Uninstall package
  • Reinstall deps
  • Lint
  • Test

πŸ”₯ Delete Profile - Ability to Delete Own Profile

Users should be able to delete their profile if they choose to do so.

Stories

  • Given that I'm a current GH Jobs user, when I decide to permanently delete my user profile, then I should be able to do so.

  • Add isDeletingProfile to UserState
  • Add setIsDeletingProfile() to UserAction
  • Abstract ProfileReset
  • Abstract ProfileEdit
  • Abstract ProfileDisplay
  • Add delete profile button
  • Create ProfileDelete
  • Add prompt to confirm they are sure they want to do this
  • Modify UserController to allow for profile deletion
  • Add FE ability to delete user profile
  • Cypress Testing
  • Double Check Outstanding TODOs
  • Fix any ESLint Errors

πŸ”– SavedJobs by ID

Given that a user saves a job, when the request/response is sent/received, only the id field is saved, not the whole Job.

Born out of #35.

  • FE - Add - Modify FE to send id
  • FE - Remove - Modify FE to send id
  • BE - Modify BE to accept id
  • Edit savedJobs for all Users in DB
  • FE - Display Saved Jobs - Make Request to BE
  • BE - Handle Saved Jobs Request from FE
  • Finalize Functionality
  • Double Check TODOs
  • Lint
  • Test

πŸ’Ύ Save Jobs

Given that I am a GH Jobs user and I have already created a GH Jobs account, when I want to save a job and view it later, then I can do so by viewing my Profile.


  • Add savedJobs in UserState
  • Add addSavedJob() in UserAction
  • Add removeSavedJob() in UserAction
  • Double Check what is all being saved in localStorage (don't want user data)
  • Add Save Button on <JobCard />
  • Add savedJobs in UserModel
  • Modify UserControler to accept a PATCH to change the user's savedJobs
  • Purge existing database
  • Style Job Card
  • Mobile Optimize Job Card
  • Add setSavedJobs() to UserAction
  • Use 'setSavedJobs()' when user response comes back
  • Remove addSavedJob() and removeSavedJob()
  • Only Display "Save" button if user is logged in
  • Add FE Ability to Add a savedJob
  • Add FE Ability to Remove a savedJob
  • Add <Notification /> to Search
  • Ability to Save Jobs from Details
  • Add <Notification /> to Details
  • Add Saved Jobs view in Profile
  • Fix Cypress Tests
  • Fix NotificationError color
  • Style Saved Jobs View
  • Mobile Optimize Saved Jobs View
  • Cypress Testing
  • Double Check Outstanding TODO's
  • Fix ESLint Errors

🌐 Forward Heroku to GitHubJobs.io

As an original user, when I access the Heroku url, I should get forwarded to the githubjob.io domain.


  • BE - Add 308 Redirect in Server
  • Lint
  • Test
  • Log referrer
  • Add check for req.host === gh-jobs.herokuapp.com || www.githubjobs.io
  • Try using req.hostname

  • Contact Heroku Support?

πŸ™ˆ Hide Hidden Jobs in Search by Default

Given that a user has some hidden jobs, when a user makes a search, then the hidden jobs should not be returned in the search results.


  • Modify initializeApplication() logic
  • Change JobController to accept POST with body containing userId
  • Filter results on the JobController
  • FE - Add id to UserState
  • FE - Adjust Thunk to send userId to /jobs/search
  • BE - Adjust JobController for /jobs/search
  • Adjust /jobs stub
  • Adjust /jobs/search stub
  • Add Call to Get Jobs on Login
  • Add Call to Get Jobs on Log Out and Log Out All
  • Fix Test for HiddenJobs
  • Fix Test for Saved Jobs
  • Fix Test for Direct Page Access
  • Regression Test
  • Add Test Case to HiddenJobs
  • Add Test Case to Search
  • Lint
  • Test

⚠️ ErrorFallback Reset - Home

Given that an error occurs outside of the Home Page (Details for example), when the user clicks "Try again", then the url is redirected to /.


  • Add a redirect in the function
  • Add Test Case
  • Lint
  • Test

πŸ§ͺ Pagination Test Occasionally Fails

Probably just need to put a cy.wait() in there somewhere.

Stories

  • Given that I need to run tests on code, when I run the tests, then Pagination should only fail if something is broken, not because the test itself is broken.

  • Investigate Issue

  • Diagnose Isue

  • Implement Solution

πŸ”™ ProfileSavedJobs Return

Given that a user is viewing their saved jobs, when they want to return to the profile display page, then they should be able to do so.


  • Create back button
  • Finalize Functionality
  • Add test case
  • Prevent Form Submission
  • Lint
  • Test

πŸ™ˆ Hide Job

Given that the user sees a job they don't care for, when they click a "hide" button, then the job should not appear to them again, unless they go to the "Hidden Jobs" section of their profile and "unhide" it.


  • Add a "Hide" button to JobCard
  • Add a "Hide" button to Details
  • Add hiddenJobs (similar to savedJobs)
  • Add HiddenJobs profile view
  • FE - Make request to BE to hide job
  • BE - Handle request from FE to hide job
  • Finalize Functionality
  • Add test case(s)
  • Lint
  • Test

πŸ“§ Domain Email

Email should not be from my personal account, but from domain account


  • Buy Domain Email
  • Switch Personal Email to Domain Email
  • Verify on SendGrid

πŸ”” Better Notification

Given that I see an alert on GitHub Jobs, when it appears, it should be react-toastify.

https://fkhadra.github.io/react-toastify/introduction/


  • Install react-toastify
  • Convert current Notification to use react-toastify
  • Remove Notification occurances
  • Add 1 single Notification occurance
  • Remove unused styles / Restyle accordingly
  • Fix Cypress Tests
  • Ensure notifications disappear correctly
  • Outstanding TODO's
  • Fix ESLint Errors

πŸ™ˆ Hide Job Removes from Current List

Given that a user selects to hide a job, when they click the button, then the job is removed from the current view.


  • Adjust hide thunk
  • Ensure that pagination works correctly
  • Adjust HiddenJobs logic
  • Add Test Case(s)
  • Lint
  • Test

πŸ“ƒ ModalState

Given that Modal is a new component, when it is used, then it should have it's own state in Redux.


  • Abstract into ModalState
  • Lint
  • Fix imports
  • Add ModalState to RootState
  • Test

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.