===Profile Information
Name: Pratham Vaidya
Github : [prathamVaidya](https://github.com/prathamVaidya)
IRC nickname on libera.chat IRC: prathamVaidya
Web Profile: prathamVaidya
Resume : [Pratham's Resume](https://prathamvaidya.in/resume/resume.pdf)
Location: India
Time Zone: IST (UTC+5.30)
Working hours & Availability: 09:00 AM to 09:00 PM (IST)
===Synopsis
===== Summary
The process of creating training modules on the Programs and Events Dashboard is complicated and requires users to create .json format training module pages on meta.wikimedia.org. These JSON pages are then imported into the Programs and Events Dashboard's database.
The solution is to create a Training Management System on the Wiki Dashboard itself. This system can be used to create, and update training content for the Programs and Events Dashboard and the Wiki Education Platform in a very user-friendly way.
===== Possible Mentor(s)
Sage Ross
===== Have you contacted your mentors already?
Yes
== Technical Details and UI Mockups
This section contains important technical details and User Interface designs to better understand the technical approach and the defined timeline.
===1. Training Management System Design
The new proposed training management system will have features to create/update library, modules and slides from within the dashboard. The existing system use wikimedia pages as the source for the training content for Programs and Events Dashboard. With the new dashboard training manager all the changes can be directly made from the dashboard itself but the translation of training content depends hugely on community contributions. To allow open source contributors to edit and add translation we have to sync back the updated training data from dashboard database to wikimedia source page using the [mediawiki APIs]( https://meta.wikimedia.org/w/api.php?action=help). Normally, we can edit any wiki source page using the wiki EDIT API with the user's Wikipedia account but the training json data on wikimedia is created as a UserPage with JSON files along with normal wiki pages. User Pages are special pages that can only be [edited by the owner](https://en.wikipedia.org/wiki/Wikipedia:User_pages). If the training content can only be edited by the owner, then syncing back to wiki is not possible.
After weighing the pros and cons of several potential flows, I've arrived at the most practical and optimal flow for the training management system.
Here is the design:
{F42744472}
This system has two parts:
**1. Migration of JSON pages to Dashboard Database (One Time Procedure)**
The structured [[https://meta.wikimedia.org/wiki/Training_modules/Documentation | JSON training content]] includes a 'wiki_page' field that either links to an existing wiki page or contains embedded content within fields such as 'introduction', 'description', and 'content'. During the processing phase, training content with a designated wiki page will be stored directly into the database, while content lacking a wiki page will be automatically generated into a new wiki page and then saved to the database. Ultimately, each piece of training content will be associated with its own distinct wiki page.
**2. New System Workflow**
- Now when the training content is on Wiki Pages so open-source contributors can directly edit and translate the training content.
- Dashboard users who have access to the training manager can also create edits. These edits will be created on the wiki page from their Wikipedia account using [[https://www.mediawiki.org/wiki/API:Edit | Edit API]].
- When the edits will be made to the wiki page by the outside contributors. The changes will require to be approved using the dashboard. (We can also make it automatic without any review, requires a discussion)
- Dashboard users will have the option to either approve a new edit or roll back to a previous revision. This final edit will be updated in the database and rollback can be done on wiki page in case of rollback.
- This new training management system will have the benefits of improved UI/UX and also outside contributions for edits and translations.
- Preferably, this system will require user wiki account access for creating edits from their account. However, if such access is unavailable, anonymous edits can also be accommodated.
===2. React Frontend for Training Management System
I have read the code of WikiEduDashboard in detail to understand the working of the codebase. I was specially interested understanding the part of how react is closely integrated with ruby server side rendered HAML Pages. The current training system is also integrating React components into the HAML page to enable interactive features.
My Proposed Training Management System is divided into 4 pages:
==== Library Listing Page
This page is similar to existing training page except for the difference that it also shows edit options and unpublished libraries. The existing training index page is rendered from training_controller#index, _all_modules.html.haml. We can update this HAML page to show the new options to user based on its the user role.
{F42573252}
==== Library / Module / Slide Manager Page
- These 3 new pages will be created. These all have very similar features and will share almost all same functionality and components.
- It has many interactive features which will require react. We can add the required components in javascripts/components/training.
- The primary data that is "library data" for library manager page can be pre-populated using our new controller training_manager_controller#library_manager and similarly for other module and slide page.
- For other features like fetching translations, creating new modules it will need separate APIs.
- Features like Source reloading, Wiki Markup <--> HTML, JSON <--> YAML conversion should be done client side to move some performance load from server to client.
===== Library Manager Page
- Used to create/update library content and its modules.
- Similar page for Module and Slide except they don't have group category option.
{F42753026}
===== Three Panel View
This is Right side Panel with three modes of data representation.
- **Graphical View :** It will contain any form elements for title or any other field and WYSIWYM content editor for description of library, modules or slides. This content editor should support visual editing and also wiki markup code editing similar to the one in MediaWiki software.
- **Web View :** It can be used for previewing the content and the output will be as close to actually rendered HTML as it can.
- **Code Editor:** This will show the library, module, or slide structure in code format as JSON and YAML. (This feature can be optionally removed if not needed, although it can prove beneficial for users accustomed to editing JSON for training content)
All these editor will share a common state which means changing data in anyone view will change the state of other two views. This will give users multiple options to edit the content.
{F42573251}
===== Library Manager : Add Module Dialog
- Click on Add Module and this dialog will appear.
- It has 2 options to add a module. Import from JSON and create new. A similar component will be used to add slides.
{F42753054}
===== Library Manager : Review Edits
- When a library, module or slide page is opened, it will check for any edits on its wiki page from outside opensource contributors.
- User are required to take an action to continue any further editing. User can choose to approve an edit or rollback to a previous revision.
- The review dialog only shows edits between last dashboard made edit and most recent wiki edit for reduced complexity.
- Rolling back to more earlier revisions can be done by going to the wiki page itself.
- Click "View Diff" will redirect to [[https://meta.wikimedia.org/w/index.php?title=Training_modules%2Fwikidata%2Flibrary&diff=23168476&oldid=21894313 | wiki compare page]].
{F42753225}
===== Module Manager Page
{F42753100}
===== Slide Manager Page
{F42753106}
===== Slide Manager Page with Assessment Mode
- Mark a slide as assessment to enable easy-to-use quiz UI.
{F42753127}
=====3. APIs
This is a rough list of all the main APIs required.
##### Libraries
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /libraries | published=true | Retrieve published libraries |
| GET | /library/slug-name | lang=hi | Retrieve a library by slug and language|
| POST | /library | {status, name, intro, slug, wiki_url} | Create a library |
| PUT | /library/slug-name | {status, name, intro, slug, wiki_url} | Update a library |
##### Modules
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /module/slug-name | lang=hi | Retrieve a module by slug |
| POST | /module | {name, slug, content, wiki_url} | Create a module |
| PUT | /module/slug-name | {name, slug, content, lang, wiki_url} | Update a module |
##### Slides
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /slide/slug-name | lang=hi | Retrieve a slide by slug |
| POST | /slide | {name, slug, content, wiki_url} | Create a slide |
| PUT | /slide/slug-name | {name, slug, content, lang, wiki_url} | Update a slide |
=====4. Database Changes
Original Database Schema
{F42555832}
Proposed Database Changes
{F42555845}
- Added status enum in training_library for PUBLISHED / UNPUBLISHED values. This is required because now the list of Published libraries will not be fetched from any Wikimedia page.
- Moved translations from column to a separate table. This is an optimization so that an increase in total number of translations for content does not slow down accessing and updating operation on the table.
===Deliverables
===== Mid-Term evaluation
The deliverables will primarily include the Training Management System with the following features:
- Migration Script
- User can VIEW / CREATE / UPDATE new Libraries, Modules and Slides
- Content Graphical Editor that supports Graphical Editing and HTML + Markdown Editing (Possibly s[[https://meta.wikimedia.org/wiki/Programs_%26_Events_Dashboard/Using_the_Dashboard#Supportinged_wikitext | wiki markup)]].
- Web Preview (Supporting Preview for Library, Module, and Slide without Assessment)
- Code Editor (Supporting JSON and YAML Editing)
- Working synced state functionality between the Three Panels.
- Backend APIs for basic CRUD operations. (API Discussed above)
- Database Changes
===== Final evaluation
- Slide Assessment UI
- Feature to Import data from wiki source.
- Translations Support- Review Dialog Box
- Slide Assessment UI- Feature to Import revisions from wiki source. (Translations and Edits)
- Image / Video Upload feature in Graphical Editor- Edit / Rollback to wiki page feature
- Syncing from dashboard system- Authorization of users to meta.wikimedia.org wiki page. (As per further discussions)use training system
- Search and remaining APIs.- Image / Video Upload feature in Graphical Editor (API List above)
===Timeline
==== May 1 - May 26 (Community bonding period)
I'll utilize this period to research, review code, discuss, and finalize the requirements and deliverables from the project.
- Discussion regarding Dashboard to Wikimedia Data Syncing.
- Research Editing solutions that go with react and what editing formatting to support. (Only HTML + Markdown or complete WikiMarkup syntax)
- Reviewing changes that will be made to the Database during the project.
- Data migration strategy to follow in case some data needs to be restructured. (Like in case of moving data to separate translations table).
- What existing file upload mechanisms are used?
- Update UI Mockups as per discussions.
==== May 27 - June 3 (Week 1)
- Creating Library APIs and p- Performing d Database changes.
- Updating Training Library Listing Page to support edit, published / unpublished status, and add authorization- Migration Script for migrating wikimedia json pages to database.
- Writ- Add feature to parse Training Tests and Documentationtemplates.
- Logic to create new wiki pages
==== June 4 - June 10 (Week 2)
- Creating Library APIs
- Updating Training Library Listing Page to support editing, published / unpublished status, and add authorization.
- Writing Tests and Documentation
==== June 11 - June 17 (Week 3)
- Setting up redux, stores, and shared state.
- Design and Develop Create / Update Library Page. (Skipping Three Panel View)
- Design components : Draggable Item Container, Modal Dialog with form fields and validations, and smaller components (No API Integration).
- Writing Documentation
==== June 118 - June 1724 (Week 34)
- Develop Right Side Three Panel View Structure
- Code Graphical Editor including form fields and developing Content Editor that supports Graphical editing and Code Editing. (If used existing editor library)
- Writing Tests and Documentation
==== June 1825 - June 24ly 1 (Week 45)
- Develop Code Editor mode in Three Panel View to allow editing using JSON and YAML code. (JSON is used on Wikimedia pages and YAML is also used in database and local training data format)
- Working on implementing shared state between Panels.
- Testing after integration with dummy data without API integration.
- Writing Tests and Documentation
==== June 25ly 2 - July 18 (Week 56 and Mid-Term Evaluation)
- Developing Web Preview Mode in Three Panel View.
- Rendered Preview should be as close to the real rendered view for easy understanding of users.
- Create Module and Slide APIs.
- Writing Tests and Documentation
==== July 29 - July 815 (Week 6 and Mid Term Evaluation)
7)
- Develop Create / Update Module and Slide Manage Page. (Because all the complex components are already made, they can be reused here)
- Integrate Library, Module and Slide APIs.
- Manage Frontend Routing between pages.
- Writing Tests and Documentation
==== July 9 - July 15 (Week 7)
- Work on Client Side WIKIMEDIA -> DASHBOARD Importing functionality.
- Develop Slide Assessment feature to Slide Page
- Writing Tests and Documentation
==== July 16 - July 22 (Week 8)
- Add Translations feature in Frontend.- Create Review Edits Dialog Box UI
- Update APIs for library, module, and slide to ,handle translations and get translations.
- Work on DASHBOARD -> WIKIMEDIA Data sync feature. (This feature needs more clarity and discussions and might require a GSOC extension as per discussion with mentor)Integrate APIs to get revisions from wiki page
- Create backend APIs for review edit dialog
- Writing Tests and Documentation
==== July 23 - July 30 (Week 9)
- Image / Video Upload F- Develop Slide Assessment feature in Graphical Editoron Slide Page
- Add Translations feature in Frontend.
- Update APIs for library, module, and slide to handle translations and get translations.
- Writing Tests and Documentation
==== July 31 - August 6 (Week 10)
- Write Search APIs for Library and Modules
- Design Search Input (Refer Manage Library: Dialog UI Mockup) and Integrate APIs to frontend
- Add Permissions and Authorization logic in APIs and Training ManageImage / Video Upload Feature in Graphical Editor
- Writing Tests and Documentation
==== August 07 - August 13 (Week 11)
- Migrating Data of translations from old column structure to separate translation table. (Check Database changes section)
- Add Permissions and Authorization logic in APIs and Training Manager
- Buffer Period
- Testing and Fixing those Bugs
- Writing Tests and Documentation
- Feature deployment and- Prepare for feature release
==== August 14 - August 20 (Week 12 and Final Evaluation)
- Buffer Period
- Testing and Fixing those Bugs
- Writing Tests and Documentation
I have tried fitting the schedule in the 12 week period but the schedule may require an extension.
===Participation
I am active on Zulip, Slack, and email. I’ll use GitHub for code reviews and related discussions. I plan on regularly meeting with my mentor to discuss my progress and get feedback on the work done so far.
===About Me
===== Education (In Progress)
College: Institute of Engineering and Technology, Resora, India
Year of Study: 4th year
Field: Computer Science Engineering
===== How did you hear about this program?
I have been contributing to open source for a long time, initially, initially I started by creating my projects in the open source domain to solve problems that I have encountered. Later I moved to contributing to bigger projects to learn more from the experienced community and create a bigger impact. Last year I heard about GSOC from the internet and submitted my proposal for an exciting project in an organization but my proposal was not selected. I communicated and got helpful feedback from the mentor and I have used it in creating this proposal.
I believe this can provide me with a good opportunity to dive into deep open- source and create a bigger impact.
===== Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
I will have my final semester exams planned some where in July for a week. I'll give extra hours on other days to compensate for the week.
===== 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)?
I only plan on applying to Google Summer of Code with the Wikimedia Foundation.
===== What does making this project happen mean to you?
I have already been contributing to the wikiEduDashboard Repository for a considerable period, where I have merged feature PRs and addressed bug patches under the guidance of Rage Soss. As I am in my final year, I have encountered challenges in securing interviews due to the recession and my third-tier college. However, one of the most valuable pieces of feedback I received from a mentor was to not lose hope and to leverage this time to work on projects that have a greater impact on the world.
The Wiki Education Dashboard is widely utilized by students, instructors, and trainers, and presents an excellent opportunity for learning and growth. Through my involvement in its development, I anticipate acquiring valuable skills and making substantial contributions to its enhancement. My contributions to open -source projects and successful participation in GSOC will serve as proof of my knowledge and dedication to my future endeavors, motivating me to give my very best.
Regardless of the outcome of the selection process, I remain committed to continued contribution to the project whenever my availability permits.
===Past Experience
===== SDE 1 (MERN Developer) | Applore Technologies | Aug 2022 - Feb 2023
- Architected a secure and scalable system, implementing JWT authentication, group video conferencing feature, and course syllabus management system (admin panel) for E-Learning Software “Mentostar”.
- Engineered a seamless course order system, including course management APIs, a cart handler with complex order logic, and payment integration. Automated tasks through cron jobs for system maintenance and reliability.
- Enhanced user communication with a notification module and facilitated mentor verification through a systematic flow. Implemented a payroll management system for automated compensation based on engagement.
===== SDE Intern (MERN Developer) | Applore Technologies | May 2022 - July 2022
- Implemented role and permission-based authorization system using NodeJS, ensuring secure access control and data protection. This granular system allows for precise control over user actions and data manipulation.
- Developed a comprehensive flow for the Surveyor Management System: “Habitus platform”, incorporating ticketing, citation, and polygon systems. This involved creating structured processes for issue tracking, resolution, and geospatial data representation.
- Achieved substantial optimization of an intricate data fetching API, specializing in retrieving extensive records. Significantly reduced response time from 4 seconds to 0.5 seconds, demonstrating an impressive 87.5% improvement in efficiency, earning Employee of the Month recognition.
===== SDE Intern (Web Developer) | Pricemate Online Services Pvt. Ltd | Sep 2021 - Dec 2021
- Engineered an intricate reward and wallet system in PHP, incorporating features such as fund transfers, money-sending capabilities, and seamless redemption processes, ensuring a secure and efficient financial ecosystem within the “DiscountKhojo E-Commerce” platform.
- Implemented core functionalities in PHP, including a dynamic product catalog, coupon system, and a QR management system that intricately links offline printed coupons to specific shops, enhancing the platform's versatility and usability.
- Established a robust internal logic in PHP for seamless data retrieval from the WooCommerce database, optimizing queries and ensuring synchronized and efficient data access for the DiscountKhojo ECommerce platform.
I also work as a freelance contractor.
==== Contributions to Wiki Education Dashboard
| Pull Request | Title | Status |
|-------------------------------------------------------------|-----------------------------------------------|---------|
| [#5545](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5545) | feat: Implement email notifications for instructors | Merged |
| [#5543](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5543) | fix: no campaign is available when creating program | Merged |
| [#5540](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5540) | Improvements in debian setup script | Merged |
| [#5539](https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5539) | Fixed Bug #4234 | Merged |
==== My Projects
===== Superbook - AI Notes & Book Writer
This project, an award-winning endeavor in the esteemed 'Hackout' hackathon, remains actively maintained by me even beyond the event. Superbook allows users to write personalized books using LLMs. These personalized books are generated according to the user's age, interests, and prerequisite knowledge on the subject. The project is built in React and NodeJS.
===== Kunji - 1 minute Authentication Service
I created this Free and Open Source Authentication Service which allows developers to implement authentication and authorization systems in their new or existing project within a minute. Suitable for MVP, side projects, or hackathon apps. It's built in Typescript, React, Nodejs and I have written React and NodeJS Package to easily integrate Kunji into React frontend and NodeJS backend. I am going to release it soon and also planning to support more languageses, libraries, libraries and framework ins in the future.
===== Urivu - Freelance Project
It is a business listing website targeting UAE businesses. It has 100k+ registered businesses. I built the project in Typescript, Nodejs, Nodejs and React as a freelance contractor.
I completed two internships and subsequently held the position of SDE-1 for a significant period after my internships, during which I undertook numerous complex projects. Additionally, I have embarked on many other exciting projects, which can be explored further on my [portfolio website](https://prathamvaidya.in).
==== Skills
- Experienced in using React and NodeJS.
- Good Knowledge inof databases MySQL, MongoDB, and Redis.
- Proficient in C++, Typescript, Javascript.
- Experience in Deployments and Managing servers.
- Worked on complex applications in React and Javascript/Typescript.
- Learned Ruby on Rails for this project and can work on fairly any task.
- GIT, Github, Linux, Shell Script, Python
==== Other Contributions
[Automattic/Mongoose](https://github.com/Automattic/mongoose/pull/14078) : ORM Library used in NodeJS for data modelling mongodb models.
[LokeshKumar-Dev/Rdj.exe](https://github.com/LokeshKumar-Dev/Rdj.exe/pull/20) : Music Player App
[kunji-react-library](https://www.npmjs.com/package/kunji-react): It handles kunji authentication and state automatically to simplify authentication and user management in your applications. The library provides two main components: KunjiProvider and useKunji hook, making it easy to integrate authentication features into your React projects.
[kunji-node](https://www.npmjs.com/package/kunji-node): It is a Node.js library designed to verify tokens issued by the Kunji authorization server. It comes with an AuthMiddleware that can be easily integrated into your Node.js applications to secure routes and endpoints.
== Technical Details and UI Mockups
=== 1. React Frontend for Training Management System
I have read the code of WikiEduDashboard in detail to understand the working of the codebase. I was specially interested understanding the part of how react is closely integrated with ruby server side rendered HAML Pages. The current training system is also integrating React components into the HAML page to enable interactive features.
My Proposed Training Management System is divided into 4 pages:
==== Library Listing Page
This page is similar to existing training page except for the difference that it also shows edit options and unpublished libraries. The existing training index page is rendered from training_controller#index, _all_modules.html.haml. We can update this HAML page to show the new options to user based on its the user role.
{F42573252}
==== Library / Module / Slide Manager Page
- These 3 new pages will be created. These all have very similar features and will share almost all same functionality and components.
- It has many interactive features which will require react. We can add the required components in javascripts/components/training.
- The primary data that is "library data" for library manager page can be pre-populated using our new controller training_manager_controller#library_manager and similarly for other module and slide page.
- For other features like fetching translations, creating new modules it will need separate APIs.
- Features like Source reloading, Wiki Markup <--> HTML, JSON <--> YAML conversion should be done client side to move some performance load from server to client.
===== Library Manager Page
- Used to create/update library content and its modules.
- Similar page for Module and Slide except they don't have group category option.
{F42573249}
===== Three Panel View
This is Right side Panel with three modes of data representation.
- **Graphical View :** It will contain any form elements for title or any other field and WYSIWYM content editor for description of library, modules or slides. This content editor should support visual editing and also HTML + Markup (As I observed in the stored data, but can also plan it to support more wiki markup syntax)
- **Web View :** It can be used for previewing the content and the output will be as close to actually rendered HTML as it can.
- **Code Editor:** This will show the library, module, or slide structure in code format as JSON and YAML.
All these editor will share a common state which means changing data in anyone view will change the state of other two views. This will give users multiple options to edit the content.
{F42573251}
===== Library Manager : Add Module Dialog
- Click on Add Module and this dialog will appear.
- It has 3 options to add a module. Import from JSON, Use existing and create new.
A similar component will be used to add slides.
{F42573247}
===== Module Manager Page
{F42573253}
===== Slide Manager Page
{F42573248}
===== Slide Manager Page with Assessment Mode
- Mark a slide as assessment to enable easy-to-use quiz UI.
{F42573250}
=====2. APIs
This is a rough list of all the main APIs required.
##### Libraries
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /libraries | published=true | Retrieve published libraries |
| GET | /library/slug-name | lang=hi | Retrieve a library by slug and language|
| POST | /library | {status, name, intro, slug, wiki_url} | Create a library |
| PUT | /library/slug-name | {status, name, intro, slug, wiki_url} | Update a library |
##### Modules
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /module/search | q=query | Search for modules by query |
| GET | /module/slug-name | lang=hi | Retrieve a module by slug |
| POST | /module | {name, slug, content, wiki_url} | Create a module |
| PUT | /module/slug-name | {name, slug, content, lang, wiki_url} | Update a module |
##### Slides
| Method | Endpoint | Parameters / Body | Description |
|--------|--------------------------|-------------------------|----------------------------------------|
| GET | /slide/search | q=query | Search for slides by query |
| GET | /slide/slug-name | lang=hi | Retrieve a slide by slug |
| POST | /slide | {name, slug, content, wiki_url} | Create a slide |
| PUT | /slide/slug-name | {name, slug, content, lang, wiki_url} | Update a slide |
=====3. Database Changes
Original Database Schema
{F42555832}
Proposed Database Changes
{F42555845}
- Added status enum in training_library for PUBLISHED / UNPUBLISHED values. This is required because now the list of Published libraries will not be fetched from any Wikimedia page.
- Moved translations from column to a separate table. This is an optimization so that an increase in total number of translations for content does not slow down accessing and updating operation on the table.
=== Some Problems
These are some technical problems that I believe warrant at least a mention. I will discuss whether these issues are important enough to be addressed within our scope during my Community Bonding Period.
===== Dashboard Database to meta.wikimedia.org Data Sync
The existing system use wikimedia pages as the source for the training content for Programs and Events Dashboard. With the new in dashboard training manager all the changes can be directly made from the dashboard itself but the translation of training content depends hugely on community contributions. This is a problem because the proposed training management system has no community contribution feature like the mediawiki translation feature. This can be overcome by syncing back the updated or new library data from dashboard database to wikimedia source page using the [wikimedia APIs]( https://meta.wikimedia.org/w/api.php?action=help) for editing a page. Normally, we can edit any wiki source page using the wiki EDIT API with the user's Wikipedia account but most training content on mediawiki is created as a UserPage with JSON files. As per my current understanding, they can only be [edited by the owner](https://en.wikipedia.org/wiki/Wikipedia:User_pages). If the training content can only edited by the owner, then syncing back to wiki might be a problem. (I am looking for a solution and will update the proposal when I find something)
==== Module / Slide reusability problem
In the existing training system with wikimedia json pages, once a slide in created it can be reused multiple times in any module. To achieve this exact behavior I have added an option to choose existing module / slide while creating new module/slide. While in wikimedia pages if a used slide is deleted by a user the problem will need to be resolved manually by the admins. In new dashboard system ideally these two cases should be satisfied :
- slide/module cannot be deleted if its imported by a parent.
- unused slide/module should be automatically deleted to save memory if no parent is importing them.
To solve this problem, we will need to track the changes between library, module and slide in separate tables to be able to validate these above conditions.
[View Designs on Figma](https://www.figma.com/file/rMHHLtCh1oFxj6xechA1SC/wikimedia-project-proposal?type=design&node-id=0%3A1&mode=design&t=BluMFRjcov9T5CXy-1)