Skip to content

Conversation

@AndrewCheung360
Copy link
Member

@AndrewCheung360 AndrewCheung360 commented Oct 16, 2025

Overview

Implemented splash and login screens based on designs and set up base design system

Changes Made

Splash + Login Screen Designs: https://www.figma.com/design/tRFDgfOFDXGXREx6q33p4P/Hustle?node-id=257-1658&p=f&m=dev
Design System: https://www.figma.com/design/tRFDgfOFDXGXREx6q33p4P/Hustle?node-id=42-292&m=dev

  • Updated splash screen (logo, background color)
  • Implemented login screen design
  • Updated sign in button based on design
  • Added Hustle Colors
  • Added custom fonts
  • Created Hustle spacings constants from design system
  • Added hustle logo
  • Deleted google sign in logo + replaced with hustle logo for notifications
  • Set up conditional container color for scaffold (for edge to edge bg color)

Test Coverage

  • Previews + Emulator

Next Steps

  • Integrate auth with backend

Screenshots

Screen.Recording.2025-10-16.at.1.37.26.PM.mov

@AndrewCheung360 AndrewCheung360 self-assigned this Oct 16, 2025
@AndrewCheung360 AndrewCheung360 added the enhancement New feature or request label Oct 16, 2025
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements splash and login screens with a new design system for the Hustle Android app, replacing the default Material Design styling with brand-specific components and color schemes.

  • Created brand-specific UI components including custom splash screen, sign-in button, and typography system
  • Replaced Google branding with Hustle branding throughout the application
  • Established a design system with custom colors, fonts, and spacing constants

Reviewed Changes

