Page MenuHomePhabricator

GSoC 2026: Montage improvements
Closed, ResolvedPublic

Description

Project title: Montage

Brief summary:

Montage is a photo evaluation tool for and by Wiki Loves competitions. It offers a flexible round-based workflow that is configurable to contests of all sizes, and is suited for evaluation of 10-1000s images. For the scope of GSoC, the proposal is to make multiple improvements to improve the workflows, solve existing bugs, and overall improve the experience of users (campaign organizers and jury) using the tool. Source code: https://github.com/hatnote/montage

Expected outcomes:
The overall goal is to improve the tool by identifying open issues that address the needs of campaign organizers and jurors.

  • Find and fix probable vulnerabilities: Input validation, Error handling, Test coverage, API contract definition: these would resolve the problem leads to null values sent to the backend which ends up returning and 500 POST error (for example, the round creation bug)
  • Ability to read author and upload date from the first version of the file (issues/155)
  • Fix voting statistics display issue (issue/325)
  • Improve edit votes loading/display issue (issues/322)
  • Resolve type error when voting too fast (issues/206)

Skills required/preferred:

Possible mentors:

Expected size of the project: 350 hours

Rating: medium

Microtasks:
Inspect the codebase and write a report detailing key stability issues that could be improved. Some areas to look into are

  • Input validation: check for forms / inputs that don't have validation
  • Error handling: check for API endpoints or UI components where error handling could be improved
  • Test coverage: Critical paths that have tests missing
  • API contract def: Check for endpoints with unclear contracts with frontend and backend.

These are starting pointers, and of course, if you find some other areas of improvement definitely include them. It can be a Google Doc or Markdown file at a publicly viewable link. Please limit your response to 2-3 pages approx, roughly about ~ 600-100 words. With each issue, write a small brief about how it will improve the codebase. Overall, it should demonstrate your understanding of the codebase.

Any other additional information for contributors:

Why are you proposing this project?
Montage is probably the most widely used tool for judging photo competitions by the Wikimedia community. As Wiki Loves format has been quite successful in media uploads, this tool supports a key step in that process of evaluation of the uploaded images. Originally developed for Wiki Loves Monuments, but the tool is not widely used by campaigns like Wiki Science Competition, Wiki Loves Birds, Wiki Loves Africa, and many others.

What is the expected impact?

  • Fix fundamental issues that improve the overall stability of the tool.
  • Improve at least 3 requested features from users of the tool (campaign organizers / jurors)
IMPORTANT: GSoC / Outreachy candidates are required to complete micro-tasks during the application period to prove their ability to work on a three month long project

Related Objects

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
This comment was removed by sanjaisid.

Hi @KCVelaga @Jayprakash12345 Im really excited to work on the montage improvements project for GSoC and would love to get started on the microtask. Is it okay if I begin working on it now?

I met @Effeietsanders in the Wikimedia Futures Lab at Frankfurt, Germany. He is also interested in supporting us as a mentor in product mentoring side. Welcoming him 💐.

That's fantastic, updated the description.

@sanjaisid the contribution period will start on March 16, you can work on the micro-tasks then.

Hi @KCVelaga. I’m Aditya, interested in the Montage project for GSoC. I’ve set up the repository locally and have started reviewing the documentation and codebase. I’ll be working on the microtask by analyzing the workflow and identifying stability or usability issues.

Would you recommend focusing primarily on the microtask for now before starting to fix issues, or is it fine to work on both in parallel? I’m happy to start with small fixes to better understand the system. Looking forward to contributing and learning from everyone here.

Hi @KCVelaga. I'm Arbin, interested in gsoc contribution, I'm interested in the Montage photo evaluation tool because i recently finish a voting system with React and Django.
I'm currently working on my local environment setup . As the backend uses clastic -- are there any specific parts of the rdb.py logic you'd recommend I study first to understand how rounds are handled?

Hi @KCVelaga and mentors! I'm Om walzade. I've successfully cloned Montage and reviewed the Commons:Montage documentation.

While I wait for the March 16th start date to officially begin the microtasks, I’m spending time studying the Clastic framework's dependency injection to better understand the backend stability issues. I'm excited about the prospect of helping make Montage more robust for the Wiki Loves competitions!

Hi @Jayprakash12345, @KCVelaga . I'm Harshitha, I'm interested about this project, and have cloned the repository locally, while installing backend packages faced an error, related to version conflict. So, created a PR related to that.

Problem
tox supported pluggy(version < 1), I had version greater than 1, which was the reason for version conflict

Solution
created a PR - which provides instructions about installing the backend packages in CLI and in requirements-dev.txt added a -(pluggy < 1) line which resolves the conflict

-Thankyou.

This comment was removed by sanjaisid.

Hi @Harshitha_Mahadevi
If you install tox inside virtual environment (venv), it shouldn't cause the issue you faced because it wont conflict with your system installed dependencies

