Meet Leni Manaa-Hoppenworth

Leni smiling at the camera

Leni Manaa-Hoppenworth is the first Filipina to serve on the Chicago City Council, representing the 48th ward. She serves as the Cook County Democratic Party Committeewoman for the 48th ward. As Committeewoman, Leni founded the 48th Ward Democratic organization.Leni is a small-business owner, community organizer, and public servant dedicated to championing progressive Democratic values.Read more about Leni here.

About Leni

Leni smiling at the camera
  • First Filipina to serve on the Chicago City Council

  • Cook County Democratic Party Committeewoman

  • Founder of Indivisible Illinois 9th District

  • Co-founder of Indivisible Illinois and ILVOTE

  • Founding Director of Operations for the IL Chapter of the Women’s March

  • Small-business owner since 2003

  • Mom of three Chicago Public School graduates

  • Licensed healthcare provider

  • Daughter of Filipino immigrants

  • Proud member of the LGBTQ+ community

Leni and her family on a bench with blue skies behind them

More About Leni...

Leni Manaa-Hoppenworth is a small-business owner, community organizer, and public servant dedicated to championing progressive Democratic values. She is an independent voice committed to reimagining the Democratic Party.Leni is the first Filipina to serve on the Chicago City Council, representing the 48th ward. In City Hall, Leni is deeply committed to the values that health, housing, and safety are human rights and that caring for our whole community leads to safety for everyone. Leni has sponsored and co-sponsored over 280 pieces of legislation, including the Green Social Housing ordinance, which provides Chicago with a new tool for creating affordable housing.Leni serves as the Cook County Democratic Party Committeewoman for the 48th ward. As Committeewoman, Leni founded the 48th Ward Democratic organization.Leni was the co-founder of Indivisible Illinois, where she collaborated with individuals and organizations with both rural and urban interests for the benefit of the entire state and coordinated grassroots efforts to knock on doors for progressive Democrats like US Congresswoman Lauren Underwood and Governor JB Pritzker.Leni was the founder of Indivisible Illinois 9th District (Indivisible IL9). Under Leni's leadership Indivisible IL9 got out the vote for Democrats both locally and nationally, and endorsed such initiatives as the Peace Book Ordinance, and the Empowering Communities for Public Safety ordinance (ECPS), which places police accountability in the hands of the people.Leni is the former Director of Operations for the Illinois Chapter of the Women’s March on Washington and helped mobilize 10,000 Illinoisans to Washington, DC in defense of women’s rights, including and especially reproductive rights and bodily autonomy for all.Leni founded ILVOTE, a state-wide organization with the mission to help the electorate stay informed and engaged in every election and was awarded the Peggy A. Montes Unsung Heroine Award of Cook County for her work at ILVOTE.Leni has been a small business owner for over 20 years. She was awarded the Kurt Mathiasson Award for community leadership by the Andersonville Chamber of Commerce for her work as a co-chair of the Diversity, Equity and Inclusion (DEI) Committee. Her business was also an early adopter of Chicago Therapy Collective’s Hire Trans Now initiative, which advocates for policies that help reduce barriers to employment for trans people, especially people of color.Leni is a Chicago Public School alum, mother of three Chicago Public School graduates, and former Local School Council Representative. She is an avid supporter of the arts, a tango dancer, and former board member of multiple dance theaters. Leni is a licensed healthcare provider and former Cook County Hospital employee. Leni is a proud member of the LGBTQ+ community.

Volunteer With Us!

Voting Info

And remember: In Illinois, you can register to vote right at the polling location, even on Election Day!

Election Protection Hotlines

Have questions about voter registration deadlines, requesting mail-in ballots, or how to vote in-person during early voting or on Election Day?Call or text the numbers below to speak with a trained Election Protection volunteer:

  • English 866-OUR-VOTE / 866-687-8683

  • Spanish/English 888-VE-Y-VOTA / 888-839-8682

  • Asian Languages/English 888-API-VOTE / 888-274-8683

  • Arabic/English 844-YALLA-US / 844-925-5287

  • Find More Election Protection Info Here

Find more voter protection resources here.

Upcoming Events

Here are upcoming opportunities to get involved with the team, both virtually and in-person, as well as community events where you can meet Leni — click on any event for more details.Google Calendar users, you can also add these events to your own calendar so you won’t forget!Note: If you are having trouble viewing the calendar on this page, view it here.

Endorsements

Leni has received endorsements for IL 9th District Democratic State Central Committeewoman from the following:

