Selected case study
Noondra / Actor
An independent full-stack platform for conversational roleplay agents that can remember, speak and use tools.
Product engineering across services, web and mobile clients, visual authoring, a Unity SDK and an on-device AI runtime.
At a glance
- Product
- Conversational agent platform
- Ownership
- Independent end to end
- Surfaces
- Services, apps, authoring and SDK
- AI focus
- Local, controllable interaction
- State
- Active development
Product context
Noondra is an independent platform for conversational agents. Actor, its principal product, explores roleplay agents that can maintain context, express a consistent character, speak, use constrained tools and appear through real-time 3D presentation.
The product challenge
A convincing interaction is not produced by an LLM alone. Context, memory, speech, tool permissions, presentation and recovery behaviour all influence whether an agent feels coherent and remains under product control. Each capability has its own failure modes, but the user experiences only one character.
End-to-end ownership
I design and implement the product across NestJS services, web and mobile clients, visual authoring tools, a Unity SDK and an on-device runtime. This gives me responsibility for both the architecture between surfaces and the interaction details inside them.
The platform boundary matters: Noondra carries reusable agent capabilities while Actor turns them into a focused product experience. That separation allows product decisions to guide the platform without making every capability dependent on a single interface.
A controllable local runtime
The local runtime composes LLM inference, conversation memory, speech, guardrails and constrained tool use. I treat those elements as collaborating subsystems with explicit responsibilities, not as a single opaque intelligence layer.
Keeping the runtime inspectable supports practical iteration: it becomes possible to reason about what context was available, which capability acted and where the experience broke down.
Designing for constraints
The central trade-off is between natural interaction and control. Local execution introduces real hardware limits; character consistency needs memory without uncontrolled accumulation; tools add usefulness but require constrained access. The design goal is not maximum capability in isolation, but a product that behaves coherently within known boundaries.
Current state
Noondra and Actor remain in active development. They represent independent full-stack product ownership and applied-AI systems engineering, while the quality and readiness of each experience continue to be evaluated rather than assumed.
01 — Key contributions
Key contributions
- 01
Product and platform architecture
I shape Noondra as the shared platform and Actor as its principal product, keeping agent behaviour, product surfaces and runtime capabilities connected without collapsing them into one client.
- 02
Full-stack clients and services
The implementation spans NestJS services, web and mobile clients, shared product contracts and the operational paths needed to evolve them as one system.
- 03
On-device conversational runtime
Local inference, memory, speech, guardrails and constrained tool use are composed into a runtime designed around controllability and product behaviour.
- 04
Authoring, SDK and evaluation surfaces
Visual authoring tools and a Unity SDK make the platform usable beyond its core services, while explicit evaluation work keeps technical progress separate from subjective product quality.
02 — Visual direction
Visual direction

Stack and tools
Stack and tools
TypeScript
Product contracts, services and clients
NestJS
Actor API and orchestration services
React Native
Cross-platform Actor application
Expo
Mobile delivery and native integration
Unity
Runtime SDK and interactive client integration
C#
Unity SDK, editor tooling and runtime bridge
ONNX Runtime
Local inference across mobile and Unity
MongoDB
Actor and platform persistence
Three.js
Real-time avatar rendering surfaces