dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
AI 클라우드 영상 관리로 기존 카메라 활용, 실시간 스트리밍·23가지 탐지·가상 순찰 및 준수 기록 제공
AI cloud video management for the cameras you already own: live streaming, 23 detections and scheduled virtual patrol rounds with a compliance record.
보안TypeScript · PythonGitHub @Deutics온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Marketing and SEO site for Camzify — an AI virtual-patrolling and video-analytics platform by Camzify Global Pte Ltd (Singapore).
This is a content site, not an application. There is no login, no dashboard, no authenticated area. The product app lives separately at app.camzify.live. Everything here exists to be found — by search engines, by AI answer engines, and by buyers — and to convert that traffic into demo requests.
Open http://localhost:3000. That is the whole setup.README 전문 보기 ↗Marketing and SEO site for Camzify — an AI virtual-patrolling and video-analytics platform by Camzify Global Pte Ltd (Singapore).
This is a content site, not an application. There is no login, no dashboard, no authenticated area. The product app lives separately at app.camzify.live. Everything here exists to be found — by search engines, by AI answer engines, and by buyers — and to convert that traffic into demo requests.
| Requirement | Version | Notes |
|---|---|---|
| Node.js | ≥ 18.17 | Enforced by engines. .nvmrc pins 20 LTS — run nvm use if you have nvm. |
| npm | ≥ 9 | .npmrc sets legacy-peer-deps=true, so plain npm install is correct. Do not add the flag manually. |
| PostgreSQL | any recent | Optional. Only needed for the four contact/demo forms — see below. |
npm install
npm run dev
Open http://localhost:3000. That is the whole setup.
You do not need a database, an
.envfile, or any credentials to run or build this site. All 210 pages are statically prerendered from source with no per-request data, andnpx prisma generate(which runs automatically on install) does not require a live connection. A full production build succeeds with zero environment configuration.You only need
.envif you are working on the four lead-capture form endpoints (/api/book-demo,/api/contact,/api/free-trial,/api/newsletter). Without it, every page renders normally; submitting a form returns{"success": false, "message": "Failed to send message"}because the database write has nowhere to go. That is expected, not a broken checkout.
cp .env.example .env
Fill in .env — every variable is documented inline in .env.example.
Then push the schema to your database:
npx prisma db push
You should see the dark homepage with the crimson Camzify logo, a nav bar, and a hero reading "Your site. Patrolled 24/7." with an animating 12-camera patrol grid on the right. If the page renders as unstyled black-on-white text, see Troubleshooting below.
npm run build
npm start
The build prerenders 129 routes. In the output, every page should be marked ○ (Static)
— only the four /api/* routes should be ƒ (Dynamic). If a content page shows as
ƒ, something has opted it out of static generation (usually headers(), cookies(),
or export const dynamic), and that is a bug worth fixing.
Never run
next buildwhilenext devis running. Both write to.next/, and the build strips the dev server's CSS — leaving a site that looks catastrophically broken but is only a clobbered build directory. Build to a separate directory instead:NEXT_DIST_DIR=.next-probe npx next build
| Symptom | Cause | Fix |
|---|---|---|
| Site renders with no styling at all — plain text on white | next build was run while next dev was running; they share .next/ | Stop the dev server, rm -rf .next, restart it |
Port 3000 is already in use | Another project is on 3000 | npm run dev -- -p 3411 |
ChunkLoadError in the browser console | Known Next dev race — a dynamic chunk was requested before it compiled | Handled automatically by ChunkLoadErrorHandler; the page self-reloads. If it loops, rm -rf .next |
| A Tailwind class has no effect | The value is outside the configured scale — e.g. an opacity stop other than the defaults plus our 15/25 | Add the stop to tailwind.config.ts, or use a configured one |
Form returns "Failed to send message" | ZeptoMail is not configured (ZEPTOMAIL_TOKEN, ZEPTOMAIL_FROM_ADDRESS) or rejected the send; the server log shows the response. Before: no DATABASE_URL — the Prisma write fails. Server log shows Environment variable not found: DATABASE_URL | Expected with no .env. Set DATABASE_URL and run npx prisma db push if you need the forms to work |
| Build fails on a type error | typescript.ignoreBuildErrors is false by design | Run npx tsc --noEmit to see it directly |
| Prisma client errors after editing the schema | Generated client is stale | npx prisma generate |
| Command | What it does |
|---|---|
npm run dev | Dev server with hot reload |
npm run build | prisma generate then production build. Prerenders all 210 pages as static HTML |
npm start | Serve the production build |
npm run lint | Next.js ESLint |
npx tsc --noEmit | Type check. Run before every commit |
npx eslint -c eslint.ssr.config.mjs . | SSR/hydration safety lint. Runs after every build in CI — do not skip |
npx prisma generate | Regenerate the Prisma client (also runs on postinstall) |
npx prisma db push | Push prisma/schema.prisma to the database |
npx shadcn@latest add <name> | Add a shadcn/ui primitive back into components/ui/ |
/api/* routes are dynamic.page.tsx. Editing content means editing React.ai-features, industries, use-cases, guides, platform, virtual-patrolling, compare, partners, camera-connectivity — each a hub page plus spokes, densely cross-linked.DATABASE_URL is set, also write it to four write-only tables. Nothing is read back by the site. Before this, no notification was sent — someone must check the tables.lib/site-config.ts is the single source of truth for company identity, address, phone, email and canonical URL. Never hardcode those anywhere else.lib/seo.ts generates all structured data. Every page emits one schema.org @graph that links back to shared Organization and WebSite nodes.Read these in order. If you only read one, read Adding Pages.
| Doc | Read it when |
|---|---|
CLAUDE.md | You are an AI agent working in this repo — non-negotiable rules and gotchas |
docs/ARCHITECTURE.md | You need to know where things live and why |
docs/ADDING-PAGES.md | You are adding or editing any page. Per-category recipes and copy-paste templates |
docs/SEO-GEO.md | You are writing content, or touching metadata, schema, sitemap or robots |
docs/DESIGN-SYSTEM.md | You are writing UI — tokens, typography, components, motion |
docs/CONTRIBUTING.md | Before your first change — the pre-flight checklist |
docs/DEPLOYMENT.md | You are deploying, or configuring environment variables on Vercel |
docs/SEO-GEO.md § Keyword research and docs/seo/ | You are choosing what a page should be titled or which page to write next |
| Layer | Choice |
|---|---|
| Framework | Next.js 14.2 (App Router) |
| Language | TypeScript 5.2 |
| Styling | Tailwind CSS 3.3 + CSS-variable design tokens |
| UI primitives | shadcn/ui (Radix) — only what is actually used is kept in the repo |
| Motion | framer-motion for reveals and nav; gsap + ScrollTrigger for product mockups |
| Icons | lucide-react |
| Database | PostgreSQL via Prisma 6 — lead capture only |
| Lead notifications | ZeptoMail (Zoho) transactional email API |
| Deploy | Vercel-compatible static output |
origin is github.com/Deutics/camzify-website. main is production and deploys through Vercel; development is the working branch and is merged into main by pull request.app/layout.tsx and is removed by hand when the site leaves maintenance./free-trial describes a trial the business has not confirmed.tsc --noEmit, the production build, and eslint.ssr.config.mjs./trust, and public pricing if rate-card figures are ever to be indexed. Placeholder blocks have been replaced with honest substitute content rather than left visible — see docs/SEO-GEO.md § Honesty rules.docs/seo/ has no difficulty, AI-volume or SERP columns until the account is topped up.public/ holds JPEG sources at 1600px or below plus generated WebP ladders; scripts/optimise-images.py regenerates them and lib/image-manifest.ts. Do not add a PNG or a PSD.docs/AUDIENCE-STRATEGY.md| You want to know who the buyers are and why the partner track leads |
docs/design/ | Design handoffs for the product, not the site (the console sign-in) |