Olá, @Lukas.Shakesheff - love your question! Both words can be used for cute with people, animals and objects alike, but giro is more about beauty/attractiveness (giro is a synonym of bonito), while fofo is more about finding something endearing or adorable (like a sweet puppy). But they have a range of uses beyond that. Some examples below.
- O rapaz é muito giro (The boy is very cute/handsome).
- Que vestido tão giro (What a pretty/cute dress)!
- O filme é muito giro (The movie is very nice/good).
- Que giro, não conhecia essa história (How interesting, I didn’t know that story).
- O bebé é muito fofo (The baby is very cute).
- Ele foi muito fofo comigo (He was very sweet to me).
- A almofada é fofa (The pillow is soft).
- Que cão tão fofo (What a cute dog).
I’d say that bonito, giro and fofo are the most common words we use in the sense of cute. There are a few other alternatives, like engraçado - it means funny by default, but it can also mean cute, pretty or interesting. Bonitinho, which @allent2000 mentioned, is fine to use, but more typical of Brazilian Portuguese.