Appearance
Social, DAO & creators
Community, governance and growth surfaces. These are marketing channels and products at the same time, which is why they sit inside the platform rather than beside it.
DAO
On-chain governance — proposals, voting and comments.
| Concern | Where |
|---|---|
| Routes | bz-backend/routes/daoRoutes.js → /api/dao |
| Proposal / question model | models/daoQuestionModel.js |
| Vote model | models/daoVoteModel.js |
| Comment model | models/daoCommentModel.js |
| Status cron | services/daoCron.js → proposalStatusJob, started in index.js |
proposalStatusJob transitions proposals through their lifecycle (open → closed → executed) on a schedule, so a proposal's state is not dependent on someone loading the page.
Voting weight and eligibility are governed by holdings and the rewards layer rather than a separate governance token contract.
Clippers
A creator-rewards program for short-form video — TikTok, YouTube Shorts, Reels. Creators join a campaign, submit clips, get reviewed, and get paid.
| Concern | Where |
|---|---|
| Routes | routes/clippersRoutes.js, mounted at both /api/clippers and /api/v1/clippers |
| Campaign model | models/clippersCampaign.js |
| Submission model | models/clippersSubmission.js |
| Service | services/clippers-service/ |
| API spec | bz-backend/CLIPPERS_API_SPEC.md |
Clippers is simultaneously a product and a growth channel
It is the influencer-marketing flywheel: Blazpay funds creators to make content about Blazpay, and the payout infrastructure is itself a Blazpay product. When briefing a marketing strategist, this belongs in both the product inventory and the channel plan.
Lifecycle: campaign created with a budget and rules → creators submit URLs → submissions reviewed (approve/reject) → payouts. CLIPPERS_API_SPEC.md is the endpoint authority.
Social media management
routes/smmRoutes.js (/api/smm) plus models/smmModel.js and models/trendingTopicsModel.js — an internal surface for scheduling and tracking social posts, and for surfacing trending topics.
Content
| Feature | Where |
|---|---|
| Blog | routes/blogRoutes.js → /api/blogs, models/blogModel.js, authorModel.js, newsModel.js |
| Article import | scripts/importArticles.js, npm run import-articles |
| Blog API test | scripts/testBlogAPI.js, npm run test-blog |
| Threads / forums | routes/threadRoutes.js → /api/threads, models/threadModel.js |
| FAQ | models/faqModel.js |
| Carousel | models/carouselModel.js |
| Community posts | bz-backend/COMMUNITY_BLOG_POST.md, BLAZROCKET_COMMUNITY_ANNOUNCEMENT_FINAL.md |
Chat and support
| Feature | Where |
|---|---|
| In-app chat | routes/chatRoutes.js → /api/chats, models/chatModel.js, chattModel.js, messageModel.js |
| Support tickets | routes/supportRoutes.js → /api/support, models/supportTicket.js, support.js |
| Dashboard support view | routes/supportRoutesForDashboard.js → /api/supportForDasboard (typo is in the source) |
| Feedback | v1/routes/feedback.routes.js → POST /api/v1/feedback, models/feedbackModel.js |
Two chat systems, unrelated
routes/chatRoutes.js (chatModel, messageModel) is user-to-user / support chat. BlazAI chat is v1/models/blazSession.js + blazMessage.js under /api/v1/blaz. They share nothing. A third, deprecated pair (AIChat.js, AIMessages.js) belongs to the old swap-ai path.
Notifications
| Channel | Where |
|---|---|
| In-app | routes/notificationsRoutes.js → /api/notifications, models/notificationModel.js |
| BlazAI-scoped | v1/routes/notification.route.js → /api/v1/notifications, models/blazNotificationModel.js |
| Push (FCM) | routes/fcmNotificationRoutes.js → /api/fcm, services/fcmService.js, firebase-admin |
| Admin | models/adminNotificationModel.js |
| Email (SES) | routes/sesEmail.routes.js → /api/ses, models/sesSchedule.js, sentEmailModel.js |
| Bulk email | routes/bulkEmail.routes.js → /api/bulk-email, services/bulkEmail.service.js |
| Unsubscribe | models/unsubscribeModel.js |
| Telegram | node-telegram-bot-api |
| Discord | services/discord.js, discordBoosterCron.js |
blazNotificationModel carries an autopilot type plus an expiryWarnedAt field, used for Autopilot notifications.
The /api/v1/notifications surface: GET /, GET /count, POST /:id/read, POST /read-all.
Internal tooling
Not user-facing, but part of the same backend:
| Tool | Where |
|---|---|
| Admin | routes/admin.routes.js → /api/admin, models/adminUser.js, adminActionModel.js |
| Kanban board | routes/kanbanRoutes.js → /api/kanban, models/kanban{Board,Column,Card,Activity}Model.js |
| Daily update log | routes/dailyUpdateRoutes.js, bz-backend/BACKEND_GUIDE_DAILY_UPDATES.md |
| Training-data review | v1/routes/training.routes.js — see BlazAI |
| System settings | models/systemSettingModel.js — categories bridge, security, network, fees, limits, general |
| Network status | models/networkStatusModel.js |
| Monitored transactions | models/monitoredTransactionModel.js |
| Browser extension API | routes/extension.routes.js → /api/ext |
| Galxe integration | galxe.com is CORS-allowlisted for quest verification |
System settings pattern
systemSettingModel.js is the platform's feature-flag and limit store. Use it rather than adding a new config collection:
js
await SystemSetting.getValue('audit_free_limit_per_wallet')
await SystemSetting.setValue('audit_free_limit_per_wallet', 5)
await SystemSetting.getByCategory('limits')Four Autopilot settings are seeded to production via scripts/seed-autopilot-settings.js.
Known limits
- Two unrelated chat systems and one deprecated third. Easy to query the wrong collection.
supportForDasboardis a typo in a live route path. Fixing it is a breaking change for whatever consumes it.- Clippers routes are mounted twice (
/api/clippersand/api/v1/clippers) from the same file. - No unified notification preference centre. Each channel has its own opt-in state; only email has
unsubscribeModel. - DAO voting weight is implicit in the rewards layer rather than an explicit governance contract, which makes the rules harder to audit than on-chain governance normally is.
- Most of this layer's endpoint documentation lives in ad-hoc markdown inside
bz-backendrather than in this site.