diff --git a/app/src/Router.tsx b/app/src/Router.tsx
index efc450ad..c734b3b2 100644
--- a/app/src/Router.tsx
+++ b/app/src/Router.tsx
@@ -9,6 +9,7 @@ import { SimulationCreationFlow } from './flows/simulationCreationFlow';
import DashboardPage from './pages/Dashboard.page';
import DonatePage from './pages/Donate.page';
import HomePage from './pages/Home.page';
+import AIMLPage from './pages/ML.page';
import PoliciesPage from './pages/Policies.page';
import PopulationsPage from './pages/Populations.page';
import PrivacyPage from './pages/Privacy.page';
@@ -142,6 +143,10 @@ const router = createBrowserRouter(
path: 'terms',
element: ,
},
+ {
+ path: 'ai-ml',
+ element: ,
+ },
{
path: 'methodology',
element:
Methodology page
,
diff --git a/app/src/assets/ai-analysis.png b/app/src/assets/ai-analysis.png
new file mode 100644
index 00000000..2a14b886
Binary files /dev/null and b/app/src/assets/ai-analysis.png differ
diff --git a/app/src/assets/us-household-ai.png b/app/src/assets/us-household-ai.png
new file mode 100644
index 00000000..cfcea4f1
Binary files /dev/null and b/app/src/assets/us-household-ai.png differ
diff --git a/app/src/components/TwoColumnView.tsx b/app/src/components/TwoColumnView.tsx
index e57af7e6..ed15089e 100644
--- a/app/src/components/TwoColumnView.tsx
+++ b/app/src/components/TwoColumnView.tsx
@@ -1,4 +1,4 @@
-import { Grid, Paper, Title } from '@mantine/core';
+import { Box, Grid, Paper, Title } from '@mantine/core';
import { colors, spacing, typography } from '@/designTokens';
interface TwoColumnViewProps {
@@ -20,29 +20,31 @@ const TwoColumnView = ({ title, leftColumn, rightColumn, backgroundColor }: TwoC
};
return (
-
-
- {title}
-
-
- {leftColumn}
- {rightColumn}
-
-
+
+
+ {title}
+
+
+ {leftColumn}
+ {rightColumn}
+
+
+
);
};
diff --git a/app/src/components/shared/static/CardsWithHeader.tsx b/app/src/components/shared/static/CardsWithHeader.tsx
index 3e7af154..33128113 100644
--- a/app/src/components/shared/static/CardsWithHeader.tsx
+++ b/app/src/components/shared/static/CardsWithHeader.tsx
@@ -11,8 +11,6 @@ export function CardsWithHeader({ containerTitle, cards }: CardsContainerProps)
return (
-
-
-
- {title}
-
-
+
+
+
+ {title}
+
+
-
+
-
+
-
-
- {description}
-
-
-
+
+
+ {description}
+
+
+
+
);
}
diff --git a/app/src/components/shared/static/TextCardWithHeader.tsx b/app/src/components/shared/static/TextCardWithHeader.tsx
index 6bfd5649..8a320d6f 100644
--- a/app/src/components/shared/static/TextCardWithHeader.tsx
+++ b/app/src/components/shared/static/TextCardWithHeader.tsx
@@ -29,7 +29,7 @@ export const TitleCardWithHeader: React.FC = ({
textColor = colors.text.inverse;
break;
case 'gray':
- resolvedBackgroundColor = colors.gray[200];
+ resolvedBackgroundColor = colors.gray[100];
textColor = colors.text.primary;
break;
case 'white':
@@ -47,7 +47,7 @@ export const TitleCardWithHeader: React.FC = ({
{/* Card with content */}
-
+
{sections.map((section, idx) => (
<>
diff --git a/app/src/pages/ML.page.tsx b/app/src/pages/ML.page.tsx
new file mode 100644
index 00000000..00696d68
--- /dev/null
+++ b/app/src/pages/ML.page.tsx
@@ -0,0 +1,137 @@
+import { Box } from '@mantine/core';
+import aiAnalysisImg from '@/assets/ai-analysis.png';
+import usHouseholdAiImg from '@/assets/us-household-ai.png';
+import CalloutWithImage from '@/components/shared/static/CalloutWithImage';
+import { CardsWithHeader } from '@/components/shared/static/CardsWithHeader';
+import PageHeader from '@/components/shared/static/PageHeader';
+import { TitleCardWithHeader } from '@/components/shared/static/TextCardWithHeader';
+import TwoColumnView from '@/components/TwoColumnView';
+import { spacing } from '@/designTokens';
+
+export default function AIMLPage() {
+ const leftColumnContent = (
+ <>
+ PolicyEngine integrates large language models with our computational tax-benefit engine to
+ transform complex calculations into clear explanations.
+
+
+ For household calculations, we process thousands of intermediate values across tax and benefit
+ programs, then use Anthropic's Claude API to generate plain-language explanations of
+ eligibility, amounts, and potential changes.
+
+
+ For policy analysis, we leverage GPT-4 to weave narratives from our computational results,
+ explaining reforms in terms anyone can understand - from simplified `ELI5` explanations to
+ detailed technical analyses for policy experts.
+ >
+ );
+
+ const rightColumnContent = (
+
+ );
+
+ return (
+
+
+
+ console.log('clicked')}
+ imageSrc={usHouseholdAiImg}
+ imageAlt="AI Explanations Tool Preview"
+ />
+
+
+
+
+
+
+
+ Watch our AI Demo
+
+
+
+
+ );
+}
diff --git a/app/src/styles/stylesheets/RichTextBlock.css b/app/src/styles/stylesheets/RichTextBlock.css
index 6b8516c2..dec83673 100644
--- a/app/src/styles/stylesheets/RichTextBlock.css
+++ b/app/src/styles/stylesheets/RichTextBlock.css
@@ -2,7 +2,7 @@
provides no way to provide styling to child components natively */
.rich-text-block p {
- font-family: Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif;
+ font-family: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.625;
margin-bottom: 16px;