Milestone 1
Create a job board that pulls the latest job postings from HackerNews. You will use the HackerNews API to pull down a list of post IDs for the latest job posts, fetch metadata for the latest 9, display them, and allow the user to load more.
You can use the GET /jobstories endpoint to get a list of the latest job post IDs, and the GET /item/<POST_ID> endpoint to get the metadata for an individual post.
URL: https://hacker-news.firebaseio.com/v0/jobstories.json
GET /jobstories
Example response: [30000051,29996298,29992568,29985735,29982031,...]
GET /item/${SinglePostID}.json
Parameter | Type | Description |
---|---|---|
id |
number |
Required. Id of each item to fetch |
Example response (with URL):
{ "by": "some-user", "id": 1234567, "score": 1, "time": 1642593662, "title": "AcmeCo Is Hiring Frontend engineers", "type": "job", "url": "https://jobs.lever.co/acmeco/123" }
- The latest 9 job postings are displayed along with the company name,
- Company name (and YC(22), if present) is displayed at the top of the card
- The Is hiring... text should be displayed in the centre of the card
- The date (in whichever day/month/year format you'd like) should be displayed at the bottom of the card
- If the job metadata includes a URL, clicking a card should open the URL in a new tab
- If the job metadata does not include a URL, clicking a card should open https://news.ycombinator.com/item?id=<POST_ID> in a new tab
- Clicking 'Load more' should fetch and display the next 6 job posts
- The post data.title includes both the company name and information on the role as a single string: you will need to parse these to format the card correctly.
- You should only fetch the metadata for the latest 9 posts on load, and 6 more every time the user presses 'Load more'
- data.title from the GET /item/<POST_ID> endpoint is nearly always in the format COMPANY_NAME [(YC21)] Is hiring.... If you come across other formats (e.g. COMPANY_NAME is looking for) you can choose to either ignore these edge cases or handle them
Milestone 2
Your PM has asked you to create the most annoying signup form in the world: a form that has 4 fields but on a series of 5 different screens. Your name, email, job role, date of birth, and password will be entered separately into the site:
- Back links appear on every screen other than the first one, going back to the step the user was just on
- Input is required on every screen prior to proceeding to the next.
- On the last screen, provide a submit button that calls a handleSubmit({ name: ..., email: ..., password: ... }) function passing in the values of all the fields
- Show a success screen
Connect the data from Milestone 1 and Milestone 2
- Save the profile information in the browser memory.
- Any job post that has the keywords matching the job role in the profile should have a ‘star’ icon next to the job post.
- For example, if the user enters ‘React’ in his job role, then any react-related post should be displayed like: