dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
AI cloud video management for the cameras you already own: live streaming, 23 detections and scheduled virtual patrol rounds with a compliance record.
SecurityTypeScript · PythonGitHub @DeuticsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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) |