Skip to content

KelvinMathew2004/bRUSH

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

bRUSH!

Outline a brief description of your project. Live demo here.

Table of Contents

Description

Who are we?
Hi! My name is Meidad Troper and together with team members Vaidic Soni, Kelvin Mathew, Priyanka Karki, and Jesse Flynn we created bRUSH! The new social media app.

What are we creating?
In short, this is a mobile social media app that aims at connecting everyone to their creative side as well as connect people closer. The app is aimed at anyone ages 12 to 22 though we believe it will be enjoyable even among families, sharing drawings with your parents.

bRUSH! is a mobile app inspired by BeReal, where all users world wide get a notification at the same time letting them know it is time to skecth! what are they bRUSHing? whatever the random, funny, bizzare, weird promt was generated for that day! every user, world wide - will all be drawing THE SAME THING at the SAME TIME talk about synchronization.... (sorry, bad programmer joke).

Users will have a pre determined amount of time to complete their daily drawing. before they have to submit it.

After a user has submitted their drawing, they are presented with all of their friends drawings! Again, same promt... and that is where the fun begin!

each user is granted medals they can award each day.
A gold medal can be awarded once per day, to the user's favorite drawing.
A silver medal can be awarded once per day for the user's second favorite drawing.
And of course a bronze medal can be awarded once per day for the user's third favorite bRUSH.

In addition, every user is given an unlimited number of "participation medals" which they can award to all the drawings they hated.... Just kidding... they can be awarded to the drawings the user recognizes as impressive, but simply we'rent in the top 3 that day in the user's opinion.

Each user grants those medals to their friends or family... but don't forget... the user also has the chance to be awarded medals of their own from their friends or family! resulting in a friendly and fun competition... who can earn the most gold medals?

Who are we doing it for?
The app is aimed at anyone ages 12 to 22 though we believe it will be enjoyable even among families, sharing drawings with your parents.

Why are we doing this?
Now, you might be hearing all of this... and wonder- but why? what's the point..? it doesn't really solve any global issue... it doesn't save lives, and it most certainly doesn't leave the world a better place... so what even if the point??

Well... According to a recent research, About 45% of students world wide report wishing they had more opportunities to express themselves creatively or artistically but can't. It was also found that 80% of people believe unlocking creativity is critical to economic growth. [1]

Our platform is just the place to do so. People of all ages could take their very own twist at our random bRUSH prompts, and truly express themselves in them. While the app aims to be fun and easy going, it also enables those students craving to express themselves the platform to do so, without being jujged.

bRUSH! Aims to connect people, unlock creative thinking, and bring more color to the world (literally).

Technologies

  • Swift UI
  • XCode
  • Firebase Authentication
  • Firebase Cloud Storage
  • Gemini API (Google AI)
  • Apple Native APIs (Pencil Kit, photos UI, etc...)

Features

Currently in progress as of October 6, 2025 (Next steps for sprint 2):

  • Pick a personal profile page photo
  • store drawings locally
  • friend requests and leaderboard
  • feed view
  • medal awarding
  • Liquid glass implemntation
  • sign up user verification (verification codes)
  • Notifications panel

🧩 Contributions

This section lists individual contributions for this sprint.
Each entry includes the JIRA task ID, title, and links to related commits or pull requests.


πŸ‘€ Meidad Troper

Sprint 1:

KAN-13 β€” Implement User Login

  • Implemented all user login logic including authentication flow and session persistence.
    πŸ”— Bitbucket

KAN-53 β€” Implement User Sign Out

  • Added user sign-out functionality, restoring the app to its deafult, empty state. πŸ”— Bitbucket

KAN-14 β€” Allow User Profile Deletion

  • Implemented the ability for users to permanently delete their profiles and associated data.
    πŸ”— Bitbucket

KAN-61 β€” Enable User Sign-Up for New Profiles

  • Developed the user registration process and linked it to the backend user store.
    πŸ”— Bitbucket

KAN-12 β€” Update User Profile Information

  • Implemented logic for user to update their profiles, including name and username.
    πŸ”— Bitbucket

Sprint 2:

KAN-106 β€” Allow Users to pick up a profile photo and set it as their own profile photo, customizing their account

  • Added logic to allow users to create their own profile pic in the form of an avatar. That avatar is built of different images overlaid on each other. πŸ”— Bitbucket

KAN-108 β€” Allow users to edit their profile photo through a button on their profile page

  • Added logic that allows users to edit their information after they signed up, in case there was a mistake during the initial setup or they simply want to refresh their profile. πŸ”— Bitbucket

KAN-109 β€” Add sketch animations to the log in page and make the sign in button less awkward

  • Added A sleek animation to the signin page that shows fun skecthes the users can make during their lifetime on the app.
    πŸ”— Bitbucket

KAN-110 β€” Create the Profile UI in a way that is scaling correctly on all screen sizes

  • Implemented logic for thr Profile UI (cards, photo, etc) to scale correctly on all screen sizes. For some reason, iPads had a bunch of issues. Mostly due to different aspect ratio. πŸ”— Bitbucket

KAN-111 β€” Profile page retrieves the right medal count from the cloud when signed in

  • Added logic to revert hardcoded values and ensure card views in the profile page use real up-to-date cloud info. πŸ”— Bitbucket

KAN-112 β€” Add a card that shows the streak, total drawings, and possibly other metric as we see fit

  • User profile has a third card for the streak, total drawings, and member since fields. this adds color and cool stats. πŸ”— Bitbucket

KAN-137 β€” Add Better Error Messages

  • Added Error Messages for things such as too long of a username, non-matching passwords, invalid email, etc... to allow better user exprienece πŸ”— Bitbucket

KAN-138 β€” Move the SignOut and delete profile options to the gear icon settings to hide them

  • Moved the signout and delete account buttons into the gear menu for better layout and to ensure they aren't easily clickable by accident. πŸ”— Bitbucket

KAN-139 β€” Add Better Error Messages

  • Added Error Messages for things such as too long of a username, non-matching passwords, invalid email, etc... to allow better user exprienece. πŸ”— Bitbucket

Sprint 3:

KAN-145 β€” Add Human Avatar Options

  • Added Human avatar options, allowing users to create themselves instead of the "crack addict" looking ones as the team called them, lol. πŸ”— Bitbucket

KAN-152 β€” Add Unit Test for checking if user is signed in

  • Added the first of 3 unit tests. This one checks the state of the app when user is signed in to see if it tracks correctly. πŸ”— Bitbucket

KAN-153 β€” Add Unit Test for sign out

  • Added The second of 3 Unit tests. This one was for the signout state of the app. πŸ”— Bitbucket

KAN-154 β€” Add Unit Test to Test Password input length for error handling

  • Added The third of 3 Unit tests (and last one). This one was for the input length in the password field during signup. πŸ”— Bitbucket

KAN-154 β€” Add Unit Test to Test Password input length for error handling

  • Added The second of 3 Unit tests. This one was for the input length in the password field during signup. πŸ”— Bitbucket

KAN-157 β€” Add warning for password input field to ensure users know the minimum length is met

  • Added small logic that turns the password field red during signup when the password typed doesn't meet the minimum requirement length wise. πŸ”— Bitbucket

KAN-158 β€” Ensure the Refresh Count button on the profile cards fits correctly for all screen sizes

  • Updated the UI code for the "refresh stats" button, that makes sure it doesn't overlap the cards on iPad. πŸ”— Bitbucket

KAN-160 β€” Ensure the Gear Icon fits Better within the Profile Avatar View

  • Updated the UI of the geer icon to ensure it is better fitting the color theme of the app and username text. This has been changed to liquid glass later on by Kelvin as we discussed it might be better. πŸ”— Bitbucket

KAN-185 β€” Increase AvatarModel readability and scale

  • Updated the Avatar Model from having hardcoded array elements (for example "hair_1, hair_2, hair_3, etc...) to useing an array map that goes from 1 to however many items we have, since every avatar option already follows the same naming convension. this allows to simply update the # (size) the map goes to when adding new options, instead of having to manually hardcode the added options. πŸ”— Bitbucket

KAN-187 β€” Add Personalized Profile Share Cards

  • Added a "shared cards" feature, which allows user to share pre-made, up-to-date cards showing their stats such as streak count, total drawings, total medals, or even upload their own drawing and export these as an image, to share on social media. πŸ”— Bitbucket

KAN-197 β€” Add a way to export the share cards as a video so it can be shared in a more "alive" way

  • Added a way to export the share cards as a video as well (previously was just an image), which captures both the card AND the animated background. This allows users to share a much more "alive" and vibrant showing of their achivements. πŸ”— Bitbucket

KAN-200 β€” Add The Unit Tests plan

  • Added the plan for the unit tests as was required to in sprint assingment 14. πŸ”— Bitbucket

Next Steps

Update the app and get it ready for possible app store publication, as per the team's discussion!!


πŸ‘€ Kelvin Mathew

Sprint 1:

KAN-47 β€” Canvas for Drawings

  • Implemented UI and logic for for the canvas which can generate strokes based on touch input. πŸ”— Bitbucket Branch

KAN-48 β€” Custom PencilKit API

  • Implemented UI and logic for the customized Swift toolpicker that updates the drawing view. πŸ”— Bitbucket Branch

KAN-49 β€” Add Undo/Redo for iPhone

  • Implemented UI and logic for being able to undo and redo on iPhone due to the toolpicker not showing one unlike iPad. πŸ”— Bitbucket Branch

KAN-50 β€” Add Share Sheet and Save Drawing Locally

KAN-65 β€” Enable Users to Change Canvas Backgrounds

  • Implemented UI and logic for being able to change the color of the canvas or pick from preset assets. Updated the export feature based on this. πŸ”— Bitbucket Branch πŸ”— Bitbucket Pull Request

Sprint 2:

KAN-120 β€” Canvas Timer Outline

  • Added an outline around the canvas that acts as a timer that changes the color while you draw. πŸ”— Bitbucket

KAN-121 β€” Dynamic Outline Color

  • Added logic that changess the color of the outline timer to show urgency. πŸ”— Bitbucket

KAN-122 β€” Final Flash Animation

  • Added logic that flahses the color at the very end of the timer as a final warning. πŸ”— Bitbucket

KAN-123 β€” Upload Drawings Upon Submission

  • Implemented logic to upload the shared submissions πŸ”— Bitbucket

KAN-124 β€” Early Submit Confirmation

  • Added a confirmation dialog when the user chooses to submit early. πŸ”— Bitbucket

KAN-125 β€” Submission Animation

  • Added logic to show a success animation after submission. πŸ”— Bitbucket

KAN-126 β€” Fix Compositing Bug

  • Resolve issues with combining drawing strokes and the background image. πŸ”— Bitbucket

KAN-127 β€” Fetch and Display Prompt

  • Retrieve the prompt from the feed and show it via the bulb icon during drawing. πŸ”— Bitbucket

KAN-128 β€” Prompt Bubble Container

  • Added a bubble looking container for the prompt using liquid glass that closes when you click outside. πŸ”— Bitbucket

KAN-129 β€” Save Prompt and Date

  • Added logic to store the prompt text and creation date locally with each drawing. πŸ”— Bitbucket

KAN-130 β€” Enhanced Share Picker

  • Improve the share sheet to include β€œSave Image” and other social sharing options. πŸ”— Bitbucket

KAN-131 β€” Show Prompt in Preview

  • Added logic to save and show the old prompts in oldser drawings. πŸ”— Bitbucket

KAN-132 β€” Sprint 1 Demo Fixess

  • Fixed some issues that were found after the first demo. Removed unused/empty files, changed app name and display info, added variables, fixed styling, etc... πŸ”— Bitbucket

KAN-134 β€” Enhanced Library Transitions

KAN-135 β€” Modify Document Path for Simulator

KAN-140 β€” Single or Bulk Drawing Deletion

  • Drawings in the grid should be able to be long pressed to see the delete option. Also an edit button in the corner to select multiple drawings to delete. πŸ”— Bitbucket

KAN-141 β€” Drawing Deletion Animation

  • Added Deletion Animation to the Drawing Page. πŸ”— Bitbucket

Sprint 3:

KAN-149 β€” Sprint 2 Demo Fixes

  • Fixed issues found during the Sprint 2 Demo. Many small changes in many files. πŸ”— Bitbucket

KAN-151 β€” Fix date mismatch in drawing uploads

  • Fixed a bug where the uploaded drawings had the wrong date on them. This one does NOT have a branch since it was a hotfix. Dr lehr and I talked about this and settled the issue.

KAN-171 β€” Profile Updates

  • Made dark mode more compatible for icons, stat cards, as well added a notch in avatar + fixed dark mode bugs in the editor. πŸ”— Bitbucket

KAN-172 β€” Friends and Leaderboard Updates

  • Restructured the files to cleanly separate the backend from the UI, and added the current user to the leaderboard along with some visual fixes. πŸ”— Bitbucket

KAN-173 β€” Past Drawings Grid and Preview Updates

  • Added a custom inner-shadow modifier for highlighting drawings, plus an average-color background with adaptive text.Also added single/multi share buttons and converted the old alerts into action sheets. πŸ”— Bitbucket

KAN-182 β€” Custom Animations

  • I updated the animated mesh-gradient background for the feed and added a custom snow effect using the Vortex library, along with a new streak animation for daily drawings. I also refreshed the submission popup with a Lottie animation and created a custom launch-screen storyboard with responsive transitions for both iPhone and iPad. πŸ”— Bitbucket

KAN-183 β€” Feed and Drawing View Updates

  • I improved feed performance with better caching, smoother scrolling, and new transitions, while expanding the profile and avatar features and fixing issues like side-indicator desync and medal limits. I also added new animations, faster notifications, and general styling refinements across the app. πŸ”— Bitbucket

KAN-184 β€” Upgrade Profile Sheet

  • Updated the profile sheet with adaptive buttons and stat cards, made the Avatar View customizable as a mini PFP, and revamped the Add Friend view to show the profile sheet with an add option. I also prepped the system for future facial-hair options and a custom 3D avatar in the profile sheet. πŸ”— Bitbucket

KAN-188 β€” Restoring and Simplifying Friends Fetching

  • I fixed the iPad profile-sheet scaling so everything renders correctly on large screens, restored the lost friend-fetching logic with a cleaner, more efficient approach, and polished the leaderboard with stable avatar placement, proper badge stacking, and full dark-mode support. I also improved loading behavior with cleaner redacted states and disabled interactions, and fully fixed profile deletion so friendships, requests, and sign-out all work correctly. πŸ”— Bitbucket

KAN-186 β€” Drawings Unit Tests

  • Added unit tests for the drawings. πŸ”— Bitbucket

KAN-195 β€” Fixed Issue Where FriendsView Was Not Refreshing Automatically

  • The friends tab now refreshes automatically when switching tabs (with pull-to-refresh supported), the friends view shows a real loading state, and feed blur logic correctly uses the streak’s last-completed date. Removing a friend from the profile sheet now updates both the feed and leaderboard just like the friends view. πŸ”— Bitbucket

KAN-196 β€” Sprint 3 Demo Fixes Pt. 1

  • I rebuilt the card system so all text, sizes, and assets scale cleanly and stay consistent, overhauled the showcase and picker for better loading and export behavior, and fixed scrolling and indicator issues across the feed (including dark-mode quirks). I also cleaned up UI bugs by restoring redacted/avatar titles, fixing login layouts, updating notification badges, adding a leaderboard toast, and refreshing popovers. πŸ”— Bitbucket

KAN-199 β€” Documenting Feed Unit Tests

  • Added the unit tests report as required in sprint assingment 14. πŸ”— Bitbucket

KAN-189 β€” Sprint 3 Demo Fixes Pt. 2

  • Fixing a few issues for the upcoming spring such as card scaling on iPad, spacing adjutments, better dark mode support, and updating small UI elements for better visibility πŸ”— Bitbucket

Next Steps

Research how to publish the app on the app store and fix any issues as (and if) they rise.


πŸ‘€ Vaidic Soni

KAN-52 β€” Daily Reminder Functionality

  • Users now get periodic reminders every 2 hours to complete their daily drawing if they haven't done so. πŸ”— Bitbucket

KAN-21 β€” Fixing notification Scheduling

  • Fixed notifications and made changes to make them better and increase their frequency. πŸ”— Bitbucket

KAN-23 β€” Added Streak functionality

  • Designed logic to track daily drawing streaks to motivate users. πŸ”— Bitbucket

KAN-45 β€” Added Notification Bell and History

  • Implemented a dropdown panel that stores and displays all past notifications. πŸ”— Bitbucket

Sprint 2:

KAN-113 β€” Integrate Gemini API endpoint

  • Added logic to integrate Gemini API to generate daily drawing prompts πŸ”— Bitbucket

KAN-114 β€” Fetch generated prompt

  • Following KAN-113, Added logic to fetch the generated prompt. πŸ”— Bitbucket

KAN-115 β€” Implement post upload feature

  • Implement logic to upload the user's post feature. πŸ”— Bitbucket

KAN-116 β€” Add share/download option

  • Added options to share and or download options. πŸ”— Bitbucket

KAN-117 β€” Fetch and display friend posts

  • Added main logic to fetch the friend's post and show them. πŸ”— Bitbucket

KAN-118 β€” Added Streak functionality

  • Implemented backend data linking. πŸ”— Bitbucket

KAN-119 β€” Training the LLM on certain prompts

  • Trained the LLM on certain prompts by giving it examples. πŸ”— Bitbucket

Next Steps

  • Fixing notifications and streak.
  • Implement a refresh function on the feed.
  • Add necessary animations and UI changes.

πŸ‘€ Priyanka Karki

KAN-51 – Welcome Screen with Logo and Design Elements.

Integrated the new logo into the welcome screen. Added a β€œGet Started” button and aligned layout elements. Ensured consistency and responsiveness across devices. πŸ”— Bitbucket

KAN-63 – Home Feed Page.

Built the main feed to display friends’ drawings. Added navigation tabs for Home, Explore, Create, and Profile. Structured layout for future backend integration. πŸ”— [Bitbucket] (https://bitbucket.org/cs3398-nemoidians-f25/%7B57222da5-99b9-44b5-8ae7-38296988f7a4%7D/branch/feature/KAN-63-as-a-user-i-want-my-home-page-to-)

KAN-64 – Profile Navigation.

Enabled navigation from feed posts to creator profiles. Added private profile visibility logic. Tested smooth page transitions. πŸ”— Bitbucket

KAN-71 – Post Interactions (Likes, Medals, Shares).

Added interactive like, medal, and share buttons to feed posts. Managed state updates and interaction animations. Verified full integration within feed layout. πŸ”— Bitbucket

###(Sprint 2)

KAN-93 β€” Define how each post and its prompt should be structured in the full-screen β€œreels” layout

Designed and implemented the foundational structure for displaying each post in a full-screen vertical layout, inspired by β€œreel”-style interactions. Added layout logic ensuring proper alignment of post. πŸ”— Bitbucket

KAN-94 β€” Implement full-screen post layout with paging scroll

Developed the main full-screen post view with seamless vertical paging scroll between posts. Integrated smooth transition behavior for better UX consistency with Ripple effect Bitbucket

KAN-96 β€” Implement uniform post layout and alignment across the feed

Standardized layout and alignment for all feed posts to maintain consistent styling and spacing across devices.

Bitbucket

KAN-97 β€” Implement fixed prompt container at top of feed

Added a fixed prompt container pinned to the top of the feed to display current drawing prompts.

Bitbucket

KAN-133 β€” Add a sticky post box at the top of the feed

Created a sticky post input box that allows users to easily add new posts without scrolling. Bitbucket

Next Steps (Sprint 3)

Add swipe gesture support for navigating between full-screen posts. Implement lazy loading and caching for smoother scrolling performance. Enhance accessibility features, including dynamic text scaling and color contrast improvements. Introduce basic feed analytics (view count, engagement tracking) - extra. Fix share button logic to ensure consistent link generation and correct post sharing across devices. Bug fixes: address minor visual inconsistencies in prompt alignment and post transitions.

πŸ‘€ Jesse Flynn

Sprint 1:

KAN-18 - Friends Tab (View/Search/Request + Add Friend)

  • Implemented friend screen UI
  • Added friend requests section with accept/decline functionality (mock)
  • Added friends section with searchable list

πŸ”— Bitbucket

KAN-19 - Friends Leaderboard (frontend)

  • Added LeaderboardEntry model and LeaderboardService protocol
  • Extended Friends VM with state, sorting, and refresh logic
  • Added Leaderboard section in Friends page with ranking, points, refresh, and error/empty states
  • Added trophy icon to toggle leaderboard visibility

πŸ”— Bitbucket

Note: KAN-18 (Friends tab) was accidentally merged into main instead of the sprint1-dev branch. As a result, when I created the KAN-19 branch and merged it into sprint1-dev, it also included the KAN-18 commits. These commits were already reviewed and merged to main earlier. KAN-19 contains only the leaderboard-related changes, but the history shows both sets because of the branch base. This was not an attempt to duplicate or fake work - just a branch merge mistake that I wanted to add here for clarity.

Sprint 2:

KAN-100 β€” Add friend by @handle (Firebase)

  • Implemented friend search and add functionality using Firestore queries on handle_lowercase.
  • Integrated HandleServiceFirebase and FriendRequestServiceFirebase for sending, accepting, and declining requests.
  • Added bidirectional friendship creation under /friendships/{uid}/friends/{friendUid} upon acceptance.
  • Connected UI (AddFriendView, FriendsViewModel) to reflect pending and accepted states.
    πŸ”— Bitbucket

KAN-102 β€” Incoming friend requests (Firebase)

  • Built Firestore logic to load incoming requests under /friendRequests/{toUid}/incoming/{fromUid}.
  • Implemented accept/decline to create or remove friendship edges and update the Friends UI immediately.
  • Added incoming requests section with action buttons.
    πŸ”— Bitbucket

KAN-104 β€” Friends-only leaderboard integration

  • Implemented LeaderboardService to aggregate medals from each friend’s user document.
  • Updated LeaderboardEntry to store gold, silver, bronze, and computed total points (100/25/10 weights).
  • Built horizontal bar chart UI where bar width reflects points relative to the top friend.
    πŸ”— Bitbucket

KAN-107 β€” Unit tests and fixes for friends

  • Added unit tests for FriendsViewModel covering add/remove logic, search filtering, and duplicate request guards.
  • Fixed swipe-to-delete crash (List diff mismatch) by removing locally first, then deleting remotely.
  • Tightened pending request logic to check both fromUid and toUid (per-current-user pending).
    πŸ”— Bitbucket

KAN-147 β€” View a friend’s profile and delete friendship

  • Added tap gesture to open FriendProfileView sheet showing name, handle, and medals.
  • Implemented friend removal from profile with confirmation and automatic sheet dismissal.
  • Ensured bidirectional Firestore cleanup and refreshed Friends list on delete.
    πŸ”— Bitbucket

Sprint 3:

KAN-190 β€” Implement Medal Backend

  • Designed and implemented the backend for the daily medal system using Firestore.
  • Added awardUsage documents to enforce the rule that each user gets one gold, one silver, and one bronze medal to give per day.
  • Created an awards subcollection under each dailyFeed/{userId} document to store which user gave which medal on which day.
  • Implemented AwardServiceFirebase with transactional logic to safely record medals and a fetchAwardCounts helper to aggregate medal counts per user for the feed/leaderboard.

πŸ”— Bitbucket

KAN-192 β€” Implement Medal Frontend

  • Integrated the medal system into the Home feed cards to show live gold/silver/bronze counts for each drawing.
  • Added medal buttons with confirmation alerts, self-award prevention, and one-per-day disabling.
  • Wired medal counts into the leaderboard and profile stats so that newly awarded medals are reflected in the UI after reload.

πŸ”— Bitbucket

Next Steps

  • Ensure refresh of medal counts on all VM loading. Polish and prepare app for the App Store.

Burnup chart for Sprint-1

Feed Preview

Project Status

Project is: in progress

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 7

Languages