{"id":31484253,"url":"https://github.com/razdnut/audiodiary","last_synced_at":"2026-04-18T01:31:42.308Z","repository":{"id":316051985,"uuid":"1061710373","full_name":"Razdnut/audiodiary","owner":"Razdnut","description":"Personal diary based on vocal notes to be transcribed and synthesized via whisper model and OpenAI Api Key","archived":false,"fork":false,"pushed_at":"2025-09-22T12:01:22.000Z","size":446,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-22T12:18:50.924Z","etag":null,"topics":["diary","diary-application","notes","openai","personal","vocal-notes","whisper"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Razdnut.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-22T09:28:23.000Z","updated_at":"2025-09-22T12:01:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"b9f17a7f-2da6-4244-99f8-9948f29511b6","html_url":"https://github.com/Razdnut/audiodiary","commit_stats":null,"previous_names":["razdnut/audiodiary"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/Razdnut/audiodiary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Razdnut%2Faudiodiary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Razdnut%2Faudiodiary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Razdnut%2Faudiodiary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Razdnut%2Faudiodiary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Razdnut","download_url":"https://codeload.github.com/Razdnut/audiodiary/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Razdnut%2Faudiodiary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277987454,"owners_count":25910597,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-02T02:00:08.890Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diary","diary-application","notes","openai","personal","vocal-notes","whisper"],"created_at":"2025-10-02T09:57:23.900Z","updated_at":"2026-04-18T01:31:42.291Z","avatar_url":"https://github.com/Razdnut.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Audio Diary (Audio Diario)\n\n\u003cimg width=\"1920\" height=\"1080\" alt=\"logo-orizzontale\" src=\"https://github.com/user-attachments/assets/7157e9f6-6e78-4a63-9727-0e988fa656fd\" /\u003e\n\n\nA modern, privacy‑friendly journaling web app built with React, TypeScript, Vite, Tailwind, and shadcn/ui. Capture daily notes, record voice memos, transcribe and summarize them with OpenAI, export your data, and track your mood over time.\n\nKey highlights:\n- Local‑first: journal data is stored in your browser (localStorage).\n- Optional AI: uses your OpenAI API key client‑side for transcription and summaries.\n- Mobile‑friendly: tuned header layout and safe‑area padding for Android/iOS.\n- i18n: English and Italian with language switching in the UI.\n\n## Goals\n\nThe goal is to create an Android app that lets you upload or record an audio file and obtain a transcription using your OpenAI API key and the Whisper model. Afterwards you can optionally generate a summary driven by a customizable prompt when desired.\n\nManual audio file uploads are now supported alongside in-app recording.\n\n## Features\n\n- Daily notes\n  - Multiple notes per day (add, select, delete a specific note)\n  - Rich text area for thoughts and reflections\n  - 1–5 star rating for the day (with one‑click reset)\n\n- Audio notes and AI\n  - Record audio in the browser (Web MediaRecorder)\n  - Upload existing audio files from your device\n  - Transcribe with Whisper (`whisper-1`) using your OpenAI key\n  - Summarize transcripts with GPT models (configurable)\n  - Editable “System Prompt” to customize summaries’ tone and content\n  - Delete a note’s audio (and all audios at once from Settings)\n  - Copy either the generated summary or full transcript into your note with one click\n\n- Export\n  - Export all notes to JSON\n  - Export to ICS calendar file (one event per note) with localized titles\n\n- Calendar and statistics\n  - Calendar shows only today highlighted on first load; after you pick a date, days with entries become highlighted\n  - Stats moved to the bottom of the page: total entries, average rating, number of recordings\n  - Reset all ratings to zero with one click (does not delete content)\n\n- Internationalization (i18n)\n  - English and Italian translations\n  - Dynamic date localization (date‑fns locales)\n  - Quick language switch in the header and in Settings\n\n- Mobile polish\n  - Safe‑area insets (top/bottom) for devices with cutouts\n  - Responsive, centered header — controls fit on small screens\n\n## Screenshots\n\nAdd your screenshots here (optional):\n- Calendar and daily note view\n\n  \u003cimg width=\"377\" height=\"844\" alt=\"immagine\" src=\"https://github.com/user-attachments/assets/b6034d3b-df7e-4b42-abee-a3576d86a117\" /\u003e\n\n- Audio controls and AI actions\n\n  \u003cimg width=\"377\" height=\"844\" alt=\"immagine\" src=\"https://github.com/user-attachments/assets/4cabb175-eea4-4bd3-95b5-970b0af08578\" /\u003e\n\n- Export dialog and Settings\n\n  \u003cimg width=\"392\" height=\"344\" alt=\"immagine\" src=\"https://github.com/user-attachments/assets/a0d8436d-9c1b-4895-a4cb-54114e7a193b\" /\u003e\n\n\n## Getting Started\n\nPrerequisites:\n- Node.js 18+ and npm\n\nInstall and run:\n\n```bash\nnpm install\nnpm run dev\n```\n\nBuild:\n\n```bash\nnpm run build\nnpm run preview\n```\n\n## Docker\n\nTwo options are provided: run the published image from GitHub Container Registry (GHCR) or build locally.\n\n- Pull and run from GHCR (version 1.0.7):\n\n```bash\ndocker run --rm -p 8080:80 ghcr.io/razdnut/audiodiary:1.0.7\n# Then open http://localhost:8080\n```\n\n- Build and run locally:\n\n```bash\ndocker build -t audiodiary:local .\ndocker run --rm -p 8080:80 audiodiary:local\n```\n\n## Docker Compose\n\nUse the included compose file to build and run:\n\n```bash\ndocker compose up --build\n# Open http://localhost:8080\n```\n\n## Android (Capacitor)\n\nBuild an Android APK with Capacitor.\n\nLocal (Android Studio):\n- Prereqs: Android Studio (SDK + build tools), Java 17.\n- Required permissions (already declared in `android/app/src/main/AndroidManifest.xml`):\n  - `RECORD_AUDIO` and `MODIFY_AUDIO_SETTINGS`\n  - `READ_MEDIA_AUDIO` (Android 13+) and legacy storage permissions for older devices\n- Steps:\n  1. Install deps: `npm install`\n  2. Build web: `npm run build`\n  3. Add/sync Android: `npm run cap:add:android` (first time), then `npm run cap:sync`\n  4. Open in Android Studio: `npm run android:open`\n  5. Build a Debug APK: from Android Studio, or via Gradle: `cd android \u0026\u0026 ./gradlew assembleDebug`\n  6. APK path: `android/app/build/outputs/apk/debug/app-debug.apk`\n\nCI (GitHub Actions):\n- This repo includes a workflow that builds a Debug APK on tag push (`v*`) or manual dispatch:\n  - `.github/workflows/android-apk.yml`\n  - The APK is uploaded as an artifact and attached to the GitHub Release for the tag.\n\n## OpenAI Setup (Optional)\n\nAll AI functionality runs in the browser. Open Settings and paste your OpenAI API key. You can choose:\n- Transcription model: `whisper-1`\n- Summary model: e.g., `gpt-4o-mini`, `gpt-4o`, `gpt-3.5-turbo`\n- System Prompt: customize how summaries are generated\n\nImportant: this app uses `dangerouslyAllowBrowser: true` in the OpenAI client. Do not use a production key without a trusted backend. Consider proxying requests in production.\n\n## Data Storage and Privacy\n\n- Notes, ratings, transcripts, summaries, and simple flags are stored in `localStorage`.\n- Audio is recorded as a Blob and referenced via a temporary Object URL (blob:). As such, audio blobs are not reliably persisted across page reloads or different sessions. Use Export to save your content or a proper storage backend if you need permanent audio storage.\n- You can delete audio per note or delete all audio (and related transcripts/summaries) from Settings.\n\n## Internationalization\n\n- The app supports Italian and English.\n- Switch language from the header selector or within Settings.\n- Date formatting adapts automatically via `date-fns` locales.\n\n## Exporting\n\n- JSON: Exports all notes as an array (date, content, rating, transcript, summary, audioUrl).\n- ICS: Creates calendar events (18:00–18:30 by default) for each note.\n  - Titles and calendar name are localized.\n\n## Keyboard and UX Tips\n\n- Save Entry: saves the currently selected note for the selected day.\n- New note: creates a new blank note for the day and switches to it.\n- Delete note: removes just the selected note.\n- Clear: clears the current form values (does not delete saved entries until you Save).\n\n## Tech Stack\n\n- React 18 + TypeScript + Vite\n- Tailwind CSS + shadcn/ui + Radix UI\n- date‑fns for date formatting and locales\n- ics for calendar export\n\n## Project Structure\n\n- `src/pages/DailyJournal.tsx` — main journal UI and logic (calendar, notes, stats)\n- `src/components/AudioControls.tsx` — recording, transcribing, summarizing, and audio UI\n- `src/components/SettingsDialog.tsx` — API key, models, system prompt, language, delete all audio\n- `src/components/ExportDialog.tsx` — export to JSON/ICS\n- `src/i18n/i18n.tsx` — i18n provider, translations, and date locales\n- `src/services/openai.ts` — OpenAI calls (transcription and summaries)\n- `src/utils/export-utils.ts` — JSON/ICS export helpers\n\n## Roadmap Ideas\n\n- Persistent audio storage (IndexedDB or backend upload)\n- Per‑note tags and search\n- Charts and insights for mood tracking over time\n\n## License\n\nMIT — see [LICENSE](./LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frazdnut%2Faudiodiary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frazdnut%2Faudiodiary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frazdnut%2Faudiodiary/lists"}