Hello, @sanjaisid
I performed the command inside the venv itself, I used pyenv for python and was definitely using virtual environment - activated the venv by creating the folder.

@Harshitha_Mahadevi

I have executed the following commands and it worked for me

python3 -m venv venv
source venv/bin/activate 

(venv) pip install tox
 tox

@sanjaisid
it, didn't work for me.
The error message was a bit specific like - maybe Docker compatibility Error

@sanjaisid
I tried to reproduce the Error, but now I'm not facing that Error, maybe you were right about it, That I was not in the venv, Sorry for the inconvenience. But I still believe that PR is useful, for beginners like me.

Hi all, just making a note that contribution period for this project starts from March 16 only. Also, feel free to ping me on Zulip for any project specific questions.

Hi @KCVelaga, @Effeietsanders, and @Jayprakash12345,

My name is Leila, a second-year Computer Science student exploring the Montage Improvements project for GSoC 2026. I’m new to open source and excited to contribute and learn with everyone here .

I’m currently reviewing the codebase and starting the microtask analysis mentioned in the description. I plan to look into input validation, error handling, and API interactions.

i just hope i am on the right track .Please let me know if there are any specific areas of the codebase you recommend focusing onmor any beginner tips that might help me get started effectively.

I will be glad to get a response ,Thank you so much!

Hi everyone,

My name is Abdulqayyum, a Computer Science student from Nigeria. I’m also interested in contributing to the Montage Improvements project for GSoC 2026 and have been going through the available wikis and documentation to better understand how Montage works.

At the moment, I’m working on setting up the project environment so I can familiarize myself with the codebase ahead of the contribution period. I noticed in the task details that contributors are advised not to begin contributions until March 16, so for now I’m focusing on preparation.

If there are any setup guides, development resources, or specific parts of the codebase you would recommend reviewing beforehand, I would really appreciate the guidance.

Thank you!
Abdulqayyum

Hi @Abdulqayyum.dev @Leila_Awino , thank you for your interest in the Montage project. I’d recommend joining the Wikimedia Zulip so you can introduce yourself and connect with the community.

For setting up the project, you can follow the instructions here: Montage Setup Instructions.

If you run into any issues during setup, feel free to ask.

Hi @KCVelaga @Jayprakash12345,
I opened a PR for the Montage issue #400:
https://github.com/hatnote/montage/pull/404

This PR includes:

  1. frontend fix to show backend validation details instead of generic 400 toast
  2. backend fix for ranking rounds where full-ballot submission conflicted with the 100-submit cap

Could you please review/test when possible?
I could not fully verify the affected Toolforge campaign flow due to permission-denied access.
Thanks.

Hi @KCVelaga @Jayprakash12345,

I opened a PR for the Montage issue #103:
https://github.com/hatnote/montage/pull/410

This PR includes:

  • Fix for preemptive checks during round creation
  • Validation improvements to prevent invalid round setup
  • Related adjustments in the round creation flow

Could you please review and test it when possible?

Thank you!

Hi everyone,

I’ve created an issue to improve the local development setup documentation for the project, especially around OAuth configuration and recommending the use of WSL for Windows users. The current documentation wasn’t very clear during setup, so the issue proposes adding clearer steps and troubleshooting guidance to make onboarding easier for new contributors.

https://github.com/hatnote/montage/issues/411
Please feel free to check it out and share any suggestions or additional points we should include.

@KCVelaga @Jayprakash12345 @Effeietsanders

While waiting for the setup documentation improvement issue to be approved, I worked on frontend validation improvements on the campaign and round creation flows.

