DEV Community

Cover image for How to Build a Finch-Style Interactive Pet for Your Wellness App published
Mascot Engine
Mascot Engine

Posted on

How to Build a Finch-Style Interactive Pet for Your Wellness App published

A wellness app can track goals perfectly and still feel impersonal.

An interactive pet gives users a visible response to what they do: a small smile after completing a task, a playful reaction to touch, or a new expression when they reach a milestone.

Finch shows why this pattern is compelling. Completing goals gives its bird energy, which supports adventures and growth. Users can also interact directly with their bird. The lesson for developers is to connect character behavior to meaningful product events.

In this article, we'll plan an original interactive pet for a wellness app and outline a practical way to connect it to app logic with Rive.

Finch is used here as a product-design reference. The character you build for your app should have its own design, personality, and interaction system.

1. Define what the pet does in your app

Start with user actions, not an animation list.

For example, a wellness app might contain these events:

Product event Character response
App opened Calm greeting, then idle
Goal completed Brief positive reaction
Progress increased Energy or appearance changes
Pet tapped Playful touch response
Daily milestone reached Larger celebration
User returns after a break Gentle welcome back

This table becomes the contract between product design, animation, and development.

A character can have a beautiful idle animation, but the experience becomes interactive when the application decides when and why it reacts.

2. Separate ambient motion from event reactions

I usually think about the character in three layers:

Ambient behavior

Small motions that keep the pet present:

  • Breathing
  • Blinking
  • Slight body movement
  • Occasional gaze shifts

These should be subtle enough to sit beside real app content.

Short reactions

One-time animations triggered by an event:

  • Goal completed
  • Pet tapped
  • New day greeting
  • Milestone reached

Each reaction needs a clear ending and a reliable return to idle.

Persistent progress

Values that remain meaningful after an animation finishes:

  • Daily progress
  • Energy level
  • Growth stage
  • Equipped accessory
  • Current mood

For example, goalCompleted is an event. dailyProgress is persistent data. Treating them differently makes the animation system easier to integrate.

3. Design a small runtime contract

A first version doesn't need 30 states. It needs a few well-defined controls.

Here's an example contract:

Control Type Purpose
mode Enum or Number idle, resting, exploring
dailyProgress Number Drives an energy or progress visual
mood Enum or Number Selects a calm, happy, or encouraging expression
pet Trigger Plays a touch reaction once
celebrate Trigger Plays a milestone reaction once
greeting Trigger Plays a welcome animation once

The exact implementation may use Rive State Machine inputs or Data Binding properties. Choose a structure that suits your Rive file and target runtime, then document the names, types, ranges, and defaults.

Rive's State Machines and Data Binding can connect character behavior to data supplied by the application.

4. Let the app own the product state

The wellness app should decide when a goal is completed and how much progress the user has made. The character should display that state.

A framework-independent integration might look like this:

type PetMode = "idle" | "resting" | "exploring";
type PetMood = "calm" | "happy" | "encouraging";

interface PetController {
  setMode(mode: PetMode): void;
  setMood(mood: PetMood): void;
  setDailyProgress(value: number): void; // 0–100
  fire(event: "pet" | "celebrate" | "greeting"): void;
}

function onGoalCompleted(
  completedGoals: number,
  targetGoals: number,
  pet: PetController
) {
  const progress =
    targetGoals > 0
      ? Math.min(100, (completedGoals / targetGoals) * 100)
      : 0;

  pet.setDailyProgress(progress);
  pet.setMood("happy");

  if (completedGoals >= targetGoals) {
    pet.fire("celebrate");
  }
}
Enter fullscreen mode Exit fullscreen mode

PetController is an illustrative adapter, not a Rive API class. Your web, Flutter, or React Native implementation would connect these methods to the actual controls exported by your .riv file.

Keeping this adapter small also makes it easier to change animation details without rewriting the app's goal logic.

5. Make touch interaction intentional

A tap or pet reaction is a useful first direct interaction. Define its behavior before animating it:

  • What area is touchable?
  • Does a tap differ from a drag?
  • Can the reaction interrupt a celebration?
  • What happens if the user taps repeatedly?
  • Does the character return to its previous mode?

For a first release, a single tap response may be enough. You can add drag gestures or more complex interactions after observing how people use the pet in the real interface.

6. Be careful with missed goals

The pet's response to a missed day is a product decision, not just an animation decision.

In a wellness app, an unhappy or disappointed character can make returning feel harder. A calm welcome-back state is often more appropriate than a punishment animation.

Consider:

  • A gentle greeting after time away
  • Small celebrations for achievable actions
  • No guilt-based expressions
  • Quiet or reduced-motion options
  • Character reactions that don't block the next task

The mascot should support the user's routine.

7. Build and test a focused first milestone

A practical first version could include:

  1. Original character design or preparation of approved artwork
  2. Reusable Rive rig
  3. Idle and blink behavior
  4. Goal-complete reaction
  5. Tap or pet reaction
  6. One progress-driven visual change
  7. Documented runtime controls

Test the exported .riv file inside the app, not only in the Rive editor. Check small screens, rapid event changes, app backgrounding, repeated taps, and the transition back to idle.

The handoff should tell developers exactly which product event changes which character control.

Want to build an interactive pet for your app?

I'm Praneeth Kawya Thathsara, the Rive animator behind Mascot Engine. I create original interactive characters for wellness apps, learning products, SaaS, and AI experiences, with editable Rive delivery and documented controls for developers.

Send me your app link, target platform, any existing artwork, and three things the pet should react to. I can suggest a practical starting state list.

Top comments (0)