>===Profile Information
Name: Destiny Obamwonyi
Github: [obamwonyi](https://github.com/obamwonyi)
Phabricator: [destiny](https://phabricator.wikimedia.org/p/Destiny/)
Gerrit: [obamwonyi](https://gerrit.wikimedia.org/r/q/owner:developer.oduwa%2540gmail.com)
Location: Lagos, Nigeria
Time Zone: WAT(UTC+1)
Working hours: 4:00 AM to 10:00 AM and 4:00 PM to 10:00 PM
>===Synopsis
[PageTriage](https://www.mediawiki.org/wiki/Extension:PageTriage), a MediaWiki extension tailored for English Wikipedia patrollers, streamlines the management of new pages. Equipped with a Vue. js-powered New Pages Feed, it facilitates targeted patrolling through filtering options. The community seeks to augment filter functionality and search capabilities to further optimize page management.
**Possible Mentor(s)**
@Soda , @TheresNoTime
**Have you contacted your mentors already?**
Yes.
>===Deliverables
### Integrate ORES Topic Prediction (T218132)
ORES (Objective Revision Evaluation Service) now supports topic prediction (articletopic) for articles. This feature predicts the topic or subject area of an article, such as chemistry, politics, sports, or geography, which is different from class prediction and potential issue prediction.
New page patrollers would find this useful if they want to filter the feed by one or two topics they are interested in or have specialized knowledge in. Currently, other tools like SDZeroBot's NPP_sorting (https://en.wikipedia.org/wiki/User:SDZeroBot/NPP_sorting) are used for this purpose, but they are not integrated into PageTriage.
#### Implementation Plan:
- **ORES API Integration:**
- Study the ORES API documentation and obtain necessary authentication credentials.
- Implement API calls to fetch topic predictions for new pages, potentially using a library like Axios.
### 1. Implement AI-based topic prediction using the ORES API - Handle API responses and process the predicted topic data.
>==== Implement- **Topic Classification Plan::**
- **Integra - Analyze the topic prediction withmodel used by ORES API:**and understand its output format.
- Research ORES API documentation and obtain necessary authentic- Develop logic to map the predicted topics to user-friendly labels or categories.
- **User Interface Integration.:**
- Implement API calls, using the javascript library [Axios](https://axios-http.com/docs/intro) to fetch predictions for new pages- Design UI components with Vue.js to display predicted topics in the Special:NewPagesFeed filters menu.
- **Topic Classification:** - Implement filtering options based on predicted topics, such as a multi-select dropdown or checkboxes.
- Extract features from new page content for classification.Incorporate the predicted topic information into the Page Curation Toolbar's "Page info" flyout.
- **Documentation and Testing:**
- Train or utilize pre-trained classifier models to predict topics- Create comprehensive documentation for the implemented feature, including usage instructions and technical details.
- **User Interface I - Develop test cases to ensure the reliability and accuracy of the topic prediction integration:**.
- Design UI components with Vuejs to display predicted topics.Conduct thorough testing, including unit testing, integration testing, and user acceptance testing (UAT).
#### References:
- https://wikimania2018.wikimedia.org/wiki/Program/Using_artificial_intelligence_to_keep_Wikipedia_open
- https://en.wikipedia.org/wiki/Wikipedia:Village_pump_(miscellaneous)/Archive_61#Just_asking
- https://www.mediawiki.org/wiki/ORES#Topic_routing
- https://www.mediawiki.org/wiki/ORES/Articletopic
### Keyword Search for New Pages Feed (T207761)
Adding a keyword search functionality to the New Pages Feed enables more precise filtering options for patrollers. By incorporating a field in the search filters section, users can input one or multiple keywords to filter articles. The search results will display articles containing the matching keywords in their text.
#### Implementation Plan:
- **Search Field Integration:**
- Implement filter- Create a new field labeled "Has the following options based on predicted topicskeyword(s)" in the search filters section of the New Pages Feed.
//The above will be done, keeping in mind that [ORES](https://ores.wikimedia.org/docs) is being decommissioned, so implementation of [LiftWing](https://wikitech.wikimedia.org/wiki/Machine_Learning/LiftWing) would be added as an option - Enable users to input keywords, this would be done in a fashion where users can select which API to use for fetching predictions, with ORES pre-selected as default.//either as a comma-separated list or individual keywords separated by spaces.
- Implement the functionality to apply the keyword filter and display relevant search results.
### 2.- **Search Algorithm:**
- Research and select suitable search algorithms for efficient keyword matching.
- Optimize the search algorithm for performance and scalability, considering factors such as indexing, caching, Enhance keyword search functionalityand handling large volumes of data.
>==== Implement- **User Interface Integration Plan::**
- **Search Feature Development:** - Design a intuitive user interface for the keyword search functionality, similar to existing tools like NPP Browser.
- Design a- Integrate the search feature allowing users to input keywords, that would be modeled(v-model) with the API searchield within the search filters section for easy access and visibility.
- Implement frontend components to display search results.Display search results in the New Pages Feed, highlighting or emphasizing the matching keywords within the article content.
- **Documentation and Testing:**
- **Efficient Search Algorithms:** - Create comprehensive documentation for the implemented feature, including usage instructions and technical details.
- Research- Develop test cases to ensure the reliability and select suitableaccuracy of the keyword search algorithmsfunctionality.
- Optimize algorithms for performance and scalability.- Conduct thorough testing, this can be implemented with caching and building the project as an [SPA](https://vuejs.org/guide/extras/ways-of-using-vue#single-page-application-spa)including unit testing, as well as making use of Vuejs store [Pinia](https://pinia.vuejs.org/) for persistent data storage across components.integration testing, therefore reducing unnecessary server requests and reloadingand user acceptance testing (UAT).
### 3. Introduce filtering by pageviews#### Mock UI:
>==== Implementation Plan:
The mock UI design for the keyword search functionality should include:
- A search field labeled "Has the following keyword(s)" within the search filters section.
- **PageViews Implementation:**Placeholder text or instructions guiding users on how to input keywords (e.g., comma-separated or space-separated).
- A visual representation of how the search results will be displayed in the New Pages Feed, emphasizing the matching keywords within the article content.
This deliverable outlines the implementation plan for integrating the keyword search functionality into the New Pages Feed. It includes steps for creating the search field, implementing the search algorithm, user interface integration, documentation, and testing. Additionally, it provides a mock UI design to visualize the search field and search results within the existing user interface.
### Keyword Search for New Pages Feed (T207761)
As a New Page Patroller (NPP) user, I want to have a keyword search functionality in the New Pages Feed, so that I can easily search for articles based on themes or content.
#### Acceptance Criteria:
- Create a new field in the "That" section of the search filters for the New Pages Feed, which is the last option (i.e., bottom of the list).
- The text for the field should read "Has the following keyword(s)".
- If a user inputs one or multiple keywords into the field and clicks "Set Filter," the search results in the New Pages Feed should only display articles that have matching keywords in their text content.
#### Background:
The New Page Patrol Browser (https://tools.wmflabs.org/nppbrowser/) has a "keyword or username" search functionality that is very useful for patrollers who prefer to review certain kinds of articles. It has been suggested that the Article Feedback Collaboration (AfC) would also like to have this kind of functionality.
However, the New Pages Feed, where AfC reviewers currently sort through drafts, does not have a keyword search feature. The New Page Patrol (NPP) would also like to have a keyword search functionality. Username searching has also been requested in the past.
#### Implementation Plan:
- **Search Field Integration:**
- Integrate functionality to fetch pageview data from WikipediaAPI with the pageviews [endpoint](https://wikimedia.org/api/rest_v1/#/Pageviews%20data)Create a new field labeled "Has the following keyword(s)" in the "That" section of the search filters for the New Pages Feed.
- Implement filtering options based on pageview thresholds- Enable users to input keywords, either as a comma-separated list or individual keywords separated by spaces.
- **UI Controls:** - Implement the functionality to apply the keyword filter and display relevant search results.
- **Search Algorithm:**
- Research and select suitable search algorithms for efficient keyword matching.
- Design intuitive UI controls with Vuejs and Javascript for specifying pageview thresholdsOptimize the search algorithm for performance and scalability, considering factors such as indexing, caching, and handling large volumes of data.
### 4.- **User Interface Integration:**
- Integrate the search field within the "That" section of the search filters for easy access and visibility.
- Display search results in the New Pages Feed, Implement a similarity search for deleted pageshighlighting or emphasizing the matching keywords within the article content.
>==== Implementation Plan:- **Documentation and Testing:**
- Create comprehensive documentation for the implemented feature, including usage instructions and technical details.
- **Algorithm Sele - Develop test cases to ensure the reliability and accuracy of the keyword search function:**ality.
- Research and select algorithms for calculating similarity scoresConduct thorough testing, including unit testing, integration testing, and user acceptance testing (UAT).
#### Visual Example:

The visual example should show the "Has the following keyword(s)" field in the "That" section of the search filters for the New Pages Feed, along with an illustration of how the search results will display articles with matching keywords highlighted or emphasized.
This deliverable outlines the implementation plan for integrating the keyword search functionality into the New Pages Feed, based on the provided acceptance criteria and background information. It includes steps for creating the search field, implementing the search algorithm, user interface integration, documentation, and testing. Additionally, it provides a visual example to illustrate the expected user interface and search result display.
### Similarity Search for Deleted Pages (T327955)
The "Creation of a Substantive Article" (G4) criterion for speedy deletion requires that the new article be substantially different from previously deleted versions. However, patrollers who are not administrators cannot see deleted revisions.
PageTriage already detects if an article has been "previously deleted." This ticket aims to explore the idea of expanding this detection to include the following features:
- Detection of a previous Articles for Deletion (AfD) process by checking for the existence of an AfD page.
- **Integration with Existing DataIf a previous AfD is detected, and the page has been deleted before, an API should be added to PageTriage to pull the top deleted revision and compare it to the current top revision, providing a percentage of wikicode match.
- This comparison should either be run with a button or run automatically.
- The option to make this a `pagetriage_page_tag` (article metadata) could be explored.
#### Implementation Plan:
- **API Integration:**
- Retrieve data on deleted pages, from Wikimedia API by accessing [Alldeletedrevisions](https://www.mediawiki.org/wiki/API:Alldeletedrevisions)Develop a dedicated API endpoint or extend the existing `pagetriagelist` API to facilitate the similarity comparison between new pages and deleted revisions.
- Develop- Implement logic to compare newretrieve the top deleted revision for pages withthat have been previously deleted pagesor gone through the AfD process.
- **Prioritization of Matches:** - Calculate the percentage of wikicode match between the current top revision and the retrieved top deleted revision.
- **Similarity Calculation:**
- Research and select appropriate algorithms or techniques for calculating the similarity between two revisions' wikicode content.
- Determine criteria for prioritizing relevant matches by discoursing with my Mentors- Implement preprocessing steps to handle wikicode formatting, templates, and other markup elements.
- Implement sorting or filtering options for matches- Develop a scoring mechanism to quantify the similarity as a percentage or other meaningful metric.
### 5. Additional filters and improvements- **User Interface Integration:**
- Design a user interface component or button to initiate the similarity comparison process on demand.
- Explore the option of automatically running the comparison when visiting an article or displaying the similarity score as an article metadata tag in the Special:NewPagesFeed.
>====- **AfD Detection:**
- Implement logic to detect if a page has undergone a previous AfD process by checking for the existence of an AfD page.
- Explore the possibility of adding support for tracking and displaying previous AfD information, as the current `afd_status` page tag only tracks current deletion tagging, and the `recreated` tag tracks all kinds of previous deletions, not just AfD.
- **Documentation and Testing:**
- Create comprehensive documentation for the implemented feature, including usage instructions and technical details.
- Develop test cases to ensure the reliability and accuracy of the similarity search functionality.
- Conduct thorough testing, including unit testing, integration testing, and user acceptance testing (UAT).
### Additional filters and improvements
#### Implementation Plan:
- **Community Feedback Integration:**
- Gather feedback from the community on desired filters and enhancements.
- Prioritize implementation based on feasibility and impact.
- **Iterative Development:**
- Implement additional filters and improvements based on feedback.
### 6. Documentation and Testing
>==== Implementation Plan:
- **Documentation:**
- Create comprehensive documentation for each implemented feature.
- Include usage instructions and technical details.
- **Testing:**
- Develop test cases covering various scenarios and edge cases.
- Conduct thorough testing to ensure reliability and accuracy.
> ===Timeline==== Implementation Plan:
- **Documentation:**
- Create comprehensive documentation for each implemented feature.
- Include usage instructions and technical details.
=====- **Testing:**
- Develop test cases covering various scenarios and edge cases.
- Conduct thorough testing to ensure reliability and accuracy.
> ===Timeline
## Community Period
| Period | Description | Description |
|--------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| May 02, 2024 - May 27, 2024 | 1. Connect with mentors to gain insights into the community and familiarize myself with the codebase. 2<br>2. Engage in discussions to brainstorm potential solutions and enhancements for the extension's issues. 3<br>3. Dive into understanding the architecture and pinpoint relevant sections of the codebase related to the identified issues. |
=====## Coding Period
| Period | Description | Description |
|--------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| May 27, 2024 - June 03, 2024 | Familiarize myself with the existing codebase of the PageTriage extension. Review relevant documentation on VueJS and the ORES API. |
| June 03, 2024 - June 10, 2024| Begin implementing the AI-based topic prediction feature using the ORES API. Start designing and implementing the keyword search functionality. |
| June 10, 2024 - June 17, 2024 || Continue working on refining the AI-based topic prediction feature. Enhance the keyword search functionality by integrating it with the existing filter options. |
| June 17, 2024 - June 24, 2024 | Implement the filter by pageviews feature, allowing users to filter articles based on their pageview count. Begin exploring methods to implement the similarity search for deleted pages.|
| June 24, 2024 - July 01, 2024 || Finalize the implementation of the filter by pageviews feature. Continue working on implementing the similarity search for deleted pages. |
| July 01, 2024 - July 08, 2024 || Complete the implementation of the similarity search for deleted pages. Conduct thorough testing and debugging of the added features. |
=====
## Mid-Evaluation
| Period | Description | Description |
|--------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| July 08, 2024 - July 15, 2024 | Address any feedback received during the mid-evaluation. Begin documenting the newly added features and any necessary code optimizations. |
| July 15, 2024 - July 22, 2024 | Continue documenting the project progress and improvements made. Start preparing for the final evaluation by ensuring all project goals are met. |
| July 22, 2024 - July 29, 2024 | Conduct final testing and bug fixes to ensure the stability of the PageTriage extension. Prepare comprehensive documentation and user guides for the added features. |
| July 29, 2024 - August 05, 2024 | Review the project timeline and ensure all deliverables are completed. Finalize the project presentation and any necessary demos for the final evaluation. |
| August 05, 2024 - August 12, 2024 | Submit the final project report summarizing the work done, challenges faced, and lessons learned. Prepare for the final evaluation presentation, highlighting the project achievements. |
| August 12, 2024 - August 19, 2024 | Participate in the final evaluation and present the completed project to mentors and community members. Engage in discussions and gather feedback for future improvements. |
This timeline structured in tables provides a clear overview of the project's timeline, dividing it into distinct periods and describing the tasks to be completed during each period.
>===Participation
- Zulip: I am very familiar with Zulip and have already engaged in conversation with my possible mentors using this platform.
- Discord: There is also a discord for the PageTriage project where I can interact with my mentors.
- Phabricator: In terms of tasks I can view and manage tasks with Phabricator.
- Gerrit: Gerrit also provides a response functionality where I can be given feedback on whatever patch or commit I make.
> ===About Me
>
**Education**
University: [University Of Benin](https://www.uniben.edu/) (UNIBEN)
Year of Study: 4th year (Currently in my Internship period so I am very free to work on tasks).
Field of Study: Computer Engineering.
**Skills**
- Frontend: HTML, CSS, Javascript, Vuejs, Codex, Bootstrap5.
- Backend: PHP, Python, Laravel, Django.
- Others: C/C++, SQL, and Docker.
**How did you hear about this program?**
YouTube: I heard about GSoC from YouTube about two years ago, and I have been very fond of it ever since.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the program?**
Tuesdays: I am currently on internship (industrial training), I am only supposed to be present on Tuesdays other than that I don't have any other commitments.
**What does making this project happen mean to you?**
It means a lot to me, to be able to work on a large code base, for a popular organization like Media Wiki, alongside well-experienced software engineers like @Soda and @TheresNoTime, using my favorite tools like Javascript, PHP, and Vuejs, would be a dream come true, as I stand a chance to get the various benefit,
- More Industry experience
- Networking with more experienced software engineers/developers
- Making friends
- Lastly, the stipend, would help in starting a life on my own when I graduate.
> ===Past Experience
>
====Contributions to Wikimedia
**PageTriage Extension**
| Title | Link | Status |
|Styling of AFC date picker and NPP date picker has diverged|[T355094](https://gerrit.wikimedia.org/r/c/mediawiki/extensions/PageTriage/+/1012027)| Under Review |
**Cargo Extension**
| Title | Link | Status |
|Cargo adds unnecessary JS config vars to all pages| [T353094](https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Cargo/+/1009563)| Reviewed(not merged) |
**Pre-Application Requirement**
- Built a Vuejs frontend project using [Wikimedia Codex UI library](https://doc.wikimedia.org/codex/main/) and [Wikimedia API](https://www.mediawiki.org/wiki/API:Main_page), code available on [github/obamwonyi/media_wiki_T357337](https://github.com/obamwonyi/media_wiki_T357337)
>===Working Experience
**[LucrativeTech/Luta](https://lutahq.com/), Nigeria (Remote) — Full Stack Developer, NOVEMBER 2022 - MAY 2023**
- Spearheaded the development of a robust API powering a dynamic mobile trading application, leveraging the prowess of PHP, Laravel, and MySQL for seamless user experiences.
- Orchestrated the creation of a cutting-edge Full Stack web application, employing Vue.js, Laravel, and Mysql, demonstrating exceptional proficiency and collaborative prowess alongside a Senior Developer.
- Pioneered the construction of a vital API for a mobile application, streamlining the management of associations with precision and ingenuity.
>===Other Open source I have contributed to
- [Djoser](https://djoser.readthedocs.io/en/latest/getting_started.html): I contributed to the Djoser documentation, it was using the old method (url()) for declaring url for Django views so I updated the documentation to use the path() function which is the recent and more common one. [contribution](https://github.com/sunscrapers/djoser/pull/793)
===Any Other Info