CapCheck: Checking Financial Advice Before It Costs You
Inspiration
Short-form videos have made financial information easier to find, but they have also made misleading advice easier to spread.
A creator can confidently claim that a stock is guaranteed to rise, that an investment has no risk, or that viewers need to act immediately. These videos are often fast, convincing, and difficult to check before someone makes a decision based on them.
We wanted to build something that could slow that process down.
CapCheck was inspired by a simple question: What if someone could paste a financial video into a tool and see which claims are supported before trusting the advice?
We did not want CapCheck to return only a score or a basic true-or-false label. We wanted users to understand why a claim received its result, what evidence was used, and what they should check before acting on the information.
What It Does
CapCheck turns a short financial video into an evidence-backed credibility scorecard.
A user can paste a TikTok or YouTube Shorts URL or upload a video file. CapCheck then processes the video through several stages:
- Fetching the video
- Processing its content
- Extracting individual claims
- Checking those claims against evidence
- Building the final scorecard
The result includes a Cap Score from 0 to 100. A higher score means the video contains more misleading, unsupported, or unverifiable claims.
The score is grouped into three simple labels:
- No cap: Most claims are supported by reliable evidence.
- Some cap: Some claims are unsupported, misleading, or missing context.
- Full of cap: A large part of the video is misleading or unsupported.
CapCheck also shows each claim separately. Every checkable claim includes a verdict, confidence level, explanation, timestamp, and supporting or contradicting sources.
Not everything in a video should be treated as a fact. CapCheck separates factual statements, predictions, and opinions. Opinions are shown to the user, but they are skipped during fact-checking because they cannot be proven true or false in the same way as a factual statement.
The scorecard also identifies hype language such as guarantees, artificial urgency, fear, or claims of popularity. Instead of displaying these phrases by themselves, CapCheck shows the surrounding context and explains why the wording may be misleading.
Finally, it gives the user practical next steps connected to the evidence, such as checking an SEC warning, reading an official government page, or reviewing the original source.
How We Built It
We built CapCheck as a Next.js application using React, TypeScript, Tailwind CSS, and Zod.
One of our first decisions was to create a shared data contract for the entire analysis process. We defined the exact structure of claims, evidence, verdicts, progress updates, errors, and completed scorecards with Zod.
This gave the frontend and analysis sides of the project one shared format. The interface does not need to know whether a result came from test data or the live analysis system. It only needs to receive a valid analysis event.
The application sends a video URL or upload to the /api/analyze route. Results are sent back with server-sent events, which allows the interface to display each stage as it happens instead of leaving the user on a blank loading screen.
For the current prototype, we created several fixed analysis scenarios, including:
- A mostly reliable financial video
- A video containing a mix of true and false claims
- A highly misleading crypto promotion
- A partial failure where one source cannot be checked
- A complete analysis failure
These scenarios travel through the real API route, streaming parser, and interface. They are not simple screenshots or hardcoded result pages. This allowed us to build and test the full user experience while the live video ingestion and Gemini analysis system was being connected.
We also added input checks for invalid URLs, unsafe filenames, unsupported requests, and video files larger than 50 MB. The test mode is handled only by the server and is blocked in production.
Challenges We Faced
One of the hardest parts was deciding what should count as a checkable claim.
Financial videos often mix facts, predictions, opinions, and promotional language in the same sentence. Treating all of these statements the same would create misleading results. We had to design separate types for factual claims, predictive claims, and opinions.
Another challenge was showing uncertainty honestly. A future stock price cannot always be marked true or false. In those cases, CapCheck needs to explain that the claim is unverifiable instead of pretending to know what will happen.
Evidence quality was another important problem. A government filing should not be treated the same as an unknown promotional page. We added trust levels for sources and recorded whether each source supports, contradicts, or only adds context to a claim.
We also had to make the analysis process understandable while it was running. Video processing and source checking can take time, so we used a streamed progress system. This gives the user clear updates while keeping the final result separate from the loading state.
Building the frontend and analysis system at the same time created another challenge. A change to the shape of a claim or scorecard could easily break both sides. Our shared Zod contracts and fixed test scenarios gave both parts of the project a stable format to work against.
We also wanted partial failures to remain useful. If one source cannot be reached, the entire scorecard should not disappear. CapCheck can keep successful results visible while marking the affected claim as unverifiable.
What We Learned
We learned that a useful fact-checking tool cannot stop at a verdict. Users need to see the reason behind the verdict and the evidence that supports it.
We also learned that financial claims need different types of evaluation. Historical facts, future predictions, personal opinions, and sales language should not all be scored in the same way.
The project showed us how valuable shared contracts can be when several parts of an application are being built at once. By agreeing on the data format early, we were able to work on the interface, API route, streaming system, and analysis adapter without tightly connecting their internal code.
Testing also became an important part of the project. We used Vitest, React Testing Library, and Playwright to check the data contracts, interface behavior, API route, streamed events, error handling, keyboard navigation, and mobile layout.
Most importantly, we learned that trust also depends on presentation. A financial safety tool should feel calm and clear. It should not use the same pressure or excitement that may have made the original video misleading.
What’s Next
Our next step is completing the live analysis adapter.
The planned pipeline will download supported short-form videos, send them to Gemini for video understanding, extract claims, gather outside evidence, and return results through the same streaming route already used by the interface.
We also want to expand CapCheck beyond checking one video at a time. A future version could include a searchable feed of reviewed financial videos, allowing users to discover content that has already passed a clear reliability check.
CapCheck is not meant to replace financial research or professional advice. Its purpose is to give people a clearer starting point before they trust a confident claim or make a decision based on a short video.
Built With
- gemini
- next.js
- node.js
- playwright
- react
- server-sent
- tailwind
- typescript
- vitetest
- yt-dlp
- zod

Log in or sign up for Devpost to join the conversation.