Project Info
Inspiration
While working on an internship project this summer, one of our members spent 2 weeks on a large commit. Meanwhile, their teammate merged an 18-commit MR to the same codebase. Unfortunately, Gitlab forced them to rebase their 2 weeks of work onto 18 commits, where we had to resolve merge conflicts one-by-one, while remembering changes from the previous countless decisions. This distasteful experience wasn't a one time thing. At various hackathons, version control issues have resulted in an unfairly large amount of lost time, often taking up 4-6 hours of everyones time. We decided to take that time back, by visualizing version control conflicts, and leveraging LLMs to resolve the tedious rebase conflicts without relying on a sleepless hacker's strained memory.
What it does
We have created a development tool that represents git trees in the AR environment of the Snap Spectacles. Using its hand tracking, we enable the user to move commits around with their hands, even creating merge requests when the user brings two commits together. To make the commits more understandable, we incorporated Google Gemini to summarize code differences between commits, making complex Git visualization tasks easier, to the point where you can consider it an educational tool.
How we built it
We built our app for Snapchat AR Spectacles using Snap AR’s Lens Studio. Our backend is powered by Python and FastAPI, ensuring fast and reliable data processing. We integrated Google Gemini to generate natural language representations of the code changes that we are modeling in addition to generating descriptions for the pull requests that our tool creates. We also connected our backend to the GitHub API for real-time repository interactions and command handling. To optimize our development workflow, we leveraged other dev tools like Perplexity for efficient research and Warp for streamlined terminal operations.
Challenges we ran into
The largest hurdle was working with the newly released Snap AR 2024 Spectacles, the lack of up-to-date tutorials and incomplete documentation made it difficult to fully understand and use certain features, slowing down our progress as we navigated the new toolset. Almost all of us were new to AR/VR/XR development, and none of us had ever used Snap's Lens Studio. Learning and implementing a new Lens was challenging under the tight deadlines, we had hours of trial and error on the most trivial tasks... Fortunately, there were tons of great people at the Snap booth and on Slack that were very helpful. Our application also had to manage synchronous environment while ensuring the system maintained low latency, making real-time requests to Github's API and Gemini to fetch content live. We also spent a lot of time trying to use voice APIs. Although voice commands would have been an intuitive feature for an AR-based tool, the development environment for our hardware didn’t support sending voice data or raw audio over network traffic. This lack of support prevented us from incorporating voice-based inputs, forcing us to stick to purely gesture-based controls. It was a significant design constraint, as integrating voice interactions could have streamlined the user experience. Finally, creating a tree-like data structure using GitHub’s API posed its own complexities. While GitHub offers powerful tools, mapping repositories into a format that could be visualized in AR as a Git tree was no easy task. It involved handling complex
Accomplishments we're proud of
As it was our first time working with Snapchat Spectacles and Snap AR’s Lens Studio, FastAPI, GitHub API, and Google Gemini, we had a steep learning curve but gained invaluable experience and built out an amazing product. We explored various AR components of the glasses, such as hand tracking and gesture recognition, which enabled us to create an intuitive and interactive user experience. One of our proudest accomplishments is simplifying the merging operation by automating the pull request workflow, addressing one of the more tedious and complex aspects of development. This app not only solves a significant problem but also has the potential to greatly enhance our own development workflows. We’re proud to have brought this innovative solution to life!
What we learned
We gained invaluable experience in developing for 3D environments, specifically in AR human-computer interaction (HCI) design, a first for all of us. We learned how to create intuitive, gesture-based interfaces that seamlessly integrate into the physical world. On the backend, we deepened our understanding of designing APIs for efficient handling of both synchronous and asynchronous requests, ensuring smooth performance even in an AR setting. Our dive into Git internals helped us master the complexities of version control, giving us a new appreciation for how Git operates under the hood.
What's next
We hope to continue adding support for other git commands like rebasing and stashing commits in the future. We also would love the opportunity to integrate voice command handling in our product once it can support both voice commands and network requests together! Finally, we would love to get more developers to try our tool and add further support for other types of git tools like bitbucket and gitlab. Eventually we would love to port this application to the consumer ready Snap AR Spectacles for use in training junior engineers as well as new developers with access to AR hardware.
Analysis
View
Metric
- 32
- 10
- 9
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FastAPIIn code
- JavaScriptIn code
- PythonIn code
- TypeScriptIn code
- Google GeminiClaimed
4 of 5 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
3.8 MB
Source files
638
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
MrCroesus/calhacks11.0
2,352 files · 12.4 MB · @ 21a946d
Structure
Application logic
18 files · 1%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript89%
- JavaScript10%
- Markdown1%
- Python0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
requirements.txt
pypi · 64- annotated-types
- anyio
- anytree
- beautifulsoup4
- cachetools
- certifi
- charset-normalizer
- click
- DateTime
- dnspython
- email_validator
- fastapi
- fastapi-cli
- google-ai-generativelanguage
- google-api-core
- google-api-python-client
- google-auth
- +46 more
src/requirements.txt
pypi · 64- annotated-types
- anyio
- anytree
- beautifulsoup4
- cachetools
- certifi
- charset-normalizer
- click
- DateTime
- dnspython
- email_validator
- fastapi
- fastapi-cli
- google-ai-generativelanguage
- google-api-core
- google-api-python-client
- google-auth
- +46 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
AR git tree visualization on Snap SpectaclesVerified
Represents git trees in the AR environment of Snap Spectacles using Lens Studio
Claimed on Devposthigh confidenceTree Generation/Assets/TreeGeneration.js:87— instantiates commitNode prefab and sets world position for each commit fetched from backend, building a spatial treeTree Generation/Assets/TreeGeneration.js:96— instantiates graphEdge prefab to connect commit nodesTree Generation/Assets/CommitNode.prefab— prefab asset representing a commit node in the AR scene
Bringing two commits together creates a merge/pull requestVerified
Creating merge requests when the user brings two commits together
Claimed on Devposthigh confidenceTree Generation/Assets/CrashingOut.js:8— collider onOverlapEnter handler detects two commit-node objects overlapping (i.e. brought together) and opens a merge confirmation windowTree Generation/Assets/OnPinchButton.js:22— confirm button handlers call the backend createpr endpoint with the two branches/hashes derived from the collided commit nodes
Gemini generates PR titles/descriptions for mergesVerified
Gemini generates descriptions for the pull requests that the tool creates
Claimed on Devposthigh confidencesrc/commit.py:89— generates a PR body description via Gemini from the two commits being mergedsrc/commit.py:93— generates a PR title via Geminisrc/commit.py:106— posts the generated title/body to GitHub's pulls API
GitHub API integration for real-time repository dataVerified
Connected the backend to the GitHub API for real-time repository interactions and command handling
Claimed on Devposthigh confidencesrc/grab_repo.py:24— fetches branches and commits live from GitHub's REST API using a tokensrc/commit.py:23— fetches individual commit data from GitHub API on demand
Google Gemini summarizes code diffs between commitsVerified
Google Gemini is used to summarize code differences between commits
Claimed on Devposthigh confidencesrc/commit.py:18— configures google.generativeai Gemini modelsrc/commit.py:30— extracts code_changes from commit diff patches and sends them to Gemini to generate a natural-language description
Mapping GitHub repo data into a tree structure for visualizationVerified
Creating a tree-like data structure using GitHub's API to visualize as a Git tree
Claimed on Devposthigh confidencesrc/grab_repo.py:46— process_data builds commit/branch/relationship records including parent linkssrc/tree_vis.py:10— build_commit_tree constructs an anytree Node tree from the processed commit relationships
Python/FastAPI backendVerified
Backend is powered by Python and FastAPI for data processing
Claimed on Devposthigh confidencesrc/main.py:19— FastAPI app instance with multiple endpointsrequirements.txt— lists fastapi and google-generativeai dependencies matching the described stack
Hand tracking to move/interact with commitsCode-supported
Uses hand tracking to let the user move commits around with their hands
Claimed on Devpostmedium confidenceStart/Assets/PinchDetection.js:24— uses SpectaclesInteractionKit HandInputData/InteractionManager to detect pinch and spawn/position an object at the pinch pointGesture Detection/Assets/GestureClassification.js:11— custom trigger response wired to behavior system, but this file only prints hardcoded JSON rather than driving a grab-and-move interaction, so full grab-to-move of commit nodes on the real tree isn't directly demonstrated
Rebase and stash command supportClaimed only
Future plans to add support for rebasing and stashing commits
Claimed on Devposthigh confidenceSupport for other git hosts (Bitbucket, GitLab)Claimed only
Future plans to add support for other git tools like Bitbucket and GitLab
Claimed on Devposthigh confidenceVoice command handlingClaimed only
Attempted to integrate voice commands but hardware/network limitations prevented it (stated as a challenge, not delivered)
Claimed on Devpostmedium confidenceREADME project descriptionBlocked
README states the project name is 'real'
Claimed on readmelow confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.