Copilot reviewed 15 out of 21 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
app/src/main/res/values/themes.xml Added splash screen theme with Hustle branding
app/src/main/res/values/colors.xml Replaced default colors with Hustle brand colors
app/src/main/res/drawable/ic_hustle_logo.xml Added new Hustle logo vector drawable
app/src/main/res/drawable/ic_google.xml Removed Google logo drawable
app/src/main/res/drawable/hustle_logo_splash.xml Added splash screen version of Hustle logo
app/src/main/java/com/cornellappdev/hustle/ui/theme/Type.kt Implemented custom typography with Instrument Sans and Helvetica Neue fonts
app/src/main/java/com/cornellappdev/hustle/ui/theme/Theme.kt Updated theme to use new color scheme and typography
app/src/main/java/com/cornellappdev/hustle/ui/theme/Spacing.kt Created spacing constants for consistent layout
app/src/main/java/com/cornellappdev/hustle/ui/theme/Color.kt Defined Hustle brand color palette
app/src/main/java/com/cornellappdev/hustle/ui/screens/onboarding/SignInScreen.kt Redesigned sign-in screen with new branding and layout
app/src/main/java/com/cornellappdev/hustle/ui/navigation/HustleNavigation.kt Added conditional background color for authentication screens
app/src/main/java/com/cornellappdev/hustle/ui/components/onboarding/SignInButton.kt Created new sign-in button component replacing Google button
app/src/main/java/com/cornellappdev/hustle/ui/components/onboarding/GoogleSignInButton.kt Removed Google-specific sign-in button
app/src/main/java/com/cornellappdev/hustle/data/remote/HustleFirebaseMessagingService.kt Updated notification icon to use Hustle logo
app/src/main/AndroidManifest.xml Applied splash screen theme to application

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
verticalArrangement = Arrangement.spacedBy(
89.dp, alignment = Alignment.CenterVertically
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hardcoded spacing value of 89.dp should use a constant from HustleSpacing for consistency with the design system.

Suggested change
89.dp, alignment = Alignment.CenterVertically
HustleSpacing.signInScreenVerticalSpacing, alignment = Alignment.CenterVertically

Copilot uses AI. Check for mistakes.
Comment on lines 120 to 150
Text(
buildAnnotatedString {
withStyle(
style = SpanStyle(
color = HustleColors.white,
fontFamily = InstrumentSans,
fontSize = 36.sp,
)
) {
append("Welcome to ")
}
withStyle(
style = SpanStyle(
color = HustleColors.white,
fontFamily = InstrumentSans,
fontSize = 36.sp,
fontWeight = FontWeight.Bold,
fontStyle = FontStyle.Italic
)
) {
append("Hustle")
}
}
)
Text(
text = "Browse. Buy. Book.",
color = HustleColors.white,
fontFamily = InstrumentSans,
fontSize = 24.sp,
fontWeight = FontWeight.Medium
)
Copy link

Copilot AI Oct 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hardcoded font sizes (36.sp, 24.sp) should use typography styles from HustleTypography for consistency with the design system.

Copilot uses AI. Check for mistakes.
Copy link

@zachseidner1 zachseidner1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have a few comments, mainly on the way we're accessing the colors, but overall looks great!

val Purple40 = Color(0xFF6650a4)
val PurpleGrey40 = Color(0xFF625b71)
val Pink40 = Color(0xFF7D5260)
object HustleColors {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like we should be getting these based on the theme instead, so this way it's easier to support dark theme in the future

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will look into

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the new commit should have this now. I did need to add the dynamicColor = false to the HustleTheme parameters for the colors to apply properly.

Comment on lines 144 to 150
Text(
text = "Browse. Buy. Book.",
color = HustleColors.white,
fontFamily = InstrumentSans,
fontSize = 24.sp,
fontWeight = FontWeight.Medium
)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could be worth double checking with the designers to see if they could use a text style from the design system

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will check with them. I can maybe use the closest one in the meantime (H2 with 22px)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double checked with them and the design system has been updated

Icon(
painter = painterResource(id = R.drawable.ic_hustle_logo),
contentDescription = "Hustle Logo",
tint = Color.Unspecified

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is unspecified intentional? Why is it needed?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Compose tints the icon another color without it, so this makes sure it keeps the original color

Comment on lines +49 to +54
if (isLoading) {
CircularProgressIndicator(
color = HustleColors.hustleGreen,
modifier = Modifier.size(24.dp)
)
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: could we wrap this in animateContentSize to make the whole experience a bit cleaner

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will look into

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added to the row modifier

… typographies, adjusted color schemes, added dynamicColor to false for theme to apply properly, used predefined typography for some text
Copy link

@zachseidner1 zachseidner1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will preemptively approve, one comment I'd like to make though is regarding the themes. I think as a developer on Hustle it would get kind of annyoying to have to cross reference all the material color names like primary, onPrimary surface, etc.. with their corresponding HustleColors. It would be more intuitive if the developer could write out the name of the color from the design system that they want to use and then have it work. I guess the design system right now is not using semantic color names though (by this I mean their names are the actual colors green rather than their meaning primary, as one example). So I am now realizing that perhaps asking for the dynamic colors was not the right call. Sure, it could help us a bit later IF we need a dark theme, but until then it would be slowing down developers on the app as they'd have to cross reference every color they add with the material color scheme.

So overall I think it would be better to maybe just leave out the whole dark mode and light mode color scheme, or ask designers about using semantic color names for their design system (which would probably be more effort on their behalf). This is my bad for asking you to over-engineer here, but hopefully shouldn't be too much effort to change back! Lmk what your thoughts are.

@AndrewCheung360
Copy link
Member Author

I think I see what you mean in that using primary for example rather than explicitly using the color can be potentially confusing and time-consuming for devs to figure out even if there is the added benefit of more easily supporting dark and light mode in the future. However, I do also see how using the color scheme's specific naming conventions (eg. primary, onPrimary) can be useful in having an organized design system within the codebase that you can change easily especially when it is in a large codebase. For instance, if we decide to switch the color that we are using for our primary color or secondaryContainer, it is only a matter of changing two lines of code (1 for light and dark). However, if we used colors directly, we would have to cmd-shift-f for all instances of that color and change only the relevant ones, as those same colors may be used for other things besides primary like onSecondary, which we might not want to change necessarily.

Overall, I think there's pros and cons to both approaches, but for our case, I think since the codebase is on the smaller side and we will probably value dev velocity + ease of onboarding a little more than long-term scalability, which I suspect might not affect us for quite a while, I would be okay with using a color object with the color's direct name for now. I'll probably still keep the light/dark mode color schemes in the code in case we do end up wanting to make that refactor in the future.

@zachseidner1
Copy link

yeah that sounds great, ty! I think this is key, we do probably value dev velocity and ease of onboarding over long term scalability, as that is just how our project team is structured at the moment. Apps like these are ventures that we try out, and if they work we keep them, and otherwise we shelve them.

@AndrewCheung360 AndrewCheung360 merged commit 46a4d1d into main Oct 17, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants