A multi-upstream operations hub for self-hosted API services built with sub2api or new-api.
A multi-upstream operations hub for self-hosted API services built with sub2api or new-api.
Please read the following carefully before using this project:
Name Description
RecycleAI An innovation platform for AI resource reuse and intelligent service circulation, improving coordination across compute, model, and application capabilities.
XiongXiongAI An AI service brand centered on approachable experiences, stable access, and lightweight intelligent tools for reliable everyday usage.
qqqRouter An AI infrastructure platform for multi-model access, request routing, and usage governance, helping teams build more flexible and controllable model invocation workflows.
SparkCode A stable and efficient API relay provider for mainstream AI coding models including Claude Code, Codex, and Gemini with NanoBanana-series models; supports monthly plans, usage-based billing, high-concurrency calls, invoiced top-ups, dedicated enterprise onboarding, technical support, and a long-term invitation rebate program.
UU API An AI compute gateway for global developers and enterprises, offering one-stop access to ChatGPT, Claude, Gemini, and other major models through transparent official or first-hand channels, with reliable infrastructure built to make every call worthwhile.
ElucidRelay An API relay providing stable, high-throughput access to major overseas models including OpenAI, Claude, Gemini, and more through a single OpenAI-compatible endpoint; built for resellers and downstream platforms that need reliable volume and competitive pricing.
songsongAi An AI service brand for polished intelligent application experiences, focused on premium model access, reliable delivery, and streamlined workflows for creators and teams.
Yimo-US An API service brand focused on stable access and multi-upstream aggregation, designed for high-availability access, resource integration, and consistent service experiences.
Waha AI Access Claude, GPT, Gemini and more through a single OpenAI-compatible API. One key, all models. Pay only for the tokens you use, with transparent balances and instant top-ups. Fully compatible with your existing OpenAI code — switch freely.
TransitHub is a self-hosted admin and operations hub for managing multiple upstream sites and admin workspaces. It focuses on practical operator workflows: connecting upstream platforms, tracking balances and group multipliers, monitoring dashboard metrics, configuring notifications, and running scheduled group-rate campaigns that can automatically restore original multipliers after an activity ends.
The project is built as a Go backend with a Vue 3 admin frontend, backed by PostgreSQL and Redis.
| Component | Technology |
|---|---|
| Backend | Go 1.25, net/http, pgx |
| Frontend | Vue 3.5, Vite, TypeScript, TailwindCSS, vue-i18n |
| Database | PostgreSQL 16+ |
| Cache / Session | Redis 7+ |
| Deployment | Docker, Docker Compose |
Production compose files live under deploy/.
git clone https://github.com/deviseo/transit-hub.git transit-hub
cd transit-hub
# Edit deploy/docker-compose.prod.yml first:
# - image tag (defaults to deviseo/transithub:v0.1.15)
# - replace every change-this-* placeholder
# - database password in both DATABASE_URL and POSTGRES_PASSWORD
# - ADMIN_EMAIL / ADMIN_PASSWORD
docker compose -f deploy/docker-compose.prod.yml up -d
Open:
http://YOUR_SERVER_IP:10621
The production compose file includes:
app: TransitHub application container.postgres: PostgreSQL database.redis: Redis for admin sessions, cache, and scheduled tasks.Persistent data is stored under the repository root data/ directory by default:
data/postgres
data/redis
data/ticket-uploads
data/ticket-uploads holds uploaded ticket images (mounted into the app container at TICKET_UPLOAD_DIR, default /app/data/ticket-uploads). It is not served as a public static directory; make sure this volume is present before recreating the app container, otherwise uploaded images will be lost even though their metadata remains in the database.
SMTP_ENCRYPTION_KEY is an optional environment variable, only required if you want to save an SMTP password or send test emails from System Settings > Email Settings. Its absence does not prevent the application from starting and does not affect any non-SMTP feature. Generate a value with:
openssl rand -base64 32
This must be a base64-encoded 32-byte value, and it must be kept stable long-term once set. Rotating the key makes any previously saved SMTP password ciphertext undecryptable, requiring the password to be re-entered and saved.
For local development dependencies only:
docker compose -f deploy/docker-compose.yml up -d
This starts PostgreSQL and Redis on local ports 5432 and 6379.
Because the Dockerfile is stored in deploy/ but expects the repository root as build context, build with:
docker build -f deploy/Dockerfile -t deviseo/transithub:v0.1.15 .
cd backend
go test ./...
go run ./cmd/api
Important environment variables:
PORT=10621
DATABASE_URL=postgres://postgres:postgres@localhost:5432/transithub?sslmode=disable
REDIS_URL=redis://127.0.0.1:6379/0
[email protected]
ADMIN_PASSWORD=transithub
ALLOW_PUBLIC_REGISTER=true
# Local lottery debugging only; keep false or unset in production
LOTTERY_ALLOW_PRIVATE_SUB2API_TARGETS=false
cd frontend
npm install
npm run dev
Build check:
npm run build
Recommended checks before submitting changes:
cd backend
go test ./...
go vet ./...
go build ./...
cd ../frontend
npm run build
cd ..
docker compose -f deploy/docker-compose.yml config
docker compose -f deploy/docker-compose.prod.yml config
…
This project is licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0-only). See LICENSE for details.
No open issues yet, or sync has not completed.