Marie Newman
Former US Congresswoman

Fritz Kaegi
Cook County Assessor

Hoan Huynh
IL State Representative
13th District

Bonnie Kahn Ognisanti
Niles Township Supervisor

Michelle Jett
Champaign County Director of Administration

Lamont Robinson
Chicago’s 4th Ward Alderman

Julia Ramirez
Chicago’s 12th Ward Alderwoman

Jeylú Gutiérrez
Chicago’s 14th Ward Alderwoman

Byron Sigcho-Lopez
Chicago’s 25th Ward Alderman and Committeeperson

Rossana Rodríguez Sánchez
Chicago’s 33rd Ward Alderwoman and Committeewoman

Emma Mitts
Chicago’s 37th Ward Alderman and 7th District State Central Committeewoman

Patrick Watson
Former 6th District State Central Committeeman

Debby Pope
CPS Board Member, District 2B

Karen Zaccor
CPS Board Member, District 4B

Marie Benyamin
Niles Township Trustee

Donald Gelfund
Niles Township Trustee

48th Ward Democratic Organization

Indivisible Niles-Maine Township

Indivisible Skokie-Morton Grove-Lincolnwood

To view the candidates that Leni has endorsed in the 2026 primary, see Leni's Endorsements

Newsletter Signup

Subscribe below to the Friends of Leni Manaa-Hoppenworth email list and get regular updates from the campaign and Leni herself!

