Project Info
This project did not submit a demo video on Devpost.
Inspiration
With our busy schedules at UC Berkeley, we sometimes crave buddies to study with, to grind through homework and practice exams. However, oftentimes we struggle to set up a time and place with people we would genuinely enjoy studying with, which inspires us to create this app that can help students find their perfect match to work through tough content together.
What it does
By entering your own preferences, StudyFinder helps to match students with other students to form the perfect group, taking into account many different preferences.
How we built it
We created the Frontend with Flutter to show questions to the users that is then stored in a Chroma database. This database processes the users' inputs and calculates similarity scores to best match users with other users.
Challenges we ran into
We were struggling with the time crunch and given that we only ended up with 2 people in the group, we had to work really hard overnight to crunch out the program. Our code definitely had some issues too where there were often functions that were jumbled up because of how many files there were.
Accomplishments we're proud of
This is our first time at a Hackathon! We are proud that we were able to get on task quick and work through the various challenges with persistence.
What we learned
We need to manage our time better in splitting up the tasks and figuring out an organization that can help our code look neater and more efficient.
What's next
StudyFinder will implement location that can help students form the most efficient study groups where no one has to walk extra far to meet up with others. Users need to allow location access and we will use Google Maps to create the most optimal path. We would also like to expand it to campuses outside of UC Berkeley, to reach a wider range of people.
This repository has no readme, or GitHub could not be reached.
Analysis
View
Metric
No commits on this project resolved to a GitHub account.
Technology
- CIn code
- C++In code
- DartIn code
- HTMLIn code
- KotlinIn code
- PythonIn code
- SwiftIn code
- DjangoClaimed
- Google GeminiClaimed
7 of 9 appear in the indexed code. 2 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
62 KB
Source files
58
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
alokthakrar/calhacks24
155 files · 605 KB · @ 5f158f8
Structure
Interface
10 files · 6%Screens, components and styles rendered to the user.
Application logic
87 files · 56%Domain rules, services and shared utilities.
Data & schema
2 files · 1%Schema definitions, migrations and data access.
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
- C++29%
- Python21%
- Dart16%
- C10%
- XML9%
- YAML8%
- Other (4)6%
Share of indexed source by file size. Binary and vendored files are excluded.
Feature verification
Django backend API for preferences and matchingVerified
Built with Django and Python for the backend logic
Claimed on Devposthigh confidenceBackend/myapp/urls.py:4— url_patterns route add_preferences/ and explore_similar/ to Django viewsBackend/myapp/views.py:1— Django JsonResponse-based views implement the API endpoints
Django REST Framework CRUD app (Person/apis)Verified
Built with django, python (general backend/API infrastructure)
Claimed on Devpostmedium confidenceBackend/apis/models.py:5— Person model with a DRF ModelViewSet and HyperlinkedModelSerializer, appears to be a separate/earlier scaffold unrelated to the actual study-matching feature (uses 'favoriteBoba' fields), not evidence of the matching feature itself but confirms Django+DRF usage
Frontend built with Flutter collecting user preference questionsVerified
Frontend created with Flutter to show questions to the users
Claimed on Devposthigh confidenceFrontend/flutter_p1/lib/main.dart:86— CupertinoTextField and CupertinoSwitch widgets collect a self-description blurb and preference toggles on the Finder and Hoster pagesFrontend/flutter_p1/pubspec.yaml:1— Flutter project structure and pubspec confirm this is a Flutter app
Gemini used to compute similarity between usersCode-supported
Built with 'gemini' per the Devpost Built With tags
Claimed on Devpostlow confidenceBackend/geminiProcessingExample.py:1— standalone script calls google.generativeai to score similarity between two sample texts, but it is a hardcoded experiment/demo (embedded API key, fixed sample strings, plots a histogram) not wired into any Django view or the matching endpoints
Matching displayed to the user (waiting screen and match reveal screen)Code-supported
StudyFinder matches users and shows them their study group/match
Claimed on Devpostlow confidenceFrontend/flutter_p1/lib/main.dart:246— ThirdPage shows a static 'waiting for a match' messageFrontend/flutter_p1/lib/main.dart:261— FourthPage displays a hardcoded placeholder 'Your match is <xyz>' rather than a real match fetched from the backend
Preference-based matching using embeddings and similarity scoresCode-supported
StudyFinder helps match students with other students by entering preferences, taking into account many different preferences
Claimed on Devpostmedium confidenceBackend/myapp/views.py:40— explore_similar_users_view computes cosine similarity across all other users' embeddings to find the most similar matchBackend/myapp/views.py:43— calls chroma_manager.get_user.embedding(user_id), a typo (attribute access instead of method call) that would raise AttributeError, so the endpoint as written cannot run end-to-endBackend/myapp/chroma_manager.py:34— get_user_preferences is redefined to call itself recursively (infinite recursion / shadows the working ids-based version), another bug that would break retrieval
Preferences stored in a Chroma vector databaseCode-supported
The Flutter frontend shows questions to users that are then stored in a Chroma database, which processes inputs and calculates similarity scores
Claimed on Devpostmedium confidenceBackend/myapp/chroma_manager.py:6— ChromaManage wraps chromadb.Client() and creates a 'user_preferences' collection with add/query methodsBackend/myapp/views.py:31— add_user_preferences_view calls chroma_manager.add_user_preferences(user_id, preferences, embedding), but the underlying method signature is (user_id, embedding, metadata), so the raw preference string is stored as the embedding and the real embedding as metadata, a swapped-argument bug
Frontend wired to backend to submit/retrieve preferencesClaimed only
Implied by 'stored in a Chroma database' and 'match students with other students', i.e. the app end-to-end submits preferences and shows a match
Claimed on Devposthigh confidenceLocation-based matching using Google MapsClaimed only
What's next: StudyFinder will implement location so students form efficient study groups, using Google Maps for optimal path
Claimed on Devposthigh 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.