dogma13
Project
Sign In

Replit Creates MVP: YouTube Summary Service #2

Pokute
Jun 12, 20251y ago
Category
Empty
Continued from Part 1.
Replit으로 빠른 YouTube 요약 서비스 MVP 제작기 – 독립 생산자가 되기위한 - East Chair
Replit 기반으로 YouTube 영상을 AI로 요약하는 shortV 서비스 개발 경험과 기능 구현, 실제 활용 노하우를 공유합니다.
slashpage.com

Deploying Improvement Work

In the previous article, I introduced the process of creating an MVP based on Replit. After that, I made some improvements and summarized the process up to deployment.

Improved usability through UI modifications

+ Improved page structure

We completed the implementation of core functions and made modifications that took user accessibility into consideration. Previously, the feeds I collected were a closed structure that only I could see, but now we have added a page that can be shared and viewed together.
Prompt Summary:
* Changed from existing Home → Feed
* New Home page dedicated to recommended videos
- Only display videos with at least 1 upvote
- Sort by latest recommendations
* Viewable without logging in
* When you first access, go directly to this page
As a result, the site's character has become clearer, with the first screen shown to users changing from a feed to a curated selection of recommended content.

+ Add channel button

Since a public page was created, we thought there would be an action to “agree with other users’ choices.” We concluded that Upvote was the first function and adding a channel was the second.
Upvote 옆에 채널추가 버튼 삽입
Prompt Summary:
* Placed in the same style next to upvote
* Click to add to user's channel list and add related videos
* Disable button if already added
* Deletion is performed on the channel management page.
This feature will serve as a foundation for naturally building a user's activity history while improving the video curation experience.

+ Add trend slide

At the top of the new homepage, we've added a trending area that features recently popular videos.
Prompt Summary:
* Conditions: Within the last 7 days + Most upvotes + In case of a tie, based on number of views
* 8 cards in total, 4 can be slid at a time
* Leave space empty if not available
* If there are less than 4, the slide button is disabled.
This paragraph serves to quickly show users “what’s hot these days” and adds rhythm to the overall structure.

+ Dark mode and toggle button

We’ve added dark mode to the entire site. We’ve added a dark mode toggle next to the account icon, and we’ve updated the overall layout and components to match. I personally feel this has improved the visual experience while also making it more polished.
I made a simple request, but some parts, such as the upvote button, were omitted, so I modified them separately.

Improving AI Summary Generation Logic and Frustration

+ Most do not provide scripts

The video summary function is still the core function. However, in the actual operation process, we found that there are quite a lot of YouTube videos without scripts. The situation where summarization is impossible with the existing method was repeated.
In short, yt-dlp, PyTube were blocked by YouTube policy, and YouTube API was meaningless without script.
First, I've summarized the logic:
* Method 1. Maintaining the existing method: If there is a script in the video, summarize it after transcription
* If successful, proceed with summary, if failure, perform method 2
* Method 2. Audio-based analysis: Extract audio with yt-dlp → Transcribe with Whisper → Summarize with GPT-4o
But there were many problems here.
•
Yt-dlp blocked by YouTube's bot blocking policy
•
PyTube is also unstable
•
Whisper API response delay
•
Summary failure in deployment environment
In the end, the hybrid method using Whisper+GPT-4o also had difficulty completely stabilizing, and in cases where there was no script, it was replaced with a title and description-based summary.

+ Voice extraction success

I searched in various places including Perplexity, GPT, and Deepseek, but couldn't find a solution. Then, while Googling, I found a blog post that said it was successful after updating the yt-dlp version.
It worked right after the version update.
Because YouTube updated their bot blocking policy, I also had to use the latest version of yt-dlp.
After a brief cheer, I tested a few channels. The methodology worked, but there was a problem:

+ Detailed logic must be set by a person

Replit does more for you than you might think. It sets up backup strategies and implements features when problems seem to occur, etc. However, surprisingly, it doesn't do things that a 3-4 year developer would know.
When extracting audio data from videos with yt-dlp, there were continued failures due to issues such as timeouts or size limits. Therefore, we requested split processing.
Prompt Summary:
* When extracting voice with yt-dlp, it is divided into 5-minute units and extracted.
* Extract the script from each segmented voice as Whisper
* Merge extracted scripts to perform summary
* After improving the logic, we were able to obtain a high-quality summary result without any issues.

