Skip to content
This repository was archived by the owner on May 13, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: PR

on:
pull_request:
branches: [main]
push:
branches: [main]

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile
- run: bun run build

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile
- run: bun run lint
21 changes: 19 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,27 @@ Thumbs.db
*.log

# Data/cache
data/
.cache/
# data/ is gitignored except for the stub fixtures committed for build/CI.
data/*
!data/households
data/households/*
!data/households/cliff_demo.json
!data/households/all_households.json

# Node.js / React
node_modules/
dist/
.vite/
.vite/

# Next.js
.next/
out/
next-env.d.ts
*.tsbuildinfo

# Vercel
.vercel

# Env
.env*.local
3 changes: 3 additions & 0 deletions src/index.css → app/globals.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
@import "tailwindcss";
@import "@policyengine/ui-kit/theme.css";

/* PolicyEngine Design System - appv2 colors */
:root {
/* Primary Colors - Teal (from PolicyEngine appv2 designTokens) */
Expand Down
40 changes: 40 additions & 0 deletions app/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import type { Metadata, Viewport } from 'next';
import './globals.css';

export const metadata: Metadata = {
title: 'Understanding ACA Health Coverage Reforms | PolicyEngine',
description:
'Modeling how the scheduled expiration of IRA enhancements affects health insurance costs.',
icons: {
icon: '/favicon.svg',
},
};

export const viewport: Viewport = {
width: 'device-width',
initialScale: 1,
};

export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<head>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link
rel="preconnect"
href="https://fonts.gstatic.com"
crossOrigin="anonymous"
/>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
</head>
<body>{children}</body>
</html>
);
}
9 changes: 9 additions & 0 deletions app/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use client';

import dynamic from 'next/dynamic';

const App = dynamic(() => import('@/App'), { ssr: false });

export default function HomePage() {
return <App />;
}
1,272 changes: 1,272 additions & 0 deletions bun.lock

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions data/households/all_households.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"_stub": "Run `python precompute_households.py` to regenerate with real PolicyEngine output.",
"florida_family": {
"household_info": { "_stub": true },
"income_axis": [],
"ptc_baseline_2026": [],
"ptc_ira_2026": [],
"ptc_700fpl_2026": [],
"medicaid": [],
"chip": []
},
"texas_single": {
"household_info": { "_stub": true },
"income_axis": [],
"ptc_baseline_2026": [],
"ptc_ira_2026": [],
"ptc_700fpl_2026": [],
"medicaid": [],
"chip": []
},
"california_single_parent": {
"household_info": { "_stub": true },
"income_axis": [],
"ptc_baseline_2026": [],
"ptc_ira_2026": [],
"ptc_700fpl_2026": [],
"medicaid": [],
"chip": []
},
"pennsylvania_couple": {
"household_info": { "_stub": true },
"income_axis": [],
"ptc_baseline_2026": [],
"ptc_ira_2026": [],
"ptc_700fpl_2026": [],
"medicaid": [],
"chip": []
}
}
25 changes: 25 additions & 0 deletions data/households/cliff_demo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"household_info": {
"age": 45,
"location": "Lebanon County, PA",
"fpl_percent": 650,
"state": "PA",
"_stub": "Run `python precompute_cliff_household.py` to regenerate with real PolicyEngine output."
},
"at_650_fpl": {
"income_2025": 0,
"income_2026": 0,
"slcsp_2025": 0,
"slcsp_2026": 0,
"ptc_2025_ira": 0,
"ptc_2026_ira": 0,
"ptc_2026_baseline": 0,
"ptc_2026_700fpl": 0
},
"income_axis": [],
"ptc_baseline_2026": [],
"ptc_ira_2026": [],
"ptc_700fpl_2026": [],
"medicaid": [],
"chip": []
}
41 changes: 41 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
import nextTypescript from 'eslint-config-next/typescript';
import { defineConfig, globalIgnores } from 'eslint/config';

export default defineConfig([
...nextCoreWebVitals,
...nextTypescript,
{
rules: {
'@typescript-eslint/no-unused-vars': [
'warn',
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
],
'react/no-unescaped-entities': 'off',
'@next/next/no-img-element': 'off',
// Pre-existing React 18 patterns that this migration should not rewrite.
'react-hooks/set-state-in-effect': 'warn',
'react-hooks/static-components': 'warn',
},
},
{
files: ['src/app/layout.tsx'],
rules: {
'@next/next/no-page-custom-font': 'off',
},
},
globalIgnores([
'.next/**',
'out/**',
'build/**',
'coverage/**',
'dist/**',
'next-env.d.ts',
'public/**',
'data/**',
'aca_calc/**',
'pages/**',
'notebooks/**',
'tests/**',
]),
]);
16 changes: 0 additions & 16 deletions index.html

This file was deleted.

11 changes: 11 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
// Pin the workspace root so Turbopack does not silently pick up a stray
// lockfile from a parent directory during local development or CI.
turbopack: {
root: process.cwd(),
},
};

export default nextConfig;
Loading
Loading