# This is similar to netlify's _redirects file, but we're not using netlify at all
# So just keep that in mind. This is a hand-rolled thing.
# Basically, you should be able to use params as documented in path-to-regexp on both the from and to side
# These will also all apply to every HTTP method unless you specify a method as the first part of the line (comma-separated and all caps).

# I keep making this mistake 😅
/call                                                                 /calls

# Just a convenience for myself
/photo                                                                https://res.cloudinary.com/kentcdodds-com/image/upload/v1625699252/kent/profile

################# lol, nice
# not a single URL actually ends in .php... or .env
/(.*).php                                                               https://www.youtube.com/watch?v=dQw4w9WgXcQ
/(.*).env                                                               https://www.youtube.com/watch?v=dQw4w9WgXcQ
/ads.txt                                                                https://www.youtube.com/watch?v=dQw4w9WgXcQ
/boaform(.*)                                                            https://www.youtube.com/watch?v=dQw4w9WgXcQ
/setup.cgi                                                              https://www.youtube.com/watch?v=dQw4w9WgXcQ
/cgi-bin(.*)                                                            https://www.youtube.com/watch?v=dQw4w9WgXcQ
/s3cmd.ini                                                              https://www.youtube.com/watch?v=dQw4w9WgXcQ
/HNAP1(.*)                                                              https://www.youtube.com/watch?v=dQw4w9WgXcQ
# this is for phpmyadmin and php-my-admin stuff:
/php(.*)                                                                https://www.youtube.com/watch?v=dQw4w9WgXcQ
/db(.*)                                                                 https://www.youtube.com/watch?v=dQw4w9WgXcQ
/sql(.*)                                                                https://www.youtube.com/watch?v=dQw4w9WgXcQ
/.git(.*)                                                               https://www.youtube.com/watch?v=dQw4w9WgXcQ
(.*)/wp-includes/(.*)                                                   https://www.youtube.com/watch?v=dQw4w9WgXcQ
/api(.*)                                                                https://www.youtube.com/watch?v=dQw4w9WgXcQ
/Autodiscover(.*)                                                       https://www.youtube.com/watch?v=dQw4w9WgXcQ
/_ignition(.*)                                                          https://www.youtube.com/watch?v=dQw4w9WgXcQ
/solr(.*)                                                               https://www.youtube.com/watch?v=dQw4w9WgXcQ
/wp-content(.*)                                                         https://www.youtube.com/watch?v=dQw4w9WgXcQ
/ReportServer(.*)                                                       https://www.youtube.com/watch?v=dQw4w9WgXcQ
/currentsetting(.*)                                                     https://www.youtube.com/watch?v=dQw4w9WgXcQ
POST,DELETE,PATCH,PUT  /                                                https://www.youtube.com/watch?v=dQw4w9WgXcQ
/webfig(.*)                                                             https://www.youtube.com/watch?v=dQw4w9WgXcQ
/config(.*)                                                             https://www.youtube.com/watch?v=dQw4w9WgXcQ
/console(.*)                                                            https://www.youtube.com/watch?v=dQw4w9WgXcQ

