===Profile Information
**Name:** Pushkar
**Portfolio website:** [[ https://pushkarbansal.me/ ]]
**Github:** [[ https://github.com/pushkar707 | pushkar707 ]]
**Twitter:** [[ https://twitter.com/Pushkar66114413 ]]
**Phabricator:** [[ https://phabricator.wikimedia.org/p/Pushkar7077/ | pushkar7077]]
**Location:** India
**Typical Working Hours:** 4.00 am to 12:30 pm and 3:00 pm to 6:30 pm (UTC)
=== Synopsis
**Summary:**
The Lingua Libre v3.0 enhancement and migration project aim to revamp the legacy Lingua Libre website from a wikibase, blazegraph backend to a modern tech stack of Django and vuejs. The main reason behind revamping is to improve performance in terms of query speed using a separate client and server side and avoid issues such as duplication of data through DRY principles.
**Benefits:**
The aim of this project is going to be:
- Complete the tasks mentioned on Lingua Libre's phabricator's workboard.
- To add all the functionality and pages of legacy Lingua Libre to v3.0 along with new features and enhancements.
- The aim is to improve scalability, maintainability, and performance in v 3.0 providing an enhanced user experience in terms of speed, storage, UI/UX, and functionality to attract more contributors
**Possible Mentors:** Hugo Lopez ( @Yug ), Florian Cuny ( @Poslovitch )
**Have you contacted your mentors already?**
Yes
===Deliverables / Timeline
Here are the deliverables that this proposal promises to complete within the timeline.
**Community Bonding Period**
- The target here is going to be to strengthen the bonds with the team and mentors.
- Discuss the timeline proposed, and make any changes here if required.
- Understanding all the issues on the phabricator's dashboard, and solving any confusion along with the team
- Testing and going deep into the codebase to identify bugs and create a ticket for those.
- Discussing various ideas and methods to solve the problems, and complete the tasks.
**Week 1-2 (May 27 - June 9): Basic Full-Stack tasks**
- Complete the backend workboard including django update and authentication
- Complete the frontend workboard.
- Create static pages: home, about, and help pages. I noticed that these pages are not responsive on [[ https://lingualibre.org/]], so I will create them responsive to all devices.
- Complete the documentation tasks.
**Week 3-4 (June 10 - June 23): Record Wizard **
- Working over the record wizard's design and UI (with discussion with mentors)
- Completing workboard tasks for Record Wizard (currently 6 tasks)
- Fixing any new bugs found, and thoroughly testing the entire functionality
- The aim is to wrap up the record wizard at this time.
**Week 5-6 (June 24 - July 7): Word list generators and upload batch**
- Complete any tasks that might be pending from the first four weeks (although this is unlikely)
- Complete the world list generators and upload batch tasks on the workboard
**Note:** In the first 6 weeks, after completing the tasks mentioned above, if I have any remaining time, I will be spending that over backlog tasks mentioned on the workboard, also I will be writing code for testing and even monitoring required for all the tasks I complete during the project.
**Week 7-8 (July 8 - July 21): Website**
- Complete user's profile
{F43910753}
- Add the discussion page with all the CRUD functionality as in [[ https://lingualibre.org/]], along with any new functionalities required.
- Add the statistics page
**Midterm Evaluation Period (July 8 - July 12)**
These are the expected outcomes which can be evaluated in this evaluation:
- A fully functional record wizard with no bugs.
- All the frontend, backend, and documentation tasks completed from the workboard.
- UI for the websites including home, about, help, discussion, and statistics page
- Word list generators and upload batch tasks.
- I will do my best to also complete any more tasks added to the workboard before this time
**Week 9-10 (July 22 - August 4): Website**
- Notifications and notices
- Edits and actions implementations of all the pages
- Implement search on the website
**Week 11-12 (August 5 - August 18): Finalisation and DevOps**
- By week 10, the entire application along with all the pages is expected to be completed, though I am sure there must be something in the website that I must have missed above, so those can be completed in this time
- Entire application will be thoroughly tested and any feedback provided to me will be worked upon in this period
- I can handle DevOps work including deployment, CI/CD, docker, or whatever is required in this period.
- Finish testing and monitoring on the website. (Although testing might be finished by week 10 only)
**Final Evaluation Period (August 19 - August 26)**
- By 18th August, the project will be completed, and the entire project will be ready for evaluation in this period.
- Any further feedback on my work can be handled in this period.
**Post-GSoC (August 26 onwards)**
- Will maintain my contact with the community, and help future contributors to contribute.
- Will be solving doubts and queries of the community, especially related to all the code I would've written.
**Extended Coding Period (September 3 - November 4)**
I can use this period to work over any feedback or bug reports I receive during the time before this.
=== Participation
- I will stay available for mentors during my working hours, where they could discuss anything with me.
- I will stay active on phabricator, and GitLab
- I will be providing daily updates for all the work I do.
- I will seek help from the mentors whenever I have to, and have clarity before performing any task.
=== About Me
**Education **
I am currently pursuing a 3rd year BCA from Vivekanand Institute of Professional Studies, Delhi. I will be graduating in July 2024
**How did you hear about this program?**
I got to know about this program through @Yug. He introduced me to this project, while I was contributing to Lingua Libre's Signit Extension. Since my tech stack matched with this project very well, so he recommended I go for it in GSOC.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?**
I just have my week-long exams in June, during which time my working hours will be limited. I am pursuing my education through open learning, so I don't have any commitment there other than exams. I am currently doing an internship that ends on 30th April, so it doesn't collide with GSOC. Hence, I won't have any other commitments during the GSOC period.
**We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to Apply to both programs and, if so, with what organization(s)?**
No, I plan on participating only in Google Summer of Code 2023, with Wikimedia Foundation.
**What does making this project happen mean to you?**
For me contributing to the GSOC project has been my target since the last year's GSOC (as I missed it). For this I have leveled up my skills during the past year, made open-source contributions, etc. I have been looking for a project to work on in GSOC since November 2023, looking at previous year's organizations. I was finally able to find this project last month, where I felt that this is the project that I can do better than any other project, the project is for a cause, and that also makes me feel for the project. My tech stack matches very well with the project. Getting selected for this project has been my primary focus in the past month, and once selected, completing it successfully is going to be the top priority for the upcoming months.
=== Past Experience
I have been doing programming and web development for 4+ years now. I have also worked professionally as a freelancer and intern for almost 2 years now.
**Please add links to any feature or bug fix you have written for a Wikimedia project during the application phase.**
- https://phabricator.wikimedia.org/T354623 - Task merged with https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/5
- Created another MR solving setup issues faced by other contributors: https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/4
- Contributions to Lingua Libre signit project
- https://github.com/lingua-libre/SignIt/pull/59
- https://github.com/lingua-libre/SignIt/pull/57
**Development Skills**
| Frontend | Javascript, Vue, React, TailwindCSS, Strict Typescript |
|Backend | Django, Flask, Postgres, MySql, Nodejs, Prisma |
| Advanced | Firebase, Docker, Redis, Socket.io, Queues, Celery |
| Deployment | AWS EC2, ECS RDS, Nginx, CI/CD, |
| Testing | Pytest, Jest |
| Monitoring | Prometheus, Loki, Grafana (Beginner) |
**Professional work experience**
- **Full Stack Intern** at Stickman Services: July 2022 - January 2023
- **Freelancer** since January 2022
- **Software development Intern** at Heydaw Technologies: September 2023 - January 2024
- **Software development intern** at Rakshakcode: February 2024 - April 2024
**Describe any relevant projects that you've worked on previously and what knowledge you gained from working on them.**
- **vCard:** vCard is a webpage project I built using Django. It allows users to create a digital cart that displays their basic information. They can also use it as a mini-website by adding their products, and separate sections where they could add images and text. [[ https://github.com/pushkar707/vCard | Repo]]
- **License Generation System: ** This is a project in MERN Stack, although I have added it here, especially due to its client side, i.e. javascript. This project is based on govt. official license creation system, with a better UI/UX 70% faster than govt’s system. Users can get started instantly with Firebase login and use a highly interactive dashboard to enter their details, upload documents, pay test fees, take license tests, and finally generate the license. [[ https://github.com/pushkar707/license-creation-system | Repo]]
- **Vercel Clone**: Not very relevant to this project, but this is one of the most interesting and advanced personal projects of mine, hence adding it here
- Working: Takes the GitHub repo of the project and spins a docker container, that clones and builds the project,
- Further, build files are copied outside of the container and deployed to AWS S3
- Users can debug the deployment process by checking live logs provided using Redis and socket.io.
- Finally, a reverse proxy server is created that returns static files from AWS S3.
- The project enabled me to get hands-on experience with Redis, docker, socket.io, and system design.
- Apart from these projects I have worked on the admin dashboard, e-commerce websites, and other multiple full-stack projects. Since they are company's or client's projects and do not have a public repository, I didn't mention them explicitly, but you can check those on my [[ http://pushkarbansal.me/ | portfolio ]]or [[ https://www.linkedin.com/in/pushkar707 | LinkedIn]]. To summarise, I feel I have enough experience to be able to take up and complete this project.
You can find details about my work in these positions on my [[ https://pushkarbansal.me | portfolio]] website:
**Describe any open source projects you have contributed to as a user and contributor (include links):**
Following are some of my other contributions to open source:
- **Freecodecamp's website**: https://github.com/freeCodeCamp/freeCodeCamp/pull/51816
- **Creative Commons website:** https://github.com/creativecommons/creativecommons.github.io-source/pull/710
- **Creative Commons website: ** https://github.com/creativecommons/creativecommons.github.io-source/pull/756
- **Creative Commons legals-tool website: ** https://github.com/creativecommons/cc-legal-tools-app/issues/396
===Work Period
**Week 1**
- Discussing the week 1 and week 2 tasks with my mentor over a meeting, to begin working on them.
- Add Tailwind.css to the project
- Then I created the Home, about anh help page fully responsive with good design (almost finalized expecting only minor changes in future)
- Further, I implemented i18n for the translation of the website
**Week 2**
- I had to do some small backend and documentation tasks, but after discussing them with my mentor, they were secondary tasks and there was confusion regarding them.
- Hence I moved to record wizard, which according to me is the most important aspect of the project.
- Initially, it took me some time to get comfortable with codex components, and vuejs (it's my first time coding in VUE), but now I am comfortable working with it, and will make good progress in weeks 2 and week 3
**Week 3**
- Created APIs for add/edit locutor
- Allowing languages CRUD of a locutor on both above APIs
- Integrate them with the UI
**Week 4**
- Discusses and completed the three-word generators, namely nearby, external tools and wiktionary
- Integrated them with word list step
- Started work over the record and review step
**Week 5**
- Completed record wizard
- Did some CSS work to make it look clean
- Made the entire record wizard page responsive to all screens
**Week 6**
- Handle upload batches phabricator tickets including:
- {T354857}
- {T354626}
- Very little work during this week as I was ahead of the schedule and mentors were also busy
**Week 7**
- Implementing recording of sign languages in Record Wizard
- Updating hardware check step for checking camera
- Video recording is added in the record step, and audio it can be played in the review step.
**Week 8**
- Syncing video recorder perfectly with an audio recorder
- Thoroughly testing the video recorder and wrapping up the task of enabling users to record sign languages
- Implementing popups in record step for settings and keyboard shortcuts
**Week 9**
- Implementing local list word generator in word list step
- Adapting popups in the recording step for video recording
- Modifying record settings when recording poems and sentences
**Week 10**
- Creating API to get all the words already recorded by a locutor
- Implementing exclude words already recorded functionality in word generators
- Improving UI for word list generators by implementing loader and warning messages when generating words.
**Week 11**
-
**Week 12**
- Final GSoC24 evaluation
- Final blog post : //[Navigating through the GSOC journey](https://medium.com/@bansalpushkar99/navigating-through-the-gsoc-journey-c6917cb7eada)//
- V3 alpha deployed for testing : [dev.lingualibre.org](https//dev.lingualibre.org)
== Coding achievements
Following are all the merge requests. Technical mentors were mostly not available to review the code, hence a lot of code has been limited to a few MRs:
- [PR #12](https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/12) Frontend pages
- [PR #13](https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/13) i18 setup for multiple languages
- [PR #14](https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/14) Record wizard (for audio/video recordings)
- [PR #15](https://gitlab.wikimedia.org/repos/wikimedia-france/lingua-libre/lingua-libre/-/merge_requests/15) Recording upload batches
=== Website and Recording Studio steps
# T354563, wrapper/composible for API access -> Created a function for making API calls, however isn't fully implemented everywhere, as reviewed by mentors
# T354631, responsive UI -> All UI in lingua libre is responsive to all screens
# T279816 Allowing long text recording -> We can now record poems and sentences
# T370618, selector for words/sentences/poems -> this has been added
# T313575, shareable lists -> users can share their word lists
# T354629, locutor creation UI -> users can create locutors
# T35460, CRUD on locutor's languages -> done
# T354630, Prevent user from going to Languages step if selected locutor has no languages -> various checks have been added in step 1 for going next
# T354617, Add API route PATCH /locutors/my/:id/languages/:id to edit a spoken language of the locutor -> not needed as languages of locutor are handled in edit locutor API
# T354556, video recording -> video recording enabled in record-wizard
=== Word generators
# T354635 Words Generator: reimplement generators -> implemented from scratch
# T354618 List loader: reproduce Local lists
# T354638 Words Generator: Words from Wiktionary categories
# T354637 Words Generator: Words from Wikipedia categories
# T354636 Words Generator: Words from Wikidata items' labels (SPARQL Query)
=== Advanced list behaviors
# T344221 Words generator: list of excluded words
# T212671 Lists loader: set rich wikitext cleaner
# T276014 Lists loader: limit local lists loading to n words
=== Workflow integrity
# T354857 Handle Wikimedia Commons error messages in upload2commons -> some errors are handles as directed by poslovitch
# T354626 Add 'errored' status for Recordings -> done