{"id":21731715,"url":"https://github.com/marcuswhybrow/ray-peat-rodeo","last_synced_at":"2026-02-22T08:32:08.674Z","repository":{"id":74704352,"uuid":"603363141","full_name":"marcuswhybrow/ray-peat-rodeo","owner":"marcuswhybrow","description":"Ray Peat interviews transcribed \u0026 augmented","archived":false,"fork":false,"pushed_at":"2024-12-20T12:26:25.000Z","size":8554,"stargazers_count":11,"open_issues_count":55,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-23T18:53:15.470Z","etag":null,"topics":["bash","direnv","github-deployment","github-pages","go-templ","golang","markdown","markdown-plugin","nix","nix-flake","openai-whisper","ray-peat","static-site-generator","tailwindcss"],"latest_commit_sha":null,"homepage":"https://raypeat.rodeo/","language":"Go","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/marcuswhybrow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"marcuswhybrow"}},"created_at":"2023-02-18T09:28:20.000Z","updated_at":"2025-08-24T16:27:45.000Z","dependencies_parsed_at":"2023-10-11T17:22:14.155Z","dependency_job_id":"466a850e-6bcf-41ea-9af4-d57de582acf8","html_url":"https://github.com/marcuswhybrow/ray-peat-rodeo","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/marcuswhybrow/ray-peat-rodeo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcuswhybrow%2Fray-peat-rodeo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcuswhybrow%2Fray-peat-rodeo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcuswhybrow%2Fray-peat-rodeo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcuswhybrow%2Fray-peat-rodeo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcuswhybrow","download_url":"https://codeload.github.com/marcuswhybrow/ray-peat-rodeo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcuswhybrow%2Fray-peat-rodeo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29706908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T05:59:28.568Z","status":"ssl_error","status_checked_at":"2026-02-22T05:58:46.208Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bash","direnv","github-deployment","github-pages","go-templ","golang","markdown","markdown-plugin","nix","nix-flake","openai-whisper","ray-peat","static-site-generator","tailwindcss"],"created_at":"2024-11-26T04:27:11.656Z","updated_at":"2026-02-22T08:32:08.657Z","avatar_url":"https://github.com/marcuswhybrow.png","language":"Go","funding_links":["https://github.com/sponsors/marcuswhybrow"],"categories":[],"sub_categories":[],"readme":"[raypeat.rodeo](https://raypeat.rodeo) is the open-source effort to transcribe\nthe public works of Ray Peat.\n\n[![Deploy to GitHub Pages](https://github.com/marcuswhybrow/ray-peat-rodeo/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/marcuswhybrow/ray-peat-rodeo/actions/workflows/gh-pages.yml)\n[![Built with Nix](https://builtwithnix.org/badge.svg)](https://builtwithnix.org)\n\n![banner](https://raw.githubusercontent.com/marcuswhybrow/ray-peat-rodeo/back-to-go/internal/assets/docs/ray-peat-rodeo-banner.png)\n\n# Getting Started\n\nGet [Nix Package Manager](https://nixos.org/download.html#download-nix), then \nclone this repository and start the auto-reloading dev server:\n\n```bash\ngit clone git@github.com:marcuswhybrow/ray-peat-rodeo.git\ncd ray-peat-rodeo\nnix develop -c modd\n```\n\n- `./assets` contains a markdown file for each known article or transcription.\n- `./github/workflows/gh-pages` auto deploys this repo to https://raypeat.rodeo\n- `./cmd/ray-peat-rodeo` is the code that builds the website from the markdown \nassets.\n- `./cmd/whisper-json2md` is a custom tool to massage AI transcripts to \nmarkdown (see [here](#ai-transcription)).\n- `./internal` contains this projects unique features, especially \n`./internal/markdown` and `./internal/cache/` which provide custom markdown \nplugins and automatic caching of remote data (e.g. GitHub issue titles).\n\nThose are the main things, and editing any of them trigger the dev server to \nauto reload, and your browser should hot-load the changes and auto refresh, \nmaking a near instant dev cycle.\n\n- `./flake.nix` \u0026 `./flake.lock` tell the `nix` command how to do everything \nfor us, for example the dev server (lauched by `nix develop -c modd`), tells\nnix to examine `./flake.nix` enter the custom shell environment defined \nthere, and run the command `modd` which is our dev server of choice.\n- `./gomod2nix.toml` in conjunction with `./flake.nix` helps the `nix` command \nbuild this project. It's autogenerated by running `nix develop -c gomod2nix`.\n- `./modd.conf` tells `modd` how to behave, such as running Tailwind CCS \nprocess automatically.\n- `./tailwind.config.js` tells tailwind how to do it's thing.\n\nAnd finally, you may wish to use [direnv](https://direnv.net) and \n[nix-direnv](https://github.com/nix-community/nix-direnv) to automatically load\nall project dependencies and tools into your shell environment whilst you are \ninside the project directory (auto unloads when you leave it). In the project \ndirectory:\n\n```bash\ndirenv allow\n```\n\n# Project Goals\n\n1. Round up every Ray Peat interview, article, newsletter and book.\n2. Use AI to quickly transcribe interviews.\n3. Store each interview (etc.) as human readable markdown.\n4. Generate a website from those markdown source files.\n5. Site-wide search of all assets.\n6. Tooltips for all mentioned topics and people linking to all other mentions.\n7. Timestamps linking to specific times in original audio or video.\n8. Sidenote annotations for clarifications and issues to be resolved.\n\nWhat this amounts to is using AI to quickly transcribe all interviews, then \nstoring the results in markdown. Next, one improves and augments each markdown \nfile with corrections, formatting and tagging all mentions and timecodes. \n\nFormatting is part of the markdown standard, but what I'm calling \"mentions\", \n\"timecodes\", and \"issues\" are extensions to the markdown syntax written \nspecifically for this project. With custom markdown syntax any functionality\ncan be realised whilst keeping the markdown documents human readible for \narchival purposes, and portability to other projects.\n\n# Adding Interviews\n\nGo to `./assets`. Every file in this directory is a \n[Markdown](https://www.markdownguide.org) file. Each one repesenting a unique\nRay Peat interview. Each filename is formatted in \n[Kebab Case](https://developer.mozilla.org/en-US/docs/Glossary/Kebab_case) and \nbegins with the date as `YYYY-MM-DD` (ISO 8601 format) followed by the title of \nthe interview.\n\nRay Peat Rodeo will respect whatever date is declared in the file name, and use \nit across the website. The title portion, verbatim, becomes the URL at which \nthis interview will exist.\n\nFor example...\n\n```bash\ntouch ./assets/2008-07-02-an-example.md\n```\n\n... will become a web page accessible at `raypeat.rodeo/an-example/` and will \nappear in the 2008 section, as having taken place on July 2nd. The contents of \nthe file must begin with the following [YAML](https://yaml.org/) frontmatter.\n\n```markdown \n---\nsource:\n    series: The name of the show Ray is appearing on \n    title: Human readable title (similar to filename title but more flexible)\n    url: https://example.com/the-original-audio-or-video\n    kind: audio\n---\n```\n\n- The `series` is used to group interviews by the show/host, so make sure you \nmatch the series _exactly_ to existing series in other interviews.\n- The `title` can contain any characters and appears at the top of the \ninterview page, and on the homepage listing. \n- The `url` is used to link to the original source URL, and to constuct \n\"timestamp\" links to allow readers to click through from a given point in the \ninterview diectly to that time in the source audio or video. \n- `kind` can be either `audio` or `video` and is offered as a filter when \nsearching Ray Peat Rodeo.\n\n**Done**. Next one may use the `transcribe` tool to automatically add an AI \ntranscription to this file (see [AI Transcription](#ai-transcription)).\n\n# AI Transcription\n\n`flake.nix` packages a `bash` script named `transcribe`. It downloads the \nsource audio of any file in `./assets/todo`, transcribes it, then updates the \nasset with the transcription, and updates the frontmatter data to reflect this \nchange.\n\n1. Argument **#1** is the markdown file to transcribe and update.\n2. Argument **#2** is your name, to log in the assets metadata.\n\n```bash\nnix run github:marcuswhybrow/ray-peat-rodeo#transcribe -- ./assets/todo/2024-10-12-example.md \"Marcus Whybrow\"\n```\n\n**Done**. Once you've added the AI transcript it's contents will be available to \nthe site-wide search engine, helping readers to further explore Ray's ideas. \nFinally, and optionally, one may augment the transcript with special formatting \nto take it to the next level (see \n[Augmenting and Completing A Transcript](#augmenting-and-completing-a-transcript)).\n\n# Augmenting and Completing A Transcript\n\n## Who's Speaking?\n\nPrefixing sentences with the speakers initials when the speaker changes, such \nas `RP:` for Ray Peat, allows Ray Peat Rodeo to separate the transcript into \ndifferent speach bubbles.\n\nMake sure to define the full name for each initials used in the YAML \nfrontmatter at the top of the markdown file like so:\n\n```markdown\n---\nspeakers:\n    RP: Ray Peat\n    MW: Marcus Whybrow\n---\n\nMW: Hi Ray, how are you?\n\nRP: Very good, thank you.\n```\n\n## What Time Is It?\n\nInterspersing timestamps within the transcript, such as `[12:34]`, allows \nreaders to jump staight to that point in the original source audio or video. \nI like to use timestamps sparingly to indicate a change in topic or a new \nquestion being asked. For example...\n\n```markdown \nMW: That's great. [12:34] And what do you think about that, Ray?\n\nRP: I think...\n```\n\n*Tip: Timestamps can express hours too: `[2:01:12]`*\n\n## Mentions\n\nWhen a person, topic, chemical, hormone, book, website, or any *thing* is \nmentioned, marking it as a \"mention\" gives readers a little popup bubble that \nprovides a mini summary of where else it's been discussed. Surround the \nmentioned thing in double square bracets like this...\n\n```markdown \nRP: The history of [[Estrogen]] reesearch...\n```\n\nFor mentioned people, put their surname first, then a comma, then their given \nnames (without titles such as Sir or Doctor). For example...\n\n```markdown\nMW: [[Wodehouse, Pelham Grenville]] was the creater of Jeeves and Wooster...\n```\n\nThis backwards convension helps Ray Peat Rodeo know how to order every mention \nalphabetically. RPR is smart enough to output the name the right way around to \nthe reader...\n\n\u003e **Pelham Grenville Wodehouse** was the creator of Jeeves and Wooster...\n\n*Note: The first comma always has this effect. Commas must be otherwise \navoided in mention names.*\n\nTo tailor the displayed text to your liking use the `|` character...\n\n```markdown \nMW: I've been reading [[Blake, William|an author]] that...\n```\n\nWhich becomes...\n\n\u003e I've been reading **an author** that...\n\nAnd finally, you can associate books with their authors using the `\u003e` \ncharacter. For example...\n\n```markdown\nMW: and I discovered he wrote [[Blake, William \u003e Jerusalem]] around then...\n```\n\n`Jerusalem` is known as a \"sub mention\", and it'll be included included in the \npopup summary for William Blake, and *vise versa*. Sub mentions are a powereful \nway to help new readers explore Ray's influences by hopping around these \nassociations bound together via unique conversations. \n\n*Tip: A mention or submention may be a URL or email address. In these speacial \ncases, the popup summary will also contain a direct link to the URL, or a \n\"mailto\" link to open the reader's email client directly.*\n\n*Tip: Mentioning a scientific paper by it's DOI URL (https://doi.org/...) \nautomatically grabs the papers full title from the DOI database to display to \nthe reader. See this [real example](https://raypeat.rodeo/john-william-gofman/#https%3A%2F%2Fdoi.org%2F10.5860%2Fchoice.37-5129).*\n\n## Is That Clear?\n\nWhen someone new to Ray Peat may not understand a reference or term, one can \nadd a sidenote, using curly brackets, that appears distinct from the main text\nin a little bubble. For example...\n\n```markdown \nRP: PUFA {Polyunsaturated Fats} were originally...\n``` \n\nI like to clarify a term this way the first time it's used in a transcript, \nthen trust the reader to recall it's definition, or refer back to it. \nThis serves to keep interruptions to a minimum and let Ray take center stage.\n\n## Huh?\n\nSometimes Ray's mentions are ambiguous, or the full name of a paper or \nperson is unclear. In this case one may  \n[create an issue](https://github.com/marcuswhybrow/ray-peat-rodeo/issues/new)\nin the GitHub project and title it as a question to which others may know the \nanswer. For example \"Which 1986 biology paper is Ray refering to?\" Add to the \nissue's description any pertenant context and submit the issue.\n\nOnce created, take note of the issue's unique numerical ID displayed near the \nissue's title. Refer to this ID using a `#` inside of a sidenote:\n\n```markdown\nRP: In 1986 they showed {#51} that even though...\n```\n\nWhen a sidenote contains a `#` and a number, a golden, call to action, issue \nbubble containing the issue title will be shown to readers. In this case the \nbubble will read \"#51 Which 1986 biology paper is Ray refering to?\" Clicking \nthe bubble takes readers to the GitHub issue itself.\n\nGitHub issues are a great way to keep track of opportunities for improving\nthe clarity of readability for new readers, and serve to invite and organise \nthe expertese of those who might fill in the gaps.\n\nI like to use issues liberally. If I'm unsure of a mention, or don't know how \nto word a sidenote, I create an issue and move on. This keeps transcription \nfluent, leaving future me, or someone better educated, to fix the issue later.\n\n# Similar Projects \n\n- [The Ray Peat Archive](https://github.com/0x2447196/raypeatarchive) has a \nvery large collection of AI transcriptions stored in a plain text subtitle \nformat called WebVTT.\n- [Bioenergetic Life](https://bioenergetic.life) is an interactive search \nengine for The Ray Peat Archive's data set, with side-by-side text and audio \nsnippets.\n- [Chadnet Ray Peat Wiki](https://wiki.chadnet.org/ray-peat) is a quite \ncomprehensive backup of Ray's interviews, books, articles, newsletters, and \nmiscellaneous assets such as his PhD work.\n- [Functional Performance Systems](https://www.functionalps.com/blog/tag/ray-peat) \nhas many blog posts collating Ray Peat quotes on numerous topics as well as \nentire articles.\n- [Toxinless](https://www.toxinless.com) is a Peat informed knowledgebase with \ntwo unique search engines.\n- [MarshmalloW](https://www.selftestable.com/ray-peat-stuff/sites) is a big \nlist of articles, interviews, blogs, emails exchanges, forums \u0026 other tools.\n- [Notes From A Subterranean Library In Oregon](https://t3uncoupled.substack.com/p/notes-from-a-subterranean-library) \nis a 90 page PDF collection of Ray's writing ranging from 1967 to 1999.\n- [Expulsia](https://expulsia.com/health) reckons it's the \"largest Ray Peat \ndirectory on the internet!\" Challenge accepted!\n- [Ray Peat Forum Transcripts](https://raypeatforum.com/community/forums/audio-interview-transcripts.73/)\nis a place people post transcripts of Ray Peat interviews.\n- [Ray Peat Forum Projects](https://raypeatforum.com/community/forums/interview-transcript-projects.78/)\na list of, likely dormant, efforts to transcribe Ray's interviews.\n- [Ray Peat Forum Email Exchanges](https://raypeatforum.com/community/forums/interview-transcript-projects.78/)\nis a vast list of unverified quotes from email conversations with Ray.\n- [Ray Peat Forum Glossary](https://raypeatforum.com/wiki/index.php/Ray_Peat_Glossary)\nis a large list of terms and explanations for common Ray Peat topics.\n- [Ray Peat Forum Studies](https://raypeatforum.com/wiki/index.php/Ray_Peat:_Links_to_referenced_studies)\nis a substantial list of scientific studies and abstracts on several topics.\n- [@raypeat3365 on YouTube](https://www.youtube.com/playlist?list=PLJ21ERyEQ8HHM1Y-Dvm9nb0BhhHVIT64-)\nhas a play list of 71 mp3's uploaded to YouTube\n- [@RayPeatClips on YouTube](https://www.youtube.com/@RayPeatClips/videos) has \nover 77 mp3 interviews and over 584 smaller clips.\n- [Ray Peat Forum Audio \u0026 Radio Interviews](https://raypeatforum.com/community/categories/audio-radio-interviews.320/) \nhas hundered of threads to check for new assets.\n\n[Open an issue](https://github.com/marcuswhybrow/ray-peat-rodeo/issues/new) if \nI've missed a similar project.\n\n# Cheers\n\nAt the momemt I'm just one Marcus working on Ray Peat Rodeo; chugging along in \nmy spare time. Thanks for your interest in the project, even if you can't help \nout with the code. Go on, give the project a star! 😉\n\nIf you want to sponsor my work see \n[my GitHub sponsors page](https://github.com/sponsors/marcuswhybrow).\n\nCheers,  \nMarcus\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcuswhybrow%2Fray-peat-rodeo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcuswhybrow%2Fray-peat-rodeo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcuswhybrow%2Fray-peat-rodeo/lists"}