################ old podcast URLs:
/chats-with-kent-podcast/seasons/01/episodes/growing-your-skills-and-career-through-teaching-with-ali-spittel                   /chats/01/01/growing-your-skills-and-career-through-teaching-with-ali-spittel
/chats-with-kent-podcast/seasons/01/episodes/establishing-your-personal-brand-with-cassidy-williams                             /chats/01/02/establishing-your-personal-brand-with-cassidy-williams
/chats-with-kent-podcast/seasons/01/episodes/realigning-your-model-of-react-after-hooks-with-dan-abramov                        /chats/01/03/realigning-your-model-of-react-after-hooks-with-dan-abramov
/chats-with-kent-podcast/seasons/01/episodes/a-rundown-of-whats-next-for-react-with-dan-abramov                                 /chats/01/04/a-rundown-of-whats-next-for-react-with-dan-abramov
/chats-with-kent-podcast/seasons/01/episodes/make-your-apps-resilient-finite-state-machines-with-david-khourshid                /chats/01/05/make-your-apps-resilient-finite-state-machines-with-david-khourshid
/chats-with-kent-podcast/seasons/01/episodes/creating-successful-mentor-relationships-with-emma-bostian                         /chats/01/06/creating-successful-mentor-relationships-with-emma-bostian
/chats-with-kent-podcast/seasons/01/episodes/funding-open-source-maintainers-using-ethical-advertising-with-eric-berry          /chats/01/07/funding-open-source-maintainers-using-ethical-advertising-with-eric-berry
/chats-with-kent-podcast/seasons/01/episodes/the-state-of-webassembly-with-lin-clark-and-till-schneidereit                      /chats/01/08/the-state-of-webassembly-with-lin-clark-and-till-schneidereit
/chats-with-kent-podcast/seasons/01/episodes/a-few-excellent-reasons-for-why-you-should-give-graphql-a-try-with-peggy-rayzis    /chats/01/09/a-few-excellent-reasons-for-why-you-should-give-graphql-a-try-with-peggy-rayzis
/chats-with-kent-podcast/seasons/01/episodes/there-arent-any-shortcuts-to-expertise-with-sara-vieira                            /chats/01/10/there-arent-any-shortcuts-to-expertise-with-sara-vieira
/chats-with-kent-podcast/seasons/01/episodes/become-intentional-with-your-time-with-scott-hanselman                             /chats/01/11/become-intentional-with-your-time-with-scott-hanselman
/chats-with-kent-podcast/seasons/01/episodes/you-can-learn-a-lot-for-the-low-price-of-your-ego-with-shawn-wang                  /chats/01/12/you-can-learn-a-lot-for-the-low-price-of-your-ego-with-shawn-wang
/chats-with-kent-podcast/seasons/01/episodes/getting-started-with-code-live-streaming-with-suz-hinton                           /chats/01/13/getting-started-with-code-live-streaming-with-suz-hinton
/chats-with-kent-podcast/seasons/01/episodes/lessons-learned-from-four-major-projects-with-shirley-wu                           /chats/01/14/lessons-learned-from-four-major-projects-with-shirley-wu
/chats-with-kent-podcast/seasons/02/episodes/lindsey-kopacz-chats-with-kent-about-a11y                                          /chats/02/01/lindsey-kopacz-chats-with-kent-about-a11y
/chats-with-kent-podcast/seasons/02/episodes/bianca-gandolfo-chats-with-kent-about-lifestyle-design                             /chats/02/02/bianca-gandolfo-chats-with-kent-about-lifestyle-design
/chats-with-kent-podcast/seasons/02/episodes/jenn-creighton-chats-with-kent-about-avoiding-an-apropcolypse                      /chats/02/03/jenn-creighton-chats-with-kent-about-avoiding-an-apropcolypse
/chats-with-kent-podcast/seasons/02/episodes/henry-zhu-chats-with-kent-about-the-human-side-of-open-source                      /chats/02/04/henry-zhu-chats-with-kent-about-the-human-side-of-open-source
/chats-with-kent-podcast/seasons/02/episodes/jen-luker-chats-with-kent-about-finding-inspiration-from-anywhere                  /chats/02/05/jen-luker-chats-with-kent-about-finding-inspiration-from-anywhere
/chats-with-kent-podcast/seasons/02/episodes/kelly-vaughn-chats-with-kent-about-personal-finance                                /chats/02/06/kelly-vaughn-chats-with-kent-about-personal-finance
/chats-with-kent-podcast/seasons/02/episodes/nader-dabit-chats-with-kent-about-keeping-an-optimistic-mindset                    /chats/02/07/nader-dabit-chats-with-kent-about-keeping-an-optimistic-mindset
/chats-with-kent-podcast/seasons/02/episodes/angie-jones-chats-with-kent-about-automated-visual-testing                         /chats/02/08/angie-jones-chats-with-kent-about-automated-visual-testing
/chats-with-kent-podcast/seasons/02/episodes/erik-rasmussen-chats-with-kent-about-maintaining-open-source-libraries             /chats/02/09/erik-rasmussen-chats-with-kent-about-maintaining-open-source-libraries
/chats-with-kent-podcast/seasons/02/episodes/ken-wheeler-chats-with-kent-about-going-for-challenging-opportunities              /chats/02/10/ken-wheeler-chats-with-kent-about-going-for-challenging-opportunities
/chats-with-kent-podcast/seasons/02/episodes/eve-porcello-chats-with-kent-about-sustainably-expanding-skills                    /chats/02/11/eve-porcello-chats-with-kent-about-sustainably-expanding-skills
/chats-with-kent-podcast/seasons/02/episodes/laurie-barth-chats-with-kent-about-growing-outside-of-your-comfort-zone            /chats/02/12/laurie-barth-chats-with-kent-about-growing-outside-of-your-comfort-zone
/chats-with-kent-podcast/seasons/03/episodes/alex-anderson-creates-web-based-spaceship-controls                                 /chats/03/01/alex-anderson-creates-web-based-spaceship-controls
/chats-with-kent-podcast/seasons/03/episodes/amelia-wattenberger-breaks-the-ux-mold                                             /chats/03/02/amelia-wattenberger-breaks-the-ux-mold
/chats-with-kent-podcast/seasons/03/episodes/courtney-mccleve-on-developing-empathy                                             /chats/03/03/courtney-mccleve-on-developing-empathy
/chats-with-kent-podcast/seasons/03/episodes/dr-michaela-greiler-makes-code-reviews-your-teams-superpower                       /chats/03/04/dr-michaela-greiler-makes-code-reviews-your-teams-superpower
/chats-with-kent-podcast/seasons/03/episodes/talia-nassi-on-testing-in-production                                               /chats/03/05/talia-nassi-on-testing-in-production
/chats-with-kent-podcast/seasons/03/episodes/justin-mcmurdie-breaks-apps-into-micro-services                                    /chats/03/06/justin-mcmurdie-breaks-apps-into-micro-services
/chats-with-kent-podcast/seasons/03/episodes/michael-chan-teaches-you-how-to-break-into-the-industry                            /chats/03/07/michael-chan-teaches-you-how-to-break-into-the-industry
/chats-with-kent-podcast/seasons/03/episodes/michael-chan-encapsulates-state                                                    /chats/03/08/michael-chan-encapsulates-state
/chats-with-kent-podcast/seasons/03/episodes/preethi-kasireddy-reinvents-herself                                                /chats/03/09/preethi-kasireddy-reinvents-herself
/chats-with-kent-podcast/seasons/03/episodes/saron-yitbareks-path-into-tech                                                     /chats/03/10/saron-yitbareks-path-into-tech
/chats-with-kent-podcast/seasons/03/episodes/serene-yew-provides-mentorship                                                     /chats/03/11/serene-yew-provides-mentorship
/chats-with-kent-podcast/seasons/03/episodes/tanner-linsley-separates-ui-state-and-server-state                                 /chats/03/12/tanner-linsley-separates-ui-state-and-server-state

