AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Vendel - SMS Gateway Platform
Translation pending
Developer toolsTypeScript · GoGitHub @JimScopeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
An open source SMS gateway for your own devices
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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 /_/Read the full 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