What problem does this solve?
Currently, the "Area of Interest" dropdown in templates/index.html is entirely hardcoded. This creates a disconnect between the frontend UI and the actual project dataset (data/projects.json). As a result, the UI displays interest options that currently have zero projects associated with them in the database. This leads to frustrating "No Projects Found" dead-ends for users who select an available, but empty, category.
Proposed solution
- Create a utility function in
utils/data_loader.py (similar to get_available_levels()) that parses the JSON dataset and returns a list of all unique interests that actually have projects.
- In
routes/main_routes.py, pass this dynamically generated available_interests list into the index.html template context.
- Update
templates/index.html to use a Jinja2 {% for %} loop to render the <select id="interest"> options dynamically based on the real data.
Note: I would like to work on this issue for GSSoC 2026. Please assign it to me!
Alternatives considered
We could manually update the HTML file every time a new project is added to or removed from projects.json. However, this is error-prone, violates the DRY principle, and creates unnecessary friction for open-source contributors who should only have to modify the JSON dataset to add new projects.
Which part of the app does this affect?
Homepage and form
Estimated complexity
Medium (one function and one template change)
Before submitting
What problem does this solve?
Currently, the "Area of Interest" dropdown in
templates/index.htmlis entirely hardcoded. This creates a disconnect between the frontend UI and the actual project dataset (data/projects.json). As a result, the UI displays interest options that currently have zero projects associated with them in the database. This leads to frustrating "No Projects Found" dead-ends for users who select an available, but empty, category.Proposed solution
utils/data_loader.py(similar toget_available_levels()) that parses the JSON dataset and returns a list of all unique interests that actually have projects.routes/main_routes.py, pass this dynamically generatedavailable_interestslist into theindex.htmltemplate context.templates/index.htmlto use a Jinja2{% for %}loop to render the<select id="interest">options dynamically based on the real data.Note: I would like to work on this issue for GSSoC 2026. Please assign it to me!
Alternatives considered
We could manually update the HTML file every time a new project is added to or removed from
projects.json. However, this is error-prone, violates the DRY principle, and creates unnecessary friction for open-source contributors who should only have to modify the JSON dataset to add new projects.Which part of the app does this affect?
Homepage and form
Estimated complexity
Medium (one function and one template change)
Before submitting