/chats-with-kent-podcast                                                                                                        /chats
# podcast catch-all
/chats-with-kent-podcast/seasons/:seasonNumber/:path*       /chats/:seasonNumber

/workshops/past                                            /workshops
/workshops/remix-fundamentals                              /workshops/web-app-fundamentals

# some people go to this page for some reason:
/post/:slug*                                                             /blog/:slug*
/rss.xml                                                                 /blog/rss.xml
/feed                                                                    /blog/rss.xml
/rss                                                                     /blog/rss.xml
/blog/rss                                                                /blog/rss.xml
/blog/feed                                                               /blog/rss.xml
/blog/blog/rss.xml                                                       /blog/rss.xml
# no idea why, but I get a lot of 404s for this route. I'm pretty sure they're looking for Scott's post...
/bring-kindness-back-to-open-source                                      https://www.hanselman.com/blog/bring-kindness-back-to-open-source

/humans.txt                                                              /credits

# during local dev, sometimes the service worker is installed from other apps.
/mockServiceWorker.js                                                    /404
# and I guess we've still got some zombie service workers from the old site 🤷‍♂️
/sw.js                                                                   /404
# Gatsby site used to have stuff at this route and we don't anymore so...
/static(.*)                                                              /404
/page-data(.*)                                                           /404

