{"id":22813159,"url":"https://github.com/raviriley/donna","last_synced_at":"2025-04-04T08:03:31.577Z","repository":{"id":257987642,"uuid":"871722729","full_name":"raviriley/donna","owner":"raviriley","description":"OpenAI x PearVC hackathon (built in 6 hours)","archived":false,"fork":false,"pushed_at":"2025-01-04T01:12:15.000Z","size":830,"stargazers_count":193,"open_issues_count":6,"forks_count":40,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-03-28T07:05:40.138Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raviriley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2024-10-12T18:54:26.000Z","updated_at":"2025-03-20T18:38:04.000Z","dependencies_parsed_at":"2025-01-16T17:14:44.196Z","dependency_job_id":"f6ca8e3b-68e4-451c-ad9b-14c60b94d2f8","html_url":"https://github.com/raviriley/donna","commit_stats":{"total_commits":67,"total_committers":4,"mean_commits":16.75,"dds":"0.28358208955223885","last_synced_commit":"31079d9df28b0eb8b451d714ea9e31da90892bbe"},"previous_names":["raviriley/donna"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raviriley%2Fdonna","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raviriley%2Fdonna/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raviriley%2Fdonna/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raviriley%2Fdonna/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raviriley","download_url":"https://codeload.github.com/raviriley/donna/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247142049,"owners_count":20890652,"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","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":[],"created_at":"2024-12-12T12:15:48.654Z","updated_at":"2025-04-04T08:03:31.555Z","avatar_url":"https://github.com/raviriley.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Donna - your badass AI Secretary\n\n\u003e note: this code is licensed under NPOSL-3.0 (non-profit, no commercial use)\n\nDonna screens your calls, rejecting the spam and preserving your sanity by sending callers your scheduling / Calendly link when you're busy. Using the latest [Realtime API](https://openai.com/index/introducing-the-realtime-api/) from OpenAI in conjunction with function calling to Google Calendar and Twilio, Donna knows when you're busy in real time and can handle multiple callers at once in 85 different languages!\n\nhttps://github.com/user-attachments/assets/d266a922-6c3e-43e7-9629-1e36ee6e3f65\n\n**Monorepo Stack**:\n\n- FastAPI backend written in Python\n  - processes phone calls and audio streaming between both Twilio and OpenAI usings websockets\n  - powers both inbound and outbound calls to and from Donna\n  - reads from Google Calendar\n  - sends scheduling text messages\n  - reports live call status\n- Next.js frontend written in Typescript\n  - `/status` page that visualizes calls in real-time\n  - integration with EdgeDB to handle user preferences and (in the future) semantic searching over previous conversations\n\n![Screen Recording 2024-10-13 at 1 55 01 AM](https://github.com/user-attachments/assets/6cceb50d-c4a2-4fc7-a8ae-b2d903cdfab9)\n\n## Running the apps\n\n`.env` file:\n\n```env\nTWILIO_ACCOUNT_SID=\nTWILIO_AUTH_TOKEN=\nTWILIO_PHONE_NUMBER=   ←dedicated Twilio number\nHARVEY_PHONE_NUMBER=   ←your cell phone\nSTREAM_URL=            ←backend websockets URL\nOPENAI_API_KEY=\nCALENDLY_URL=          ←meeting scheduling link of your choice\n```\n\nYou'll need a dedicated Twilio phone number and to either deploy the server or run it locally through a tunnel (ie via `ngrok`) to expose the API to Twilio.\nWe used [Poetry](https://python-poetry.org/) to handle Python dependencies on the backend and [pnpm](https://pnpm.io/) for the frontend.\n\n1. clone the repo\n2. `cd frontend`\n3. `pnpm install \u0026\u0026 pnpm dev` to start the frontend\n4. navigate to `localhost:3000/status` to view the live status page\n5. `cd ../backend`\n6. `poetry install`\n7. `poetry shell`\n   now, you can run our custom scripts:\n   - `f` or `format` to run Ruff formatting\n   - `l` or `lint` to run Mypy and Ruff linting\n   - `fl` to run both\n   - `dev` to start the dev server\n8. call Donna!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraviriley%2Fdonna","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraviriley%2Fdonna","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraviriley%2Fdonna/lists"}