{"id":22057083,"url":"https://github.com/fspoettel/moneypenny","last_synced_at":"2026-04-11T12:37:04.839Z","repository":{"id":39909450,"uuid":"280919640","full_name":"fspoettel/moneypenny","owner":"fspoettel","description":"🤖 never tired, slightly incoherent robo-secretary. Built with the Google Cloud Speech-to-Text API.","archived":false,"fork":false,"pushed_at":"2023-02-03T12:11:58.000Z","size":1822,"stargazers_count":2,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-28T22:31:31.507Z","etag":null,"topics":["google-cloud","nodejs","speech-to-text"],"latest_commit_sha":null,"homepage":"https://moneypenny.spoettel.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fspoettel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-07-19T17:48:36.000Z","updated_at":"2021-11-07T11:14:50.000Z","dependencies_parsed_at":"2023-02-13T15:46:07.984Z","dependency_job_id":null,"html_url":"https://github.com/fspoettel/moneypenny","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fspoettel%2Fmoneypenny","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fspoettel%2Fmoneypenny/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fspoettel%2Fmoneypenny/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fspoettel%2Fmoneypenny/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fspoettel","download_url":"https://codeload.github.com/fspoettel/moneypenny/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245129013,"owners_count":20565382,"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":["google-cloud","nodejs","speech-to-text"],"created_at":"2024-11-30T16:16:05.948Z","updated_at":"2026-04-11T12:36:59.801Z","avatar_url":"https://github.com/fspoettel.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `moneypenny`\n\n\u003cdiv align=\"left\"\u003e\n  \u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/workflow/status/fspoettel/moneypenny/Node.js%20CI\" /\u003e\n\n  \u003ca href=\"https://codecov.io/gh/fspoettel/moneypenny\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/fspoettel/moneypenny/branch/master/graph/badge.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003e Automatic transcription tool built around the Google Speech-To-Text API. It turns audio/video files into timestamped, `.srt`-formatted transcripts and has support for speaker separation and automatic punctuation.\n\n![Screenshot](https://github.com/fspoettel/moneypenny/blob/master/docs/screenshot.png)\n\n## Self-Hosting\n\nThis service is self-hostable via [dokku](http://dokku.viewdocs.io/dokku/). It requires the following addons to be present and linked to the app:\n\n * [redis](https://github.com/dokku/dokku-redis)\n * [postgres](https://github.com/dokku/dokku-postgres)\n\nIn order to create the database tables for this service, open `psql` via `dokku postgres:connect \u003cyour_app\u003e` and run the instructions in `./src/db/pg/create.sql`\n\nAfter that, you can connect to your container and run `yarn add-user --email {an_email} --password {password_will_be_hashed}` to add the first user to the service.\n\nYou will also have to add the content of `nginx.example.conf` to `/home/dokku/moneypenny/nginx.conf.d/upload.conf` to increase nginx's default timeouts since the STT API can take a very long time to process input. This would ideally be circumvented via a queue for async processing. I have not got around to implement that yet.\n\n## Setting up Google Cloud\n\nThis service uses the _Google Cloud Speech-To-Text_ API to transcribe media files. This API requires you to upload media files to _Google Cloud Storage_ before being able to transcribe them. In order to setup your _Google Cloud_ account, you'll need to:\n\n * (env: `GOOGLE_PROJECT_ID`) Activate the `Speech-To-Text API` for the Google Cloud project you are using for this service \n * (env: `GOOGLE_BUCKET`) Create a private Google Cloud Storage bucket \n * (env `GOOGLE_CLIENT_EMAIL` \u0026 `GOOGLE_PRIVATE_KEY`) Create a service user  with at least the following set of permissions:\n  - `storage.objects.create`\n  - `storage.objects.delete`\n  - `storage.objects.get`\n  - `storage.objects.list`\n\nAfter setting the credentials as environment variables via `dokku config:set` (see above and `.env.example`), you should be able to use the service.\n\n## Configuration\n\nSee `.env.example` for required and optional `.env` variables.\n\n* See [here](https://github.com/fspoettel/moneypenny#setting-up-google-cloud) for Google setup instructions\n* `UPLOAD_LIMIT_MB` sets the upload limit. This value will also have to be reflected in the nginx config (see above)\n* `SESSION_SECRET` (required) see [here](https://github.com/expressjs/session#secret)\n* `SENTRY_DSN` (optional)\n\n## Development\n\n### Mocking Google STT responses\n\nReplace `recognize()` call in `transcribe.js` with `src/lib/__mocks__/googleCloud.js` implementation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffspoettel%2Fmoneypenny","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffspoettel%2Fmoneypenny","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffspoettel%2Fmoneypenny/lists"}