# I didn't bring over my writing blog
/writing/:slug*                                                          https://kentcdodds-old.netlify.app/writing/:slug*

############################## some old redirects we should hang onto...
/blog/always-use-memo-your-context-value                                /blog/how-to-optimize-your-context-value
/blog/moist-programming                                                 /blog/aha-programming
/aha                                                                    /blog/aha-programming
/blog/aha                                                               /blog/aha-programming
/workshops/advanced-react-component-patterns                            /workshops/advanced-react-patterns
/workshops/hooks                                                        /workshops/react-hooks
/workshops/build-react-apps                                             /workshops/build-react-apps-1
/workshops/build-react-apps-advanced                                    /workshops/build-react-apps-3
/workshops/web-app-fundamentals                                         /workshops/web-app-fundamentals-part-1
/blog/make-test-utils-for-your-app                                      /blog/test-utils
/blog/what-code-comments-can-teach-us-about-scaling-a-codebase          /blog/colocation
/blog/avoid-nesting-in-tests                                            /blog/avoid-nesting-when-youre-testing
/podcast                                                                /chats-with-kent-podcast
/blog/state-colocation-will-make-your-app-faster                        /blog/state-colocation-will-make-your-react-app-faster
/blog/why-your-team-needs-testing-java-script-com                       /blog/why-your-team-needs-testing-javascript-com
/cohorts                                                                /clubs
/learning-clubs                                                         /clubs
/blog/how-to-write-a-react-component-in-type-script                     /blog/how-to-write-a-react-component-in-typescript
/blog/how-to-write-a-type-narrowing-identity-function-in-typescript     /blog/how-to-write-a-constrained-identity-function-in-typescript

/talks/the-web-s-next-transformation                                    /talks/the-web-s-next-transition
/talks/fullstack-components                                             /talks/full-stack-components

# Old workshops
/workshops/advanced-react-hooks                                         https://epicreact.dev/advanced-hooks
# /workshops/advanced-react-patterns                                      https://epicreact.dev/patterns
/workshops/cypress-fundamentals                                         https://testingjavascript.com/playlists/install-configure-and-script-cypress-for-javascript-web-applications-fca9
/workshops/react-fundamentals                                           https://epicreact.dev/fundamentals
/workshops/react-hooks                                                  https://epicreact.dev/hooks
/workshops/react-performance                                            https://epicreact.dev/performance
/workshops/testing-fundamentals                                         https://testingjavascript.com/playlists/fundamentals-of-testing-in-javascript-2c8a
/workshops/testing-node-apps                                            https://testingjavascript.com/playlists/test-node-js-backends-1f90
/workshops/testing-react-apps                                           https://epicreact.dev/testing

# Joel whoopsies
/chats-with-kent-podcast/seasons/01/episodes/01                         /chats-with-kent-podcast/seasons/01/episodes/growing-your-skills-and-career-through-teaching-with-ali-spittel

# Rewritten posts
/blog/application-state-management                                      /blog/application-state-management-with-react
/blog/how-to-start-testing                                              /blog/how-to-add-testing-to-an-existing-project
/blog/super-simple-start-to-serverless                                  /blog/super-simple-start-to-netlify-functions
/blog/unit-vs-integration-vs-e2e-tests                                  /blog/static-vs-unit-vs-integration-vs-e2e-tests

/chats-with-kent-podcast/seasons/01/episodes/creating-successful-mentor-relationships-with-emma-wedekind        /chats-with-kent-podcast/seasons/01/episodes/creating-successful-mentor-relationships-with-emma-bostian
