**1. Synopsis and Personal Profile**
**1.1. Profile**
- Name: Wah Vanessa
- UserName: essa237
- Github: [[ https://github.com/Vanessa082 | url ]]
- Location: Douala, Cameroon
- Timezone: UTC+1 (WAT)
- Ideal Working Hours: 9:00 AM – 5:00 PM UTC+1 (40 hours per week)
**1.2. Synopsis**
The Lusophone Technological Wishlist is a community initiative designed to identify and prioritize the technical needs of the Portuguese-language Wikimedia editors. This project aligns with Wikimedia's [[ https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Annual_Plan/2025-2026/Product_%26_Technology_OKRs | annual plan ]] Product & Engineering Support (PES), Wiki Experiences (WE), and ways of working to move faster, smarter, and better. Also, the plan focuses on reducing contributing friction and improving the reliability of structured data.
As a full-stack junior developer and a member of Wiki Mentor Africa and Wiki African Women communities, I am applying to address Wish #wishlist #3 (verify duplicate references automatically), Automatic Duplicate Reference Detection in VisualEditor.
Having authored articles such as [[ https://en.wikipedia.org/wiki/Denis_Worlanyo_Aheto | Denis Worlanyo Aheto ]] and [[ https://en.wikipedia.org/wiki/Anikeade_Funke-Treasure | Anikeade Funke-Treasure]] and done a few edits, I have expirienced first hand citation fatigue due to the current lack of integration between the automatic and Re-use citation workflows. A solution that uses identifier normalisation to bridge this gap with the system intelligence, prompting me to re-use the existing citation rather than creating a duplicate.
My background as a contributing developer to the [[ https://www.wikidata.org/wiki/Wikidata:WdTmCollab | WdTmCollab ]] tool prepared me to tackle the complexities of MediaWiki and Wikibase. I have a goal for this internship to implement a solution with logic within the VisualEditor that identifies existing identifiers (ISBN, DOI, URL) in real time, preventing redundant data entry and keeping article sources clean and easily maintainable for the Losuphone community and Wikimedia as a whole.
**1.3. Community engagement and Experience**
I am not just a coder; I am a new practitioner within the ecosystem. My relevant experience includes:
- Editorial insight: Experience managing infoboxes, articles, and citation structures in English Wikipedia.
- Mentorship: Currently serving as a mentor in Wiki Mentor Africa, helping new editors navigate the very tools I now seek to improve.
**2. Problem Statement**
**2.1. Current citation workflow**
The visual editor citation tool, as seen in the image below, separates the automatic, manual, and re-use features into isolated tabs.
{F75188162}
- How the automatic works: When an editor uses the automatic tab to paste its URL or DOI, the system generates a new reference. It does not check if the same already exists in the re-use list.
- This leads to data redundancy, "reference clutter," where the same source appears so many times in the citationlis under different numbers making heavy wikitext
**2.2. Complexity of Manual Entries**
{F75188766} {F75188803}
{F75188825}
As seen in the 2nd, 3rd, and 4th images, the manual citation process involves a high cognitive load. It has 5 different categories (Website, Book, News, Journal, and Basic) and so many fields (ARCHIVE, URL, DOI, ISBN, etc.) here; the risk of duplication is higher.
**What is wrong? An editor might manually fill out a citation web template for a source already automatically cited via the automatic tool.**
**What should be done? The system should be able to normalise inputs and automatic entries.**
**2.3 Technical Challenges to Overcome**
For this wish to be realized, our implementation has to address a few technical huddles:
- Normalization:
- A DOI can be written as 10.1100/abc or https://doi.org/10.1100/abc.
- A URL may have a www. prefix or not.
My approach has to involve a normalization engine ensuring the right sources are compared with the right ones. This has to be real-time; we have to trigger the check the moment the user clicks "create" in the automatic tab or "insert" in the manual tab without lagging the UI.
In case there is any duplicate, the user should not be blocked; rather, the user should be guided to the re-use flow automatically, a proper UI/UX feedback.
3. Technical Approach.
While going throught two repos , I found them to be a source of truth for me to understand the technicalities and how the architecture of the citation feature came about,. I realiszed that, while the user interacts with the VisualEditor(VE), the one with a large codebase, the logic for automation, if I understood very well, is in the citiooid extension. Implementation has to target the **//modules/ve//** directory within the codebase. This may ensure existing communication between the citiod and the VE.
- From findings and evaluation, the primary point for this is //**``ve.ui.CitoidInspector.prototype.performLookup``**// in the //**ve.ui.CitoidInspector.js**// this method follows the path: decoding input and triggering an API call.
I propose to interrupt this flow with a local first check
Decoding: Capturing the search string.
Before initialiszation, I will implement a check against the document's InternalList. It will iterate through existing mwReference nodes. I will specifically parse the templateData of these nodes to see if the URL, DOI, or ISBN matches the new input.
- To prevent false negatives, such as failing to match URL a URL because of a missing slash, I will build a normaliszation utility, URLs: Use mw. Uri to strip protocols and fragments for a "canonical" comparison, DOIs: Convert to a uniform lowercase format, stripping the https://doi.org/ prefix. ISBNs: Use regex to strip hyphens and spaces, comparing only the raw numeric string.
- Make use of OOUI (OpenIcons User Interface) framework
- From the patterns of it, I will add a new **//`OO.ui.MessageWidget`//**. If there is any duplicate found, the UI will provide the action button.
Clicking this will trigger the method, automatically switching the user from the "Auto" tab to the "Reuse" tab with the matching reference highlighted.