尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證🔄 GIGO - Garbage In, Gold Out | AI-powered JSON transformation SaaS
翻譯準備中
正在載入完整 README。 以下為已儲存的摘錄。
The AI-powered universal data adapter. Send any JSON to a webhook, get back a payload that matches your schema — renamed, retyped, restructured — and optionally forwarded straight to its destination.
No field-by-field mapping rules. You show GIGO one example of the output you want; the AI understands the meaning of incoming data and reshapes it accordingly.檢視完整 README ↗The AI-powered universal data adapter. Send any JSON to a webhook, get back a payload that matches your schema — renamed, retyped, restructured — and optionally forwarded straight to its destination.
No field-by-field mapping rules. You show GIGO one example of the output you want; the AI understands the meaning of incoming data and reshapes it accordingly.
{ "user_first_name": "jean", { "first_name": "Jean",
"user_MAIL": "[email protected]", ──► "email": "[email protected]",
"amount": "49,90 €", "amount_cents": 4990,
"infos": { "ville": "Lyon" } } "city": "Lyon" }
Every service speaks its own dialect: firstName here, first_name there, amounts as strings, nested structures nobody agreed on. Connecting N sources to M destinations means writing and maintaining N×M brittle integrations. GIGO replaces them with a single hub: one webhook per target schema, AI does the translation, full audit trail included.
OPENAI_API_KEY / ANTHROPIC_API_KEY env vars as a server-wide fallbackgit clone <repo-url>
cd universal-data-adapter
bun install
cp .env.example .env # then fill in your values
bun run db:deploy # apply database migrations
bun run db:generate
bun run dev # → http://localhost:3000
ENCRYPTION_KEY(min 16 chars) is required — the app refuses to start without it. It encrypts destination credentials with AES-256-GCM.
docker compose up -d # see docker-compose.yml for configuration
curl -X POST https://your-instance/api/webhook/<ADAPTER_ID> \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: whsec_..." \
-d '{"any": "json", "shape": "works"}'
Response:
{
"status": "success",
"trace_id": "…",
"data": { "…": "transformed payload" },
"meta": {
"duration_ms": 1250, "transform_duration_ms": 1180,
"provider": "anthropic", "model": "claude-sonnet-5",
"input_tokens": 412, "output_tokens": 96
}
}
Errors are typed: 401 INVALID_SECRET, 413 PAYLOAD_TOO_LARGE, 429 RATE_LIMITED (+ Retry-After), 422 MAX_TOKENS, 504 TIMEOUT — always with a trace_id you can look up in the logs.
Sender ──POST──► /api/webhook/[id]
│ secret check (timing-safe) → rate limit → size cap
▼
shared pipeline (src/lib/pipeline.ts)
│ transform → validate → forward → log → usage
▼
provider layer (src/lib/providers/)
├─ openai.ts GPT-4o, strict structured outputs
└─ anthropic.ts Claude, forced strict tool use + prompt caching
The same pipeline powers the public webhook, the authenticated playground (POST /api/adapters/[id]/test) and log replay — three entry points, one behavior.
| Layer | Tech |
|---|---|
| Framework | Next.js 14 (App Router), TypeScript strict |
| Database | PostgreSQL + Prisma (versioned migrations) |
| Auth | Supabase Auth |
| AI | openai + @anthropic-ai/sdk behind a common TransformProvider interface |
| i18n | next-intl (cookie mode, no URL prefix) |
| Tests | Vitest — bun run test |
| Tooling | Bun |
timingSafeEqual).bun run test # 61 unit/integration tests
bun run test:watch
bunx tsc --noEmit # typecheck
bun run build # production build
bun run db:studio # browse the database
See CONTRIBUTING.md for guidelines.