diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json
index c2dc838ac24..e419c72e16a 100644
--- a/client/i18n/locales/english/translations.json
+++ b/client/i18n/locales/english/translations.json
@@ -93,7 +93,9 @@
"link-account": "Link Account",
"unlink-account": "Unlink Account",
"update-card": "Update your card",
- "donate-now": "Donate Now"
+ "donate-now": "Donate Now",
+ "confirm-amount": "Confirm amount",
+ "skip-advertisement": "Skip Advertisement"
},
"landing": {
"big-heading-1": "Learn to code — for free.",
@@ -578,6 +580,7 @@
"other-support": "If there is some other way you'd like to support our charity and its mission that isn't listed here, or if you have any questions at all, please email Quincy at quincy@freecodecamp.org.",
"bear-progress-alt": "Illustration of an adorable teddy bear with a pleading expression holding an empty money jar.",
"bear-completion-alt": "Illustration of an adorable teddy bear holding a large trophy.",
+ "flying-bear": "Illustration of an adorable teddy bear wearing a graduation cap and flying with a Supporter badge.",
"crucial-contribution": "Your contribution will be crucial in creating resources that empower millions of people to learn new skills and support their families.",
"support-benefits-title": "Benefits from becoming a Supporter:",
"support-benefits-1": "No more donation prompt popups",
@@ -598,7 +601,14 @@
"community-achivements-3": "Merged <0>2,7530> code contributions into our open source repositories on GitHub",
"community-achivements-4": "Translated <0>2,106,2030> words to make our curriculum and tutorials more accessible to speakers of many world languages",
"as-you-see": "As you can see, we're getting things done. So you can rest assured that we'll put your donations to good use.",
- "get-benefits": "Get the benefits and the knowledge that you’re helping our charity change education for the better. Become a Supporter today."
+ "get-benefits": "Get the benefits and the knowledge that you’re helping our charity change education for the better. Become a supporter today.",
+ "modal-benefits-title": "Support us",
+ "help-us-more-certifications": "Help us build more certifications",
+ "remove-donation-popups": "Remove donation popups",
+ "help-millions-learn": "Help millions of people learn",
+ "reach-goals-faster": "Reach your goals faster",
+ "remove-distractions": "Remove distractions",
+ "animation-description": "This is a 20 second animated advertisement to encourage campers to become supporters of freeCodeCamp. The animation starts with a teddy bear who becomes a supporter. As a result, distracting pop-ups disappear and the bear gets to complete all of its goals. Then, it graduates and becomes an education super hero helping people around the world."
},
"report": {
"sign-in": "You need to be signed in to report a user",
diff --git a/client/src/assets/images/donation-bear-animation.svg b/client/src/assets/images/donation-bear-animation.svg
new file mode 100644
index 00000000000..4d632b80720
--- /dev/null
+++ b/client/src/assets/images/donation-bear-animation.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/client/src/assets/images/supporter-bear.svg b/client/src/assets/images/supporter-bear.svg
new file mode 100644
index 00000000000..3735c62e87c
--- /dev/null
+++ b/client/src/assets/images/supporter-bear.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/client/src/components/Donation/donation-modal-body.tsx b/client/src/components/Donation/donation-modal-body.tsx
new file mode 100644
index 00000000000..af20a74154c
--- /dev/null
+++ b/client/src/components/Donation/donation-modal-body.tsx
@@ -0,0 +1,306 @@
+import { Modal } from '@freecodecamp/react-bootstrap';
+import { Col, Row } from '@freecodecamp/ui';
+import React, { useEffect, useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import { useFeature } from '@growthbook/growthbook-react';
+import BearProgressModal from '../../assets/images/components/bear-progress-modal';
+import BearBlockCompletion from '../../assets/images/components/bear-block-completion-modal';
+import { closeDonationModal } from '../../redux/actions';
+import { Spacer } from '../helpers';
+import { PaymentContext } from '../../../../shared/config/donation-settings'; //
+import donationAnimation from '../../assets/images/donation-bear-animation.svg';
+import supporterBear from '../../assets/images/supporter-bear.svg';
+import MultiTierDonationForm from './multi-tier-donation-form';
+import { ModalBenefitList } from './donation-text-components';
+
+type RecentlyClaimedBlock = null | { block: string; superBlock: string };
+
+type DonationModalBodyProps = {
+ activeDonors?: number;
+ closeDonationModal: typeof closeDonationModal;
+ recentlyClaimedBlock: RecentlyClaimedBlock;
+ executeGA: (arg: { event: string; action: string }) => void;
+};
+
+const Illustration = ({
+ recentlyClaimedBlock,
+ showAnimation
+}: {
+ recentlyClaimedBlock: RecentlyClaimedBlock;
+ showAnimation?: boolean;
+}) => {
+ const { t } = useTranslation();
+ if (showAnimation) {
+ return (
+
+ );
+ } else
+ return recentlyClaimedBlock ? (
+
+ ) : (
+
+ );
+};
+
+function ModalHeader({
+ recentlyClaimedBlock,
+ showHeaderAndFooter,
+ donationAttempted,
+ showForm,
+ donationAnimationFlag
+}: {
+ recentlyClaimedBlock: RecentlyClaimedBlock;
+ showHeaderAndFooter: boolean;
+ donationAttempted: boolean;
+ showForm: boolean;
+ donationAnimationFlag: boolean;
+}) {
+ const { t } = useTranslation();
+ if (!showHeaderAndFooter || donationAttempted) {
+ return null;
+ } else if (!donationAnimationFlag) {
+ return (
+
+