Build, share, and chat with custom AI agents
VelonY is an extensible chatbot platform supporting both private and group conversations with multiple agents. Users can create custom agents/models, explore and subscribe to others' creations, and interact in real-time across desktop and mobile devices. Built with a modern stack—Next.js, Fastify, Supabase, and ShadCN—VelonY offers flexibility and a seamless user experience.
Try it here: https://velony.vercel.app
-
Multi-agent private chats
Chat with multiple bots in a private convo. -
Group conversations with friends + bots
Invite friends and have bots join the same room. -
Build custom agents & models
Fully customizable agent and model creation. -
Discover community creations
Browse public agents/models on the explore page. -
Fully responsive design
Works seamlessly on desktop, tablet, and mobile devices.
- Agent: A persona or identity with its own name, and behavior. Agents are the front-facing interface users interact with.
- Model: A backend LLM configuration powering an agent's responses. Think of it as an LLM endpoint (like OpenAI, DeepSeek, etc.) with specific settings (e.g., temperature, top_p).
- Frontend: Next.js (TypeScript), ShadCN UI
- Backend: Fastify (JavaScript)
- Authentication: Google OAuth2 via GCP
- Database: Supabase
- Realtime: Pusher or Socket.io
- Cache (session/auth): Redis
- Agent avatars: S3-compatible object storage
Agent avatar URLs are derived from each agent id, so no avatar URL column is needed. Configure the backend to write avatars to S3, and configure the frontend to read from the matching public base URL:
# backend
S3_BUCKET=your-bucket
S3_REGION=ap-southeast-1
S3_ACCESS_KEY_ID=your-access-key
S3_SECRET_ACCESS_KEY=your-secret-key
S3_AGENT_AVATAR_PREFIX=agents
S3_AGENT_AVATAR_CACHE_CONTROL=public, max-age=300
# frontend
NEXT_PUBLIC_AGENT_AVATAR_BASE_URL=https://your-cdn-or-bucket.example.com/agentsFor S3-compatible providers, set S3_ENDPOINT. Set S3_FORCE_PATH_STYLE=true if your provider requires path-style bucket URLs.
The backend JWT expiry and frontend cookie lifetime are configurable. Keep them matched unless you intentionally want a different browser storage lifetime.
# backend
JWT_EXPIRES_IN=1d
# frontend
NEXT_PUBLIC_AUTH_COOKIE_MAX_AGE_DAYS=1Made with sweat and blood by Yudo
Licensed under the MIT License




