UGC Reactions from Real Creators
실제 크리에이터 영상은 11달러, 이미지 8달러. 맞춤 제작은 영상당 25달러부터, 최소 250달러, 상업 라이선스 포함
ViewScale가 TikTok, Reels, Shorts를 분석해 성장 방해 요소와 정확한 해결책을 시간표시와 함께 알려줍니다
ViewScale analyzes your TikToks, Reels and Shorts and reveals what's blocking growth — with timestamped problems and exact fixes.
마케팅TypeScript · PLpgSQLGitHub @businessfaustas온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗ViewScale analyzes short-form videos (TikTok, Instagram Reels, YouTube Shorts) and explains what limits their performance, with timestamped problems and exact fixes.
Next.js 16 (App Router, TypeScript, Cache Components) · Tailwind CSS v4 · shadcn/ui (Radix) · lucide-react · Framer Motion · Recharts · Supabase (auth, Postgres, Storage) · Anthropic API (analysis) · OpenAI Whisper (transcription) · Stripe (subscriptions, test mode) · Zod
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000
Every variable is listed in .env.example. Secrets are only read on the server; nothing
except NEXT_PUBLIC_* reaches the browser.
Hosted project
npx supabase link --project-ref <ref> then npx supabase db push
(or paste each file in supabase/migrations/ into the SQL editor, in order)..env.local.<your-url>/auth/callback to the redirect URLs.videos bucket itself allows 200 MB.Local (Docker)
npx supabase start # applies supabase/migrations and prints local keys
Put the printed API URL, anon key and service role key in .env.local. Email
confirmation is off locally, so sign-up signs you straight in.
ANTHROPIC_API_KEY: the analysis model defaults to claude-sonnet-5-5 (override with
ANTHROPIC_MODEL).OPENAI_API_KEY: used for Whisper transcription. Without it, analyses still run from
frames only, and the report lists the missing transcript.lib/pricing.ts. Put the price IDs in
STRIPE_PRICE_CREATOR and STRIPE_PRICE_PRO..env.local.STRIPE_WEBHOOK_SECRET:
stripe listen --forward-to localhost:3000/api/stripe/webhook \
--events checkout.session.completed,invoice.paid,customer.subscription.updated,customer.subscription.deleted
In production, add the same endpoint and events in the dashboard.4242 4242 4242 4242.lib/prompts/viewscale.ts holds an interim prompt. Paste the ViewScale system prompt
into VIEWSCALE_SYSTEM_PROMPT, without its "Output format" section
(OUTPUT_FORMAT_INSTRUCTIONS replaces it), then set PROMPT_IS_PLACEHOLDER to false.
Until then, the server logs a warning on the first analysis.
"This page couldn't load" after the layout appears. A server-side part of the page
threw an error. The browser only shows a generic message (often "Minified React error
#441"). The real error is in the server logs: the terminal running npm run dev /
npm start, or your Vercel project's Logs tab. The error ID on the page matches the
digest in the log.
The usual causes, which the app now explains on screen:
NEXT_PUBLIC_* values are
baked in at build time, so a redeploy is required).supabase/migrations/*.sql in order, then create your account again if
you signed up before running them.| Script | What it does |
|---|---|
npm run dev | Dev server |
npm run build / npm start | Production build / server |
npm run typecheck | Generates route types, then runs tsc |
npm run lint | ESLint |
All video processing happens in the browser, so the server needs no ffmpeg.
POST /api/analyses checks credits, caps uploads in progress at 3, creates the row,
and returns the Storage paths.<video> + <canvas>
(lib/video/frames.ts). It samples every 0.5s for the first 3s, then every 1.5s, at
most 40 frames, as 512px-wide JPEGs. The first and last frames are always included. On
long videos the spacing after 3s widens so the whole video fits in 40 frames.lib/video/audio.ts) and uploads it.POST /api/transcribe sends the WAV to Whisper and stores timestamped segments. No
audio, silent audio or a Whisper failure is recorded, and the run continues from
frames only.POST /api/analyze takes one credit atomically (consume_credit). It then sends the
labeled frames (base64), transcript, platform, context and any real performance data
to Claude and saves the result. Any failure refunds the credit (refund_credit) and
marks the analysis failed. The upload page offers "Retry analysis".Progress is shown as Uploading → Extracting frames → Transcribing → Analyzing → Done, and every failure is shown on screen.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