|
| 1 | +--- |
| 2 | +title: "GSoC '25 Week 12 Update by Nikhil Bhatt" |
| 3 | +excerpt: "Summarizing my Google Summer of Code project — Git backend for MusicBlocks. Highlights include implementing fork/PR workflows, writing detailed backend + frontend docs, and ensuring future contributors can onboard easily." |
| 4 | +category: "DEVELOPER NEWS" |
| 5 | +date: "2025-08-25" |
| 6 | +slug: "2025-08-25-gsoc-25-nikhilbhatt-week12" |
| 7 | +author: "@/constants/MarkdownFiles/authors/nikhil-bhatt.md" |
| 8 | +tags: "gsoc25,sugarlabs,final,nikhilbhatt" |
| 9 | +image: "assets/Images/GSOC.webp" |
| 10 | +--- |
| 11 | + |
| 12 | +<!-- markdownlint-disable --> |
| 13 | + |
| 14 | +# Google Summer of Code 2025 Final Report by Nikhil Bhatt |
| 15 | + |
| 16 | +**Project:** [Git backend for MusicBlocks](https://github.com/benikk/musicblocks-backend) |
| 17 | +**Mentors:** [Walter Bender](https://github.com/walterbender), [Sumit Srivastava](https://github.com/sum2it) |
| 18 | +**Duration:** August 18, 2025 – August 25, 2025 |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## Project Summary |
| 23 | + |
| 24 | +The goal of my project was to **replace the legacy Planet server** with a modern **Git-backed backend** for [MusicBlocks](https://github.com/sugarlabs/musicblocks). This enables projects to be version-controlled, forked, shared, and collaborated on seamlessly via GitHub workflows. |
| 25 | + |
| 26 | +I worked on two main areas: |
| 27 | + |
| 28 | +1. **Backend (Node.js + Express + TypeScript)** — building APIs for `create`, `edit`, `fork`, `commitHistory`, `create-pr`, etc., with GitHub App integration. |
| 29 | +2. **Frontend (MusicBlocks client)** — integrating the new APIs into the user interface, enabling forking, PR workflows, project history browsing, and ZIP downloads. |
| 30 | + |
| 31 | +Additionally, I created **comprehensive documentation** for both backend and frontend to ensure long-term maintainability. |
| 32 | + |
| 33 | +--- |
| 34 | + |
| 35 | +## Major Contributions |
| 36 | + |
| 37 | +### **Backend Implementation** |
| 38 | +- Designed and built APIs for: |
| 39 | + - **Project creation/editing** with Git-backed persistence. |
| 40 | + - **Forking & fork history tracking**. |
| 41 | + - **Commit history retrieval** at both project and commit levels. |
| 42 | + - **Pull request creation & approval workflows**. |
| 43 | +- Added **metadata structures** (`projectData.json`, `metaData.json`) for project state and authentication. |
| 44 | +- Implemented **security checks** and configuration options via `.env`. |
| 45 | +- Wrote tests for major endpoints and validated responses. |
| 46 | + |
| 47 | +### **Frontend Integration** |
| 48 | +- Integrated backend APIs into the MusicBlocks client. |
| 49 | +- Added UI flows for: |
| 50 | + - Forking a project and tracking its history. |
| 51 | + - Browsing and restoring older commits. |
| 52 | + - Creating pull requests from the frontend. |
| 53 | + - Downloading projects as ZIP archives. |
| 54 | +- Managed **localStorage keys** for state persistence. |
| 55 | +- Ensured smooth transition from legacy server → GitHub workflows. |
| 56 | + |
| 57 | +### **Documentation & Developer Experience** |
| 58 | +- Wrote **backend README** with setup steps, API docs, environment variables, and deployment instructions. |
| 59 | +- Documented **frontend integration**: API contracts, UI flows, and troubleshooting. |
| 60 | +- Added **manual testing checklist** to validate project workflows. |
| 61 | +- Created a **contributor’s guide** for future developers. |
| 62 | +- Improved onboarding experience with **diagrams, examples, and standardized conventions**. |
| 63 | + |
| 64 | +--- |
| 65 | + |
| 66 | +## Testing & Results |
| 67 | + |
| 68 | +- Verified all API endpoints with **manual tests and Postman collections**. |
| 69 | +- Conducted **end-to-end tests** by linking backend ↔ frontend flows. |
| 70 | +- Confirmed project history, forks, and PRs behave consistently with GitHub repos. |
| 71 | +- Ran multiple **real-world test scenarios** (student forking a project, teacher reviewing PR, restoring commits) — all successful. |
| 72 | + |
| 73 | +--- |
| 74 | + |
| 75 | +## Challenges & Solutions |
| 76 | + |
| 77 | +- **Complex Git workflows** were hard to explain. → I solved this with request/response examples and flow diagrams. |
| 78 | +- **Maintaining parity between backend and frontend** was tricky. → I standardized API naming conventions and cross-referenced docs. |
| 79 | +- **Time management** balancing documentation + coding. → Broke tasks into milestones and focused on one layer (backend/frontend) at a time. |
| 80 | + |
| 81 | +--- |
| 82 | + |
| 83 | +## Key Learnings |
| 84 | + |
| 85 | +- Learned to design **GitHub-integrated APIs** using Node.js, Express, and Octokit. |
| 86 | +- Understood the importance of **clear documentation** as a first-class contribution. |
| 87 | +- Gained experience in **frontend-backend integration** with real-world workflows. |
| 88 | +- Improved skills in **project management and time prioritization**. |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +## Code & Documentation |
| 93 | + |
| 94 | +- [MusicBlocks Frontend (Branch)](https://github.com/BeNikk/musicblocks/tree/git-musicblocks-frontend) |
| 95 | +- [MusicBlocks Backend](https://github.com/benikk/musicblocks-backend) |
| 96 | +- [API Documentation (Backend README)](https://github.com/benikk/musicblocks-backend/blob/main/README.md) |
| 97 | +- [Final Report](https://github.com/benikk/GSoC-2025) |
| 98 | + |
| 99 | +--- |
| 100 | + |
| 101 | +## Future Work |
| 102 | + |
| 103 | +- Add **CI/CD pipelines** for backend + frontend. |
| 104 | +- Improve **automated testing** coverage. |
| 105 | +- Extend backend for **more Git features** (branching, rebasing, merging). |
| 106 | +- Expand contributor guides with **video tutorials and walkthroughs**. |
| 107 | + |
| 108 | +--- |
| 109 | + |
| 110 | +## Acknowledgments |
| 111 | + |
| 112 | +A big thank you to my mentors **Walter Bender** and **Sumit Srivastava** for their continuous guidance, and to the **Sugar Labs community** for reviews, feedback, and encouragement. |
| 113 | + |
| 114 | +This project has been an incredible journey — not only building new features, but also ensuring MusicBlocks is more maintainable, collaborative, and future-ready. |
| 115 | + |
| 116 | +--- |
0 commit comments