Project Info
Inspiration
Our inspiration for EcoGauge stems from the growing concern around climate change and environmental sustainability. We recognized that while there are many discussions about sustainability happening across online platforms, it's challenging for individuals, organizations, and policymakers to easily gauge public sentiment on key environmental topics. We wanted to create a tool that empowers environmental advocates and decision-makers by providing clear, data-driven insights into how the public feels about pressing issues like renewable energy, conservation, and sustainable agriculture.
What it does
EcoGauge empowers sustainability advocates, nonprofits, and researchers by providing real-time insights into public sentiment on environmental and sustainability-related issues. The application measures whether online communities correlate the topic at hand to be positive, negative, or neutral and offers actionable steps to improve public sentiment by analyzing the constructive comments related to the sustainability issue.
How we built it
We utilized BeautifulSoup, Selenium, and Pandas to scrape and pre-process Instagram threads data to collect string comments. Simultaneously, we trained a scikit-learn SVM model using 10,000 Amazon reviews to capture the wide range of sentiments. Then, we inputted the cleaned threads into the model and used a TF-IDF vectorizer to turn strings into numerical data based on text frequency and return a classified sentiment. We used Matplotlib to display a distribution of sentiments and Gemini API to analyze constructive comments and offer constructive feedback. Lastly, we used Reflex to design the frontend with Python and present our product in a clean and organized manner.
Challenges we ran into
One of our main challenges was to web scrape information and turn it into data that we can feed into our trained sentiment analysis model. This was difficult as we had to find which social media platform both fit with goals and compatible with our program. Another challenge we ran into was linking the frontend and backend. Though we used Reflex to simplify frontend development by using Python for web development, we struggled with populating data such as the Matplotlib chart. We also struggled to convert the product in local host format to being deployed for external use.
Accomplishments we're proud of
We are proud that we were able to combine our skills and apply it to something actually impactful to the environmental community. As it is our first hackathon, we wanted to create an impactful application that helps a specific community after realizing how underrepresented the general public is in policy making and larger decisions. As the importance of sustainable action grows, we hope our product will give policymakers convenient access to insights on public opinion.
What we learned
With this being our first hackathon, we learned how to adapt in high pressure environments. While trying to create the best project in only 48 hours, we were forced to learn new skills such as Reflex. We also learned many non-coding aspects of creating a product from start to finish such as navigating git and file structure.
What's next
Though EcoGauge was designed to tackle the lack of awareness regarding sustainability, we see avenues to scale the application into other industries beyond sustainability. EcoGauge can be particularly beneficial for public figures, who can gauge public sentiment on themselves by using our tool to aggregate the most common points of feedback. Generally, any industry where the collection of public opinion is useful can be a new door for EcoGauge!
Analysis
View
Metric
- 29
- 5
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- PythonIn code
- Google GeminiClaimed
1 of 2 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
30 KB
Source files
6
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
aaronsongnguyen/EcoGauge
12 files · 629 KB · @ 8795506
Structure
Application logic
5 files · 42%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python99%
- Markdown1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
front_end/requirements.txt
pypi · 1- reflex
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Gemini API analyzes constructive/negative comments and returns improvement suggestionsVerified
Used Gemini API to analyze constructive comments and offer constructive feedback / actionable steps to improve public sentiment
Claimed on Devposthigh confidencefront_end/front_end/front_end.py:300— genai.configure and GenerativeModel('gemini-1.5-flash').generate_content are called with the scraped comments to produce next-step suggestionsfront_end/front_end/front_end.py:325— next_steps list is populated from the Gemini response text and rendered in the Next Steps panel
Matplotlib sentiment distribution chart in the UIVerified
We used Matplotlib to display a distribution of sentiments
Claimed on Devposthigh confidencefront_end/front_end/front_end.py:122— pie_maker rx.var builds a matplotlib Figure (ax.pie) from plot_figure_data/labelsfront_end/front_end/front_end.py:547— results_page renders State.pie_maker via the reflex_pyplot pyplot component
Reflex-based Python frontend UIVerified
We used Reflex to design the frontend with Python and present our product in a clean and organized manner
Claimed on Devposthigh confidencefront_end/front_end/front_end.py:1— File imports reflex as rx and defines a full rx.State-driven app (header, home_page, results_page, about_us_page) with app = rx.App() and app.add_page(index)front_end/requirements.txt:1— reflex==0.6.3 is declared as a dependency
Classifying scraped comments as positive, negative, or neutralCode-supported
The application measures whether online communities correlate the topic at hand to be positive, negative, or neutral
Claimed on readmemedium confidencefront_end/front_end/front_end.py:265— clf_svm.predict(new_test) classifies scraped thread text into Positive/Negative/Neutral via the Sentiment class, and proportions are computed via Counterfront_end/front_end/front_end.py:313— sentiment_summary text is derived from comparing negative/positive/neutral proportions
Instagram/Threads comment scraping with Selenium and BeautifulSoupCode-supported
Utilized BeautifulSoup, Selenium, and Pandas to scrape and pre-process Instagram threads data to collect string comments
Claimed on Devpostmedium confidencefront_end/webscrapyer.py:11— scrape_threads() uses Selenium webdriver and BeautifulSoup to fetch and parse threads.net search results into a list of text strings; targets threads.net, not Instagram directly, and no Pandas usage is present anywhere in the repo
Real-time sentiment insights for activists, policymakers, and the publicCode-supported
EcoGauge empowers activists, policymakers, and the public with real-time sentiment insights on environmental issues, driving informed change and efficient action
Claimed on readmelow confidencefront_end/front_end/front_end.py:132— State.submit runs scraping, classification, and Gemini feedback synchronously on user input, giving a live per-query pipeline, but there is no scheduled/streaming real-time updates, no deployed hosting config, and the scraper targets threads.net search results rather than a defined 'environmental issues' corpus
SVM sentiment model trained on 10,000 Amazon reviews with TF-IDF vectorizationCode-supported
Trained a scikit-learn SVM model using 10,000 Amazon reviews and used a TF-IDF vectorizer to turn strings into numerical data
Claimed on Devpostmedium confidencefront_end/main.py:100— TfidfVectorizer fit on training text, then svm.SVC(kernel='linear') is trained on the vectorized textfront_end/front_end/front_end.py:226— Same TF-IDF + SVM training pipeline is duplicated inside the Reflex State.submit handlerfront_end/main.py:65— Training data is read from a hardcoded local path '/Users/aaronnguyen/Desktop/Books_small_10000.json' that does not exist in this repo, so the training set cannot actually be exercised as shipped
Deployment from localhost to external hostingClaimed only
We also struggled to convert the product in local host format to being deployed for external use
Claimed on Devposthigh confidencePandas-based data pre-processingClaimed only
We utilized BeautifulSoup, Selenium, and Pandas to scrape and pre-process Instagram threads data
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.