-
Notifications
You must be signed in to change notification settings - Fork 26
Hack #174
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
/gemini review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @mikewolfd, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request introduces a new event page for the Civic Hack DC 2025 hackathon, updates the Open Data DC Showcase event page, and improves the styling and content of the events listing page. Additionally, it includes minor content and formatting updates to several project pages to enhance clarity and consistency.
Highlights
- Event Pages: Created a new event page for 'Civic Hack DC 2025' with details about the hackathon, including its purpose, partners, goals, and schedule. Also, modified the 'Open Data DC Showcase' event page to use the 'events' layout and updated its content.
- Layout Changes: Modified the 'events' layout to remove the date and location from the hero section and to use the page's content directly instead of the description.
- Project Pages: Updated several project pages (_projects) to improve descriptions, correct minor grammatical errors, and standardize the 'Come Join Us' section.
- Events Listing: Modified the events listing page (events.md) to use a new card style for displaying events, including event descriptions and updated styling.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
The pull request includes changes to event listings, project descriptions, and layout files. The changes primarily focus on updating content, improving grammar, and enhancing the presentation of event information. Several minor grammatical and stylistic issues were identified and suggested for improvement.
| <div class="grid-container usa-prose"> | ||
| <em>To provide open source software that detect coordinated inauthentic behavior (CIB) to researchers, moderators, and journalists. We aim to make our programs intuitive so users do not need programming experience to run our tests.</em> | ||
| <em>To provide open source software that detects coordinated inauthentic behavior (CIB) to researchers, moderators, and journalists. We aim to make our programs intuitive so users do not need programming experience to run our tests.</em> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The word "detect" should be "detects" to agree with the singular subject "software".
| <div class="grid-container usa-prose"> | |
| <em>To provide open source software that detect coordinated inauthentic behavior (CIB) to researchers, moderators, and journalists. We aim to make our programs intuitive so users do not need programming experience to run our tests.</em> | |
| <em>To provide open source software that detects coordinated inauthentic behavior (CIB) to researchers, moderators, and journalists. We aim to make our programs intuitive so users do not need programming experience to run our tests.</em> | |
| <em>To provide open source software that detects coordinated inauthentic behavior (CIB) to researchers, moderators, and journalists. We aim to make our programs intuitive so users do not need programming experience to run our tests.</em> |
| <h2 class="font-sans-lg">🚀 Our Impact</h2> | ||
| <p> | ||
| CIB Mango Tree is democratizing access to powerful social media analysis tools and helping communities respond to online manipulation. Our prototype has been used to <strong>flag suspicious online activity during key moments like elections</strong>. Beyond the tools, we’ve built a community of volunteers and collaborators who are passionate about protecting open discourse, both in Washington, DC and globally. | ||
| CIB Mango Tree democratizes access to powerful social media analysis tools and helps communities respond to online manipulation. Our prototype has been used to <strong>flag suspicious online activity during key moments like elections</strong>. Beyond the tools, we’ve built a community of volunteers and collaborators who are passionate about protecting open discourse, both in Washington, DC and globally. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There should be a non-breaking space (i.e. ) after the em dash to improve readability.
| CIB Mango Tree democratizes access to powerful social media analysis tools and helps communities respond to online manipulation. Our prototype has been used to <strong>flag suspicious online activity during key moments like elections</strong>. Beyond the tools, we’ve built a community of volunteers and collaborators who are passionate about protecting open discourse, both in Washington, DC and globally. | |
| CIB Mango Tree democratizes access to powerful social media analysis tools and helps communities respond to online manipulation. Our prototype has been used to <strong>flag suspicious online activity during key moments like elections</strong>. Beyond the tools, we’ve built a community of volunteers and collaborators who are passionate about protecting open discourse, both in Washington, DC and globally. | |
| <section class="padding-y-1 usa-prose maxw-none"> | ||
| <div class="grid-container"> | ||
| <h2 class="font-sans-lg">🤝 Community Partners</h2><p> | ||
| <h2 class="font-sans-lg">🤝 Community Partners</h2> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| <p>The Campaign Legal Center wants to <strong>identify states and counties which have suspicious patterns in voter registration or voting</strong>, so it can take legal action to remedy the problems. For example, one state had an unusually high rate of rejection for voter registration applications submitted at public service offices, which turned out to be because of a glitch in the self-service kiosks used at public service offices in that state.</p> | ||
| <p>The current process the Campaign Legal Center uses is to <strong>identify the variables that they are interested in the EAVS raw data file and codebook</strong>. Then they copy and paste the relevant columns into a new Excel spreadsheet. In order to calculate the voter registration rejection rates they are interested in, they use Excel formulas (for example, dividing the column that contains the number of applications rejected by the sum of the column that contains number of applications accepted and the column that contains the number of applications rejected). Then they use the Excel subtotal feature to aggregate the data by state, since the raw data is only presented by county (although one of their interns wrote an R script to add up the county totals to get state totals). If they want to calculate how rates have changed, they copy and paste the relevant columns from the Excel spreadsheets they made for previous surveys into the current year spreadsheet.</p> | ||
| <p>One of the major pain points is that all of this copying and pasting, aside from being labor intensive, can result in human error. Also, it is difficult for the Campaign Legal Center attorneys to find what they are looking for in the Excel spreadsheet. Thus, the Campaign Legal Center needs <strong>Civic Tech volunteers to help them with data analysis and visualization.</strong></p> | ||
| <p>The Campaign Legal Center wants to <strong>identify states and counties that suspicious patterns in voter registration or voting</strong>, so it can take legal action to remedy the problems. For example, one state had an unusually high rate of rejection for voter registration applications submitted at public service offices, which turned out to be because of a glitch in the self-service kiosks used at public service offices in that state.</p> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change "that" to "with" for better readability.
| <p>The Campaign Legal Center wants to <strong>identify states and counties that suspicious patterns in voter registration or voting</strong>, so it can take legal action to remedy the problems. For example, one state had an unusually high rate of rejection for voter registration applications submitted at public service offices, which turned out to be because of a glitch in the self-service kiosks used at public service offices in that state.</p> | |
| <p>The Campaign Legal Center wants to <strong>identify states and counties with suspicious patterns in voter registration or voting</strong>, so it can take legal action to remedy the problems. For example, one state had an unusually high rate of rejection for voter registration applications submitted at public service offices, which turned out to be because of a glitch in the self-service kiosks used at public service offices in that state.</p> |
| </section> | ||
|
|
||
| <section class="padding-y-5 usa-prose maxw-none"> | ||
| <section class="padding-y-1 usa-prose maxw-none"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change "hurricane Michael" to "Hurricane Michael" to match the capitalization in the previous paragraph.
| <section class="padding-y-1 usa-prose maxw-none"> | |
| <p>As part of his work at the <strong>American Red Cross, Dan has collected street-level imagery in a variety of contexts</strong> including: tracking the rapidly urbanization of Canaan, Haiti where the Red Cross was supporting residents through health, infrastructure, and livelihoods programs; documenting the aftermath of hurricane Irma in Dominica as teams traveled around the island assessing and providing support; and improving map data in the Philippines working alongside the Philippine Red Cross on recovery activities that include training volunteers in communities on disaster prevention and preparedness. During the 2018 domestic response to Hurricane Michael, the American Red Cross collected more than 539,000 images of Panama City, Florida.</p> |
| {% if event.url %} | ||
| <a class="usa-card__link" href="{{ event.url }}"> | ||
| {% endif %} | ||
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-hackathon.png" alt="{{ event.image_alt_text }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The alt attribute should reference the event's description, not event.image_alt_text.
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-hackathon.png" alt="{{ event.image_alt_text }}" /> | |
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-hackathon.png" alt="{{ event.description }}" /> |
| {% if event.url %} | ||
| <a class="usa-card__link" href="{{ event.url }}"> | ||
| {% endif %} | ||
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-data-showcase.png" alt="{{ event.image_alt_text }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The alt attribute should reference the event's description, not event.image_alt_text.
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-data-showcase.png" alt="{{ event.image_alt_text }}" /> | |
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-data-showcase.png" alt="{{ event.description }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces a new event page for "Civic Hack DC 2025" and refactors the main events listing page and its corresponding layout. The new event page and the updated events listing page embed large blocks of CSS and JavaScript directly within the markdown files, which is not ideal for maintainability. There are critical correctness issues in the _layouts/events.html file and the events.md file, where image paths are either broken due to missing front matter variables or hardcoded. There is also some dead code in the new event page's CSS and JavaScript that should be cleaned up.
| {% endif %} | ||
| </p> | ||
|
|
||
| <img class="maxh-mobile margin-bottom-2" src="{{ site.baseurl }}/assets/images/event_thumbnails/{{ page.image }}" alt="{{ page.image_alt_text }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The <img> tag relies on page.image and page.image_alt_text from the page's front matter. These fields are not present in the new _events/civichackdc.md, which will result in a broken image. Add the image and image_alt_text fields back to the front matter of all event pages, or wrap it in a conditional to only render if page.image is present.
| {% if event.url %} | ||
| <a class="usa-card__link" href="{{ event.url }}"> | ||
| {% endif %} | ||
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-hackathon.png" alt="{{ event.image_alt_text }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The image source for upcoming events is hardcoded to hero-image-hackathon.png. This will cause all upcoming events to display the same image. Use a variable from each event's front matter, such as event.image.
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-hackathon.png" alt="{{ event.image_alt_text }}" /> | |
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/event_thumbnails/{{ event.image }}" alt="{{ event.image_alt_text }}" /> |
| {% if event.url %} | ||
| <a class="usa-card__link" href="{{ event.url }}"> | ||
| {% endif %} | ||
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-data-showcase.png" alt="{{ event.image_alt_text }}" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The image source for past events is hardcoded to hero-image-data-showcase.png. This will cause all past events to display the same image. Use a variable from each event's front matter, such as event.image.
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/hero-image-data-showcase.png" alt="{{ event.image_alt_text }}" /> | |
| <img class="usa-card__img" src="{{ site.baseurl }}/assets/images/event_thumbnails/{{ event.image }}" alt="{{ event.image_alt_text }}" /> |
| <style> | ||
|
|
||
| * { margin: 0; padding: 0; box-sizing: border-box; } | ||
| body { font-family: 'Source Sans Pro Web', 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; line-height: 1.6; color: #333; } | ||
| .container { max-width: 1200px; margin: 0 auto; padding: 0 20px; } | ||
|
|
||
| .hero { background: linear-gradient(0deg, #104377); color: white; padding: 4rem 0; text-align: center; } | ||
| .hero h1 { font-size: 3.5rem; font-weight: bold; margin-bottom: 1rem; text-shadow: 2px 2px 4px rgba(0,0,0,0.3); } | ||
| .hero-banner { background: rgba(255,255,255,0.1); padding: 1rem 2rem; border-radius: 10px; margin: 2rem auto; max-width: 600px; backdrop-filter: blur(10px); } | ||
|
|
||
| .section { padding: 3rem 0; } | ||
| .section.alt { background: #f8f9fa; } | ||
| .section-title { text-align: center; font-size: 2.5rem; margin-bottom: 2rem; color: #333; } | ||
|
|
||
| .cta-buttons { display: flex; gap: 1rem; justify-content: center; margin-top: 2rem; } | ||
| .btn { padding: 12px 30px; border: none; border-radius: 25px; font-weight: 600; text-decoration: none; display: inline-block; transition: all 0.3s; cursor: pointer; } | ||
| .btn-secondary { background: #f8f9fa; color: #333; border: 2px solid #e9ecef; } | ||
| .btn-secondary:hover { background: #104377; transform: translateY(-2px); } | ||
|
|
||
| .focus-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 1rem; margin: 2rem 0; } | ||
| .focus-icon { background: white; padding: 1.5rem; border-radius: 12px; text-align: center; box-shadow: 0 4px 6px rgba(0,0,0,0.1); transition: transform 0.3s; } | ||
| .focus-icon:hover { transform: translateY(-4px); } | ||
| .focus-icon-symbol { width: 40px; height: 40px; background: #4A90E2; border-radius: 50%; margin: 0 auto 0.5rem; display: flex; align-items: center; justify-content: center; color: white; font-size: 1.2rem; } | ||
|
|
||
| .goals-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; } | ||
| .goal-card { background: #f8f9fa; padding: 2rem; border-radius: 12px; border-left: 4px solid #4A90E2; transition: transform 0.3s, box-shadow 0.3s; } | ||
| .goal-card:hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0,0,0,0.15); } | ||
| .goal-number { background: #104377; color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; margin-bottom: 1rem; } | ||
|
|
||
| .question-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; } | ||
| .question-card { background: #f8f9fa; padding: 0.8rem; border-radius: 12px; border-left: 4px solid #4A90E2; transition: transform 0.3s, box-shadow 0.3s; } | ||
| .question-card:hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); } | ||
|
|
||
| .partners-grid { display: flex; justify-content: center; flex-wrap: wrap; margin-top: 1rem; gap: 2rem; padding: 0; } | ||
| .partner-logo { width: 120px; height: auto; object-fit: contain; } | ||
| .container { padding-left: 0; padding-right: 0; } | ||
|
|
||
| @media (max-width: 768px) { | ||
| .header-content { flex-direction: column; gap: 1rem; } | ||
| nav ul { gap: 1rem; } | ||
| .hero h1 { font-size: 2.5rem; } | ||
| .focus-grid { grid-template-columns: repeat(2, 1fr); } | ||
| .goals-grid { grid-template-columns: 1fr; } | ||
| .cta-buttons { flex-direction: column; align-items: center; } | ||
| .timeline-item { padding-left: 60px; } | ||
| } | ||
| </style> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| .focus-grid { grid-template-columns: repeat(2, 1fr); } | ||
| .goals-grid { grid-template-columns: 1fr; } | ||
| .cta-buttons { flex-direction: column; align-items: center; } | ||
| .timeline-item { padding-left: 60px; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| <h2><b>Saturday, July 26</b></h2> | ||
| <h4><i>10:00 AM - 6:30 PM </i></h4> | ||
| <h3><b>Location: <span style="color: #FFD700;">TBA</span></b></h3> | ||
| <p><i>(metro-accessible)</i></p> | ||
| <br/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| <script> | ||
| document.addEventListener('DOMContentLoaded', function() { | ||
| // Smooth scrolling | ||
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { | ||
| anchor.addEventListener('click', function (e) { | ||
| e.preventDefault(); | ||
| const target = document.querySelector(this.getAttribute('href')); | ||
| if (target) { | ||
| target.scrollIntoView({ behavior: 'smooth', block: 'start' }); | ||
| } | ||
| }); | ||
| }); | ||
|
|
||
| // Timeline animation | ||
| const observer = new IntersectionObserver((entries) => { | ||
| entries.forEach(entry => { | ||
| if (entry.isIntersecting) { | ||
| entry.target.classList.add('visible'); | ||
| } | ||
| }); | ||
| }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); | ||
|
|
||
| document.querySelectorAll('.timeline-item').forEach(item => { | ||
| observer.observe(item); | ||
| }); | ||
| }); | ||
| </script> No newline at end of file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| <style> | ||
| .usa-card__media-text-wrapper { | ||
| border: 3px solid #eec05e; | ||
| width: 600px; | ||
| box-sizing: border-box; | ||
| padding: 10px; | ||
| margin-bottom: 20px; | ||
| transition: box-shadow 0.2s; | ||
| } | ||
|
|
||
| .usa-card__media-text-wrapper:hover { | ||
| box-shadow: 0 0 0 9px #eec05e33; | ||
| } | ||
|
|
||
| .usa-card__link { | ||
| display: block; | ||
| text-decoration: none; | ||
| color: inherit; | ||
| } | ||
|
|
||
| .usa-card__img { | ||
| width: 100%; | ||
| height: auto; | ||
| object-fit: cover; | ||
| display: block; | ||
| margin-bottom: 10px; | ||
| } | ||
|
|
||
| .usa-card__body { | ||
| padding: 0; | ||
| } | ||
|
|
||
| .usa-card__heading { | ||
| margin-top: 0; | ||
| margin-bottom: 8px; | ||
| } | ||
|
|
||
| .event-description { | ||
| font-size: 16px; | ||
| margin: 0 0 8px 0; | ||
| } | ||
| </style> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No description provided.