I opened [[ https://github.com/hatnote/montage/pull/413

PR #413 ]]:

This work focuses on improving form validation for campaign and round creation flows so users get clearer required-field feedback and fewer confusing validation errors. It is aimed at improving reliability and user experience by catching invalid inputs earlier in the UI before they reach backend endpoints.

Hi @KCVelaga @Effeietsanders and @Jayprakash12345,

Following up on my Zulip message from earlier, I have completed the microtask analysis regarding the backend stability issues.

You can view my full report here: https://gist.github.com/ayushshukla1807/dd051b7fcfc16810ef3515e509f10ad6

As detailed in the report, I investigated the 500 POST errors that occur during round creation (Issue #357). I found that when request_dict receives None (empty payloads), it bypasses validation and triggers unhandled AttributeErrors. Additionally, I saw that MessageMiddleware was unconditionally raising exceptions directly to Werkzeug, which resulted in the Clastic CORSMiddleware dropping the Access-Control-Allow-Origin headers and causing the frontend network errors.

I have patched these MessageMiddleware and admin_endpoints.py serialization vulnerabilities locally, and I'll be opening a PR shortly for review!

Following up on my earlier report — I've submitted PRs for five of the open issues today. All branches are pushed to my fork and ready for review:

Fix #357: MessageMiddleware + admin_endpoints validation
Fix #206: DOM-level isLoading guard on vote buttons
Fix #325: Wire up getRoundVotesStats in voting components
Fix #322: Attach scroll listener via watcher instead of onMounted
Fix #155: Use rec_img_timestamp for original upload date

Hi @KCVelaga, @Effeietsanders, and @Jayprakash12345,

Good day!

I just opened this PR: https://github.com/hatnote/montage/pull/424, which focuses on clarifying API response structures and standardizing data formats in the documentation.

This update brings:

  • Consistent, example-driven schemas for key API endpoints
  • Clearer descriptions of response objects and error handling
  • Improved alignment between backend responses and documented contracts

Feedback and suggestions are welcome!

Hi, I’m Keerthana, a 3rd-year BE student from India.

I have started exploring the Montage project and understanding the frontend behavior.

I completed an initial microtask analysis focusing on UI behavior, empty states, and user experience.

Looking forward to contributing and learning more. Please let me know if I should refine anything or focus on specific areas.

Thank you!

Good day everyone
@KCVelaga, @Effeietsanders, and @Jayprakash12345,

Following my last PR, I have updated both the backend endpoints and frontend API calls to strictly match the documented response schemas.

Key changes:

  • Standardized all backend API responses for consistency with the documentation.
  • Refactored all frontend API calls and error handling to use the new response format (status, errors, and typed data).
  • Implemented comprehensive input validation for campaign and round creation forms.
  • Added new validation error messages to i18n for improved user feedback.
  • Enhanced campaign creation/editing forms with cross-field validation (e.g., date ranges).
  • Improved round creation forms with detailed validation logic for all required fields.
  • Upgraded error handling to display inline error messages and prevent invalid submissions.
  • Added testing guides and documentation for both manual and automated validation testing.

All these changes are included in this PR: https://github.com/hatnote/montage/pull/424

Thanks for your feedback and review!

Hi @Effeietsanders, @KCVelaga, and @Jayprakash12345,

I am preparing my GSoC proposal for the Montage project. I have drafted a detailed proposal (currently ~47 pages) covering the technical architecture and timeline.

Is there a preferred process for receiving feedback before the final submission? Would it be better to share a Google Doc link with comment access here, or is there another channel you prefer?

Thank you for your guidance!

Best regards,

Sanika Palav

Pragyamishra08 subscribed.

Hi @KCVelaga, @Effeietsanders, and @Jayprakash12345,

My name is Pragya Mishra, and I’m a GSoC 2026 applicant for the Montage Improvements project.

I’ve submitted a pull request to improve the local development setup documentation, including OAuth configuration and WSL recommendation.

PR: https://github.com/hatnote/montage/pull/436

Please let me know if any changes are needed.

Thanks!

Hello @Effeietsanders, @KCVelaga, and @Jayprakash12345,

I have officially finalized and will be uploading my GSoC 2026 Proposal for the Montage Improvements project.

Over the final stretch of the evaluation period, I wanted to ensure I wasn't just fixing surface-level bugs, so I spent the last few weeks diving deep into the architecture.

I observed and documented a few undocumented vulnerabilities: specifically the silent 500 POST API drop during round creation and the security bypass when deactivated jurors were queried via the association proxy.

I have opened 4 new Issues detailing these findings, and pushed 2 new Pull Requests (#453 and #454) that successfully resolve them, alongside fixing Issue #155 (correctly attributing the original rec_img upload author during re-uploads).

I have also attached a Stability Report Gist inside my proposal detailing my findings on the Clastic Middleware and Vue.js schema validations.

Thank you all so much for maintaining this project and reviewing my earlier ~30 PRs across Montage and Dashboard.

Regardless of the GSoC outcome, digging deep into the Wikimedia toolchain has been an incredible learning experience.

I look forward to any feedback on the proposal!

Hi all, please submit the proposals by March 31, 2026, at 18:00 UTC - if you haven't already. As there are many PRs, we will be reviewing them during proposal review. You can include open PRs as part of the application.

Hi @KCVelaga, @Effeietsanders, and @Jayprakash12345,
I’ve started exploring the Montage codebase and focused on understanding round creation and voting flows. I’m noticing patterns around input validation gaps and inconsistent API responses, and I’m documenting these as part of the microtask.
Would you prefer I first submit a structured microtask report, or begin addressing a few issues with small PRs in parallel?
Looking forward to contributing!

Hello mentors (@Effeietsanders, @KCVelaga, @Jayprakash12345),

I have officially submitted my GSoC 2026 Proposal for Montage Improvements on the portal!.

My proposal includes a deep architectural dive into the Clastic middleware vulnerabilities and Vue 3 lifecycle race conditions I've been investigating.

Submission Details:

Proposal Link: [https://docs.google.com/document/d/1QyJrVElu1pViJzuIREXAypGvenhtN36IbrmiWyQuLzc/edit?usp=sharing]

Pre-GSoC Momentum: Delivered 18+ production-ready PRs.

Stability Report: Full microtask analysis included as an appendix.

Thank you for all the guidance during this contribution period!