Skip to content
← Back to portfolio

Project case study · Mobile system

VozNotas

A Spanish-first AI voice-notes app. Whisper and an LLM turn each recording into a structured note on Cloudflare's edge.

React NativeExpoTypeScriptCloudflare WorkersWorkers AIWhisperDrizzle ORM
VozNotas

The challenge

Sales reps, doctors, field workers, and other professionals across LatAm take notes on the move. Typing them up later is easy to put off. VozNotas lets them record a quick voice memo and automatically turns it into a structured note in Spanish, without sending it to an external AI service.

The solution

The app records audio with expo-audio and displays a live waveform during recording. Cloudflare Workers AI’s @cf/openai/whisper-large-v3-turbo transcribes the audio, then @cf/meta/llama-3.2-3b-instruct restructures it into one of ten Spanish-language templates. Those templates include sales visit reports, meeting summaries, medical notes, and other formats, so the result reads like a finished note instead of a raw transcript.

Both inference steps run through Workers AI, with no external AI service or provider API key in the request path. The backend uses Hono and Drizzle on Cloudflare D1. Authentication includes custom PBKDF2 password hashing with 100,000 iterations and SHA-256, JWT sessions, and an account-deletion endpoint. Free accounts can create three notes per day. Drafts stay offline so a note is not lost if connectivity drops during recording.

What the app does

Whisper and LLM restructuring on the edge

Cloudflare Workers AI serves both @cf/openai/whisper-large-v3-turbo for transcription and @cf/meta/llama-3.2-3b-instruct for restructuring. The pipeline makes no OpenAI or Anthropic API calls and has no external provider keys to manage.

Ten Spanish-language templates

The 10 templates cover LatAm professional use cases such as sales visit reports, meeting summaries, and medical notes. Each defines the fields for a structured JSON response, using plain-string arrays where appropriate and object arrays for task lists and reminders.

Offline drafts and a freemium limit

Notes are drafted locally, so recording works without a connection. Free usage is capped at three notes per day to keep the free tier sustainable.

Architecture

Frontend: Expo SDK ~55, React Native 0.83, and React 19, with expo-audio handling recording and waveform metering.

Backend: Hono on Cloudflare Workers, with Drizzle ORM over Cloudflare D1, custom PBKDF2 password hashing at 100,000 iterations with SHA-256, and JWT authentication.

AI: Cloudflare Workers AI runs @cf/openai/whisper-large-v3-turbo for transcription and @cf/meta/llama-3.2-3b-instruct for structured JSON note restructuring. All inference stays on Workers AI. No external AI provider is involved.

Testing: Vitest suites cover both packages. voznotas-api has API route and utility tests, while voznotas-app has auth, offline-audio, draft-store, template-picker, and component tests.

Status: RevenueCat is integrated for future subscriptions, but purchases are stubbed rather than live. Eight local .ipa builds and a deployed staging API exist. The app has not been submitted to the App Store or Play Store yet. I built this focused MVP in a several-day sprint.

Have a project in mind?

Tell me what you're working on and where you need help.