3 min read

🧪 AI Development, Part 5: RIPER in Action — Real Examples from Production

“When you do it right, Cursor does the right work.”

So far in this series, we’ve covered the theory:

  • Why AI development is now viable
  • How Cursor works as an IDE
  • What RIPER brings to the table
  • How memory banks and rule files give structure

But none of that means much without real-world results.

This post is all about showing what happens when theory meets execution — when Cursor and RIPER help ship actual features. No demos. No Hello World. These are real stories from GrowthSpace production systems.


📡 Example 1: Rolling Out Telemetry Across Microservices

Challenge:
We had partial telemetry coverage across our NestJS and ExpressJS microservices — some had the GSRequestContext module wired in, others didn’t. Manually auditing and adding it was going to be tedious.

Approach with RIPER:

  1. /research → Asked Cursor to identify which microservices already had telemetry and which didn’t.
  2. It scanned the repo and generated a breakdown, identifying modules with missing telemetry.
  3. /plan → Asked it to prepare a checklist of changes, one microservice per commit.
  4. Adjusted the plan manually (skipped deprecated or unused services).
  5. /execute → Cursor added imports, initialized middleware, and validated builds.
  6. /review → We checked that changes matched the checklist and passed all tests.
🧠 Cursor even flagged microservices that were technically using the telemetry module, but weren’t initializing it correctly.

Result:
A clean, commit-per-service migration with build/test validation — 90% of the work was done by Cursor.


🗂️ Example 2: Migrating Angular Material to MDC Components

Challenge:
Angular 16 dropped support for legacy Material imports. We had to migrate hundreds of components across shared libraries and the main app.

Approach with RIPER:

  1. Supplied Cursor with:
    • Legacy and new import formats
    • Angular’s migration doc
    • A single example of a legacy component
  2. /research → Identified all non-legacy Material imports.
  3. /plan → Created a multi-phase checklist:
    • Migrate buttons, form fields, selects, etc.
    • Update shared library first
    • Run manual QA after each phase
  4. /execute → Migrated each group of components
  5. Also generated a QA test checklist:
    • Included specific components
    • Mapped to UI pages where changes occurred
🧠 Cursor tried skipping QA focus at first — we corrected it, and it regenerated the plan to include test cases and target screens.

Result:
A hybrid migration strategy + QA plan, with Cursor handling the heavy lifting and tracking which pages needed testing.


💬 Example 3: Building a Shared Chat History Viewer

Challenge:
We wanted to share successful Cursor chat histories with the team. The idea: a GitHub Pages-based viewer that could display .md logs in a readable UI.

Approach with Cursor:

  1. Started a new project folder.
  2. /plan → Described a GitHub Pages viewer using a basic UI.
  3. Cursor generated:
    • A React frontend to display Markdown chats
    • Routing with shareable query params
    • UI that highlights specific messages
  4. Added Markdown enhancements like rendering tables correctly
  5. /execute → Built and tested with Cursor
  6. /review → Adjusted UI responsiveness and added permalinks to messages

Result:
A fully working shared chat viewer written almost entirely by Cursor — now used by the entire R&D org to share good examples.


🔍 One More: Improving Error Reporting in Our Tests

Mini-win:
When synthetic data failed due to a wrong HTTP status, the logs were unclear.

Cursor Fix:

  • Located error-prone sections
  • Proposed improving printed error messages
  • Added readable diffs between expected/actual status codes

Now our test failures actually explain why they failed.


🧠 What These Examples Show

  • Cursor isn't just a code monkey — with RIPER, it becomes a feature-level contributor.
  • We still need to correct and review, especially when hallucinations creep in.
  • But the productivity gain is undeniable — more done, less tedium.
  • And it works best when you guide it like a teammate — not just prompt it like a chatbot.

Coming Next: How We Write AI-Generated Tests (That Actually Work)

In the next post, Romario’s going to walk you through how we:

  • Generate E2E tests with step-by-step precision
  • Use Playwright’s MCP to explore UIs
  • Write API tests that follow internal standards
  • Iterate safely with Cursor across dev/test cycles
Until then, try this:
Open Cursor and ask:
/research which parts of this codebase don't use telemetry yet?
It might just find something you missed.
🧪 AI Development, Part 6: How We Write E2E and API Tests with Cursor
“It’s like talking to a child — the more specific you are, the better the result.” — Romario Nijim Testing is where most AI-powered dev tools fall short. Sure, they can generate some expect() statements — but useful, maintainable, standards-compliant tests? That’s another level. At GrowthSpace, we’ve built a workflow