+ Issues with video collection queue and crashes

This issue is also one that Replit did not resolve on its own. When adding a new channel, several existing videos are imported as samples, and when a new channel is added while importing videos, the existing task is stopped and the new task is forced to proceed. This resulted in cases where missing values were left in the DB.
To solve this, we improved the queueing of collection requests and processed them sequentially in FIFO mode. We also added a function to limit the number of tasks in progress and automatically clean up after completion. In addition, we set up a regular DB cleanup.

Deployment issues and repeated rollbacks

+ Deployments Hell

I sorted out all the issues and started the distribution. From here, I fell into hell…
The bottom line is that it appears to be a deployment configuration issue with the Autoscale service provided by Replit, which the Agent can never resolve.
Resolved issues that weren't really big problems
•
Capacity exceeded due to large video files during distribution: Automatically delete files after summarization
•
Excessive Python dependencies: Optimized dependencies (reduced to 17MB)
•
Missing .ignore files for deployment: .gitignore, .replitignore, .deployignore settings
Unsolved Problems:
* Cannot find dist/index.js in Creating Autoscale service step
2025-06-11T11:47:16Z info: Creating Autoscale service
error proxying request error=dial tcp 127.0.0.1:5000: connect: connection refused

rest-express@1.0.0
start
node:internal/modules/cjs/loader:1228
at node:internal/main/run_main_module:28:49 {
NODE_ENV=production node dist/index.js
error proxying request error=dial tcp 127.0.0.1:5000: connect: connection refused
rest-express@1.0.0 start
at node:internal/main/run_main_module:28:49 {
rest-express@1.0.0 start
at Module._load (node:internal/modules/cjs/loader:1051:27)
Error: Cannot find module '/home/runner/workspace/dist/index.js'
error proxying request error=dial tcp 127.0.0.1:5000: connect: connection refused
error proxying request error=dial tcp 127.0.0.1:5000: connect: connection refused
node:internal/modules/cjs/loader:1228
...repeat...
error proxying request error=dial tcp 127.0.0.1:5000: connect: connection refused
2025-06-11T11:48:46Z error: The deployment is crash looping. This can happen if the run command fails or exits immediately after starting. Check the logs for more information.
At first I thought it was an issue with the deployment service trying to force the port to 5000 instead of 80, 8080. (This might be the culprit..) Then I searched for an issue where the index.js file couldn't be loaded and spent $20 on endless fixes and deployment attempts… …
I was so frustrated that I was thinking about migrating to vercel+neon, so I quickly imported and deployed it, but I was told that I needed to configure it for the vercel environment, so I held off for now.
Eventually, we had to roll back to when we started working that day…
In fact, the yt-dlp issue was a version issue, so I should have rolled back immediately and proceeded, but I ended up spending $20 because of an error. After rolling back and improving the existing logic, it was deployed without any problems. In the end, it seems to have been an issue with Replit's Autoscale deployment.

An unexpected ambush

+ YouTube's policies are strict

After distribution, I tried to add channels and finish it, but strangely, the normal summary was not working again.
When a voice-based summary is not possible, I set it to print “This result is summarized only with the title and description, so it may differ from the actual video content.” in front of the summary. However, when I added it in the distribution version, it was printed like this…
As a result, the yt-dlp bot was 100% blocked in the distribution version. I also collected and organized workarounds and requested improvements to the agent.
But they were all limited by policy and I surrendered.
If anyone knows how to solve this, please leave a comment. Please.

Finish

This improvement effort was not simply about adding features, but was also a time to reexamine the direction of the service. It ended with regret over the distribution issues and frustration over the YouTube bot blocking policy.
The video summary, which is the core element of this service, is not working properly, so it has become unopenable. If a solution is found in the future, I would like to open it after improvement and receive feedback.
Current release version link: https://shortv.replit.app/
Since proper summarization is not available in the distribution version, information may be deleted upon sign-up or channel addition.
Do
Subscribe to 'Dogma13'
If you subscribe to the site, you can be the first to receive the latest updates, including new posts, via notifications and email.
Join Slashpage and subscribe to 'Dogma13'!
Subscribe
👍