{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":761425868,"defaultBranch":"main","name":"frontend-infra-workshops","ownerLogin":"Khan","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-02-21T21:04:22.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/15455?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1712270379.0","currentOid":""},"activityList":{"items":[{"before":"3ba0c620aaeb6c2ee27cf7a2d1bc19f0b1ef1de1","after":"46091a220bba1749f95ad4f44f1579ceecf98a7f","ref":"refs/heads/main","pushedAt":"2024-04-22T15:21:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"Show the exercise/solution beside the content for each lesson (#7)\n\n## Summary:\r\nThis PR updates the site to render the lesson content that was previously in markdown files side-by-side with the exercise/solution for each lesson. The .md files have been converted to .mdx to make it easy to render the existing content with minimal changes. This change will make it easier for developer to consume the content.\r\n\r\nIssue: None\r\n\r\n## Test plan:\r\n- npm run dev\r\n- load http://localhost:5173/\r\n- navigate to the different lessons\r\n- click on \"Exercise\" and \"Solution\" to toggle between the two\r\n\r\n\"Screen\n\nAuthor: kevinbarabash\n\nReviewers: jeresig\n\nRequired Reviewers:\n\nApproved By: jeresig\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/7","shortMessageHtmlLink":"Show the exercise/solution beside the content for each lesson (#7)"}},{"before":"90e2ba217f8ab31696f6d3d573feda5cdec43ec6","after":"8a335ea0095826d74483fbf2778ef1fc1c28e781","ref":"refs/heads/mdx","pushedAt":"2024-04-04T23:09:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"fix typescript errors","shortMessageHtmlLink":"fix typescript errors"}},{"before":"e98878ce33cc85e0971f7e56bd23dde93018294a","after":"90e2ba217f8ab31696f6d3d573feda5cdec43ec6","ref":"refs/heads/mdx","pushedAt":"2024-04-04T23:01:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"fix lint","shortMessageHtmlLink":"fix lint"}},{"before":"c5c61686da9bd03e89a4f3fb9d1c910e7744a6f9","after":"e98878ce33cc85e0971f7e56bd23dde93018294a","ref":"refs/heads/mdx","pushedAt":"2024-04-04T22:49:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"revert some of the changes to package.json, update README.md to use yarn","shortMessageHtmlLink":"revert some of the changes to package.json, update README.md to use yarn"}},{"before":null,"after":"c5c61686da9bd03e89a4f3fb9d1c910e7744a6f9","ref":"refs/heads/mdx","pushedAt":"2024-04-04T22:39:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"show the exercise/solution beside the content for each lesson","shortMessageHtmlLink":"show the exercise/solution beside the content for each lesson"}},{"before":"bd954550daf75ffb6b85004378c61b9bfbd96f14","after":"3ba0c620aaeb6c2ee27cf7a2d1bc19f0b1ef1de1","ref":"refs/heads/main","pushedAt":"2024-04-03T21:09:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.6: Lesson 3 - Avoid Using Context (#6)\n\n## Summary:\nThis lesson is closely related to lesson 2 and actually reused the solution code from that lesson as this lesson's exercise code.\n\nIssue: FEI-5465\n\n## Test plan:\n- yarn dev\n- http://localhost:5173/react-render-perf/lesson-03/exercise\n- profile, click on the color picker a lot, see that the perf is good\n- http://localhost:5173/react-render-perf/lesson-03/solution\n- profile, click on the color picker a lot, see that the perf is unchanged\n\nAuthor: kevinbarabash\n\nReviewers: jaredly, kevinbarabash, somewhatabstract\n\nRequired Reviewers:\n\nApproved By: jaredly\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/6","shortMessageHtmlLink":"FEI-5465.6: Lesson 3 - Avoid Using Context (#6)"}},{"before":"6943a53bce6058c332d9b8e1039ca71a9ea58155","after":"6ae00a34be38924435964fb0b7962bb3e47181eb","ref":"refs/heads/fei-5465.6","pushedAt":"2024-04-03T21:05:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"add notes about why singletones are better than context, update swatch.tsx to use an effect when calling onColorChange","shortMessageHtmlLink":"add notes about why singletones are better than context, update swatc…"}},{"before":"122db846053baee586281a9ac69dd421f0e07887","after":"bd954550daf75ffb6b85004378c61b9bfbd96f14","ref":"refs/heads/main","pushedAt":"2024-04-03T20:37:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.5: Lesson 4 - Splitting up large components (#5)\n\n## Summary:\r\nLesson 4 covers how splitting up large components into smaller components can help avoid unnecessary renders.\r\n\r\nIssue: FEI-5465\r\n\r\n## Test plan:\r\n- yarn dev\r\n- http://localhost:5173/react-render-perf/lesson-04/exercise\r\n- profile, click the \"click me!\" buttons, see that LargeComponent takes +800ms to re-render\r\n- http://localhost:5173/react-render-perf/lesson-04/solution\r\n- profile, click the \"click me!\" buttons, see that only of the three shape components re-render and only takes about +250ms\n\nAuthor: kevinbarabash\n\nReviewers: jaredly, kevinbarabash\n\nRequired Reviewers:\n\nApproved By: jaredly\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/5","shortMessageHtmlLink":"FEI-5465.5: Lesson 4 - Splitting up large components (#5)"}},{"before":"35ad677a3e84e6d8282ed0080e7a4fd51efcbcd5","after":"01be875fd4bff501d76cc8e93d5ee66d90a449bf","ref":"refs/heads/fei-5465.5","pushedAt":"2024-03-25T16:34:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"address fedback, add content about mocking child components in unit test","shortMessageHtmlLink":"address fedback, add content about mocking child components in unit test"}},{"before":"cfde1f9cf860742be9009ac1eed355e5dafd902b","after":"35ad677a3e84e6d8282ed0080e7a4fd51efcbcd5","ref":"refs/heads/fei-5465.5","pushedAt":"2024-03-25T14:46:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"add an example","shortMessageHtmlLink":"add an example"}},{"before":"531177e13131659cfcf3977882a43c9485df9751","after":"122db846053baee586281a9ac69dd421f0e07887","ref":"refs/heads/main","pushedAt":"2024-03-25T14:42:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.4: Lesson 2 - Prevent Context From Rerendering (#4)\n\n## Summary:\r\nLesson 2 shows how to minimize context induced re-renders by having the context store an instance of an event emitter that never gets replaced. Changes to the state in the context are now effected by emitting event and listening for them.\r\n\r\nIssue: FEI-5465\r\n\r\n## Test plan:\r\n- yarn dev\r\n- profile http://localhost:5173/react-render-perf/lesson-02/exercise using React dev tools, see that the updates are in the 50ms range\r\n- profile http://localhost:5173/react-render-perf/lesson-02/solution using React dev tools, see that the updates are in the sub 1ms range\r\n\r\n**exercise**\r\n\"Screen\r\n\r\n**solution**\r\n\"Screen\n\nAuthor: kevinbarabash\n\nReviewers: jaredly, kevinbarabash\n\nRequired Reviewers:\n\nApproved By: jaredly\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/4","shortMessageHtmlLink":"FEI-5465.4: Lesson 2 - Prevent Context From Rerendering (#4)"}},{"before":"6d9857299a8863286731535884ac50561093fc0a","after":"cfde1f9cf860742be9009ac1eed355e5dafd902b","ref":"refs/heads/fei-5465.5","pushedAt":"2024-02-27T16:02:21.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"add an example","shortMessageHtmlLink":"add an example"}},{"before":"1f451e019c185683afbb9189090102996c1c1fa8","after":"6943a53bce6058c332d9b8e1039ca71a9ea58155","ref":"refs/heads/fei-5465.6","pushedAt":"2024-02-27T16:01:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.6: Lesson 3 - Avoid Using Context","shortMessageHtmlLink":"FEI-5465.6: Lesson 3 - Avoid Using Context"}},{"before":"148347b97b99dfb9a2d62f0e91515d33e70a57a2","after":"25f36f8dd66399736f07e68579e3c4ea52a28ad2","ref":"refs/heads/fei-5465.4","pushedAt":"2024-02-27T16:01:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"write README.md for lesson 2, tweak solution code to align better with README.md","shortMessageHtmlLink":"write README.md for lesson 2, tweak solution code to align better wit…"}},{"before":"6bada6532dd68d4dbb15cd330ae6fa8fc1915531","after":"531177e13131659cfcf3977882a43c9485df9751","ref":"refs/heads/main","pushedAt":"2024-02-27T15:59:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.3: Lesson 1 - memoizing expensive components (#3)\n\n## Summary:\r\nThis PR fleshes out the structure of the react-render-perf/ folder a bit more and adds the first lesson. The lesson consists of a README.md with some info along with a short exercise to apply that info. The other lessons will be added in future PRs. I have thought about using MDX so that the lesson info could appear side-by-side with the component(s) that need to be updated similar to how Epic React is set up, but I decided to defer that for now.\r\n\r\nIssue: FEI-5465\r\n\r\nTODO:\r\n- [x] update the `Child` component to include a prop that's an object\r\n- [x] update the README.md in react-render-perf/ with information on how to install React Dev tools as well as how to capture a profiling snapshot using the \"Profile\" tab\r\n- [x] move `fib` into a shared utils file\r\n\r\n## Test plan:\r\n- visit http://localhost:5173/react-render-perf/lesson-01/exercise\r\n- profile using React Dev tools, click the button a few times, see that each time the render is very long\r\n- visit http://localhost:5173/react-render-perf/lesson-01/solution\r\n- profile using React Dev tools, click the button a few times, see that each time the render is very short\n\nAuthor: kevinbarabash\n\nReviewers: jaredly, kevinbarabash\n\nRequired Reviewers:\n\nApproved By: jaredly\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/3","shortMessageHtmlLink":"FEI-5465.3: Lesson 1 - memoizing expensive components (#3)"}},{"before":"a7143c35ae892438c21883b51999b291a95ae57e","after":"045ef358c206ab3dbaf8a4aa8a103cd4fccf2e05","ref":"refs/heads/fe-5465.3","pushedAt":"2024-02-27T15:57:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"address feedback","shortMessageHtmlLink":"address feedback"}},{"before":null,"after":"1f451e019c185683afbb9189090102996c1c1fa8","ref":"refs/heads/fei-5465.6","pushedAt":"2024-02-26T22:25:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.6: Lesson 3 - Avoid Using Context","shortMessageHtmlLink":"FEI-5465.6: Lesson 3 - Avoid Using Context"}},{"before":"7b5b4f7b99d411d7dcca575eb976411176a70e37","after":"6d9857299a8863286731535884ac50561093fc0a","ref":"refs/heads/fei-5465.5","pushedAt":"2024-02-26T21:54:34.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"add an example","shortMessageHtmlLink":"add an example"}},{"before":"5904d591d692dfc91d99461132e6df93523cf984","after":"7b5b4f7b99d411d7dcca575eb976411176a70e37","ref":"refs/heads/fei-5465.5","pushedAt":"2024-02-26T19:06:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"Make the exercise/solution more interesting for Lesson 4","shortMessageHtmlLink":"Make the exercise/solution more interesting for Lesson 4"}},{"before":null,"after":"5904d591d692dfc91d99461132e6df93523cf984","ref":"refs/heads/fei-5465.5","pushedAt":"2024-02-26T18:39:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.5: Lesson 04 - Splitting up large components","shortMessageHtmlLink":"FEI-5465.5: Lesson 04 - Splitting up large components"}},{"before":"853e0a308a5696a9a01d15e1bded3284fb2467dc","after":"148347b97b99dfb9a2d62f0e91515d33e70a57a2","ref":"refs/heads/fei-5465.4","pushedAt":"2024-02-26T16:06:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"write README.md for lesson 2, tweak solution code to align better with README.md","shortMessageHtmlLink":"write README.md for lesson 2, tweak solution code to align better wit…"}},{"before":null,"after":"853e0a308a5696a9a01d15e1bded3284fb2467dc","ref":"refs/heads/fei-5465.4","pushedAt":"2024-02-23T22:30:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.4: Lesson 2 - Prevent Context From Rerendering","shortMessageHtmlLink":"FEI-5465.4: Lesson 2 - Prevent Context From Rerendering"}},{"before":"67775d46fbb6f0a197d5935fa922235a6848c2d9","after":"a7143c35ae892438c21883b51999b291a95ae57e","ref":"refs/heads/fe-5465.3","pushedAt":"2024-02-23T17:44:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"do TODOs","shortMessageHtmlLink":"do TODOs"}},{"before":"cecc9020d03834142a550336bb455699d9620166","after":"67775d46fbb6f0a197d5935fa922235a6848c2d9","ref":"refs/heads/fe-5465.3","pushedAt":"2024-02-23T16:07:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEi-5465.3: Create lesson 01 - memoizing expensive components","shortMessageHtmlLink":"FEi-5465.3: Create lesson 01 - memoizing expensive components"}},{"before":null,"after":"cecc9020d03834142a550336bb455699d9620166","ref":"refs/heads/fe-5465.3","pushedAt":"2024-02-22T21:51:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.3: Create README.md for lesson 01","shortMessageHtmlLink":"FEI-5465.3: Create README.md for lesson 01"}},{"before":"8ded53ccbb88b4a7932401381f6d1ee73cc16dfa","after":"6bada6532dd68d4dbb15cd330ae6fa8fc1915531","ref":"refs/heads/main","pushedAt":"2024-02-22T16:21:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.2: Add basic routing using React Router v5 (#2)\n\n## Summary:\r\nBefore we can start adding examples of different React perf issues, we need a basic site layout to house the examples. This PR routing using React Router v5. I know it's out of date, but I didn't want to learn something new just for this workshop repo so I went with the familiar. I've also removed the .css and asset files.\r\n\r\nIssue: FEI-5465\r\n\r\n## Test plan:\r\n- yarn dev\r\n- visit http://localhost:5173\r\n- click around and check that the navigation works\r\n\r\n\"Screen\r\n\"Screen\n\nAuthor: kevinbarabash\n\nReviewers: jeresig, somewhatabstract\n\nRequired Reviewers:\n\nApproved By: jeresig\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/2","shortMessageHtmlLink":"FEI-5465.2: Add basic routing using React Router v5 (#2)"}},{"before":"6a24c61a70047a15daff185ac595694d3bd35cde","after":"ec16b320eea7dc53dc82b2d43f05cd36459f189a","ref":"refs/heads/fei-5465.2","pushedAt":"2024-02-22T16:14:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.2: Add basic routing using React Router v5","shortMessageHtmlLink":"FEI-5465.2: Add basic routing using React Router v5"}},{"before":"76fbbf1a2472f7408a55d03c9a3be5e97cdc4003","after":"8ded53ccbb88b4a7932401381f6d1ee73cc16dfa","ref":"refs/heads/main","pushedAt":"2024-02-22T16:10:12.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.1: Config eslint and CI in workshop repo (#1)\n\n## Summary:\r\nThe initial workshop is on React render performance and won't have any unit tests associated with it so I'm not bothering to set up jest. This PR sets up eslint using our custom config and plugin. It also updates the styling of already checked in files.\r\n\r\nIssue: FEI-5465\r\n\r\n## Test plan:\r\n- yarn build\r\n- yarn typecheck\r\n- yarn lint\r\n- check to see that these checks run correctly on CI as well\n\nAuthor: kevinbarabash\n\nReviewers: kevinbarabash, jeresig, somewhatabstract\n\nRequired Reviewers:\n\nApproved By: jeresig\n\nChecks: ✅ Lint (ubuntu-latest, 20.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 20.x)\n\nPull Request URL: https://github.com/Khan/frontend-infra-workshops/pull/1","shortMessageHtmlLink":"FEI-5465.1: Config eslint and CI in workshop repo (#1)"}},{"before":null,"after":"6a24c61a70047a15daff185ac595694d3bd35cde","ref":"refs/heads/fei-5465.2","pushedAt":"2024-02-21T22:27:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"FEI-5465.2: Add basic routing using React Router v5","shortMessageHtmlLink":"FEI-5465.2: Add basic routing using React Router v5"}},{"before":"20281c3133e6970a34d02123849ea53c7ea8acf8","after":"dc48c1072a07ecba0dd8e7375bceed7d4da41649","ref":"refs/heads/fei-5465.1","pushedAt":"2024-02-21T22:07:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"kevinbarabash","name":"Kevin Barabash","path":"/kevinbarabash","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1044413?s=80&v=4"},"commit":{"message":"use the same file extensions for lint and lint:ci","shortMessageHtmlLink":"use the same file extensions for lint and lint:ci"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAENyl-JQA","startCursor":null,"endCursor":null}},"title":"Activity · Khan/frontend-infra-workshops"}