We're excited to have you on board as a ${safeRole}.
-
Swifta is digitizing Africa's digital trade network, and you're now part of the movement.
+
twizrr is digitizing Africa's digital trade network, and you're now part of the movement.
${
role === "MERCHANT"
? `
Next step: Complete your business profile and start listing your products to receive orders from buyers.
`
@@ -102,7 +102,7 @@ export class EmailService {
Go to Dashboard
`;
- await this.sendEmail(to, "Welcome to Swifta", this.getLayout(content));
+ await this.sendEmail(to, "Welcome to twizrr", this.getLayout(content));
}
async sendVerificationOTP(to: string, otp: string): Promise {
@@ -173,7 +173,7 @@ export class EmailService {
Delivery Confirmed Success!
Delivery of Order #${safeReference} has been confirmed.
The transaction of ${this.formatNaira(amountKobo)} is now complete.
-
Thank you for trading with Swifta!
+
Thank you for trading with twizrr!
`;
await this.sendEmail(
to,
@@ -198,7 +198,7 @@ export class EmailService {
`;
await this.sendEmail(
to,
- "Reset your Swifta Password",
+ "Reset your twizrr Password",
this.getLayout(content),
);
}
diff --git a/apps/backend/src/modules/inventory/inventory.controller.ts b/apps/backend/src/modules/inventory/inventory.controller.ts
index 42094c15..03253dd5 100644
--- a/apps/backend/src/modules/inventory/inventory.controller.ts
+++ b/apps/backend/src/modules/inventory/inventory.controller.ts
@@ -15,7 +15,7 @@ import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
import { CurrentMerchant } from "../../common/decorators/current-merchant.decorator";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
@Controller("inventory")
@UseGuards(JwtAuthGuard, RolesGuard)
diff --git a/apps/backend/src/modules/inventory/inventory.service.ts b/apps/backend/src/modules/inventory/inventory.service.ts
index e06b1cd1..5f7751d7 100644
--- a/apps/backend/src/modules/inventory/inventory.service.ts
+++ b/apps/backend/src/modules/inventory/inventory.service.ts
@@ -4,7 +4,7 @@ import {
ForbiddenException,
} from "@nestjs/common";
import { PrismaService } from "../../prisma/prisma.service";
-import { InventoryEventType } from "@swifta/shared";
+import { InventoryEventType } from "@twizrr/shared";
@Injectable()
export class InventoryService {
diff --git a/apps/backend/src/modules/logistics/logistics.controller.ts b/apps/backend/src/modules/logistics/logistics.controller.ts
index 18e0b164..5604ff23 100644
--- a/apps/backend/src/modules/logistics/logistics.controller.ts
+++ b/apps/backend/src/modules/logistics/logistics.controller.ts
@@ -13,7 +13,7 @@ import {
import * as crypto from "crypto";
import { LogisticsService } from "./logistics.service";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
diff --git a/apps/backend/src/modules/merchant/merchant.controller.ts b/apps/backend/src/modules/merchant/merchant.controller.ts
index acd4fdac..2de701d3 100644
--- a/apps/backend/src/modules/merchant/merchant.controller.ts
+++ b/apps/backend/src/modules/merchant/merchant.controller.ts
@@ -19,7 +19,7 @@ import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { CurrentMerchant } from "../../common/decorators/current-merchant.decorator";
-import { UserRole, JwtPayload } from "@swifta/shared";
+import { UserRole, JwtPayload } from "@twizrr/shared";
import { MerchantAnalyticsService } from "./merchant-analytics.service";
diff --git a/apps/backend/src/modules/merchant/merchant.service.ts b/apps/backend/src/modules/merchant/merchant.service.ts
index 37569d8b..dbef4cdf 100644
--- a/apps/backend/src/modules/merchant/merchant.service.ts
+++ b/apps/backend/src/modules/merchant/merchant.service.ts
@@ -6,7 +6,7 @@ import {
import { PrismaService } from "../../prisma/prisma.service";
import { UpdateMerchantDto } from "./dto/update-merchant.dto";
import { UpdateBankAccountDto } from "./dto/update-bank-account.dto";
-import { UserRole, VerificationTier, maskNin } from "@swifta/shared";
+import { UserRole, VerificationTier, maskNin } from "@twizrr/shared";
import { PaystackClient } from "../payment/paystack.client";
import { NotificationTriggerService } from "../notification/notification-trigger.service";
import { UpdatePreferencesDto } from "./dto/update-preferences.dto";
diff --git a/apps/backend/src/modules/notification/notification-trigger.service.ts b/apps/backend/src/modules/notification/notification-trigger.service.ts
index a1b6573f..66bfebea 100644
--- a/apps/backend/src/modules/notification/notification-trigger.service.ts
+++ b/apps/backend/src/modules/notification/notification-trigger.service.ts
@@ -5,7 +5,7 @@ import {
NOTIFICATION_QUEUE,
WHATSAPP_QUEUE,
} from "../../queue/queue.constants";
-import { NotificationType, NotificationChannel } from "@swifta/shared";
+import { NotificationType, NotificationChannel } from "@twizrr/shared";
@Injectable()
export class NotificationTriggerService {
@@ -52,7 +52,7 @@ export class NotificationTriggerService {
await this.addJob(
userId,
NotificationType.WELCOME,
- "Welcome to Swifta",
+ "Welcome to twizrr",
"Welcome to Africa's digital trade network.",
);
}
diff --git a/apps/backend/src/modules/notification/notification.controller.ts b/apps/backend/src/modules/notification/notification.controller.ts
index 0b35a3ce..1845c478 100644
--- a/apps/backend/src/modules/notification/notification.controller.ts
+++ b/apps/backend/src/modules/notification/notification.controller.ts
@@ -11,7 +11,7 @@ import { NotificationService } from "./notification.service";
import { PaginationQueryDto } from "../../common/dto/pagination-query.dto";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
-import { JwtPayload } from "@swifta/shared";
+import { JwtPayload } from "@twizrr/shared";
@Controller("notifications")
@UseGuards(JwtAuthGuard)
diff --git a/apps/backend/src/modules/notification/notification.processor.ts b/apps/backend/src/modules/notification/notification.processor.ts
index 99755057..7ec54369 100644
--- a/apps/backend/src/modules/notification/notification.processor.ts
+++ b/apps/backend/src/modules/notification/notification.processor.ts
@@ -5,7 +5,7 @@ import { NOTIFICATION_QUEUE } from "../../queue/queue.constants";
import { PrismaService } from "../../prisma/prisma.service";
import { EmailService } from "../email/email.service";
import { SmsService } from "./sms.service";
-import { NotificationChannel } from "@swifta/shared";
+import { NotificationChannel } from "@twizrr/shared";
@Processor(NOTIFICATION_QUEUE, {
concurrency: 5,
diff --git a/apps/backend/src/modules/order/dto/checkout-cart.dto.ts b/apps/backend/src/modules/order/dto/checkout-cart.dto.ts
index b388e7dc..d5d1b8f0 100644
--- a/apps/backend/src/modules/order/dto/checkout-cart.dto.ts
+++ b/apps/backend/src/modules/order/dto/checkout-cart.dto.ts
@@ -10,7 +10,7 @@ import {
IsObject,
} from "class-validator";
-import { PaymentMethod } from "@swifta/shared";
+import { PaymentMethod } from "@twizrr/shared";
export class CheckoutCartDto {
@IsArray()
diff --git a/apps/backend/src/modules/order/dto/create-tracking.dto.ts b/apps/backend/src/modules/order/dto/create-tracking.dto.ts
index cb06997c..8da05516 100644
--- a/apps/backend/src/modules/order/dto/create-tracking.dto.ts
+++ b/apps/backend/src/modules/order/dto/create-tracking.dto.ts
@@ -1,5 +1,5 @@
import { IsIn, IsString, IsOptional } from "class-validator";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
export class CreateTrackingDto {
@IsIn(
diff --git a/apps/backend/src/modules/order/invoice.service.ts b/apps/backend/src/modules/order/invoice.service.ts
index f1f7a01f..cca7d0a3 100644
--- a/apps/backend/src/modules/order/invoice.service.ts
+++ b/apps/backend/src/modules/order/invoice.service.ts
@@ -6,7 +6,7 @@ import {
import { PrismaService } from "../../prisma/prisma.service";
import PDFDocument from "pdfkit";
import { Response } from "express";
-import { JwtPayload } from "@swifta/shared";
+import { JwtPayload } from "@twizrr/shared";
@Injectable()
export class InvoiceService {
@@ -66,7 +66,7 @@ export class InvoiceService {
doc
.fillColor("#444444")
.fontSize(20)
- .text("Swifta", 50, 45, { align: "left" })
+ .text("twizrr", 50, 45, { align: "left" })
.fontSize(10)
.text("Digital Marketplace & Escrow Payments", 50, 70, { align: "left" })
.fillColor("#000000")
diff --git a/apps/backend/src/modules/order/order-state-machine.ts b/apps/backend/src/modules/order/order-state-machine.ts
index 4cde4065..d8d714ca 100644
--- a/apps/backend/src/modules/order/order-state-machine.ts
+++ b/apps/backend/src/modules/order/order-state-machine.ts
@@ -1,4 +1,4 @@
-import { OrderStatus, ORDER_TRANSITIONS } from "@swifta/shared";
+import { OrderStatus, ORDER_TRANSITIONS } from "@twizrr/shared";
export function validateTransition(
from: OrderStatus,
diff --git a/apps/backend/src/modules/order/order.controller.ts b/apps/backend/src/modules/order/order.controller.ts
index 3d2239c4..e7bbb6eb 100644
--- a/apps/backend/src/modules/order/order.controller.ts
+++ b/apps/backend/src/modules/order/order.controller.ts
@@ -19,7 +19,7 @@ import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { CurrentMerchant } from "../../common/decorators/current-merchant.decorator";
-import { UserRole, JwtPayload } from "@swifta/shared";
+import { UserRole, JwtPayload } from "@twizrr/shared";
import { CreateDirectOrderDto } from "./dto/create-direct-order.dto";
import { CreateTrackingDto } from "./dto/create-tracking.dto";
import { CheckoutCartDto } from "./dto/checkout-cart.dto";
diff --git a/apps/backend/src/modules/order/order.service.ts b/apps/backend/src/modules/order/order.service.ts
index bd8962c9..d7fc91bc 100644
--- a/apps/backend/src/modules/order/order.service.ts
+++ b/apps/backend/src/modules/order/order.service.ts
@@ -27,7 +27,7 @@ import {
OrderStatus,
PaginatedResponse,
PriceType,
-} from "@swifta/shared";
+} from "@twizrr/shared";
import { paginate } from "../../common/utils/pagination";
import { validateTransition, getNextStates } from "./order-state-machine";
diff --git a/apps/backend/src/modules/payment/payment.controller.ts b/apps/backend/src/modules/payment/payment.controller.ts
index c7978947..d6359817 100644
--- a/apps/backend/src/modules/payment/payment.controller.ts
+++ b/apps/backend/src/modules/payment/payment.controller.ts
@@ -16,7 +16,7 @@ import { WebhookSignatureGuard } from "./webhook-signature.guard";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { IdempotencyKey } from "../../common/decorators/idempotency-key.decorator";
import { Roles } from "../../common/decorators/roles.decorator";
-import { UserRole, JwtPayload } from "@swifta/shared";
+import { UserRole, JwtPayload } from "@twizrr/shared";
@Controller("payments")
export class PaymentController {
diff --git a/apps/backend/src/modules/payment/payment.service.ts b/apps/backend/src/modules/payment/payment.service.ts
index 16579f84..db9c4303 100644
--- a/apps/backend/src/modules/payment/payment.service.ts
+++ b/apps/backend/src/modules/payment/payment.service.ts
@@ -22,7 +22,7 @@ import {
PaymentDirection,
OrderStatus,
UserRole,
-} from "@swifta/shared";
+} from "@twizrr/shared";
import * as crypto from "crypto";
import { PAYOUT_QUEUE, LOGISTICS_QUEUE } from "../../queue/queue.constants";
diff --git a/apps/backend/src/modules/payout/payout.service.ts b/apps/backend/src/modules/payout/payout.service.ts
index 52042247..c1f1a556 100644
--- a/apps/backend/src/modules/payout/payout.service.ts
+++ b/apps/backend/src/modules/payout/payout.service.ts
@@ -97,7 +97,7 @@ export class PayoutService {
merchant.paystackRecipientCode,
payoutAmountKobo,
`PO-${order.id.slice(0, 8).toUpperCase()}`,
- `Swifta payout for Order #${order.id.slice(0, 8).toUpperCase()}`,
+ `twizrr payout for Order #${order.id.slice(0, 8).toUpperCase()}`,
);
await this.prisma.payout.update({
diff --git a/apps/backend/src/modules/product/product.controller.ts b/apps/backend/src/modules/product/product.controller.ts
index 30754fae..40099be4 100644
--- a/apps/backend/src/modules/product/product.controller.ts
+++ b/apps/backend/src/modules/product/product.controller.ts
@@ -21,7 +21,7 @@ import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { CurrentMerchant } from "../../common/decorators/current-merchant.decorator";
-import { UserRole, JwtPayload } from "@swifta/shared";
+import { UserRole, JwtPayload } from "@twizrr/shared";
@Controller("products")
export class ProductController {
diff --git a/apps/backend/src/modules/product/product.service.ts b/apps/backend/src/modules/product/product.service.ts
index a5ca9c8b..31fc6d5a 100644
--- a/apps/backend/src/modules/product/product.service.ts
+++ b/apps/backend/src/modules/product/product.service.ts
@@ -11,7 +11,7 @@ import type { Cache } from "cache-manager";
import { PrismaService } from "../../prisma/prisma.service";
import { CreateProductDto } from "./dto/create-product.dto";
import { UpdateProductDto } from "./dto/update-product.dto";
-import { PaginatedResponse, Product } from "@swifta/shared";
+import { PaginatedResponse, Product } from "@twizrr/shared";
import { paginate } from "../../common/utils/pagination";
import { InventoryService } from "../inventory/inventory.service";
diff --git a/apps/backend/src/modules/reorder/reorder.controller.ts b/apps/backend/src/modules/reorder/reorder.controller.ts
index 2d822ae7..66f549b1 100644
--- a/apps/backend/src/modules/reorder/reorder.controller.ts
+++ b/apps/backend/src/modules/reorder/reorder.controller.ts
@@ -9,7 +9,7 @@ import { ReorderService } from "./reorder.service";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { RolesGuard } from "../../common/guards/roles.guard";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
-import { JwtPayload } from "@swifta/shared";
+import { JwtPayload } from "@twizrr/shared";
@Controller()
@UseGuards(JwtAuthGuard, RolesGuard)
diff --git a/apps/backend/src/modules/review/review.controller.ts b/apps/backend/src/modules/review/review.controller.ts
index 343494bf..fc6bb743 100644
--- a/apps/backend/src/modules/review/review.controller.ts
+++ b/apps/backend/src/modules/review/review.controller.ts
@@ -13,7 +13,7 @@ import { CreateReviewDto } from "./dto/create-review.dto";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { OrderService } from "../order/order.service";
-import { JwtPayload } from "@swifta/shared";
+import { JwtPayload } from "@twizrr/shared";
@Controller("reviews")
export class ReviewController {
diff --git a/apps/backend/src/modules/review/review.service.ts b/apps/backend/src/modules/review/review.service.ts
index f60b07a2..9f625abc 100644
--- a/apps/backend/src/modules/review/review.service.ts
+++ b/apps/backend/src/modules/review/review.service.ts
@@ -8,7 +8,7 @@ import {
} from "@nestjs/common";
import { PrismaService } from "../../prisma/prisma.service";
import { CreateReviewDto } from "./dto/create-review.dto";
-import { OrderStatus, VerificationTier } from "@swifta/shared";
+import { OrderStatus, VerificationTier } from "@twizrr/shared";
@Injectable()
export class ReviewService {
diff --git a/apps/backend/src/modules/supplier/supplier.controller.ts b/apps/backend/src/modules/supplier/supplier.controller.ts
index 989bcdba..76a04bc1 100644
--- a/apps/backend/src/modules/supplier/supplier.controller.ts
+++ b/apps/backend/src/modules/supplier/supplier.controller.ts
@@ -14,7 +14,7 @@ import { CreateWholesaleOrderDto } from "./dto/create-wholesale-order.dto";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
@Controller("supplier")
diff --git a/apps/backend/src/modules/supplier/supplier.service.ts b/apps/backend/src/modules/supplier/supplier.service.ts
index 4f2d2367..1690d854 100644
--- a/apps/backend/src/modules/supplier/supplier.service.ts
+++ b/apps/backend/src/modules/supplier/supplier.service.ts
@@ -11,7 +11,7 @@ import { PrismaService } from "../../prisma/prisma.service";
import { CreateSupplierProductDto } from "./dto/create-supplier-product.dto";
import { UpdateSupplierProductDto } from "./dto/update-supplier-product.dto";
import { CreateWholesaleOrderDto } from "./dto/create-wholesale-order.dto";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
import { PaymentService } from "../payment/payment.service";
@Injectable()
diff --git a/apps/backend/src/modules/trade-financing/bnpl-partner.interface.ts b/apps/backend/src/modules/trade-financing/bnpl-partner.interface.ts
index 9b153db7..04abe6b1 100644
--- a/apps/backend/src/modules/trade-financing/bnpl-partner.interface.ts
+++ b/apps/backend/src/modules/trade-financing/bnpl-partner.interface.ts
@@ -11,7 +11,7 @@ export interface BuyerCreditData {
export interface BnplPartnerClient {
/**
- * Evaluates the buyer's creditworthiness based on Swifta history + partner logic
+ * Evaluates the buyer's creditworthiness based on twizrr history + partner logic
*/
checkEligibility(buyerData: BuyerCreditData): Promise<{
eligible: boolean;
@@ -21,7 +21,7 @@ export interface BnplPartnerClient {
}>;
/**
- * Books the loan with the partner. If approved, the partner will disburse funds to Swifta.
+ * Books the loan with the partner. If approved, the partner will disburse funds to twizrr.
*/
initiateLoan(
orderId: string,
diff --git a/apps/backend/src/modules/trade-financing/trade-financing-partner.interface.ts b/apps/backend/src/modules/trade-financing/trade-financing-partner.interface.ts
index 9f83e422..df5e9d3a 100644
--- a/apps/backend/src/modules/trade-financing/trade-financing-partner.interface.ts
+++ b/apps/backend/src/modules/trade-financing/trade-financing-partner.interface.ts
@@ -13,7 +13,7 @@ export interface MerchantCreditData {
export interface TradeFinancingPartnerClient {
/**
- * Evaluates the merchant's creditworthiness based on Swifta sales history + partner logic
+ * Evaluates the merchant's creditworthiness based on twizrr sales history + partner logic
*/
checkEligibility(merchantData: MerchantCreditData): Promise<{
eligible: boolean;
diff --git a/apps/backend/src/modules/trade-financing/trade-financing.controller.ts b/apps/backend/src/modules/trade-financing/trade-financing.controller.ts
index d4420c8b..6aae5003 100644
--- a/apps/backend/src/modules/trade-financing/trade-financing.controller.ts
+++ b/apps/backend/src/modules/trade-financing/trade-financing.controller.ts
@@ -3,7 +3,7 @@ import { TradeFinancingService } from "./trade-financing.service";
import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { CurrentUser } from "../../common/decorators/current-user.decorator";
import { ApplyLoanDto } from "./dto/apply-loan.dto";
diff --git a/apps/backend/src/modules/upload/upload.controller.ts b/apps/backend/src/modules/upload/upload.controller.ts
index 5f9bf7cb..da96bb1e 100644
--- a/apps/backend/src/modules/upload/upload.controller.ts
+++ b/apps/backend/src/modules/upload/upload.controller.ts
@@ -42,7 +42,7 @@ export class UploadController {
try {
const url = await this.uploadService.uploadImageToCloudinary(
file,
- "swifta/documents",
+ "twizrr/documents",
transformType,
);
return {
@@ -80,7 +80,7 @@ export class UploadController {
try {
const url = await this.uploadService.uploadImageToCloudinary(
file,
- "swifta/products",
+ "twizrr/products",
transformType,
);
return {
diff --git a/apps/backend/src/modules/upload/upload.service.ts b/apps/backend/src/modules/upload/upload.service.ts
index 2692a5a0..fe262621 100644
--- a/apps/backend/src/modules/upload/upload.service.ts
+++ b/apps/backend/src/modules/upload/upload.service.ts
@@ -22,7 +22,7 @@ export class UploadService {
async uploadImageToCloudinary(
file: Express.Multer.File,
- folder: string = "swifta/merchants",
+ folder: string = "twizrr/merchants",
transformType?: string,
): Promise {
return new Promise((resolve, reject) => {
diff --git a/apps/backend/src/modules/ussd/ussd.service.ts b/apps/backend/src/modules/ussd/ussd.service.ts
index 7ab6cda1..2082b082 100644
--- a/apps/backend/src/modules/ussd/ussd.service.ts
+++ b/apps/backend/src/modules/ussd/ussd.service.ts
@@ -24,7 +24,7 @@ export class UssdService {
try {
// Level 0: Welcome menu
if (level === 0) {
- return "CON Welcome to Swifta\n1. Pay for an order\n2. Check order status";
+ return "CON Welcome to twizrr\n1. Pay for an order\n2. Check order status";
}
const mainChoice = inputs[0];
@@ -52,7 +52,7 @@ export class UssdService {
// Level 1: Ask for phone
if (level === 1) {
- return "CON Enter the phone number linked to your Swifta account:";
+ return "CON Enter the phone number linked to your twizrr account:";
}
// Level 2: Show pending orders
@@ -61,13 +61,13 @@ export class UssdService {
const user = await this.prisma.user.findFirst({ where: { phone } });
if (!user) {
- return "END No Swifta account found for this number. Visit swifta.store to register.";
+ return "END No twizrr account found for this number. Visit twizrr.com to register.";
}
const orders = await this.getPendingOrders(user.id);
if (orders.length === 0) {
- return "END You have no pending orders. Visit swifta.store to place an order.";
+ return "END You have no pending orders. Visit twizrr.com to place an order.";
}
let response = "CON Your pending orders:\n";
@@ -136,7 +136,7 @@ export class UssdService {
try {
await this.smsService.sendSms(
phone,
- `Swifta: Complete your payment of N${this.koboToNaira(order.totalAmountKobo)} here: ${paymentData.authorization_url}`,
+ `twizrr: Complete your payment of N${this.koboToNaira(order.totalAmountKobo)} here: ${paymentData.authorization_url}`,
);
} catch (smsErr) {
this.logger.warn(
@@ -148,7 +148,7 @@ export class UssdService {
return [
`END Payment initiated for Order #${shortId}.`,
"You will receive a payment link via SMS shortly.",
- "Thank you for using Swifta.",
+ "Thank you for using twizrr.",
].join("\n");
}
@@ -164,14 +164,14 @@ export class UssdService {
const level = inputs.length;
if (level === 1) {
- return "CON Enter the phone number linked to your Swifta account:";
+ return "CON Enter the phone number linked to your twizrr account:";
}
if (level === 2) {
const phone = this.toE164(inputs[1]);
const user = await this.prisma.user.findFirst({ where: { phone } });
- if (!user) return "END No Swifta account found for this number.";
+ if (!user) return "END No twizrr account found for this number.";
const orders = await this.prisma.order.findMany({
where: { buyerId: user.id },
diff --git a/apps/backend/src/modules/verification/verification.controller.ts b/apps/backend/src/modules/verification/verification.controller.ts
index 171658ff..5b125e5b 100644
--- a/apps/backend/src/modules/verification/verification.controller.ts
+++ b/apps/backend/src/modules/verification/verification.controller.ts
@@ -17,7 +17,7 @@ import { JwtAuthGuard } from "../../common/guards/jwt-auth.guard";
import { RolesGuard } from "../../common/guards/roles.guard";
import { Roles } from "../../common/decorators/roles.decorator";
import { CurrentMerchant } from "../../common/decorators/current-merchant.decorator";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { PaginationQueryDto } from "../../common/dto/pagination-query.dto";
@Controller()
diff --git a/apps/backend/src/modules/verification/verification.dto.ts b/apps/backend/src/modules/verification/verification.dto.ts
index df024f14..870d62a8 100644
--- a/apps/backend/src/modules/verification/verification.dto.ts
+++ b/apps/backend/src/modules/verification/verification.dto.ts
@@ -6,7 +6,7 @@ import {
IsUrl,
IsIn,
} from "class-validator";
-import { VerificationIdType } from "@swifta/shared";
+import { VerificationIdType } from "@twizrr/shared";
export class SubmitVerificationDto {
@IsUrl({ protocols: ["https"], require_protocol: true })
diff --git a/apps/backend/src/modules/verification/verification.service.ts b/apps/backend/src/modules/verification/verification.service.ts
index 3d0982f0..8d0b7a85 100644
--- a/apps/backend/src/modules/verification/verification.service.ts
+++ b/apps/backend/src/modules/verification/verification.service.ts
@@ -15,7 +15,7 @@ import {
OrderStatus,
OrderDisputeStatus,
NotificationType,
-} from "@swifta/shared";
+} from "@twizrr/shared";
@Injectable()
export class VerificationService {
diff --git a/apps/backend/src/modules/whatsapp/whatsapp-buyer-auth.service.ts b/apps/backend/src/modules/whatsapp/whatsapp-buyer-auth.service.ts
index 472b180d..defc6a34 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp-buyer-auth.service.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp-buyer-auth.service.ts
@@ -14,14 +14,14 @@ import {
OTP_EXPIRED,
} from "./whatsapp.constants";
-const BUYER_WELCOME_MESSAGE = `Welcome to Swifta Buyer Bot! 🛒
+const BUYER_WELCOME_MESSAGE = `Welcome to twizrr Buyer Bot! 🛒
To start placing orders natively right here on WhatsApp, please reply with your registered email address to link your buyer profile.`;
const BUYER_LINK_SUCCESS = (buyerName: string) =>
`You're all set, ${buyerName}! 🎉\n\nYou can now tell me what you want to buy, or say "track my order" if you have any active deliveries.`;
-const BUYER_ALREADY_LINKED = `This phone number is already linked to a Swifta buyer account.`;
+const BUYER_ALREADY_LINKED = `This phone number is already linked to a twizrr buyer account.`;
interface SessionData {
state: SessionState;
diff --git a/apps/backend/src/modules/whatsapp/whatsapp-buyer.constants.ts b/apps/backend/src/modules/whatsapp/whatsapp-buyer.constants.ts
index 962359ce..2b8a6c4f 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp-buyer.constants.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp-buyer.constants.ts
@@ -3,7 +3,7 @@
// ---------------------------------------------------------------------------
import { SchemaType, FunctionDeclaration } from "@google/generative-ai";
-export const BUYER_MAIN_MENU = `Welcome to the Swifta Marketplace! ✅
+export const BUYER_MAIN_MENU = `Welcome to the twizrr Marketplace! ✅
I'm your personal shopping assistant. I can help you find products, discover local merchants, and track your deliveries in real-time.
@@ -32,7 +32,7 @@ export const BUYER_GEMINI_FUNCTION_DECLARATIONS: FunctionDeclaration[] = [
{
name: "search_products",
description:
- "Search the global Swifta catalogue for a product based on name and optionally location.",
+ "Search the global twizrr catalogue for a product based on name and optionally location.",
parameters: {
type: SchemaType.OBJECT,
properties: {
@@ -57,7 +57,7 @@ export const BUYER_GEMINI_FUNCTION_DECLARATIONS: FunctionDeclaration[] = [
{
name: "search_merchants",
description:
- "Search for verified merchants and shops on Swifta by name or specific location.",
+ "Search for verified merchants and shops on twizrr by name or specific location.",
parameters: {
type: SchemaType.OBJECT,
properties: {
@@ -120,7 +120,7 @@ export const BUYER_GEMINI_FUNCTION_DECLARATIONS: FunctionDeclaration[] = [
{
name: "browse_categories",
description:
- "Browse the available product categories in the Swifta marketplace.",
+ "Browse the available product categories in the twizrr marketplace.",
},
{
name: "list_merchant_products",
diff --git a/apps/backend/src/modules/whatsapp/whatsapp-buyer.service.ts b/apps/backend/src/modules/whatsapp/whatsapp-buyer.service.ts
index 51ead1ab..b389ee28 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp-buyer.service.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp-buyer.service.ts
@@ -17,7 +17,7 @@ import {
BUYER_MAIN_MENU,
BUYER_FRIENDLY_FALLBACK,
} from "./whatsapp-buyer.constants";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
import { ReviewService } from "../review/review.service";
import { UploadService } from "../upload/upload.service";
import { ImageSearchService } from "./image-search.service";
@@ -272,7 +272,7 @@ export class WhatsAppBuyerService {
await this.redisService.del(checkoutKey);
const appUrl =
- this.configService.get("FRONTEND_URL") || "https://swifta.store";
+ this.configService.get("FRONTEND_URL") || "https://twizrr.com";
const checkoutLink = `${appUrl}/buyer/checkout/${session.productId}?qty=${session.quantity}&delivery=${session.deliveryMethod}`;
const dva = await this.getSafeDva(buyerId);
@@ -581,7 +581,7 @@ export class WhatsAppBuyerService {
if (session.step === "SELECT_DELIVERY") {
if (input === "1" || input.toLowerCase().includes("merchant")) {
session.deliveryMethod = "MERCHANT_DELIVERY";
- } else if (input === "2" || input.toLowerCase().includes("swifta")) {
+ } else if (input === "2" || input.toLowerCase().includes("twizrr")) {
session.deliveryMethod = "PLATFORM_LOGISTICS";
} else {
await this.interactiveService.sendReplyButtons(
@@ -597,7 +597,7 @@ export class WhatsAppBuyerService {
await this.redisService.del(key);
const appUrl =
- this.configService.get("FRONTEND_URL") || "https://swifta.store";
+ this.configService.get("FRONTEND_URL") || "https://twizrr.com";
const checkoutLink = `${appUrl}/buyer/checkout/${session.productId}?qty=${session.quantity}&delivery=${session.deliveryMethod}`;
const dva = await this.getSafeDva(buyerId);
@@ -1092,7 +1092,7 @@ export class WhatsAppBuyerService {
`${product.name} (${quantity} units)\n\nHow would you like this delivered?`,
[
{ id: "delivery_merchant", title: "Direct Merchant" },
- { id: "delivery_track", title: "Swifta Tracked" },
+ { id: "delivery_track", title: "twizrr Tracked" },
],
product.imageUrl || undefined,
);
@@ -1441,7 +1441,7 @@ export class WhatsAppBuyerService {
const imageUrl = await this.uploadService.uploadImageToCloudinary(
file,
- "swifta/reviews",
+ "twizrr/reviews",
);
const order = await this.prisma.order.findUnique({
@@ -1747,7 +1747,7 @@ export class WhatsAppBuyerService {
rows: merchants.map((m) => ({
id: `merchant_${m.id}`,
title: m.businessName || "Untitled Shop",
- description: `${m.averageRating > 0 ? `⭐${m.averageRating.toFixed(1)} | ` : ""}${m.description?.substring(0, 50) || "Verified Swifta Merchant"}`,
+ description: `${m.averageRating > 0 ? `⭐${m.averageRating.toFixed(1)} | ` : ""}${m.description?.substring(0, 50) || "Verified twizrr Merchant"}`,
})),
},
],
@@ -1777,7 +1777,7 @@ export class WhatsAppBuyerService {
const msg =
`🏪 *${merchant.businessName}*\n\n` +
- `${merchant.description || "A verified partner on Swifta."}\n\n` +
+ `${merchant.description || "A verified partner on twizrr."}\n\n` +
`📍 *Location:* ${merchant.businessAddress || "Abuja, Nigeria"}\n` +
`✨ *Rating:* ${ratingStr}\n\n` +
`What would you like to do?`;
@@ -1838,7 +1838,7 @@ export class WhatsAppBuyerService {
*/
private async sendBuyerWelcomeButtons(phone: string): Promise {
const welcomeMsg =
- `Welcome back to Swifta! 👋\n\n` +
+ `Welcome back to twizrr! 👋\n\n` +
`Secure social commerce for Nigeria. Shop across any category or track your active deliveries.\n\n` +
`What would you like to do?`;
diff --git a/apps/backend/src/modules/whatsapp/whatsapp-onboarding.service.ts b/apps/backend/src/modules/whatsapp/whatsapp-onboarding.service.ts
index 46f3516c..d545df5b 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp-onboarding.service.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp-onboarding.service.ts
@@ -153,7 +153,7 @@ export class WhatsAppOnboardingService {
private async sendWelcome(phone: string): Promise {
await this.interactiveService.sendReplyButtons(
phone,
- "Welcome to Swifta.\n\nBuy and sell anything on WhatsApp with secure escrow payments. Your money is protected until delivery is confirmed.\n\nHow would you like to get started?",
+ "Welcome to twizrr.\n\nBuy and sell anything on WhatsApp with secure escrow payments. Your money is protected until delivery is confirmed.\n\nHow would you like to get started?",
[
{ id: "onboard_buyer", title: "Buy Products" },
{ id: "onboard_merchant", title: "Sell Products" },
@@ -165,7 +165,7 @@ export class WhatsAppOnboardingService {
private async handleLearnMore(phone: string): Promise {
await this.interactiveService.sendReplyButtons(
phone,
- "Swifta allows you to buy and sell products securely through WhatsApp.\n\nMoney is held safely until you receive your goods. You can track deliveries in real-time and buy from verified merchants. Merchants receive payments directly to their bank account.\n\nReady to get started?",
+ "twizrr allows you to buy and sell products securely through WhatsApp.\n\nMoney is held safely until you receive your goods. You can track deliveries in real-time and buy from verified merchants. Merchants receive payments directly to their bank account.\n\nReady to get started?",
[
{ id: "onboard_buyer", title: "Sign Up to Buy" },
{ id: "onboard_merchant", title: "Sign Up to Sell" },
@@ -395,7 +395,7 @@ export class WhatsAppOnboardingService {
if (existingUser) {
await this.interactiveService.sendTextMessage(
phone,
- "This email is already registered. If you already have a Swifta account, please visit swifta.store to link your WhatsApp number, or use a different email.",
+ "This email is already registered. If you already have a twizrr account, please visit twizrr.com to link your WhatsApp number, or use a different email.",
);
return;
}
@@ -490,7 +490,7 @@ export class WhatsAppOnboardingService {
});
await this.interactiveService.sendTextMessage(
phone,
- "Too many incorrect attempts. Please visit swifta.store to register instead, or try again later.",
+ "Too many incorrect attempts. Please visit twizrr.com to register instead, or try again later.",
);
return;
}
@@ -588,7 +588,7 @@ export class WhatsAppOnboardingService {
{
id: "help",
title: "Help",
- description: "Learn how Swifta works",
+ description: "Learn how twizrr works",
},
],
},
@@ -605,7 +605,7 @@ export class WhatsAppOnboardingService {
});
await this.interactiveService.sendTextMessage(
phone,
- "This email or phone number is already registered to another account. Please use different details or visit swifta.store.",
+ "This email or phone number is already registered to another account. Please use different details or visit twizrr.com.",
);
return;
}
@@ -614,7 +614,7 @@ export class WhatsAppOnboardingService {
);
await this.interactiveService.sendTextMessage(
phone,
- "Something went wrong creating your account. Please try again or visit swifta.store to register.",
+ "Something went wrong creating your account. Please try again or visit twizrr.com to register.",
);
}
}
@@ -775,7 +775,7 @@ export class WhatsAppOnboardingService {
if (existingUser) {
await this.interactiveService.sendTextMessage(
phone,
- "This email is already registered. If you already have a Swifta account, please visit swifta.store to link your WhatsApp number, or use a different email.",
+ "This email is already registered. If you already have a twizrr account, please visit twizrr.com to link your WhatsApp number, or use a different email.",
);
return;
}
@@ -868,7 +868,7 @@ export class WhatsAppOnboardingService {
});
await this.interactiveService.sendTextMessage(
phone,
- "Too many incorrect attempts. Please visit swifta.store to register, or try again later.",
+ "Too many incorrect attempts. Please visit twizrr.com to register, or try again later.",
);
return;
}
@@ -1274,7 +1274,7 @@ export class WhatsAppOnboardingService {
});
await this.interactiveService.sendTextMessage(
phone,
- "This email or phone number is already registered to another account. Please use different details or visit swifta.store.",
+ "This email or phone number is already registered to another account. Please use different details or visit twizrr.com.",
);
return;
}
@@ -1283,7 +1283,7 @@ export class WhatsAppOnboardingService {
);
await this.interactiveService.sendTextMessage(
phone,
- "Something went wrong creating your account. Please try again or visit swifta.store to register.",
+ "Something went wrong creating your account. Please try again or visit twizrr.com to register.",
);
}
}
diff --git a/apps/backend/src/modules/whatsapp/whatsapp-supplier.service.ts b/apps/backend/src/modules/whatsapp/whatsapp-supplier.service.ts
index 9cf7230e..c9a1d055 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp-supplier.service.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp-supplier.service.ts
@@ -5,7 +5,7 @@ import { WhatsAppSupplierIntentService } from "./whatsapp-supplier-intent.servic
import { ParsedIntent } from "./whatsapp-intent.service";
import { RedisService } from "../../redis/redis.service";
import { FRIENDLY_FALLBACK } from "./whatsapp.constants";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
import { WhatsAppInteractiveService } from "./whatsapp-interactive.service";
// Helper to mask phone numbers — only show last 4 digits
diff --git a/apps/backend/src/modules/whatsapp/whatsapp.constants.ts b/apps/backend/src/modules/whatsapp/whatsapp.constants.ts
index 28607287..83626fb4 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp.constants.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp.constants.ts
@@ -12,7 +12,7 @@ export const SUPPLIER_MAIN_MENU = `Supplier Dashboard. Use the menu below to man
export const FRIENDLY_FALLBACK = `I did not understand that. Select an option from the menu:`;
/** Main menu for buyers */
-export const BUYER_MAIN_MENU = `Welcome to the Swifta Buyer Assistant. Select an option to proceed.`;
+export const BUYER_MAIN_MENU = `Welcome to the twizrr Buyer Assistant. Select an option to proceed.`;
/** Friendly fallback for buyers */
export const BUYER_FRIENDLY_FALLBACK = `I did not understand that. You can ask:
@@ -26,7 +26,7 @@ export const STOCK_UPDATE_FOLLOWUP = `Understood. Which product would you like t
Example: "Add 10 pairs of sneakers" or "Remove 5 laptops"`;
/** First message for an unlinked phone */
-export const WELCOME_MESSAGE = `Welcome to Swifta. Nigeria's digital marketplace for all your shopping needs. How would you like to use our platform?`;
+export const WELCOME_MESSAGE = `Welcome to twizrr. Nigeria's digital marketplace for all your shopping needs. How would you like to use our platform?`;
export const ROLE_SELECTED_MESSAGE = `To link your account, please reply with your registered email address.`;
diff --git a/apps/backend/src/modules/whatsapp/whatsapp.module.ts b/apps/backend/src/modules/whatsapp/whatsapp.module.ts
index c42b7291..fbfcdd6a 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp.module.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp.module.ts
@@ -30,7 +30,7 @@ import { WhatsAppLoggerService } from "./whatsapp-logger.service";
* WhatsApp Bot Module
*
* Integrates with Meta's WhatsApp Business Cloud API to provide
- * merchants with a conversational interface to Swifta.
+ * merchants with a conversational interface to twizrr.
*
* Dependencies:
* - PrismaModule: database access (WhatsAppLink, products, orders, etc.)
diff --git a/apps/backend/src/modules/whatsapp/whatsapp.service.ts b/apps/backend/src/modules/whatsapp/whatsapp.service.ts
index 31255848..a52c47a8 100644
--- a/apps/backend/src/modules/whatsapp/whatsapp.service.ts
+++ b/apps/backend/src/modules/whatsapp/whatsapp.service.ts
@@ -23,7 +23,7 @@ import {
MENU_BUYER_MODE,
MENU_MERCHANT_MODE,
} from "./whatsapp.constants";
-import { OrderStatus, VerificationTier } from "@swifta/shared";
+import { OrderStatus, VerificationTier } from "@twizrr/shared";
function maskPhone(phone: string): string {
if (!phone) return "unknown";
@@ -310,7 +310,7 @@ export class WhatsAppService {
if (id === "menu_help") {
await this.interactiveService.sendTextMessage(
phone,
- `🤝 *Swifta Merchant Support*\n\nYou can manage your business by using the menu or via natural language commands:\n\n• *"sales summary"* - View performance\n• *"my orders"* - Manage latest orders\n• *"check inventory"* - Monitor stock\n• *"update price of [item] to [amount]"*\n• *"add [qty] to [item] stock"*\n\nNeed more help? Visit our web dashboard or contact support at support@swifta.store`,
+ `🤝 *twizrr Merchant Support*\n\nYou can manage your business by using the menu or via natural language commands:\n\n• *"sales summary"* - View performance\n• *"my orders"* - Manage latest orders\n• *"check inventory"* - Monitor stock\n• *"update price of [item] to [amount]"*\n• *"add [qty] to [item] stock"*\n\nNeed more help? Visit our web dashboard or contact support at support@twizrr.com`,
);
return;
}
@@ -918,7 +918,7 @@ export class WhatsAppService {
if (products.length === 0) {
await this.interactiveService.sendTextMessage(
phone,
- "🏪 You have no products listed currently. Please add products via the Swifta web dashboard to begin selling. 🛒",
+ "🏪 You have no products listed currently. Please add products via the twizrr web dashboard to begin selling. 🛒",
);
return;
}
@@ -1151,13 +1151,13 @@ export class WhatsAppService {
let msg = "";
switch (tier) {
case VerificationTier.UNVERIFIED:
- msg = `Unverified Account. ⚠️\n\nVisit your dashboard settings to complete verification. Verified merchants receive lower fees and higher customer trust.\n\nDashboard: swifta.store/settings`;
+ msg = `Unverified Account. ⚠️\n\nVisit your dashboard settings to complete verification. Verified merchants receive lower fees and higher customer trust.\n\nDashboard: twizrr.com/settings`;
break;
case VerificationTier.TIER_1:
msg = `Verification Tier: Basic.\n\nUpgrade your status to Verified to enjoy lower platform fees and direct customer payments.`;
break;
case VerificationTier.TIER_2:
- msg = `Account Verified. ✅\n\nYou currently enjoy 1% platform fees and direct customer payments. Thank you for using Swifta.`;
+ msg = `Account Verified. ✅\n\nYou currently enjoy 1% platform fees and direct customer payments. Thank you for using twizrr.`;
break;
case VerificationTier.TIER_3:
msg = `Trusted Merchant Account. ✅\n\nYou have achieved the highest trust level. You benefit from minimal fees and featured listings.`;
@@ -1501,7 +1501,7 @@ export class WhatsAppService {
);
await this.interactiveService.sendTextMessage(
phone,
- `Your Swifta OTP is: ${otpCode}. Please use this to confirm your action.`,
+ `Your twizrr OTP is: ${otpCode}. Please use this to confirm your action.`,
);
// Rethrow to allow upstream SMS fallback if both WhatsApp methods fail
throw error;
@@ -1698,7 +1698,7 @@ export class WhatsAppService {
// Complete - generate app link or pay stack link
await this.redisService.del(key);
const appUrl =
- this.configService.get("FRONTEND_URL") || "https://Swifta.com";
+ this.configService.get("FRONTEND_URL") || "https://twizrr.com";
if (paymentMethod === "PAY_NOW") {
const merchant = await this.prisma.merchantProfile.findUnique({
@@ -2162,7 +2162,7 @@ export class WhatsAppService {
await this.redisService.del(sessionKey);
await this.interactiveService.sendTextMessage(
phone,
- `✅ *Success!* "${data.name}" is now live on Swifta.`,
+ `✅ *Success!* "${data.name}" is now live on twizrr.`,
);
return;
}
diff --git a/apps/backend/src/prisma/seed.ts b/apps/backend/src/prisma/seed.ts
index bb093fd5..548f0d78 100644
--- a/apps/backend/src/prisma/seed.ts
+++ b/apps/backend/src/prisma/seed.ts
@@ -1,14 +1,14 @@
import "dotenv/config";
import { PrismaClient } from "@prisma/client";
import * as bcrypt from "bcrypt";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
const prisma = new PrismaClient();
async function main() {
console.log("🌱 Starting Clean Database Seeding Process...");
- const LEGACY_ADMIN_EMAIL = "admin@swifta.store";
+ const LEGACY_ADMIN_EMAIL = "admin@twizrr.com";
const BOOTSTRAP_ADMIN_EMAIL =
process.env.ADMIN_BOOTSTRAP_EMAIL || LEGACY_ADMIN_EMAIL;
const DEFAULT_ADMIN_PASSWORD = process.env.ADMIN_BOOTSTRAP_PASSWORD;
@@ -52,7 +52,7 @@ async function main() {
data: {
email: BOOTSTRAP_ADMIN_EMAIL,
phone: "+234000000000",
- firstName: "Swifta",
+ firstName: "twizrr",
lastName: "Admin",
passwordHash: passwordHash,
role: UserRole.SUPER_ADMIN,
@@ -107,7 +107,7 @@ async function main() {
await prisma.productAssociation.deleteMany({});
// Optional: Remove the demo merchant user and ALL their data if they exist
- const DEMO_MERCHANT_EMAIL = "merchant@demo.swifta.store";
+ const DEMO_MERCHANT_EMAIL = "merchant@demo.twizrr.com";
const demoMerchant = await prisma.user.findUnique({
where: { email: DEMO_MERCHANT_EMAIL },
include: { merchantProfile: true },
diff --git a/apps/backend/src/queue/auto-confirm.processor.ts b/apps/backend/src/queue/auto-confirm.processor.ts
index e5cabd04..a37b1f78 100644
--- a/apps/backend/src/queue/auto-confirm.processor.ts
+++ b/apps/backend/src/queue/auto-confirm.processor.ts
@@ -5,7 +5,7 @@ import { AUTO_CONFIRM_QUEUE } from "./queue.constants";
import { PrismaService } from "../prisma/prisma.service";
import { PayoutService } from "../modules/payout/payout.service";
import { WhatsAppService } from "../modules/whatsapp/whatsapp.service";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
const AUTO_CONFIRM_HOURS = 168; // 7 days
const REMINDER_3DAYS = 72;
@@ -80,7 +80,7 @@ export class AutoConfirmProcessor extends WorkerHost {
try {
await this.whatsappService.sendWhatsAppMessage(
phone,
- `⏰ *Delivery Reminder*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* was dispatched 72 hours ago. If it has arrived, please confirm delivery with your OTP code to complete the transaction.\n\nIf there's an issue with delivery, open a dispute via the Swifta app before the payment is released.`,
+ `⏰ *Delivery Reminder*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* was dispatched 72 hours ago. If it has arrived, please confirm delivery with your OTP code to complete the transaction.\n\nIf there's an issue with delivery, open a dispute via the twizrr app before the payment is released.`,
);
} catch (err) {
this.logger.warn(
@@ -124,7 +124,7 @@ export class AutoConfirmProcessor extends WorkerHost {
try {
await this.whatsappService.sendWhatsAppMessage(
phone,
- `⚠️ *Final Reminder — Action Required*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* has been dispatched for 5 days.\n\n*If you do not confirm or dispute within 48 hours, the order will be auto-confirmed and the merchant will be paid automatically.*\n\nPlease confirm delivery with your OTP or open a dispute on the Swifta app.`,
+ `⚠️ *Final Reminder — Action Required*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* has been dispatched for 5 days.\n\n*If you do not confirm or dispute within 48 hours, the order will be auto-confirmed and the merchant will be paid automatically.*\n\nPlease confirm delivery with your OTP or open a dispute on the twizrr app.`,
);
} catch (err) {
this.logger.warn(
@@ -202,7 +202,7 @@ export class AutoConfirmProcessor extends WorkerHost {
try {
await this.whatsappService.sendWhatsAppMessage(
order.user.phone,
- `✅ *Order Auto-Confirmed*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* has been automatically confirmed after ${AUTO_CONFIRM_HOURS} hours.\n\nIf you did not receive your goods, you can open a dispute within the next ${DISPUTE_WINDOW_HOURS} hours via the Swifta app. After that, the payment will be released to the merchant.\n\nThank you for using Swifta! 🙏`,
+ `✅ *Order Auto-Confirmed*\n\nYour order #${order.id.substring(0, 8)} for *${itemName}* has been automatically confirmed after ${AUTO_CONFIRM_HOURS} hours.\n\nIf you did not receive your goods, you can open a dispute within the next ${DISPUTE_WINDOW_HOURS} hours via the twizrr app. After that, the payment will be released to the merchant.\n\nThank you for using twizrr! 🙏`,
);
// Trigger V5 Review Prompt
diff --git a/apps/backend/src/queue/checkout-reminder.processor.ts b/apps/backend/src/queue/checkout-reminder.processor.ts
index 21fe9906..7d651cbd 100644
--- a/apps/backend/src/queue/checkout-reminder.processor.ts
+++ b/apps/backend/src/queue/checkout-reminder.processor.ts
@@ -4,7 +4,7 @@ import { Injectable, Logger } from "@nestjs/common";
import { CHECKOUT_REMINDER_QUEUE } from "./queue.constants";
import { PrismaService } from "../prisma/prisma.service";
import { WhatsAppService } from "../modules/whatsapp/whatsapp.service";
-import { OrderStatus } from "@swifta/shared";
+import { OrderStatus } from "@twizrr/shared";
@Injectable()
@Processor(CHECKOUT_REMINDER_QUEUE, {
@@ -50,7 +50,7 @@ export class CheckoutReminderProcessor extends WorkerHost {
const itemName =
order.product?.name ?? order.supplierProduct?.name ?? "your items";
- let msg = `🛒 *Checkout Reminder from Swifta*\n\nHi ${order.user.firstName || "there"}! Your order #${order.id.substring(0, 8).toUpperCase()} for *${itemName}* is waiting for payment.\n\n`;
+ let msg = `🛒 *Checkout Reminder from twizrr*\n\nHi ${order.user.firstName || "there"}! Your order #${order.id.substring(0, 8).toUpperCase()} for *${itemName}* is waiting for payment.\n\n`;
const buyerProfile = order.user?.buyerProfile;
if (buyerProfile?.dvaActive && buyerProfile?.dvaAccountNumber) {
@@ -68,7 +68,7 @@ export class CheckoutReminderProcessor extends WorkerHost {
msg += `Please complete your payment using this secure link: ${metadata.checkoutUrl}\n\n`;
msg += `This link will finalize your order immediately. ⚡`;
} else {
- msg += `Please return to the Swifta shop to complete your payment or request a new checkout link from the menu. ⚡`;
+ msg += `Please return to the twizrr shop to complete your payment or request a new checkout link from the menu. ⚡`;
}
}
diff --git a/apps/backend/test/helpers/test-setup.ts b/apps/backend/test/helpers/test-setup.ts
index 0c827ed3..dfba68da 100644
--- a/apps/backend/test/helpers/test-setup.ts
+++ b/apps/backend/test/helpers/test-setup.ts
@@ -3,7 +3,7 @@ import { Test, TestingModule } from "@nestjs/testing";
import { AppModule } from "../../src/app.module";
import { PrismaService } from "../../src/prisma/prisma.service";
import { JwtService } from "@nestjs/jwt";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
export class TestSetup {
public app: INestApplication;
@@ -29,7 +29,7 @@ export class TestSetup {
}
async createMockBuyer() {
- const email = `test.buyer.${Date.now()}@swifta.store`;
+ const email = `test.buyer.${Date.now()}@twizrr.com`;
const user = await this.prisma.user.create({
data: {
email,
@@ -54,7 +54,7 @@ export class TestSetup {
}
async createMockMerchant() {
- const email = `test.merchant.${Date.now()}@swifta.store`;
+ const email = `test.merchant.${Date.now()}@twizrr.com`;
const user = await this.prisma.user.create({
data: {
email,
diff --git a/apps/backend/test/jest-e2e.json b/apps/backend/test/jest-e2e.json
index e96b1b0e..4d862f8e 100644
--- a/apps/backend/test/jest-e2e.json
+++ b/apps/backend/test/jest-e2e.json
@@ -7,6 +7,6 @@
"^.+\\.(t|j)s$": "ts-jest"
},
"moduleNameMapper": {
- "^@swifta/shared$": "/../../../packages/shared/src"
+ "^@twizrr/shared$": "/../../../packages/shared/src"
}
}
diff --git a/apps/web/README.md b/apps/web/README.md
index 577e97c3..c6c91aa0 100644
--- a/apps/web/README.md
+++ b/apps/web/README.md
@@ -1,6 +1,6 @@
-# Swifta — Frontend
+# twizrr — Frontend
-Next.js 14 App Router web application for Swifta.
+Next.js 14 App Router web application for twizrr.
---
@@ -9,7 +9,7 @@ Next.js 14 App Router web application for Swifta.
- **Next.js 14** (App Router) — framework
- **TypeScript** — type safety
- **Tailwind CSS** — styling
-- **@swifta/shared** — shared types, enums, money utilities
+- **@twizrr/shared** — shared types, enums, money utilities
---
@@ -194,7 +194,7 @@ The API client automatically:
All money from the API arrives in **kobo** (integer). Always convert for display:
```typescript
-import { formatKobo } from "@swifta/shared";
+import { formatKobo } from "@twizrr/shared";
formatKobo(650000n); // "₦6,500.00"
formatKobo(32500000n); // "₦325,000.00"
@@ -203,7 +203,7 @@ formatKobo(32500000n); // "₦325,000.00"
When user types Naira in forms, convert to kobo before sending to API:
```typescript
-import { nairaToKobo } from "@swifta/shared";
+import { nairaToKobo } from "@twizrr/shared";
nairaToKobo(6500); // 650000n
```
diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs
index 3a4a4cc7..2b191880 100644
--- a/apps/web/next.config.mjs
+++ b/apps/web/next.config.mjs
@@ -6,7 +6,7 @@ const nextConfig = {
images: {
domains: ["res.cloudinary.com", "ui-avatars.com"],
},
- transpilePackages: ["@swifta/shared"],
+ transpilePackages: ["@twizrr/shared"],
};
export default withSentryConfig(
@@ -15,8 +15,8 @@ export default withSentryConfig(
// For all available options, see:
// https://github.com/getsentry/sentry-webpack-plugin#options
silent: true, // Suppresses all logs
- org: process.env.SENTRY_ORG || "swifta",
- project: process.env.SENTRY_PROJECT || "swifta-frontend",
+ org: process.env.SENTRY_ORG || "twizrr",
+ project: process.env.SENTRY_PROJECT || "twizrr-frontend",
},
{
// For all available options, see:
diff --git a/apps/web/package.json b/apps/web/package.json
index 15abbf91..07d4a030 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -1,5 +1,5 @@
{
- "name": "@swifta/web",
+ "name": "@twizrr/web",
"version": "1.0.0",
"private": true,
"scripts": {
@@ -9,7 +9,7 @@
"lint": "next lint"
},
"dependencies": {
- "@swifta/shared": "workspace:*",
+ "@twizrr/shared": "workspace:*",
"@hookform/resolvers": "^5.2.2",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-slot": "^1.0.2",
diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json
index db609bc1..74433e2d 100644
--- a/apps/web/public/manifest.json
+++ b/apps/web/public/manifest.json
@@ -1,6 +1,6 @@
{
- "name": "Swifta",
- "short_name": "Swifta",
+ "name": "Twizrr",
+ "short_name": "Twizrr",
"description": "Nigeria's WhatsApp E-Commerce Platform",
"start_url": "/",
"display": "standalone",
diff --git a/apps/web/src/app/(auth)/admin/join/page.tsx b/apps/web/src/app/(auth)/admin/join/page.tsx
index 3e0fcdf4..49f588ce 100644
--- a/apps/web/src/app/(auth)/admin/join/page.tsx
+++ b/apps/web/src/app/(auth)/admin/join/page.tsx
@@ -111,7 +111,7 @@ export default function StaffJoinPage() {
Internal Operations Portal
- Secure administration and operational management for the Swifta
+ Secure administration and operational management for the twizrr
infrastructure.
@@ -279,7 +279,7 @@ export default function StaffJoinPage() {
diff --git a/apps/web/src/app/(auth)/admin/login/page.tsx b/apps/web/src/app/(auth)/admin/login/page.tsx
index f804006d..4979a297 100644
--- a/apps/web/src/app/(auth)/admin/login/page.tsx
+++ b/apps/web/src/app/(auth)/admin/login/page.tsx
@@ -11,7 +11,7 @@ import {
} from "../../../../lib/validations/auth";
import { useAuth } from "../../../../providers/auth-provider";
import { useToast } from "../../../../providers/toast-provider";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { Logo } from "@/components/ui/logo";
const slides = [
@@ -85,7 +85,7 @@ export default function InternalLoginPage() {
>
@@ -102,7 +102,7 @@ export default function InternalLoginPage() {
Internal Operations Portal
- Secure administration and operational management for the Swifta
+ Secure administration and operational management for the twizrr
infrastructure.
@@ -189,7 +189,7 @@ export default function InternalLoginPage() {
setFormError(null) })}
/>
diff --git a/apps/web/src/app/(auth)/admin/verify-token/page.tsx b/apps/web/src/app/(auth)/admin/verify-token/page.tsx
index 358c8483..c8193a94 100644
--- a/apps/web/src/app/(auth)/admin/verify-token/page.tsx
+++ b/apps/web/src/app/(auth)/admin/verify-token/page.tsx
@@ -5,7 +5,7 @@ import { useRouter } from "next/navigation";
import { authApi } from "../../../../lib/api/auth.api";
import { useAuth } from "../../../../providers/auth-provider";
import { useToast } from "../../../../providers/toast-provider";
-import { getDisplayName } from "@swifta/shared";
+import { getDisplayName } from "@twizrr/shared";
import { Button } from "../../../../components/ui/button";
import { Input } from "../../../../components/ui/input";
import Link from "next/link";
@@ -105,7 +105,7 @@ export default function VerifyTokenPage() {
Internal Operations Portal
- Secure administration and operational management for the Swifta
+ Secure administration and operational management for the twizrr
infrastructure.
diff --git a/apps/web/src/app/(auth)/login/page.tsx b/apps/web/src/app/(auth)/login/page.tsx
index 66ee0f41..07e34292 100644
--- a/apps/web/src/app/(auth)/login/page.tsx
+++ b/apps/web/src/app/(auth)/login/page.tsx
@@ -8,7 +8,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { loginSchema, type LoginFormData } from "../../../lib/validations/auth";
import { useAuth } from "../../../providers/auth-provider";
import { useToast } from "../../../providers/toast-provider";
-import { UserRole } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
import { useRef } from "react";
import { Logo } from "@/components/ui/logo";
@@ -215,7 +215,7 @@ export default function LoginPage() {
>
diff --git a/apps/web/src/app/(auth)/register/page.tsx b/apps/web/src/app/(auth)/register/page.tsx
index 63e30454..0bebb941 100644
--- a/apps/web/src/app/(auth)/register/page.tsx
+++ b/apps/web/src/app/(auth)/register/page.tsx
@@ -9,8 +9,8 @@ import {
baseRegistrationSchema,
type RegistrationFormData,
} from "@/lib/validations/auth";
-import { UserRole } from "@swifta/shared";
-import type { RegisterDto } from "@swifta/shared";
+import { UserRole } from "@twizrr/shared";
+import type { RegisterDto } from "@twizrr/shared";
import { useAuth } from "@/providers/auth-provider";
import { useToast } from "@/providers/toast-provider";
import { authApi } from "@/lib/api/auth.api";
@@ -227,7 +227,7 @@ export default function RegisterPage() {
>
diff --git a/apps/web/src/app/(dashboard)/admin/analytics/page.tsx b/apps/web/src/app/(dashboard)/admin/analytics/page.tsx
index b346b6ce..46365536 100644
--- a/apps/web/src/app/(dashboard)/admin/analytics/page.tsx
+++ b/apps/web/src/app/(dashboard)/admin/analytics/page.tsx
@@ -90,7 +90,7 @@ export default function AdminAnalyticsPage() {
link.setAttribute("href", url);
link.setAttribute(
"download",
- `swifta_financials_${new Date().toISOString().split("T")[0]}.csv`,
+ `twizrr_financials_${new Date().toISOString().split("T")[0]}.csv`,
);
document.body.appendChild(link);
link.click();
diff --git a/apps/web/src/app/(dashboard)/admin/categories/page.tsx b/apps/web/src/app/(dashboard)/admin/categories/page.tsx
index 4e01adfb..107015d5 100644
--- a/apps/web/src/app/(dashboard)/admin/categories/page.tsx
+++ b/apps/web/src/app/(dashboard)/admin/categories/page.tsx
@@ -7,7 +7,7 @@ import {
updateCategory,
deleteCategory,
} from "@/lib/api/category.api";
-import { type Category } from "@swifta/shared";
+import { type Category } from "@twizrr/shared";
import { Skeleton } from "@/components/ui/skeleton";
import { useToast } from "@/providers/toast-provider";
diff --git a/apps/web/src/app/(dashboard)/admin/settings/page.tsx b/apps/web/src/app/(dashboard)/admin/settings/page.tsx
index 15d7ee32..b72eb947 100644
--- a/apps/web/src/app/(dashboard)/admin/settings/page.tsx
+++ b/apps/web/src/app/(dashboard)/admin/settings/page.tsx
@@ -8,7 +8,7 @@ import * as z from "zod";
import { apiClient } from "@/lib/api-client";
import { useToast } from "@/providers/toast-provider";
import { useAuth } from "@/providers/auth-provider";
-import { getDisplayName } from "@swifta/shared";
+import { getDisplayName } from "@twizrr/shared";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { authApi } from "@/lib/api/auth.api";
diff --git a/apps/web/src/app/(dashboard)/buyer/catalogue/page.tsx b/apps/web/src/app/(dashboard)/buyer/catalogue/page.tsx
index d777404f..79f15e2a 100644
--- a/apps/web/src/app/(dashboard)/buyer/catalogue/page.tsx
+++ b/apps/web/src/app/(dashboard)/buyer/catalogue/page.tsx
@@ -11,7 +11,7 @@ import {
type Category,
type MerchantProfile,
type PaginatedResponse,
-} from "@swifta/shared";
+} from "@twizrr/shared";
import { useAuth } from "@/providers/auth-provider";
import { useRouter } from "next/navigation";
diff --git a/apps/web/src/app/(dashboard)/buyer/checkout/[productId]/page.tsx b/apps/web/src/app/(dashboard)/buyer/checkout/[productId]/page.tsx
index e626e72c..331ac870 100644
--- a/apps/web/src/app/(dashboard)/buyer/checkout/[productId]/page.tsx
+++ b/apps/web/src/app/(dashboard)/buyer/checkout/[productId]/page.tsx
@@ -7,7 +7,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import { productApi } from "@/lib/api/product.api";
import { createDirectOrder, getDeliveryQuote } from "@/lib/api/order.api";
import { useAuth } from "@/providers/auth-provider";
-import { Product, VerificationTier } from "@swifta/shared";
+import { Product, VerificationTier } from "@twizrr/shared";
import { cn, formatKobo } from "@/lib/utils";
import { StateLgaSelector } from "@/components/ui/state-lga-selector";
@@ -250,7 +250,7 @@ export default function CheckoutPage({
)}>
local_shipping
- Swifta Soon
+ twizrr Soon
diff --git a/apps/web/src/app/(dashboard)/buyer/merchants/page.tsx b/apps/web/src/app/(dashboard)/buyer/merchants/page.tsx
index 1fefca7a..a4526c63 100644
--- a/apps/web/src/app/(dashboard)/buyer/merchants/page.tsx
+++ b/apps/web/src/app/(dashboard)/buyer/merchants/page.tsx
@@ -2,7 +2,7 @@ import { Metadata } from "next";
import { MerchantDiscovery } from "@/components/buyer/merchants/merchant-discovery";
export const metadata: Metadata = {
- title: "Merchant Directory | Swifta",
+ title: "Merchant Directory | twizrr",
description: "Find and follow verified merchants.",
};
diff --git a/apps/web/src/app/(dashboard)/buyer/notifications/page.tsx b/apps/web/src/app/(dashboard)/buyer/notifications/page.tsx
index cdb43807..3e73f488 100644
--- a/apps/web/src/app/(dashboard)/buyer/notifications/page.tsx
+++ b/apps/web/src/app/(dashboard)/buyer/notifications/page.tsx
@@ -2,7 +2,7 @@ import { Metadata } from "next";
import { NotificationsSharedPage } from "@/components/notifications/notifications-page";
export const metadata: Metadata = {
- title: "Notifications | Swifta Buyer",
+ title: "Notifications | twizrr Buyer",
description: "View your recent activities and alerts.",
};
diff --git a/apps/web/src/app/(dashboard)/buyer/orders/[id]/page.tsx b/apps/web/src/app/(dashboard)/buyer/orders/[id]/page.tsx
index d5bca9ce..cce00437 100644
--- a/apps/web/src/app/(dashboard)/buyer/orders/[id]/page.tsx
+++ b/apps/web/src/app/(dashboard)/buyer/orders/[id]/page.tsx
@@ -4,7 +4,7 @@ import React, { useState, useMemo } from "react";
import { useParams, useRouter } from "next/navigation";
import Link from "next/link";
import { formatKobo } from "@/lib/utils";
-import type { Order } from "@swifta/shared";
+import type { Order } from "@twizrr/shared";
import { useOrder } from "@/hooks/use-order";
import { OrderTimeline } from "@/components/ui/order-timeline";
import { Modal } from "@/components/ui/modal";
@@ -92,7 +92,7 @@ export default function BuyerOrderDetailsPage() {
// Cart checkout
if (Array.isArray((order as any).items)) {
items.push(...(order as any).items.map((item: any) => ({
- name: item.name || "Swifta Product",
+ name: item.name || "twizrr Product",
sku: `${item.productId?.slice(0, 8)?.toUpperCase() || "GEN"}`,
quantity: item.quantity,
unitPrice: item.unitPriceKobo,
@@ -430,7 +430,7 @@ export default function BuyerOrderDetailsPage() {
@@ -533,7 +533,7 @@ export default function BuyerOrderDetailsPage() {
>
- Describe the issue you encountered. The Swifta mediation team will review your report within 24 hours.
+ Describe the issue you encountered. The twizrr mediation team will review your report within 24 hours.
- Permanently eliminate your buyer identity and trade history from the Swifta network. This operation is non-reversible.
+ Permanently eliminate your buyer identity and trade history from the twizrr network. This operation is non-reversible.