AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI-powered GitHub repository intelligence platform.
GitVision syncs your GitHub repositories, generates AI-powered commit summaries, builds vector embeddings of your codebase, and lets you chat with your code using RAG (Retrieval-Augmented Generation). Think of it as a smart copilot that deeply understands your project's structure and history.README 전문 보기 ↗AI-powered GitHub repository intelligence platform.
GitVision syncs your GitHub repositories, generates AI-powered commit summaries, builds vector embeddings of your codebase, and lets you chat with your code using RAG (Retrieval-Augmented Generation). Think of it as a smart copilot that deeply understands your project's structure and history.
qwen/qwen3-embedding-8b via OpenRouter) using HNSW indexing| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router, Turbopack) |
| Language | TypeScript 5 |
| UI | React 19, Tailwind CSS v4, shadcn/ui, Framer Motion |
| Auth | Clerk |
| Database | Neon (Serverless PostgreSQL) with pgvector |
| ORM | Drizzle ORM |
| API | tRPC (end-to-end typesafe APIs) |
| AI | Google Gemini (chat, query rewrite, commit summaries), OpenRouter (embeddings), Vercel AI SDK |
| Background Jobs | Inngest (durable, event-driven functions) |
| GitHub API | Octokit |
├── app/ # Next.js App Router pages & API routes
│ ├── (auth)/ # Sign-in / sign-up flows (Clerk)
│ ├── (main)/ # Authenticated app shell
│ │ ├── chat/ # RAG chat interface
│ │ ├── code-viewer/ # Repository file browser
│ │ ├── create-project/ # New project onboarding
│ │ └── dashboard/ # Project analytics dashboard
│ └── api/ # API endpoints (chat, embeddings, inngest, tRPC, webhooks)
├── db/ # Drizzle schema & migrations
├── src/
│ ├── features/ # Feature-based architecture
│ │ ├── auth/ # User & auth utilities
│ │ ├── chat/ # Chat UI components & logic
│ │ ├── dashboard/ # Dashboard widgets & analytics
│ │ ├── landing/ # Marketing landing page
│ │ ├── projects/ # Project management
│ │ └── rag/ # Embedding generation & vector search
│ ├── lib/ # Shared libraries (inngest, trpc, AI clients)
│ └── shared/ # Shared UI components, hooks, utils
New to the codebase? Read
docs/architecture.mdfirst. It covers the layering above, the ingestion and chat flows with diagrams, and the three structural tensions worth knowing before you change anything (no transactions, no row-level security, two ownership guards).Security engineering is real and mostly invisible; the defences and the tests that pin them are written up in
docs/SECURITY.md.
git clone https://github.com/Mayank-Radadiya/GitVision.git
cd GitVision
bun install
The repository is a bun workspace — it ships a bun.lock and no package-lock.json
or yarn.lock. Use bun, or the lockfile will drift from what CI installs.
Create a .env file in the project root:
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
CLERK_SECRET_KEY=sk_...
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/dashboard
NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/dashboard
CLERK_WEBHOOK_SECRET=whsec_...
# Database (Neon Serverless PostgreSQL)
DATABASE_URL=postgresql://...
# GitHub
GITHUB_TOKEN=github_pat_...
# AI / LLM
GEMINI_API_KEY=AIza...
OPENROUTER_API_KEY=sk-or-...
bun run test:e2e needs the Clerk keys to point at a development instance
(pk_test_ / sk_test_). e2e/global-setup.ts refuses anything else before it
calls out, so a test run cannot mint a session against a live one. It creates a
fixture user on first run and writes e2e/.auth/user.json — gitignored, because
that file is a live credential. Every spec loads that state, so the signed-in
specs cannot start without a session. Override the identity with
CLERK_E2E_USER_EMAIL / CLERK_E2E_USER_PASSWORD.
# Generate migration files
bun db:generate
# Push schema to Neon
bun db:push
# Start Next.js (Turbopack)
bun dev
# In a separate terminal — start Inngest dev server
bun inngest
Open http://localhost:3000 to see the app.
| Command | Description |
|---|---|
bun dev | Start Next.js dev server with Turbopack |
bun build | Production build |
bun start | Start production server |
bun lint | Run ESLint |
bun typecheck | Run tsc --noEmit |
bun test | Run the Vitest suite once |
bun test:watch | Vitest in watch mode |
bun test:coverage | Vitest with a coverage report |
bun test:e2e | Run the Playwright end-to-end suite |
bun db:generate | Generate Drizzle migration files |
bun db:init | Create the database and apply migrations |
bun db:push | Init, then push the schema straight to the database |
bun db:migrate | Apply the committed migration files |
bun db:backup | Write a verified SQL dump |
bun db:studio | Open Drizzle Studio (DB GUI) |
bun inngest | Start Inngest dev server for background jobs |
bun clean | Remove build artifacts and caches |
db:push and db:migrate both change the database. db:push reconciles from
the schema files and is the right choice for local development; db:migrate
replays the committed SQL migrations and is the right choice anywhere shared.
The app uses a relational schema with vector extensions:
qwen/qwen3-embedding-8b vectors (OpenRouter) with HNSW cosine similarity indexGitVision uses Clerk for authentication with webhook-based user sync:
users tableapp/(main)/layout.tsx calls auth.protect() for every page under /dashboard, /chat and /code-viewer; each API route and tRPC procedure checks the session itself (24 of 24 tRPC procedures use protectedProcedure)1. Project files are streamed from GitHub via Octokit tarball API
2. Files are chunked and embedded using qwen/qwen3-embedding-8b via OpenRouter (768 dims)
3. Embeddings are stored in Neon with pgvector HNSW indexes
4. User query → embed → cosine similarity search → top-k chunks
5. Top chunks + query are sent to Gemini `gemini-2.0-flash-001` as grounded context
6. Streamed AI response with file-path citations
Contributions are welcome! Please follow the standard fork → branch → PR workflow.
git checkout -b feat/amazing-featuregit commit -m 'feat: add amazing feature'git push origin feat/amazing-featureNot currently licensed. This repository is private and has no LICENSE file, so all rights are reserved by default. Add a LICENSE before publishing it anywhere.
| Validation |
| Zod |