AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기An open source SMS gateway for your own devices
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Vendel is a full-stack platform for SMS management and delivery through connected devices. It allows sending SMS messages using registered devices (Android phones or modems) as gateways, with quota management, webhooks, and multi-user support.
Backend
• Framework: PocketBase (Go)
• Database: SQLite (embedded)
• Authentication: JWT (built-in), OAuth2 (Google, GitHub)
• Push Notifications: Firebase Cloud Messaging (FCM)
• Email: Built-in SMTP support, Mailcatcher for local dev
• Admin: PocketBase dashboard at /_/README 전문 보기 ↗Vendel is a full-stack platform for SMS management and delivery through connected devices. It allows sending SMS messages using registered devices (Android phones or modems) as gateways, with quota management, webhooks, and multi-user support.
/_/v* → GHCR Docker image + Go binaries via GoReleasersms_received, sms_sent, sms_delivered, sms_failedVendel can deliver SMS through external gateways in addition to physical Android phones and USB modems. Today AWS End User Messaging (AEUM) is supported as the first such provider.
When AEUM_ENABLED=true, Vendel creates a global virtual device "AWS End User Messaging" that:
device_id on POST /api/sms/send.The AWS pool you point at can include short codes, sender IDs, 10DLC numbers, and RCS Agents. Vendel calls SendTextMessage once per recipient; AWS picks the channel and origination identity from the pool.
Delivery events flow back via SNS HTTPS subscription to /api/webhooks/aws-aeum-events; Vendel updates sms_messages.status and fires standard sms_delivered / sms_failed webhooks.
Setup: see docs/aws-end-user-messaging-setup.md.
Limitations of the MVP:
channel=auto.vendel/
├── backend/ # Go + PocketBase API
│ ├── main.go # PocketBase setup, hooks, cron, routes
│ ├── go.mod / go.sum
│ ├── handlers/ # Custom API routes (sms, plans, webhooks)
│ ├── services/ # Business logic (SMS, FCM, quota, subscriptions)
│ │ └── payment/ # Payment provider (QvaPay)
│ ├── middleware/ # API key auth, maintenance mode
│ └── migrations/ # PocketBase collection definitions + seed data
├── frontend/ # React App
│ ├── src/
│ │ ├── routes/ # Pages (TanStack Router)
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom React hooks (PocketBase SDK)
│ │ └── lib/pocketbase.ts # PocketBase client
│ └── tests/ # Playwright tests
├── modem-agent/ # Go agent for USB modem gateways (AT commands)
├── Dockerfile # Multi-stage (node + go + alpine)
├── docker-compose.yml
├── litestream.yml # Litestream replication config (opt-in)
├── entrypoint.sh # Conditional startup (with/without Litestream)
└── .env # Environment variables
# Start the app
docker compose up -d
# View logs
docker compose logs -f app
Available services:
| Service | URL |
|---|---|
| App (API + Frontend) | http://localhost:8090 |
| PocketBase Admin | http://localhost:8090/_/ |
| Mailcatcher | http://localhost:1080 |
cd backend
# Run development server
go run . serve --http=0.0.0.0:8090
# Build binary
go build -o vendel .
./vendel serve --http=0.0.0.0:8090
cd frontend
# Install dependencies
npm install
# Development server
npm run dev
# Build
npm run build
# E2E tests
npx playwright test
The modem agent allows using USB LTE/4G/5G modems with a physical SIM card as SMS gateways — no Android phone needed.
cd modem-agent
# Configure modems (format: api_key:command_port[:notify_port], comma-separated)
export VENDEL_URL=http://localhost:8090
export MODEMS="your_device_api_key:/dev/ttyUSB0:/dev/ttyUSB1"
# Run
go run .
Create a .env file in the project root:
# Core
ENVIRONMENT=local
[email protected]
FIRST_SUPERUSER_PASSWORD=changethis
# Firebase (push notifications)
FIREBASE_SERVICE_ACCOUNT_JSON=<firebase-json>
# OAuth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
# Payment (QvaPay)
QVAPAY_APP_ID=
QVAPAY_APP_SECRET=
# Security
WEBHOOK_ENCRYPTION_KEY= # AES key for webhook secrets
# SMTP (defaults to localhost:1025 for mailcatcher in dev)
SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
# Backup (Litestream - optional)
LITESTREAM_REPLICA_URL= # e.g. s3://my-bucket/vendel/data
LITESTREAM_ACCESS_KEY_ID=
LITESTREAM_SECRET_ACCESS_KEY=
# URLs
APP_URL=http://localhost:8090
FRONTEND_URL=http://localhost:5173 # Use APP_URL value in production
# E2E tests
npx playwright test
# UI mode
npx playwright test --ui
git tag v0.1.0 && git push --tags) to publish a Docker image to GHCR and build Go binaries via GoReleasergit tag modem-agent/v0.1.0 && git push --tags) to build modem agent binaries| Repository | Description |
|---|---|
| vendel-homepage | Landing page and design system |
| vendel-android | Android app (device gateway) |
| vendel-mcp | MCP server for AI assistants |
| vendel-sdk-js | JavaScript/TypeScript SDK (vendel-sdk on npm) |
| vendel-sdk-python | Python SDK (vendel-sdk on PyPI) |
| vendel-sdk-go | Go SDK (Go modules) |
MIT License