I've just finished a project that felt different. It wasn't just about writing code; it was about chasing a feeling, a "vibe." The project is ResilienceAI, a completely private, offline-first AI wellness coach. The philosophy was "vibe coding," and my primary tool was Cursor, an AI-first code editor.
This post is the story of that journey—how a simple idea evolved into a feature-rich application, the exciting technologies that powered it, and how an AI-driven workflow changed the way I build software.
Every project starts with a spark. For ResilienceAI, it was the vision of a safe space for mental wellness—a companion you could talk to without your data ever leaving your device.
Initially, the app was just a shell. The "AI" was a mock service that cycled through a few canned responses. It looked the part, but it lacked a soul. The first real challenge was to give it one. How could I run a powerful Language Model (LLM) entirely in the browser?
The answer was WebLLM.
This incredible library allows you to run full-fledged LLMs like Llama 3, Gemma 2, and Qwen 2 directly in the browser using WebAssembly and WebGPU. This was the breakthrough. With the help of my AI partner in Cursor, I began by gutting the mock service.
I prompted Cursor: "Refactor my AI service to use the @mlc-ai/web-llm
package. Create a new AiCoachEnhancedService
that can load and manage multiple models."
The result was amazing. Cursor helped me scaffold the new service, manage the complex state (model loading, progress, initialization), and even implement a ModelSelector
component so users could choose the AI that best fit their needs. We even implemented Constitutional AI, a set of guiding principles injected into the prompt to ensure the AI remains safe, supportive, and focused on wellness. Privacy wasn't just a feature; it was the foundation.
With a brain in place, ResilienceAI needed a face. The original avatar was a simple 2D drawing on an HTML canvas. It was functional but static and uninspired. It didn't have the "vibe" of an empathetic companion.
I wanted something more human, more expressive. I researched open-source avatar formats and landed on VRM (Virtual Reality Model), the standard used by VTubers and metaverse applications.
This is where the project took a huge leap in complexity and excitement. The new tech stack for the avatar was:
I described the vision to Cursor: "Create a new Angular component called VrmAvatar
that uses Three.js to render a VRM model. It needs real-time lip-syncing based on audio, natural eye blinking, and the ability to trigger facial expressions like 'happy' and 'surprised'."
This was a masterclass in AI-assisted development. Together, we built a sophisticated 3D rendering component with features I thought would take weeks:
.vrm
files.The result was a dynamic, expressive companion that brought ResilienceAI to life.
This project was my first real test of "vibe coding." It's a workflow where you focus on the what and the why, letting your tools handle the how. Instead of getting bogged down in boilerplate, syntax, or hunting for obscure APIs, I could stay in a creative flow, describing the desired outcome and letting my AI partner generate the code.
Cursor, with its deep integration of AI, was the perfect environment for this. What stood out, especially for this Angular project, were the Angular MCP (Multi-Component Platform) tools.
Whenever I hit a roadblock, I didn't have to leave my editor to search Stack Overflow. I could just ask.
SettingsService
to manage app, AI, and audio settings, and refactor the SettingsPage
to use it."angular.json
, Cursor identified the corruption and helped me restore it.This workflow is a partnership. I was the architect with the vision; Cursor was the master builder who knew the intricate details of Angular's dependency injection, RxJS, and component lifecycle. It allowed me to build with momentum and focus on what truly mattered: the user experience.
Building ResilienceAI was an incredible learning experience. It solidified my belief in a few key things:
This project started as a simple idea and blossomed into something I'm truly proud of. It's a testament to the power of a clear vision combined with the incredible leverage that modern development tools provide.