The Mood Mirror App - My Antigravity first experience

Published: (December 4, 2025 at 01:03 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

Antigravity Intro

Google Antigravity is an Agentic IDE—a fork of VSCode with a dedicated agent section that features models such as Gemini, Claude, and GPT. This agent section, built and maintained by Google, differentiates Antigravity from other editors like VSCode or Cursor. While the core experience feels familiar, the integration of the agent into the IDE is what sets it apart and is the focus of ongoing improvements to developer experience.

For more information, visit the Antigravity website here.

”The Mood Mirror” Setup

To test Antigravity’s capabilities, I built a small web app called Mood Mirror using “Vibe Coding”. Below is a screenshot of the Antigravity interface:

Antigravity Screen

Prompt

Role: You are a Senior Software Engineer Agent.
Project: Build a responsive web application called “Mood Mirror”.
Stack: React, Tailwind CSS, and the Gemini 3 SDK.

Core Functionality

  • Input: Minimalist text area where the user enters how they feel (e.g., “I am anxious about my deadline”).
  • Director Logic (Gemini 3):
    • Send the text to Gemini 3.
    • Analyse the Sentiment Score (0 to +1.0).
    • Extract an Emotional Colour Palette (e.g., “Stormy Grey and Electric Blue”).
    • Generate a Creative Prompt for an abstract art piece based on that emotion.
  • Artist Execution (Nano Banana):
    • Pass the Creative Prompt to the Nano Banana Pro API.
    • Conditional Logic: If the Sentiment Score is extreme (above 0.8 or below ‑0.8), request a 5‑second looping video (MP4); otherwise, request a high‑resolution image (PNG).
  • Dynamic UI: Update the app’s background gradient instantly to match the Emotional Colour Palette while the image/video generates.

Execution Plan

  1. Scaffold the project.
  2. Write the SentimentService using Gemini 3 logic.
  3. Implement the Nano Banana API hook.
  4. Deploy to preview.

Antigravity generated a detailed plan (selected “planning” mode). The plan can be viewed in the commit linked below.

Execution Plan

The prompt and its plan are the result of this commit.

What Went Wrong? 😑

  • Antigravity initially generated a JavaScript project instead of TypeScript. I later asked it to convert the code, which it did successfully. See the conversion in this commit.
  • It created two files (one for sentiment analysis, one for image generation) but left a mock service incomplete. I fixed these issues manually later.

Commit Linting into the Project

The next test involved adding commit‑linting tools. I wanted to set up commitlint and conventional commits.

Prompt

I want to add commitlint and conventional‑commit to this project. Can you set it up?

Running this in “fast” mode, Antigravity installed @commitlint/cli and @commitlint/config-conventional, then added husky for a pre‑commit hook. I prefer lefthook, so I asked Antigravity to replace husky with lefthook. The replacement worked but left some remnants:

  • The _husky folder remained with two unused files.
  • The prepare script in package.json was not removed.

These leftovers are visible in the commit. This highlights the importance of reviewing generated code to avoid unnecessary artifacts.

The Gemini 3.0 Integration

The final test focused on integrating Gemini 3 to build a Sentiment Analysis service.

Prompt

Generate a service that accepts a text string and, via Gemini, returns a structured result with the following fields:

  • moodScore: a value between 0 and 1 indicating the mood.
  • promptType: determines whether the mirror will show an image or a video.
  • promptText: the text to pass to Nano Banana Pro or Veo 3 for media generation.

The service should later be used to generate an image or video accordingly.

Issues Encountered

  1. SDK Version: The first implementation used the deprecated @google/generative-ai package instead of the newer @google/genai. I iterated until the code was updated to the latest SDK.
  2. File Organization: Antigravity initially combined image and video generation logic into a single file. I requested a split into separate files for clarity.
  3. Model Selection: The video generation logic mistakenly used the image model; I corrected it to use the proper video model.

These adjustments resulted in a functional Sentiment Service ready for integration with the Mood Mirror app.

Back to Blog

Related posts

Read more »