diff --git a/public/data/job-openings.json b/public/data/job-openings.json index 95ebf9a29..fe51488c7 100644 --- a/public/data/job-openings.json +++ b/public/data/job-openings.json @@ -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." - } - } -] +[] diff --git a/src/PolicyEngine.jsx b/src/PolicyEngine.jsx index 91b8627a3..85e5e1837 100644 --- a/src/PolicyEngine.jsx +++ b/src/PolicyEngine.jsx @@ -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, @@ -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")); @@ -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 // 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 ( { // 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 () => { diff --git a/src/layout/Header.jsx b/src/layout/Header.jsx index 6a4e4917f..d78d130ee 100644 --- a/src/layout/Header.jsx +++ b/src/layout/Header.jsx @@ -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"; diff --git a/src/pages/About.jsx b/src/pages/About.jsx index 072113377..e49e59f90 100644 --- a/src/pages/About.jsx +++ b/src/pages/About.jsx @@ -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(); Object.keys(founders).map((founder) => { return founder; diff --git a/src/pages/Jobs.jsx b/src/pages/Jobs.jsx index 36fc5e711..bf754fdb4 100644 --- a/src/pages/Jobs.jsx +++ b/src/pages/Jobs.jsx @@ -1,10 +1,10 @@ -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() { return ( @@ -130,20 +130,6 @@ export default function Jobs() { benefit access.

-
-

Ready to make an impact?

-

- At PolicyEngine, we're revolutionizing public policy analysis and - benefit access with open-source software. Be part of a team - that's shaping the future of economic policy and making a real - difference in society. -

- - {/* Update this section depending on open positions */} -

- We're currently accepting applications for internship positions. -

-

About PolicyEngine

@@ -154,31 +140,34 @@ export default function Jobs() { budgets, economic growth, poverty, and inequality.

- {fullTimePositions.length > 0 && ( + {jobOpenings.length === 0 ? (
-

Full-Time Positions

- {fullTimePositions.map((position, index) => - renderJobSection(position, index, true), - )} +

Current Openings

+

+ PolicyEngine does not currently have job openings. Please check back + later. +

- )} - {internshipPositions.length > 0 && ( -
-

Internship opportunities

- {internshipPositions.map((position, index) => - renderJobSection(position, index, false), + ) : ( + <> + {fullTimePositions.length > 0 && ( +
+

Full-Time Positions

+ {fullTimePositions.map((position, index) => + renderJobSection(position, index, true), + )} +
)} -
+ {internshipPositions.length > 0 && ( +
+

Internship opportunities

+ {internshipPositions.map((position, index) => + renderJobSection(position, index, false), + )} +
+ )} + )} -
-

Take the next step

-

- If you're passionate about transforming public policy analysis - and want to contribute to meaningful change, we'd love to hear - from you. -

- -