===Profile Information
**Name:** Farhan Azmi
**Github:** github.com/farhanazmiCS
**LinkedIn:** linkedin.com/in/farhan-azmi-94b70a145
**Location:** Singapore
**Typical working hours:** 10am and 9pm (GMT+08:00 Asia/Singapore)
===Synopsis
Wikipedia is an online encyclopedia that provides non-opinionated, factual articles about a given topic. To prevent pages from being vandalized or edited to host content that is either sensitive or controversial, some pages are protected to a degree (e.g. semi-protected, extended-confirmed protection, etc.) where only seasoned users can make direct edits. For a new user to make an edit, the user would have to submit an edit request indicating the changes and then wait for feedback from a user having full edit access. Should the edit request bring valid points, the edit will be incorporated into the article page.
In the current implementation, the process for making an edit request is not friendly for new users. Firstly, new users are not accustomed to the Wikitext markup language. Secondly, many instructions are thrown to the user as they make an edit request, overwhelming new users and may even dissuade them from making an edit request, turning away a potential contributor.
The objective of this project is to develop a step-by-step form with a clean, easy to use user interface that allows users of any background to submit a Wikipedia edit request whilst ensuring that the edit request complies with all Wikipedia policies.
**Possible mentor(s)**
@Enterprisey, @Firefly, @SD0001
**Contacted mentors?**
Yes
===Deliverables
- A wikipedia user script that shows a form for submitting a Wikipedia edit request that allows users to cite sources such as web pages, books (ISBN), journal or news article. The form will guide the user along the edit request process, and will raise error messages if the edit request is not satisfactory. The form must be suitable for use by beginners.
- A backend for the user script to make requests for validation (e.g. URL validation) and other purposes (e.g. such as checking if the citation is in proper formatting).
===Timeline of deliverables
| **Period** | **Task** |
| May 20 to June 12 | Community bonding period. Contributors are introduced to their mentors, and are to read the project’s documentation, discuss and recap the deliverables, and come up with subtasks to do for each deliverable. |
| June 13 to June 17 | Mentors and contributors discuss the design of the form that allows users to input a source, and discuss how error messages are displayed for invalid edit requests. This can be in the form of a mockup tool like Figma, a paint drawing or coded with frontend technology. |
| June 20 to June 24 | Contributors write theWrite code for the form using frontend technology such as HTML, CSS and JavaScript. |
| June 27 to July 1 | Recap with mentors on what is considered as a valid edit request. Use backend technology like Python to develop an API for performing validation on the edit request. |
| July 4 to July 8 | Perform unit testing on the backend to check if the program andcode to ensure that all validation works as expected and is tested with dummy edit requestsfunctions work as expected. |
| July 11 to July 24| Backend and frontend integration. | Integration of the backend and frontend. Perform testing to determine if the frontend can successfully communicate with the backend. In addition, Test if the frontend can successfully make requests to the backend and ensure appropriate error messages are shown should an invalid edit request is submittedthe requests made by the frontend to the backend must return the appropriate response.
| July 25 to July 29 | Write and submit **Phase 1 evaluation** |
| August 1 to August 12 | Bug fixes for the backend code and testingfunctions in the backend and implement new validation functions, if not yet implemented. Perform testing for all backend functions. |
| August 15 to August 26 | UI improvements and bug fixed for the frontend and bug fixes. Test the user script for any anomalies in behavior. |
| August 29 to September 2 | Integration ofng the frontend and the backend,. testing of final productTest if the frontend can successfully communicate with the backend and determine if the appropriate response is returned. |
| September 5 to September 9 | **Final evaluation** |Rectify any bugs in the frontend or backend, if any. |
| September 12 to September 19 | Mentors submit contributors’ final evaluation |**Final evaluation** writeup and submission. |
| September 20 | **GSOC 2022 result** |
===Participation
- Communication is done primarily via Zulip.
- The project’s source code will be stored in a newly created Github repository and changes will be frequently pushed to it. Should new features be implemented, newer branches will be opened, and then merged once the feature is tried and tested.
===About Me
**Education**
I am Farhan, a self-taught developer. I have taught myself software development skills by completing online courses such as Harvard University’s CS50 Introduction to Computer Science, CS50’s Web Programming with Python and Javascript as well as MIT’s 6.001x Introduction to Computer Science with Python. Currently, I hold an Aeronautical Engineering diploma from Singapore Polytechnic and will be pursuing undergraduate studies in Software Engineering at the Singapore Institute of Technology in September. I came across GSOC via the notes-to-freshmen-from-the-future Github repository uploaded by NUShackers whilst skimming for tips and advice on how to excel in software development. Up to the point of discovering GSOC, all of my projects are solo projects whose purpose is to develop competency for the chosen technology stack, as well as to improve my problem solving and programming skills — but none of them made an impact on others or taught me collaborative software development. With GSOC in collaboration with the Wikimedia team, I can kick start my journey in collaborative software development and open-source software whilst simultaneously creating a great impact on people, considering billions use Wikipedia as a tool for quick information retrieval.
**Commitments and availability**
In terms of availability, I will be able to fully commit to the project from May to August with no other commitments with the exception of a two-week vacation from 12 July to 25 July. I will be open to communications during the period of vacation to discuss the project. From September and beyond, the university term will commence with around two classes each day where I will be able to contribute to the project for around four hours each day.
===Past Experience
**Microtasks carried out**
I have completed 4 of the 5 microtasks assigned by the mentors. Click any one to view the details. (Will put the link soon)
Microtask 1: Making an edit request
Microtask 2: Design a form that allows a user to input a source
Microtask 3: Implement a form for a quote
Microtask 5: Complete the user scripts tutorial
**Past projects and skills developed**
Prior to GSOC, I have developed several web-based projects using tools such as Python, JavaScript, HTML, CSS and Bootstrap by developing some personal projects. These projects include:
1. Trip Planner, an application using React and Django Rest Framework that allows users to plan a trip with their friends;
2. Network, a twitter-like social network application created using Django and JavaScript that allows users to follow/unfollow users, create, like and comment on posts;
3. Mail, an email client developed with JavaScript that lets users send and receive email;
4. Commerce, a Django-based web application that allows users to create and bid listings;
5. Wiki, a Django-based web application that allows users to create, retrieve and edit wikipedia-like entries;
6. Death to Corona, a Flask based web application that provides users with coronavirus advisories, checks for nearby vaccination centers given a postal code and lets users perform a questionnaire to assess their risk level to COVID-19.
Throughout the period of these projects, I have learnt skills such as frontend and backend web development, utilization of external APIs (using the fetch API), developing REST APIs for the client, developing application scripts, designing a responsive web interface, as well as testing and writing documentation for projects. All of the above-mentioned projects can be seen in my Github.