Request a quote
CocoMind

Productivity · Voice capture

CocoMind

You speak, the assistant works out the intent and files it: task, reminder, note, idea, project, goal, habit, event or list. You never pick a category.

In preparation for the stores

Why this app exists

Filing a thought costs more than having it.

Almost every note-taking app asks the same thing before it will listen to you: pick a folder, a type, a category. The friction arrives before the thought does, and the thought is lost on the way.

CocoMind turns that around. You press the mic and talk the way you actually talk, including the loose, half-finished, dictated-in-a-hurry version. The assistant transcribes it, works out the intent and creates the right object, in the right place, with the right date.

It tells a task from a habit, a project from a note, an appointment from a reminder. It handles awkward recurrences like "the first Tuesday of every month" and relative deadlines like "in three weeks".

How it works

From voice to filed object, in about a second.

  • Voice capture: one press, you talk, the object is created and filed. Nine intents are recognised: task, reminder, note, idea, project, goal, habit, event, list.
  • It writes, it does not only file: ask for a recipe, an action plan or a method and the assistant actually drafts it, then files it in the right place.
  • Memory: the durable facts you give it, your working hours or your constraints, get reused when it schedules things. You keep the ability to delete them one by one.
  • Daily recap: a briefing read out loud, and a home screen showing today's load and the next thing to do.
  • Your folders stay yours: speak from inside a folder and everything lands there directly. The assistant never reorganises them on its own.
  • Built into the iPhone: widgets, Dynamic Island, Siri, Spotlight, a share extension, a thirty-day trash and sync across your devices.

The engineering challenges

What the model files badly, the server has to catch.

A thought captured before the app was ready. On a cold start, a thought typed in the first second arrived before authentication had resolved, so it only ever lived in memory. Writes are now queued and replayed the moment the account is known. The same trap hit undo: tapping "Cancel" brought the item back on screen, then the first snapshot from the server silently deleted it again.

Two races inside the microphone. The native recorder takes real time to spin up. Inside that window a second press restarted recording on a new file and the first words vanished; a cancel, meanwhile, did nothing at all, the recorder finished starting and nothing ever stopped it, leaving the mic hot and the orange indicator on. A starting flag makes the call safe to re-enter, and a generation counter lets a finish invalidate a start still in flight.

Recurrence dropped by the model. "Every Tuesday" came back as a one-off task. A server-side guard and a corrective retry now write a real rule, and a deterministic engine advances it on a fixed heartbeat, server side: occurrences are recomputed daily rather than frozen, and a rule stops producing when the goal it served is gone.

A two-hour drift on every postpone. The context sent to the model showed existing items in universal time, so "move it to the same time" silently drifted by the timezone offset. The context is now built in local time, and postponing an event moves both start and end while preserving the hour and the reminder offset.

An anti-abuse guard that blocked everything. Device attestation was switched on one evening. The next morning every capture was being rejected, in development and in internal testing alike, because attestation had not yet been registered on the console side. It was turned off immediately, and a strict order now governs turning it back on: register first, observe without enforcing, and only lock it down once the success rate has been verified.

Packaging blockers, found before Apple found them. Version numbers that disagreed between the watch app and the phone app made the binary impossible to upload at all. A location permission was declared with an empty purpose string while no code used it. iPad was enabled despite never having been tested. And the push environment was still set to development: not a rejection reason, which is worse, because notifications would simply have stopped working in production with nothing to signal it.

The stack

A native app, and a server that holds the truth.

The app is React Native on the new architecture, in TypeScript, with a genuinely native tab bar. State lives in Zustand and React Query, local storage in MMKV. The iOS extensions are written natively: widgets, live activity, share extension and an Apple Watch app.

Everything that matters runs server side: the AI pipeline, quotas, entitlements, reminders and the recurrence engine all live in Cloud Functions. Database rules deny by default, validate the shape of every write, and keep the sensitive areas, quotas and subscription included, out of reach from the phone.

The model behind capture is a fast, non-reasoning one: classifying and filing is not a thinking task, and testers found a model that deliberates for several seconds noticeably sluggish. Transcription and read-aloud use the same family of models.

React Native · TypeScript · Nouvelle architecture · Zustand · React Query · MMKV · Reanimated · NativeWind · Firebase Authentication · Cloud Firestore · Cloud Functions · Cloud Messaging · App Check · RevenueCat · WidgetKit · Apple Watch

Download

Not on the stores yet.

CocoMind is in preparation for the App Store and Google Play. The buttons below will go live on release day, not before.

Coming soon to the App Store Coming soon to Google Play

Got an app idea?

We design, build, test and prepare these apps for the stores ourselves. It is exactly the work we do for the agency's clients.