{
  "id": 10030592,
  "title": "[AI in Practice] Deploying Song Lingo to Cloud Run: Making a Private Lyrics Website Just for Me",
  "url": "https://urgent.news/2026/09/26/ai-in-practice-deploying-song-lingo-to-cloud-run-making-a-private",
  "topic": "ai",
  "section": "AI",
  "published": "2026-09-26T17:24:45.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/evanlin/ai-in-practice-deploying-song-lingo-to-cloud-run-making-a-private-lyrics-website-just-for-me-mb3"
  },
  "original_language": "en",
  "account": "In the previous post, the author used Gemini 3.8 Flash TTS to build Song Lingo, a website that pastes a YouTube MV URL and transcribes the lyrics, adds furigana, translation, and grammar notes, and reads it line by line using a teacher designed via voice design. The website has only run on the author's computer, but the goal of this post is to move it to Cloud Run so it can be used on mobile. The author acknowledges that the website contains full lyrics and translations, and moving it public has two practical consequences: copyright and cost. To ensure the website remains private and only accessible to the author, they compared two solutions: using IAP + In-app Verification and no external access, using gcloud run services proxy. They chose the former solution because it allows for a login function and ensures that only the author's account can access the lyrics and APIs at every layer, from start to finish. The author initially planned to use signed URLs to store audio files in GCS and generate short-lived signed URLs for playback, but they realized this was a vulnerability. Instead, they decided to read the audio files directly through Cloud Run and send them to the browser, with IAP and in-app verification in place before playback. This extra hop adds negligible traffic cost. The architecture consists of a single container image containing both Node 22 and Python, with the song data and audio stored in a private Cloud Storage bucket mounted as the /data folder. The API key is provided as an environment variable, and access control is enforced using IAP and in-app verification. The author uses four layers of protection: Cloud Run permissions, IAP, in-app verification, and a private bucket. Any failure in these layers prevents access, even if the others hold.",
  "summary": "Recap In the previous post , I used Gemini 3.8 Flash TTS to build Song Lingo: you paste a YouTube MV URL, Gemini transcribes the lyrics, adds furigana, translation, and grammar notes, and then a teacher designed via voice design reads it to you line by line. It has only ever run on my own computer, but I want to be able to use it on my phone. So the goal of this post is simple: Move it to Cloud…",
  "key_points": [
    "Song Lingo website runs on author's computer, now moving to Cloud Run for mobile access.",
    "Author chose IAP + In-app Verification solution for private access, preventing copyright issues."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}