Skip to content

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.

ConcernWhere
Routesbz-backend/routes/daoRoutes.js/api/dao
Proposal / question modelmodels/daoQuestionModel.js
Vote modelmodels/daoVoteModel.js
Comment modelmodels/daoCommentModel.js
Status cronservices/daoCron.jsproposalStatusJob, 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.

ConcernWhere
Routesroutes/clippersRoutes.js, mounted at both /api/clippers and /api/v1/clippers
Campaign modelmodels/clippersCampaign.js
Submission modelmodels/clippersSubmission.js
Serviceservices/clippers-service/
API specbz-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

FeatureWhere
Blogroutes/blogRoutes.js/api/blogs, models/blogModel.js, authorModel.js, newsModel.js
Article importscripts/importArticles.js, npm run import-articles
Blog API testscripts/testBlogAPI.js, npm run test-blog
Threads / forumsroutes/threadRoutes.js/api/threads, models/threadModel.js
FAQmodels/faqModel.js
Carouselmodels/carouselModel.js
Community postsbz-backend/COMMUNITY_BLOG_POST.md, BLAZROCKET_COMMUNITY_ANNOUNCEMENT_FINAL.md

Chat and support

FeatureWhere
In-app chatroutes/chatRoutes.js/api/chats, models/chatModel.js, chattModel.js, messageModel.js
Support ticketsroutes/supportRoutes.js/api/support, models/supportTicket.js, support.js
Dashboard support viewroutes/supportRoutesForDashboard.js/api/supportForDasboard (typo is in the source)
Feedbackv1/routes/feedback.routes.jsPOST /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

ChannelWhere
In-approutes/notificationsRoutes.js/api/notifications, models/notificationModel.js
BlazAI-scopedv1/routes/notification.route.js/api/v1/notifications, models/blazNotificationModel.js
Push (FCM)routes/fcmNotificationRoutes.js/api/fcm, services/fcmService.js, firebase-admin
Adminmodels/adminNotificationModel.js
Email (SES)routes/sesEmail.routes.js/api/ses, models/sesSchedule.js, sentEmailModel.js
Bulk emailroutes/bulkEmail.routes.js/api/bulk-email, services/bulkEmail.service.js
Unsubscribemodels/unsubscribeModel.js
Telegramnode-telegram-bot-api
Discordservices/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:

ToolWhere
Adminroutes/admin.routes.js/api/admin, models/adminUser.js, adminActionModel.js
Kanban boardroutes/kanbanRoutes.js/api/kanban, models/kanban{Board,Column,Card,Activity}Model.js
Daily update logroutes/dailyUpdateRoutes.js, bz-backend/BACKEND_GUIDE_DAILY_UPDATES.md
Training-data reviewv1/routes/training.routes.js — see BlazAI
System settingsmodels/systemSettingModel.js — categories bridge, security, network, fees, limits, general
Network statusmodels/networkStatusModel.js
Monitored transactionsmodels/monitoredTransactionModel.js
Browser extension APIroutes/extension.routes.js/api/ext
Galxe integrationgalxe.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.
  • supportForDasboard is a typo in a live route path. Fixing it is a breaking change for whatever consumes it.
  • Clippers routes are mounted twice (/api/clippers and /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-backend rather than in this site.

Internal + developer documentation. Usage figures are point-in-time snapshots — re-verify before publishing them.