new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI google reviews management tool for small businesses
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Reputation management SaaS for local businesses and agencies.
Connect review platforms, sync and respond to reviews, run SMS/email campaigns, protect reputation with private feedback flows, and measure local SEO performance—all in one multi-tenant product.
This README is the onboarding entry point for engineers joining the team. It explains how we build, where code lives, and the rules we follow so changes stay safe at production scale. For deeper references, use the documentation index below.
AI agents: AGENTS.md is the master guide (code standards, SEO, skills, pre-flight checks). It is mirrored for each IDE below.
| IDE | Reads rules from | Reads skills from |
|---|---|---|
| Cursor | AGENTS.md, .cursor/rules/ | .agents/skills/ |
| GitHub Copilot | .github/copilot-instructions.md | .agents/skills/ |
| Windsurf | .windsurf/rules/project.md | .windsurf/skills/ |
| Antigravity | .antigravity/rules.md | .agents/skills/ |
| Claude Code | CLAUDE.md, .claude/rules/ | .claude/skills/ |
.agents/skills/<name>/SKILL.md — run pnpm run skills:sync after adding skills to update Claude/Windsurf symlinks.pnpm run skills:vercelpnpm run cursorrules:installZyene Reviews helps location-based businesses:
The codebase is a single Next.js application backed by Supabase Postgres with strict Row Level Security (RLS) for tenant isolation.
| Surface | Route group | Who uses it |
|---|---|---|
| Marketing site | src/app/(marketing) | Prospects, SEO, docs, free tools |
| Auth | src/app/(auth) | Sign up, login, password reset |
| Onboarding | src/app/onboarding | New orgs connecting Google / choosing plan |
| Dashboard | src/app/(dashboard) | Paying customers (reviews, campaigns, settings) |
| Public review flow | src/app/r/[slug] | End customers leaving feedback |
| Embeddable widget | src/app/w/[slug] | Business websites (carousel/badge) |
| API | src/app/api | Mobile, Zapier, cron, webhooks, internal jobs |
| Docs | src/app/docs | Developer API documentation |
Active business context: Logged-in users work inside one business (location) at a time. The active business is stored in an HTTP-only cookie and resolved server-side via getActiveBusinessId() in src/lib/auth/business-context.ts.
| Layer | Technology | Role |
|---|---|---|
| App framework | Next.js 16 (App Router) | SSR, routing, API routes, server actions |
| Language | TypeScript (strict) | End-to-end typing |
| UI | React 19, Tailwind CSS 4, shadcn/ui | Components and design system |
| Database & auth | Supabase (Postgres + Auth) | Data, RLS, sessions |
| Cache / rate limits | Upstash Redis | Business context cache, API rate limiting |
| Background jobs | Inngest | Review sync, campaigns, AI batches |
| Billing | Stripe | Subscriptions, webhooks, entitlements |
| Resend | Transactional + team invites | |
| SMS | Twilio | Review requests and alerts |
| AI | Google GenAI | Review analysis, drafts, insights |
| Observability | Sentry | Errors and performance |
| Hosting | Vercel (typical) | Production deployments |
| Package manager | pnpm | Only lockfile: pnpm-lock.yaml |
flowchart TB
subgraph clients [Clients]
Browser[Browser / Dashboard]
Public[Public review pages]
CronExt[External cron scheduler]
Webhooks[Stripe / Twilio / Google Pub/Sub]
end
subgraph next [Next.js App]
AppRouter[App Router pages]
API[src/app/api route handlers]
Actions[Server actions]
Proxy[src/proxy.ts request interception]
end
subgraph data [Data & jobs]
Supabase[(Supabase Postgres + RLS)]
Redis[(Upstash Redis)]
Inngest[Inngest workers]
end
subgraph external [External APIs]
Google[Google GBP APIs]
StripeAPI[Stripe]
TwilioAPI[Twilio]
ResendAPI[Resend]
end
Browser --> AppRouter
Public --> AppRouter
AppRouter --> API
AppRouter --> Actions
Proxy --> AppRouter
API --> Supabase
API --> Redis
API --> Inngest
Actions --> Supabase
Inngest --> Supabase
Inngest --> Google
CronExt --> API
Webhooks --> API
API --> StripeAPI
API --> TwilioAPI
API --> ResendAPI
Request path (simplified):
src/proxy.ts may handle auth subdomain routing, session refresh, CORS.createClient() from src/lib/db/supabase/server.ts (user-scoped, RLS applies).createAdminClient() from src/lib/db/supabase/admin.ts—use sparingly and never from the browser.Think in this hierarchy—almost every feature maps here:
Organization (tenant, billing, plan)
└── Business (single location / GBP listing)
├── review_platforms (Google / Yelp / Facebook connections)
├── reviews, private_feedback
├── review_requests, campaigns, customers
├── competitors, competitor_snapshots, insights
└── team: business_members, invitations
| Entity | Table(s) | Notes |
|---|---|---|
| Organization | organizations | Stripe customer, plan, limits |
| Business | businesses | Slug, branding, auto-reply settings |
| User | users + Supabase Auth | Profile; linked via organization_members / business_members |
| Review | reviews | Unified across platforms; AI fields on row |
| Review request | review_requests | Lifecycle: queued → sent → opened → completed |
| Platform connection | review_platforms | OAuth tokens (encrypted at rest) |
Full schema narrative: docs/PROJECT_DEEP_DIVE.md.
zyene-reviews/
├── src/
│ ├── app/ # Next.js routes ONLY (pages, layouts, API, actions)
│ │ ├── (auth)/ # Login, signup, password reset
│ │ ├── (dashboard)/ # Authenticated product
│ │ ├── (marketing)/ # Marketing + legal + tools
│ │ ├── api/ # Route handlers (REST-style)
│ │ ├── actions/ # Server actions (mutations)
│ │ ├── onboarding/
│ │ ├── r/[slug]/ # Public review capture flow
│ │ └── w/[slug]/ # Embeddable widget
│ ├── components/ # React UI (feature folders + ui/ primitives)
│ ├── services/ # External APIs (Google, Stripe, Twilio, Inngest, …)
│ ├── lib/ # Internal logic (auth, db wrappers, validation, utils)
│ ├── hooks/ # Shared React hooks
│ ├── types/ # Shared TypeScript types
│ ├── constants/ # Static config maps
│ └── proxy.ts # Request interception (auth routing, session)
├── supabase/
│ └── migrations/ # SQL migrations (source of truth for schema)
├── tests/
│ ├── unit/ # Vitest unit tests
│ └── visual/ # Playwright visual tests
├── scripts/ # Maintenance & verification scripts
├── docs/ # Human + engineering documentation
├── public/ # Static assets
├── .github/workflows/ # CI (typecheck, colors, test, build)
├── .env.example # Environment template (copy to .env.local)
└── package.json
Placement rules (enforce on every PR):
| Put this… | Here… | Not here… |
|---|---|---|
Page / layout / route.ts | src/app | src/components |
| Google/Stripe/Twilio calls | src/services | src/lib, UI components |
| Auth helpers, DB clients | src/lib | src/services |
| shadcn primitives | src/components/ui | feature folders |
| Feature UI | src/components/<feature> | root of components |
Details: docs/CODEBASE_STRUCTURE.md.
Use this as a structured ramp—most teams complete it in 3–5 days.
.env.example → .env.local and fill required keys with team-provided staging valuespnpm install && pnpm dev → app at http://localhost:3000docs/PROJECT_DEEP_DIVE.md (sections 1–6)supabase/migrations/README.mdr/[slug] → rating → redirect or private feedback.github/copilot-instructions.md (canonical rules for AI + humans)pnpm typecheck, pnpm test, pnpm run check:colors, pnpm build locallydocs/PRODUCTION_CHECKLIST.md for anything touching auth, webhooks, or billingpackageManager field in package.json pins the version—use Corepack: corepack enable)# 1. Install dependencies
pnpm install
# 2. Environment
cp .env.example .env.local
# Fill values in .env.local (see Environment variables)
# 3. Start dev server (Turbopack)
pnpm dev
Open http://localhost:3000. Marketing home is /; dashboard routes require auth.
| Problem | What to check |
|---|---|
| Auth redirect loops | NEXT_PUBLIC_ROOT_DOMAIN, cookie domain, Supabase redirect URLs |
| “Redis required” in prod-like mode | UPSTASH_REDIS_REST_URL / TOKEN in .env.local |
| Google connect fails | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, redirect URI in Google Cloud console |
| Inngest jobs not running locally | Inngest dev server / INNGEST_* keys; see .env.example comments |
| Email rate limits | Configure custom SMTP in Supabase Auth or use Resend for app email |
Troubleshooting guides: .agent/docs/GOOGLE_SYNC_TROUBLESHOOTING.md. Historical integration checklist: docs/archive/INTEGRATION_VERIFICATION.md.
Never commit .env, .env.local, or secrets in SQL migrations.
Copy .env.example to .env.local. Variables are grouped there by domain:
| Group | Purpose |
|---|---|
| Supabase | DB URL, anon key, service role (server only) |
| App domains | NEXT_PUBLIC_APP_URL, NEXT_PUBLIC_ROOT_DOMAIN |
| OAuth, Maps/Places, Pub/Sub verification | |
| Stripe | Keys, price IDs, webhook secret |
| Twilio / Resend | Messaging and transactional email |
| Inngest | Event key, signing key, serve host |
| Upstash | Redis for cache + rate limits |
| Cron | CRON_SECRET for /api/cron/* routes |
| Sentry / analytics | Optional observability |
NEXT_PUBLIC_* variables are exposed to the browser—never put secrets there.
For production, secrets live in the hosting provider (e.g. Vercel) environment settings, not in git.
| Command | Purpose |
|---|---|
pnpm dev | Local development server |
pnpm clean | Delete .next and tool caches if typecheck/build is slow |
pnpm verify:fast | Typecheck + file-size guard (default after small edits) |
pnpm verify | Typecheck + full Vitest + file-size guard |
pnpm build | Production build (required in CI) |
pnpm start | Run production build locally |
pnpm typecheck | tsc --noEmit — run before every PR |
pnpm test | Vitest unit tests (tests/unit) |
pnpm lint | ESLint |
pnpm run check:colors | Enforce semantic colors (no raw palette utilities in most files) |
pnpm test:visual | Playwright visual regression (optional locally) |
Maintenance scripts (see scripts/ and package.json):
pnpm run verify:critical-flows — critical path smoke checkspnpm email:test — send test emails via Resend (needs .env.local)Agent / internal docs live under .agent/docs/ (live onboarding + troubleshooting). Historical snapshots live under docs/archive/. Planned work: docs/ROADMAP.md.
We follow a trunk-based style on main:
main: feat/short-description or fix/short-description.main — deploys to production per team release process..github/workflows/ci.yml)Every push/PR to main runs:
pnpm install --frozen-lockfilepnpm typecheckpnpm run check:colorspnpm testpnpm buildDo not merge if any step fails. Fix forward on the same branch.
pnpm typecheck && pnpm test && pnpm run check:colors && pnpm build pass locallybusiness_id / organization_id).env files, no debug logging of tokensUI (components) → calls → app routes / server actions
↓
lib (orchestration, validation, auth)
↓
services (external providers)
↓
Supabase / Redis / Inngest
src/app/api/_shared for consistent apiOk / apiError responses.src/app."use client" only when you need browser state, effects, or event handlers.page.tsx where possible; pass props to client islands.*-section.tsx, load-*-page-data.ts).load-reviews-page-data.ts beside page.tsx.| Kind | Convention | Example |
|---|---|---|
| React component | PascalCase.tsx | ReviewsPageClient.tsx |
| Hook | use*.ts | useCampaignDetail.ts |
| Route handler | route.ts in folder | api/reviews/route.ts |
| Service module | kebab-case.ts | sync-platform.ts |
Use path alias @/ (maps to src/):
import { createClient } from "@/lib/db/supabase/server";
import { syncGoogleReviewsForPlatform } from "@/services/google/sync-service";
These rules are non-negotiable—they protect customer data and our compliance posture.
business_id.organization_id.userCanAccessBusiness() / verify-business-access before privileged writes.business_id when the server can derive it from session + cookie.@supabase/ssr.src/proxy.ts handles protected routes, subdomain routing (auth vs app), session refresh.active_business_id, set via setActiveBusiness() after server-side validation.| Source | Verification |
|---|---|
| Stripe | stripe-signature + webhook secret |
| Twilio | x-twilio-signature |
| Google Pub/Sub | Query token GOOGLE_PUBSUB_VERIFICATION_TOKEN |
| Cron routes | Authorization: Bearer <CRON_SECRET> |
Fail closed in production if secrets are missing on protected endpoints.
review_platforms (encrypted)—never return them to the client.More detail: .github/copilot-instructions.md, docs/PRODUCTION_CHECKLIST.md.
supabase/migrations/.YYYYMMDDHHMMSS_description.sql for new migrations).# Create a new migration (Supabase CLI)
supabase migration new add_my_feature
# Local reset (destructive)
supabase db reset
# See remote vs local status
supabase migration list
Read supabase/migrations/README.md before your first schema change.
Generated types (if used) are regenerated separately—do not hand-edit database.types.ts for schema changes.
src/services/inngest/)Used for:
HTTP entry: src/app/api/inngest/route.ts.
Do not set INNGEST_DEV on Vercel production.
src/app/api/cron/)External scheduler (e.g. cron-job.org) hits GET routes with CRON_SECRET:
See comments in .env.example for URL patterns.
src/app/api/webhooks/)stripe — subscription lifecycletwilio — delivery statusgoogle/pubsub — GBP review notifications → Inngest fan-outresend — email events (Svix signature)| Integration | Code location | Notes |
|---|---|---|
| Google GBP | src/services/google/ | OAuth, sync phases, performance, Q&A, lodging |
| Stripe | src/services/stripe/ | Checkout, portal, plans, webhooks |
| Twilio | src/services/twilio/ | SMS review requests |
| Resend | src/services/resend/ | Email; templates in src/services/resend/templates/ |
| Yelp | src/services/yelp/ | Review sync |
src/services/facebook/ | Review sync | |
| AI | src/services/ai/ | Analysis, insights, descriptions |
Plan entitlements: src/services/stripe/plans.ts — check before gating features.
| Layer | Location | When to add |
|---|---|---|
| Unit | tests/unit/*.test.ts | Pure functions, parsers, access guards, API helpers |
| Visual | tests/visual/ | Critical marketing/auth pages (Playwright) |
| Manual | Staging | OAuth, billing, SMS, end-to-end flows |
Run before PR:
pnpm typecheck
pnpm run check:colors
pnpm test
pnpm build
We optimize for fast unit tests on business logic; full E2E is selective due to OAuth/external deps.
src/components/ui/ (shadcn/Radix).bg-background, text-muted-foreground, text-primary, text-chart-2, etc.).pnpm run check:colors blocks raw Tailwind palette utilities and most raw hex in TS/TSX (exceptions for canvas/PDF/OG renderers—see scripts/check-color-guards.mjs).docs/DESIGN.md.When building UI:
next-themes).size-* over matching w-* + h-* when dimensions are equal.@sentry/nextjs).src/lib/logger (structured; avoid logging PII/tokens).GET /api/health — used in deploy verification.When debugging production issues:
.agent/docs/GOOGLE_SYNC_TROUBLESHOOTING.md.Typical flow:
main → CI green → deploy to Vercel (or team pipeline).supabase db push per runbook).GET /api/health.Pre-release checklist: docs/PRODUCTION_CHECKLIST.md.
Critical flows: docs/CRITICAL_FLOW_VERIFICATION.md.
| Document | Audience | Contents |
|---|---|---|
| This README | All engineers | Onboarding, conventions, workflow |
docs/INDEX.md | All | Master doc map |
docs/PROJECT_DEEP_DIVE.md | Engineers | Architecture, schema, features |
docs/CODEBASE_STRUCTURE.md | Engineers | Where to put new code |
docs/DESIGN.md | Design + FE | Visual system |
docs/PLATFORM_FEATURES.md | PM + sales + eng | Customer-facing capabilities |
docs/PRODUCTION_CHECKLIST.md | Release owner | Deploy gates |
docs/CRITICAL_FLOW_VERIFICATION.md | QA + eng | Manual verification |
supabase/migrations/README.md | Backend | Migration rules |
How we aim to work—similar to mature SaaS engineering teams:
app / components / lib / services are intentional, not suggestions.main.src/services/stripe/ + webhook routes.Ship safely, scope by business_id, and read docs/PROJECT_DEEP_DIVE.md before changing auth, billing, or sync.
.github/copilot-instructions.md| Eng + AI tools |
| Canonical coding rules |
.agent/docs/* | Internal | Live agent playbooks (onboarding, Google sync) |
docs/archive/* | Internal | Historical architecture / verification snapshots |