* indicates required
(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[5]='MMERGE5';ftypes[5]='zip';fnames[3]='ADDRESS';ftypes[3]='address';fnames[4]='PHONE';ftypes[4]='phone';}(jQuery));var $mcj = jQuery.noConflict(true); // SMS Phone Multi-Country Functionality if(!window.MC) { window.MC = {}; } window.MC.smsPhoneData = { defaultCountryCode: 'US', programs: [], smsProgramDataCountryNames: [] }; function getCountryUnicodeFlag(countryCode) { return countryCode.toUpperCase().replace(/./g, (char) => String.fromCodePoint(char.charCodeAt(0) + 127397)) }; // HTML sanitization function to prevent XSS function sanitizeHtml(str) { if (typeof str !== 'string') return ''; return str .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, ''') .replace(/\//g, '/'); } // URL sanitization function to prevent javascript: and data: URLs function sanitizeUrl(url) { if (typeof url !== 'string') return ''; const trimmedUrl = url.trim().toLowerCase(); if (trimmedUrl.startsWith('javascript:') || trimmedUrl.startsWith('data:') || trimmedUrl.startsWith('vbscript:')) { return '#'; } return url; } const getBrowserLanguage = () => { if (!window?.navigator?.language?.split('-')[1]) { return window?.navigator?.language?.toUpperCase(); } return window?.navigator?.language?.split('-')[1]; }; function getDefaultCountryProgram(defaultCountryCode, smsProgramData) { if (!smsProgramData || smsProgramData.length === 0) { return null; } const browserLanguage = getBrowserLanguage(); if (browserLanguage) { const foundProgram = smsProgramData.find( (program) => program?.countryCode === browserLanguage, ); if (foundProgram) { return foundProgram; } } if (defaultCountryCode) { const foundProgram = smsProgramData.find( (program) => program?.countryCode === defaultCountryCode, ); if (foundProgram) { return foundProgram; } } return smsProgramData[0]; } function updateSmsLegalText(countryCode, fieldName) { if (!countryCode || !fieldName) { return; } const programs = window?.MC?.smsPhoneData?.programs; if (!programs || !Array.isArray(programs)) { return; } const program = programs.find(program => program?.countryCode === countryCode); if (!program || !program.requiredTemplate) { return; } const legalTextElement = document.querySelector('#legal-text-' + fieldName); if (!legalTextElement) { return; } // Remove HTML tags and clean up the text const divRegex = new RegExp(']*>', 'gi'); const fullAnchorRegex = new RegExp('', 'g'); const anchorRegex = new RegExp('(.*?)'); const template = program.requiredTemplate.replace(divRegex, ''); legalTextElement.textContent = ''; const parts = template.split(/(.*?<\/a>)/g); parts.forEach(function(part) { if (!part) { return; } const anchorMatch = part.match(/(.*?)<\/a>/); if (anchorMatch) { const linkElement = document.createElement('a'); linkElement.href = sanitizeUrl(anchorMatch[1]); linkElement.target = sanitizeHtml(anchorMatch[2]); linkElement.textContent = sanitizeHtml(anchorMatch[3]); legalTextElement.appendChild(linkElement); } else { legalTextElement.appendChild(document.createTextNode(part)); } }); } function generateDropdownOptions(smsProgramData) { if (!smsProgramData || smsProgramData.length === 0) { return ''; } return smsProgramData.map(program => { const flag = getCountryUnicodeFlag(program.countryCode); const countryName = getCountryName(program.countryCode); const callingCode = program.countryCallingCode || ''; // Sanitize all values to prevent XSS const sanitizedCountryCode = sanitizeHtml(program.countryCode || ''); const sanitizedCountryName = sanitizeHtml(countryName || ''); const sanitizedCallingCode = sanitizeHtml(callingCode || ''); return ''; }).join(''); } function getCountryName(countryCode) { if (window.MC?.smsPhoneData?.smsProgramDataCountryNames && Array.isArray(window.MC.smsPhoneData.smsProgramDataCountryNames)) { for (let i = 0; i < window.MC.smsPhoneData.smsProgramDataCountryNames.length; i++) { if (window.MC.smsPhoneData.smsProgramDataCountryNames[i].code === countryCode) { return window.MC.smsPhoneData.smsProgramDataCountryNames[i].name; } } } return countryCode; } function getDefaultPlaceholder(countryCode) { if (!countryCode || typeof countryCode !== 'string') { return '+1 000 000 0000'; // Default US placeholder } var mockPlaceholders = [ { countryCode: 'US', placeholder: '+1 000 000 0000', helpText: 'Include the US country code +1 before the phone number', }, { countryCode: 'GB', placeholder: '+44 0000 000000', helpText: 'Include the GB country code +44 before the phone number', }, { countryCode: 'CA', placeholder: '+1 000 000 0000', helpText: 'Include the CA country code +1 before the phone number', }, { countryCode: 'AU', placeholder: '+61 000 000 000', helpText: 'Include the AU country code +61 before the phone number', }, { countryCode: 'DE', placeholder: '+49 000 0000000', helpText: 'Fügen Sie vor der Telefonnummer die DE-Ländervorwahl +49 ein', }, { countryCode: 'FR', placeholder: '+33 0 00 00 00 00', helpText: 'Incluez le code pays FR +33 avant le numéro de téléphone', }, { countryCode: 'ES', placeholder: '+34 000 000 000', helpText: 'Incluya el código de país ES +34 antes del número de teléfono', }, { countryCode: 'NL', placeholder: '+31 0 00000000', helpText: 'Voeg de NL-landcode +31 toe vóór het telefoonnummer', }, { countryCode: 'BE', placeholder: '+32 000 00 00 00', helpText: 'Incluez le code pays BE +32 avant le numéro de téléphone', }, { countryCode: 'CH', placeholder: '+41 00 000 00 00', helpText: 'Fügen Sie vor der Telefonnummer die CH-Ländervorwahl +41 ein', }, { countryCode: 'AT', placeholder: '+43 000 000 0000', helpText: 'Fügen Sie vor der Telefonnummer die AT-Ländervorwahl +43 ein', }, { countryCode: 'IE', placeholder: '+353 00 000 0000', helpText: 'Include the IE country code +353 before the phone number', }, { countryCode: 'IT', placeholder: '+39 000 000 0000', helpText: 'Includere il prefisso internazionale IT +39 prima del numero di telefono', }, ]; const selectedPlaceholder = mockPlaceholders.find(function(item) { return item && item.countryCode === countryCode; }); return selectedPlaceholder ? selectedPlaceholder.placeholder : mockPlaceholders[0].placeholder; } function updatePlaceholder(countryCode, fieldName) { if (!countryCode || !fieldName) { return; } const phoneInput = document.querySelector('#mce-' + fieldName); if (!phoneInput) { return; } const placeholder = getDefaultPlaceholder(countryCode); if (placeholder) { phoneInput.placeholder = placeholder; } } function updateCountryCodeInstruction(countryCode, fieldName) { updatePlaceholder(countryCode, fieldName); } function getDefaultHelpText(countryCode) { var mockPlaceholders = [ { countryCode: 'US', placeholder: '+1 000 000 0000', helpText: 'Include the US country code +1 before the phone number', }, { countryCode: 'GB', placeholder: '+44 0000 000000', helpText: 'Include the GB country code +44 before the phone number', }, { countryCode: 'CA', placeholder: '+1 000 000 0000', helpText: 'Include the CA country code +1 before the phone number', }, { countryCode: 'AU', placeholder: '+61 000 000 000', helpText: 'Include the AU country code +61 before the phone number', }, { countryCode: 'DE', placeholder: '+49 000 0000000', helpText: 'Fügen Sie vor der Telefonnummer die DE-Ländervorwahl +49 ein', }, { countryCode: 'FR', placeholder: '+33 0 00 00 00 00', helpText: 'Incluez le code pays FR +33 avant le numéro de téléphone', }, { countryCode: 'ES', placeholder: '+34 000 000 000', helpText: 'Incluya el código de país ES +34 antes del número de teléfono', }, { countryCode: 'NL', placeholder: '+31 0 00000000', helpText: 'Voeg de NL-landcode +31 toe vóór het telefoonnummer', }, { countryCode: 'BE', placeholder: '+32 000 00 00 00', helpText: 'Incluez le code pays BE +32 avant le numéro de téléphone', }, { countryCode: 'CH', placeholder: '+41 00 000 00 00', helpText: 'Fügen Sie vor der Telefonnummer die CH-Ländervorwahl +41 ein', }, { countryCode: 'AT', placeholder: '+43 000 000 0000', helpText: 'Fügen Sie vor der Telefonnummer die AT-Ländervorwahl +43 ein', }, { countryCode: 'IE', placeholder: '+353 00 000 0000', helpText: 'Include the IE country code +353 before the phone number', }, { countryCode: 'IT', placeholder: '+39 000 000 0000', helpText: 'Includere il prefisso internazionale IT +39 prima del numero di telefono', }, ]; if (!countryCode || typeof countryCode !== 'string') { return mockPlaceholders[0].helpText; } const selectedHelpText = mockPlaceholders.find(function(item) { return item && item.countryCode === countryCode; }); return selectedHelpText ? selectedHelpText.helpText : mockPlaceholders[0].helpText; } function setDefaultHelpText(countryCode) { const helpTextSpan = document.querySelector('#help-text'); if (!helpTextSpan) { return; } } function updateHelpTextCountryCode(countryCode, fieldName) { if (!countryCode || !fieldName) { return; } setDefaultHelpText(countryCode); } function initializeSmsPhoneDropdown(fieldName) { if (!fieldName || typeof fieldName !== 'string') { return; } const dropdown = document.querySelector('#country-select-' + fieldName); const displayFlag = document.querySelector('#flag-display-' + fieldName); if (!dropdown || !displayFlag) { return; } const smsPhoneData = window.MC?.smsPhoneData; if (smsPhoneData && smsPhoneData.programs && Array.isArray(smsPhoneData.programs)) { dropdown.innerHTML = generateDropdownOptions(smsPhoneData.programs); } const defaultProgram = getDefaultCountryProgram(smsPhoneData?.defaultCountryCode, smsPhoneData?.programs); if (defaultProgram && defaultProgram.countryCode) { dropdown.value = defaultProgram.countryCode; const flagSpan = displayFlag?.querySelector('#flag-emoji-' + fieldName); if (flagSpan) { flagSpan.textContent = getCountryUnicodeFlag(defaultProgram.countryCode); flagSpan.setAttribute('aria-label', sanitizeHtml(defaultProgram.countryCode) + ' flag'); } updateSmsLegalText(defaultProgram.countryCode, fieldName); updatePlaceholder(defaultProgram.countryCode, fieldName); updateCountryCodeInstruction(defaultProgram.countryCode, fieldName); } var smsNotRequiredRemoveCountryCodeEnabled = true; var smsField = Object.values({"EMAIL":{"name":"EMAIL","label":"Email Address","helper_text":"","merge_id":0,"type":"email","required":true,"audience_field_name":"Email Address","field_type":"merge","enabled":true,"order":0},"FNAME":{"name":"FNAME","label":"First Name","helper_text":"","type":"text","required":false,"audience_field_name":"First Name","enabled":true,"order":1,"field_type":"merge","merge_id":1},"LNAME":{"name":"LNAME","label":"Last Name","helper_text":"","type":"text","required":false,"audience_field_name":"Last Name","enabled":true,"order":2,"field_type":"merge","merge_id":2},"MMERGE5":{"name":"MMERGE5","label":"Zip Code","helper_text":"","type":"zip","required":false,"audience_field_name":"Address (zip Code)","enabled":true,"order":3,"field_type":"merge","merge_id":5},"ADDRESS":{"name":"ADDRESS","label":"Address","helper_text":"","type":"address","required":false,"audience_field_name":"Address","enabled":false,"