음성 일기
, 한 주를 다시 읽어 줍니다

탭해서 일기를 녹음하세요. Cartesia의 ink-whisper 모델이 이를 텍스트로 바꾸고, LLM이 제목, 기분, 한 줄 회고를 붙입니다. 원할 때마다 Sonic 3.6이 최근 7일의 짧은 요약을 내가 고른 목소리로 읽어 줍니다.
Weekly recap 화면의 휴대폰 스크린샷. 일기 하나와 Hopeful 기분 배지가 있는 This week 패널, Tessa로 설정된 음성 선택기, Write my recap 버튼, 0:32 중 0:04 지점을 재생 중인 최신 요약이 있습니다

스크린샷. 로컬에서 실행 중인 템플릿입니다.

모델
ink-whisper, sonic-3.6
언어
영어
라이선스
Apache-2.0
기술 스택
ExpoReact NativeExpo Router API routesAI SDKAsyncStorage
Cartesia 제품
InkSonic 3.6

하는 일

앱 하나가 iOS, Android, 웹에서 돌아갑니다. 일기는 내 기기에 남으므로 데이터베이스도 로그인도 없습니다. 녹음은 받아쓰기를 위해 Cartesia로, 받아쓴 텍스트는 내 LLM 제공자로 갑니다. 앱은 녹음 버튼 아래에 이 사실을 알리고, 서버는 오디오를 저장하지 않습니다.

직접 실행하기

  1. 설치

    Node 22.22 이상에서 아래 명령어를 실행하세요. pnpm도 쓸 수 있습니다. 아래 표를 보고 .env.local을 채우세요.

    npx degit cartesia-ai/cookbook/examples/voice-journal voice-journal
    cd voice-journal
    # add CARTESIA_API_KEY, LLM_MODEL and the matching provider key
    cp .env.example .env.local
    npm install
    npm run dev
    

    환경 변수
    CARTESIA_API_KEY
    play.cartesia.ai/keys
    LLM_MODEL
    provider/model, 예를 들어 openai/gpt-5.4-mini
    OPENAI_API_KEY
    LLM_MODEL이 openai/로 시작할 때
    ANTHROPIC_API_KEY
    LLM_MODEL이 anthropic/으로 시작할 때
    AI_GATEWAY_API_KEY
    그 밖의 제공업체
    TRUST_PROXY
    선택 사항. 자체 리버스 프록시 뒤에서는 1
  2. 일기 녹음

    npm run dev를 실행하고 w를 눌러 웹 앱을 여세요. 휴대폰으로 쓰려면 프로젝트를 시험해 볼 수 있는 Expo의 무료 앱 Expo Go로 QR 코드를 스캔하세요. Start recording으로 일기를 녹음하세요. 그다음 Recap을 열고 Write my recap을 탭하세요.

코딩 에이전트로 만들기

어디서 시작하고 무엇을 먼저 읽어야 하는지 코딩 에이전트에게 알려 주는 프롬프트입니다.

프롬프트

Claude CodeCursorCodex

Build a voice journal app in Expo with Cartesia. Start from https://github.com/cartesia-ai/cookbook/tree/main/examples/voice-journal and follow its AGENTS.md for the commands, files and rules. Expo Router API routes hold the keys: /api/transcribe sends each recording to ink-whisper with client.stt.transcribe from @cartesia/cartesia-js, the AI SDK writes the title, mood, reflection and weekly recap, and /api/speak turns the recap into an MP3 with sonic-3.6 through client.tts.generate. Never give a key an EXPO_PUBLIC_ prefix. If I don't have a Cartesia API key yet, follow https://www.cartesia.ai/agent-quickstart.md to get one.

작동 방식

녹음expo-audio, 휴대폰에서는 m4a, 웹에서는 WebM
ink-whisper서버가 녹음을 Cartesia로 보냅니다
LLM제목, 기분, 회고, 그리고 최근 7일 요약
Sonic 3.6요약을 MP3로 돌려줍니다
기기일기와 요약은 기기에 남습니다

이렇게 만든 이유

녹음이 끝난 파일에는 스트림이 필요 없습니다

일기는 이미 끝난 녹음이라 ink-whisper에 한 번 올리는 편이 실시간 스트림보다 간단합니다. 스트리밍에는 말하는 동안의 원시 오디오가 필요한데, Expo의 녹음기는 웹에서 이를 주지 못합니다.

요약은 듣기 좋게 씁니다

요약은 최근 7일의 일기를 오래된 것부터 읽고, 듣기 좋게 120~200단어로 씁니다. Sonic 3.6은 이를 어느 플랫폼에서나 재생되는 MP3로 돌려줍니다.

원하는 대로 바꾸기

기본 음성 바꾸기

기본 음성은 lib/limits.ts에서 정합니다. Cartesia 음성 라이브러리에서 다른 음성을 고른 뒤 app/recap.tsx에서 소개 문구를 바꾸세요.

다른 언어 전사

받아쓰기 언어는 app/api/transcribe+api.ts에서 바꾸세요. 그다음 app/api/speak+api.ts에서 음성 언어를 바꾸고 그 언어를 말하는 음성을 고르세요.

기분 바꾸기

기분 목록은 lib/schema.ts에 있습니다. 회고와 요약의 프롬프트는 lib/server/prompts.ts에 있습니다.

자주 묻는 질문

모바일 앱에서 API 키는 안전한가요?

서버에 두기만 하면 안전합니다. 키는 앱의 서버 라우트만 읽고, 휴대폰에 설치되는 앱에는 들어가지 않습니다. 키에 EXPO_PUBLIC_ 접두사를 붙이지 마세요. Expo가 그 값을 앱에 넣어 누구나 읽을 수 있게 됩니다.

실제 iPhone이나 Android 폰에서 동작하나요?

개발 중에는 Expo Go에서 동작합니다. 스토어용 빌드에서는 서버 라우트를 배포하고 앱이 그곳을 가리키게 합니다. 웹 빌드는 Chrome에서 테스트했고, 휴대폰 빌드는 컴파일되지만 실제 기기에서 실행하지는 않았습니다.

그대로 공개해도 되나요?

아니요. 서버 라우트는 누구나 호출할 수 있으니, 배포하기 전에 로그인을 추가하고 라우트마다 확인하세요. 내장된 요청 제한은 가벼운 남용만 늦춰 줍니다.

치료용 앱인가요?

아니요. 프롬프트는 모델에게 진단하거나 의학적 조언을 하지 말라고 지시합니다. 일기에 자해 이야기가 나오면, 모델은 믿을 만한 사람이나 지역 위기 상담 전화를 안내합니다.

요약에 내 목소리를 쓸 수 있나요?

이 템플릿에서는 안 됩니다. 음성 복제는 일부러 넣지 않았으므로 앱은 Cartesia 라이브러리의 음성만 씁니다.

이 템플릿의 단계별 가이드가 있나요?

네. 레시피에서 코드를 따라가며 설명하고, README에서 설정, 환경 변수, 배포를 다루며, 배치 전사 API 레퍼런스에서 Cartesia 쪽을 설명합니다.

오늘 시작하세요

전문가와 상담하세요.

팀원과 연결해 Cartesia가 세계적 수준의 음성 경험을 만드는 데 어떻게 도움이 되는지 알아보세요.

영업팀 문의

개발을 시작하세요.

API로 모델을 사용하고 몇 분 만에 음성 에이전트를 프로덕션에 배포하세요.

Cartesia 사용해 보기