Skip to content
Open
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
99 changes: 1 addition & 98 deletions public/data/job-openings.json
Original file line number Diff line number Diff line change
@@ -1,98 +1 @@
[
{
"title": "Software Engineering Intern",
"type": "Internship",
"content": {
"summary": "Developing accessible policy analysis tools",
"location": "Remote (US-based preferred)",
"duration": "Spring, Summer, or Fall semester (possibility of extension)",
"description": "As a Software Engineering Intern at PolicyEngine, you will contribute to making policy analysis tools more accessible, from our web app users to our internal team of developers. This internship offers a unique opportunity to work on cutting-edge technology in the realm of public policy analysis.",
"responsibilities": [
"Develop and enhance Python libraries",
"Build new applications using emerging technologies like generative AI",
"Work on React-based front-end in the policyengine-app repo",
"Contribute to Flask/Python back-end development in the policyengine-api and policyengine-core libraries",
"Develop and review code collaboratively in GitHub"
],
"qualifications": "Currently pursuing a degree in Computer Science or related field; proficiency in Python and JavaScript; familiarity with React and Flask is a plus.",
"benefits": "Paid stipend, flexible remote work, mentorship from experienced developers, and exposure to the intersection of technology and public policy."
}
},
{
"title": "Policy Modeling Intern",
"type": "Internship",
"content": {
"summary": "Powering PolicyEngine's core rules engine",
"location": "Remote (US, UK, or Canada-based preferred)",
"duration": "Spring, Summer, or Fall semester (possibility of extension)",
"description": "As a Policy Modeling Intern, you will play a crucial role in developing and enhancing the models of tax and benefit policies that power PolicyEngine's rules engine, the heart of our software. This internship provides a unique opportunity to directly impact the accuracy and comprehensiveness of our policy analysis tools.",
"responsibilities": [
"Augment the policyengine-us, policyengine-uk, and policyengine-canada Python packages",
"Model additional tax and benefit rules and regulations for the US, UK, and Canada",
"Monitor legislative and policy proposals",
"Strategize the integration of new policies into PolicyEngine",
"Develop and review code collaboratively in GitHub"
],
"qualifications": "Currently pursuing a degree in Economics, Public Policy, or related field; strong analytical skills; proficiency in Python; interest in tax and benefit systems.",
"benefits": "Paid stipend, flexible remote work, exposure to cutting-edge policy modeling techniques, and the opportunity to contribute to impactful open-source projects."
}
},
{
"title": "Data Science Intern",
"type": "Internship",
"content": {
"summary": "Revealing quantitative implications of policy reforms",
"location": "Remote (US-based preferred)",
"duration": "Spring, Summer, or Fall semester (possibility of extension)",
"description": "As a Data Science Intern at PolicyEngine, you will work on revealing the quantitative implications of the most visible policy reforms. This role offers a unique blend of data analysis, visualization, and policy research, allowing you to make a tangible impact on public understanding of complex policy issues.",
"responsibilities": [
"Work with policy analysts to analyze tax and benefit policies",
"Create custom analyses using advanced statistical methods",
"Develop mini-apps and interactive visualizations using tools like Plotly and Streamlit",
"Contribute to data-driven policy reports and blog posts",
"Collaborate with the team to improve data processing and analysis pipelines"
],
"qualifications": "Currently pursuing a degree in Data Science, Statistics, or related field; strong programming skills in Python; experience with data visualization libraries; interest in public policy.",
"benefits": "Paid stipend, flexible remote work, opportunity to work with large-scale policy datasets, and exposure to real-world applications of data science in policy analysis."
}
},
{
"title": "Economic Research Intern",
"type": "Internship",
"content": {
"summary": "Applying PolicyEngine to influence policy debates",
"location": "Remote (US, UK, or Canada-based preferred)",
"duration": "Spring, Summer, or Fall semester (possibility of extension)",
"description": "As an Economic Research Intern at PolicyEngine, you will apply our software to discussions that influence top public policy debates. This role offers a unique opportunity to bridge economic theory with practical policy analysis, contributing to some of the most pressing economic discussions of our time.",
"responsibilities": [
"Research and summarize economic data and academic research",
"Contribute to policy analysis discussions and write blog posts",
"Use PolicyEngine tools to model and analyze proposed economic policies",
"Engage with policymakers and research institutions",
"Assist in preparing reports and presentations for various stakeholders"
],
"qualifications": "Currently pursuing a degree in Economics, Public Policy, or related field; strong analytical and writing skills; familiarity with economic research methods; interest in applied policy analysis.",
"benefits": "Paid stipend, flexible remote work, opportunity to contribute to high-level policy discussions, and exposure to cutting-edge economic modeling techniques."
}
},
{
"title": "Communications Intern",
"type": "Internship",
"content": {
"summary": "Amplifying PolicyEngine's impact through strategic communication",
"location": "Remote (US-based preferred)",
"duration": "Spring, Summer, or Fall semester (possibility of extension)",
"description": "As a Communications Intern at PolicyEngine, you will play a crucial role in amplifying our impact by connecting diverse audiences to relevant policy insights. This internship offers a unique opportunity to develop your strategic communications skills while contributing to important policy discussions.",
"responsibilities": [
"Assist in distributing PolicyEngine's findings and analyses",
"Engage in digital communications, including managing social media accounts",
"Create content for and help organize webinars and online events",
"Monitor media coverage of PolicyEngine and relevant policy topics",
"Maintain and expand contact lists for media, policymakers, and other stakeholders",
"Contribute to the development of communication strategies for new policy analyses"
],
"qualifications": "Currently pursuing a degree in Communications, Journalism, Public Relations, or related field; excellent writing and editing skills; familiarity with social media platforms; interest in public policy and data-driven communication.",
"benefits": "Paid stipend, flexible remote work, opportunity to build a professional network in policy and media circles, and hands-on experience in strategic communications for a cutting-edge policy organization."
}
}
]
[]
5 changes: 2 additions & 3 deletions src/PolicyEngine.jsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import Home from "./pages/Home";
import Research from "./pages/Research";
import About from "./pages/About";
import Jobs from "./pages/Jobs";
import Supporters from "./pages/Supporters";
import {
Navigate,
Expand Down Expand Up @@ -60,6 +59,7 @@ import EducationPage from "./pages/learn/EducationPage";
import OpenSourcePage from "./pages/learn/OpenSourcePage";
import BenefitAccessPage from "./pages/learn/BenefitAccessPage";
import { updateDeprecatedSearchParams } from "./routing/updateDeprecatedSearchParams";
import Jobs from "./pages/Jobs";

const PolicyPage = lazy(() => import("./pages/PolicyPage"));
const HouseholdPage = lazy(() => import("./pages/HouseholdPage"));
Expand Down Expand Up @@ -299,10 +299,9 @@ export default function PolicyEngine() {
// If the path is /, redirect to /[countryId]
// If the path is /[countryId], render the homepage
// If the path is /[countryId]/about, render the about page
// If the path is /[countryId]/jobs, render the jobs page
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor: This should be added back if the page is being rendered

// If the path is /[countryId]/research, render the research page
// If the path is not recognized, redirect to /[countryId]

// If the path is /[countryId]/jobs, render the jobs page
return (
<ConfigProvider
theme={{
Expand Down
7 changes: 0 additions & 7 deletions src/__tests__/pages/About.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,6 @@ describe("About Page", () => {
// Check for the section with a heading "Team"
const teamSection = screen.getByRole("heading", { name: /Team/i });
expect(teamSection).toBeInTheDocument();

// Check that the link to jobs page exists
const link = screen.getByRole("link", {
name: /Learn about opportunities to join us./i,
});
expect(link).toBeInTheDocument();
expect(link).toHaveAttribute("href", expect.stringContaining("/jobs"));
});

test("each founder has an image, a name, and a description", async () => {
Expand Down
2 changes: 1 addition & 1 deletion src/layout/Header.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ import {
DownOutlined,
DeploymentUnitOutlined,
TeamOutlined,
UserAddOutlined,
BankOutlined,
UserAddOutlined,
} from "@ant-design/icons";
import { loginOptions, logoutOptions } from "../auth/authUtils";
import { Dropdown } from "antd";
Expand Down
7 changes: 3 additions & 4 deletions src/pages/About.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ import style from "../style/index.js";
import PageHeader from "../layout/PageHeader.jsx";
import { founders, staff, advisors } from "../data/staff.js";
import useDisplayCategory from "../hooks/useDisplayCategory.js";
import { Link, useLocation } from "react-router-dom";
import { Helmet } from "react-helmet";
import { Link } from "react-router-dom";
import useCountryId from "../hooks/useCountryId.js";

export default function About() {
const location = useLocation();
const pathParts = location.pathname.split("/");
const countryId = pathParts[1]; // Assumes the countryId is always the second segment in the path
const countryId = useCountryId();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

accolade: Thanks for using this hook


Object.keys(founders).map((founder) => {
return founder;
Expand Down
67 changes: 28 additions & 39 deletions src/pages/Jobs.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import React, { useState, useEffect } from "react";
import Header from "../layout/Header";
import React, { useEffect, useState } from "react";
import Footer from "../layout/Footer";
import Header from "../layout/Header";
import { HoverBox } from "../layout/HoverBox";
import PageHeader from "../layout/PageHeader";
import Section from "../layout/Section";
import style from "../style";
import PageHeader from "../layout/PageHeader";
import { HoverBox } from "../layout/HoverBox";

function ApplyButton() {

Check warning on line 9 in src/pages/Jobs.jsx

View workflow job for this annotation

GitHub Actions / CI (22.x)

'ApplyButton' is defined but never used
return (
<a
href="https://docs.google.com/forms/d/e/1FAIpQLSdjIWrBXgQ95Pnogl5KfRnvcHbkflmPi2SHC-e3vR1jHS9VyA/viewform?usp=sf_link"
Expand Down Expand Up @@ -130,20 +130,6 @@
benefit access.
</p>
</PageHeader>
<Section backgroundColor={style.colors.WHITE}>
<h2>Ready to make an impact?</h2>
<p>
At PolicyEngine, we&apos;re revolutionizing public policy analysis and
benefit access with open-source software. Be part of a team
that&apos;s shaping the future of economic policy and making a real
difference in society.
</p>
<ApplyButton />
{/* Update this section depending on open positions */}
<p>
We&apos;re currently accepting applications for internship positions.
</p>
</Section>
<Section backgroundColor={style.colors.LIGHT_GRAY}>
<h2>About PolicyEngine</h2>
<p>
Expand All @@ -154,31 +140,34 @@
budgets, economic growth, poverty, and inequality.
</p>
</Section>
{fullTimePositions.length > 0 && (
{jobOpenings.length === 0 ? (
<Section backgroundColor={style.colors.WHITE}>
<h2>Full-Time Positions</h2>
{fullTimePositions.map((position, index) =>
renderJobSection(position, index, true),
)}
<h2>Current Openings</h2>
<p>
PolicyEngine does not currently have job openings. Please check back
later.
</p>
</Section>
)}
{internshipPositions.length > 0 && (
<Section backgroundColor={style.colors.LIGHT_GRAY}>
<h2>Internship opportunities</h2>
{internshipPositions.map((position, index) =>
renderJobSection(position, index, false),
) : (
<>
{fullTimePositions.length > 0 && (
<Section backgroundColor={style.colors.WHITE}>
<h2>Full-Time Positions</h2>
{fullTimePositions.map((position, index) =>
renderJobSection(position, index, true),
)}
</Section>
)}
</Section>
{internshipPositions.length > 0 && (
<Section backgroundColor={style.colors.LIGHT_GRAY}>
<h2>Internship opportunities</h2>
{internshipPositions.map((position, index) =>
renderJobSection(position, index, false),
)}
</Section>
)}
</>
)}
<Section backgroundColor={style.colors.WHITE}>
<h2>Take the next step</h2>
<p>
If you&apos;re passionate about transforming public policy analysis
and want to contribute to meaningful change, we&apos;d love to hear
from you.
</p>
<ApplyButton />
</Section>
<Footer />
</div>
);
Expand Down
Loading