diff --git a/Add Content Brain Modules b/Add Content Brain Modules new file mode 100644 index 00000000..2a332f14 --- /dev/null +++ b/Add Content Brain Modules @@ -0,0 +1,2 @@ +git add ai-system/content-brain/ +git commit -m "feat: add trend detector, script generator, caption builder engines" diff --git a/Add Documentation b/Add Documentation new file mode 100644 index 00000000..9f0025fa --- /dev/null +++ b/Add Documentation @@ -0,0 +1,2 @@ +git add docs/ +git commit -m "docs: add AI Automated Posting System documentation" diff --git a/Add Learning Engine b/Add Learning Engine new file mode 100644 index 00000000..10bbecad --- /dev/null +++ b/Add Learning Engine @@ -0,0 +1,2 @@ +git add ai-system/learning-engine/ +git commit -m "feat: add engagement analyzer + virality predictor + auto optimizer" diff --git a/Add Platform API Integration b/Add Platform API Integration new file mode 100644 index 00000000..19487778 --- /dev/null +++ b/Add Platform API Integration @@ -0,0 +1,2 @@ +git add ai-system/platforms/ +git commit -m "feat: integrate TikTok, IG, FB, YouTube, Telegram API modules" diff --git a/Add Scheduler System b/Add Scheduler System new file mode 100644 index 00000000..6708e1f1 --- /dev/null +++ b/Add Scheduler System @@ -0,0 +1,2 @@ +git add ai-system/scheduler/ +git commit -m "feat: add cron manager, posting queue, automatic retry handler" diff --git a/Deploy Hooks b/Deploy Hooks new file mode 100644 index 00000000..568ad3a6 --- /dev/null +++ b/Deploy Hooks @@ -0,0 +1 @@ +https://api.render.com/deploy/srv-XXXXXX?key=YYYYYYYY diff --git a/Express.js b/Express.js new file mode 100644 index 00000000..c20f9a2b --- /dev/null +++ b/Express.js @@ -0,0 +1 @@ + cors.js rateLimit.js helmet.js sanitize.js validateSignature.js errorHandler.js diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /Production Ready) b/FILE & FOLDER STRUCTURE (Final / Clean /Production Ready) new file mode 100644 index 00000000..17e16a2b --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /Production Ready) @@ -0,0 +1,26 @@ +/services + ├── StockService.js + ├── StockMonitor.js + ├── AutoReorderService.js + └── PredictionEngine.js + +/controllers + └── stockController.js + +/models + ├── Stock.js + ├── Supplier.js + └── ReorderLog.js + +/events + └── eventBus.js + +/utils + ├── notifications.js + └── security.js + +/api + └── stockRoutes.js + +/config + └── db.js diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/ReorderLog.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/ReorderLog.js new file mode 100644 index 00000000..054229b5 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/ReorderLog.js @@ -0,0 +1,15 @@ +import mongoose from "mongoose"; + +const ReorderLogSchema = new mongoose.Schema( + { + stockId: { type: mongoose.Schema.Types.ObjectId, ref: "Stock" }, + quantityOrdered: Number, + status: { type: String, default: "PENDING" }, + auto: { type: Boolean, default: true } + }, + { timestamps: true } +); + +ReorderLogSchema.index({ createdAt: 1 }, { expireAfterSeconds: 86400 * 30 }); + +export default mongoose.model("ReorderLog", ReorderLogSchema); diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/Stock.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/Stock.js new file mode 100644 index 00000000..e2b11350 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/Stock.js @@ -0,0 +1,16 @@ +import mongoose from "mongoose"; + +const StockSchema = new mongoose.Schema( + { + productId: { type: String, required: true, index: true }, + productName: { type: String, required: true }, + quantity: { type: Number, required: true }, + reorderLevel: { type: Number, default: 10 }, + supplierId: { type: mongoose.Schema.Types.ObjectId, ref: "Supplier" } + }, + { timestamps: true } +); + +StockSchema.index({ productId: 1, supplierId: 1 }); + +export default mongoose.model("Stock", StockSchema); diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/models/Supplier.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/models/Supplier.js new file mode 100644 index 00000000..54aaebf8 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/models/Supplier.js @@ -0,0 +1,12 @@ +import mongoose from "mongoose"; + +const SupplierSchema = new mongoose.Schema( + { + name: { type: String, required: true }, + contact: { type: String }, + piWallet: { type: String, required: true } + }, + { timestamps: true } +); + +export default mongoose.model("Supplier", SupplierSchema); diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/PredictionEngine.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/PredictionEngine.js new file mode 100644 index 00000000..0907def7 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/PredictionEngine.js @@ -0,0 +1,16 @@ +export class PredictionEngine { + static forecast(dailySalesHistory = []) { + if (dailySalesHistory.length < 3) return 5; + + const smoothingFactor = 0.6; + + let prediction = dailySalesHistory[0]; + for (let i = 1; i < dailySalesHistory.length; i++) { + prediction = + smoothingFactor * dailySalesHistory[i] + + (1 - smoothingFactor) * prediction; + } + + return Math.round(prediction); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/StockMonitor.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/StockMonitor.js new file mode 100644 index 00000000..eaef71f4 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/StockMonitor.js @@ -0,0 +1,9 @@ +import eventBus from "../events/eventBus.js"; + +export class StockMonitor { + static check(stock) { + if (stock.quantity <= stock.reorderLevel) { + eventBus.emit("stock.low", stock); + } + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/AutoReorderService.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/AutoReorderService.js new file mode 100644 index 00000000..11bc96ba --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/AutoReorderService.js @@ -0,0 +1,21 @@ +import ReorderLog from "../models/ReorderLog.js"; +import Supplier from "../models/Supplier.js"; +import { sendNotification } from "../utils/notifications.js"; +import { initiatePiPayment } from "../utils/security.js"; + +export class AutoReorderService { + static async createReorder(stock) { + const supplier = await Supplier.findById(stock.supplierId); + + const order = await ReorderLog.create({ + stockId: stock._id, + quantityOrdered: stock.reorderLevel * 2 + }); + + sendNotification(supplier.contact, `Auto-reorder placed for ${stock.productName}`); + + await initiatePiPayment(supplier.piWallet, 1.5); + + return order; + } +} diff --git "a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration" "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration" new file mode 100644 index 00000000..f6e71266 --- /dev/null +++ "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration" @@ -0,0 +1,8 @@ +export async function initiatePiPayment(wallet, amount) { + return { + wallet, + amount, + status: "INITIATED", + timestamp: Date.now() + }; +} diff --git "a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.js" "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.js" new file mode 100644 index 00000000..aa6d70a5 --- /dev/null +++ "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.js" @@ -0,0 +1,8 @@ +export async function initiatePiPayment(wallet, amount) { + return { + wallet, + amount, + status: "INITIATED", + timestamp: Date.now() + }; + } diff --git "a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.md" "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.md" new file mode 100644 index 00000000..f6e71266 --- /dev/null +++ "b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers /SECURITY \342\200\223 Pi Payments Integration.md" @@ -0,0 +1,8 @@ +export async function initiatePiPayment(wallet, amount) { + return { + wallet, + amount, + status: "INITIATED", + timestamp: Date.now() + }; +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/EVENT BUS b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/EVENT BUS new file mode 100644 index 00000000..fa6fd65c --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/EVENT BUS @@ -0,0 +1,10 @@ +import EventEmitter from "events"; +import { AutoReorderService } from "../services/AutoReorderService.js"; + +const eventBus = new EventEmitter(); + +eventBus.on("stock.low", async (stock) => { + await AutoReorderService.createReorder(stock); +}); + +export default eventBus; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/Event bus.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/Event bus.js new file mode 100644 index 00000000..fa6fd65c --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/Event bus.js @@ -0,0 +1,10 @@ +import EventEmitter from "events"; +import { AutoReorderService } from "../services/AutoReorderService.js"; + +const eventBus = new EventEmitter(); + +eventBus.on("stock.low", async (stock) => { + await AutoReorderService.createReorder(stock); +}); + +export default eventBus; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/stockController.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/stockController.js new file mode 100644 index 00000000..08757915 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/controllers/stockController.js @@ -0,0 +1,18 @@ +import Stock from "../models/Stock.js"; +import { PredictionEngine } from "../services/PredictionEngine.js"; +import { StockMonitor } from "../services/StockMonitor.js"; +import { AutoReorderService } from "../services/AutoReorderService.js"; + +export const StockController = { + async checkAndReorder(req, res) { + const stock = await Stock.findById(req.params.id); + StockMonitor.check(stock); + res.json({ status: "checked", stock }); + }, + + async predict(req, res) { + const { history } = req.body; + const forecast = PredictionEngine.forecast(history); + res.json({ forecast }); + } +}; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/RouteEngine.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/RouteEngine.js new file mode 100644 index 00000000..a7b8cd00 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/RouteEngine.js @@ -0,0 +1,5 @@ +export class RouteEngine { + static optimize(deliveries = []) { + return deliveries.sort((a, b) => a.distance - b.distance); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/SupplierRanking.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/SupplierRanking.js new file mode 100644 index 00000000..6d0808ae --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/SupplierRanking.js @@ -0,0 +1,14 @@ +export class SupplierRanking { + static rank(suppliers) { + return suppliers.sort((a, b) => b.score - a.score); + } + + static calculateScore(stats) { + return ( + stats.onTimeDelivery * 0.4 + + stats.priceStability * 0.2 + + stats.quality * 0.3 + + stats.communication * 0.1 + ); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/WarehouseHeatmap.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/WarehouseHeatmap.js new file mode 100644 index 00000000..c1696ae6 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/WarehouseHeatmap.js @@ -0,0 +1,8 @@ +export class WarehouseHeatmap { + static generate(stockList) { + return stockList.map(item => ({ + product: item.productName, + temperature: item.quantity < item.reorderLevel ? "HOT" : "COLD" + })); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/driverController.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/driverController.js new file mode 100644 index 00000000..3c46e116 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/driverController.js @@ -0,0 +1,13 @@ +import eventBus from "../utils/eventBus.js"; + +export const DriverController = { + updateLocation(req, res) { + eventBus.emit("driver.location.update", req.body); + res.json({ status: "location updated" }); + }, + + confirmDelivery(req, res) { + eventBus.emit("delivery.completed", req.body); + res.json({ status: "delivery confirmed" }); + } +}; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/CameraRecognition.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/CameraRecognition.js new file mode 100644 index 00000000..f1f59b93 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/CameraRecognition.js @@ -0,0 +1,10 @@ +export class CameraRecognition { + static detect(frameData) { + return { + detectedItems: [ + { productId: "RM-CH-01", count: 12 }, + { productId: "RM-ML-02", count: 4 } + ] + }; + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/logistics-events.log b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/logistics-events.log new file mode 100644 index 00000000..d224214b --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/logistics-events.log @@ -0,0 +1,2 @@ +# Logistics AI Events Log +# System-generated events related to stock, delivery, and supplier AI. diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/AISafety.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/AISafety.js new file mode 100644 index 00000000..54457348 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/AISafety.js @@ -0,0 +1,18 @@ +export class AISafety { + constructor() { + this.failCount = 0; + this.threshold = 3; + } + + recordFailure() { + this.failCount++; + if (this.failCount >= this.threshold) { + return { locked: true, message: "AI fail-lock triggered" }; + } + return { locked: false }; + } + + reset() { + this.failCount = 0; + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/eventBus.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/eventBus.js new file mode 100644 index 00000000..2d9b9dda --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/eventBus.js @@ -0,0 +1,3 @@ +import { EventEmitter } from "events"; +const eventBus = new EventEmitter(); +export default eventBus; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/driverRoutes.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/driverRoutes.js new file mode 100644 index 00000000..b671c1b4 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/driverRoutes.js @@ -0,0 +1,9 @@ +import express from "express"; +import { DriverController } from "../controllers/driverController.js"; + +const router = express.Router(); + +router.post("/location", DriverController.updateLocation); +router.post("/confirm", DriverController.confirmDelivery); + +export default router; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/driverRoutes.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/driverRoutes.js new file mode 100644 index 00000000..b671c1b4 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/driverRoutes.js @@ -0,0 +1,9 @@ +import express from "express"; +import { DriverController } from "../controllers/driverController.js"; + +const router = express.Router(); + +router.post("/location", DriverController.updateLocation); +router.post("/confirm", DriverController.confirmDelivery); + +export default router; diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/RouteEngine.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/RouteEngine.js new file mode 100644 index 00000000..a7b8cd00 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/RouteEngine.js @@ -0,0 +1,5 @@ +export class RouteEngine { + static optimize(deliveries = []) { + return deliveries.sort((a, b) => a.distance - b.distance); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/SupplierRanking.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/SupplierRanking.js new file mode 100644 index 00000000..6d0808ae --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/SupplierRanking.js @@ -0,0 +1,14 @@ +export class SupplierRanking { + static rank(suppliers) { + return suppliers.sort((a, b) => b.score - a.score); + } + + static calculateScore(stats) { + return ( + stats.onTimeDelivery * 0.4 + + stats.priceStability * 0.2 + + stats.quality * 0.3 + + stats.communication * 0.1 + ); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/PaymentsEngine.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/PaymentsEngine.js new file mode 100644 index 00000000..24e40b8b --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/PaymentsEngine.js @@ -0,0 +1,12 @@ +export class PaymentsEngine { + static validateTransaction(tx) { + if (!tx.amount || tx.amount <= 0) return false; + if (!tx.currency) return false; + if (!tx.userId) return false; + return true; + } + + static convertCurrency(amount, rate) { + return amount * rate; + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/PiPayments.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/PiPayments.js new file mode 100644 index 00000000..2773e416 --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/PiPayments.js @@ -0,0 +1,16 @@ +import { Pi } from "@pi-network/pi-sdk"; + +export class PiPayments { + static async createPayment(amount, user) { + const payment = await Pi.createPayment({ + amount, + memo: "RoyalMix Payment", + metadata: { userId: user } + }); + return payment; + } + + static async verifyPayment(paymentId) { + return await Pi.verifyPayment(paymentId); + } +} diff --git a/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/services/MobileMoney.js b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/services/MobileMoney.js new file mode 100644 index 00000000..f424528b --- /dev/null +++ b/FILE & FOLDER STRUCTURE (Final / Clean /models/services/services/services/services/services/services/controllers/services/logs/services/utils/routes/routes/services/services/services/services/services/MobileMoney.js @@ -0,0 +1,9 @@ +export class MobileMoney { + static async sendMoney(phone, amount) { + return { status: "success", phone, amount }; + } + + static async receiveMoney(phone, amount) { + return { status: "received", phone, amount }; + } +} diff --git "a/FOLDER STRUCTURE \342\200\224 Royal Mix Global Super-App" "b/FOLDER STRUCTURE \342\200\224 Royal Mix Global Super-App" new file mode 100644 index 00000000..9965093e --- /dev/null +++ "b/FOLDER STRUCTURE \342\200\224 Royal Mix Global Super-App" @@ -0,0 +1,53 @@ +/royalmix-global +│ +├── /api +│ ├── /auth +│ ├── /payments +│ ├── /wallet +│ ├── /marketplace +│ ├── /liquor +│ ├── /pharmacy +│ └── index.js +│ +├── /config +│ ├── db.js +│ ├── pi-sdk.js +│ └── env.js +│ +├── /controllers +│ ├── authController.js +│ ├── paymentController.js +│ ├── walletController.js +│ ├── marketController.js +│ └── aiEngine.js +│ +├── /services +│ ├── PiPaymentService.js +│ ├── WalletService.js +│ ├── LiquorService.js +│ ├── PharmacyService.js +│ └── AI_Recommendation.js +│ +├── /models +│ ├── User.js +│ ├── Wallet.js +│ ├── Order.js +│ ├── Product.js +│ └── Transaction.js +│ +├── /utils +│ ├── logger.js +│ ├── validator.js +│ └── encryption.js +│ +├── /public +│ ├── icons +│ ├── banners +│ └── uploads +│ +├── /docs +│ ├── API_PAYMENTS.md +│ ├── INTEGRATION_GUIDE.md +│ └── SECURITY_POLICY.md +│ +└── server.js diff --git a/Governance_Principles.md b/Governance_Principles.md new file mode 100644 index 00000000..a657360d --- /dev/null +++ b/Governance_Principles.md @@ -0,0 +1,47 @@ +# Royal Mix Global — Governance Principles + +Royal Mix Global is governed by intelligence, ethics, and cooperation — +not force, politics, or coercion. + +--- + +## Core Governance Values +- Human dignity +- Freedom of creation +- Responsibility with power +- Transparency by default + +--- + +## Governance Model (V0.2) +- Platform governance, not political governance +- Clear rules, no hidden control +- Human oversight at all times +- AI as advisor, not authority + +--- + +## Moderation Philosophy +- No blanket censorship +- Context-aware moderation +- Community-first resolution +- Safety without silencing + +--- + +## Relationship with States & Institutions +- Infrastructure provider, not competitor +- Neutral technology stance +- Opt-in collaboration only + +--- + +## Trust Model +- Actions build reputation +- Reputation unlocks opportunity +- Abuse reduces access +- No permanent exclusion without cause + +--- + +Royal Mix Global exists to enable cooperation at scale. diff --git a/Monetization_Model_Pi.md b/Monetization_Model_Pi.md new file mode 100644 index 00000000..a0e76319 --- /dev/null +++ b/Monetization_Model_Pi.md @@ -0,0 +1,51 @@ +# Royal Mix Global — π-First Monetization Model (Testnet) + +## Core Rule +Royal Mix Global uses Pi Network utilities only. +No external currencies. No off-platform payments. + +--- + +## Monetization Philosophy +- Value creation before value extraction +- Trust over capital +- Participation over speculation + +--- + +## Revenue Flows (Testnet) + +### 1. Creator Rewards +- Content creation +- Community moderation +- Design, writing, media + +### 2. Micro-Tasks & Jobs +- AI-assisted task matching +- Reputation-based access +- Transparent reward logic + +### 3. Community Services +- Local services discovery +- Digital skills exchange +- Cooperative models + +--- + +## What is Explicitly Disabled +- Fiat payments +- Crypto bridges +- Speculation mechanics +- Gambling or financial promises + +--- + +## Compliance +- Pi SDK authentication only +- Pi transactions only +- Full auditability +- User consent required + +--- + +Monetization exists to reward contribution — not extract value. diff --git a/PI_AI_STUDIO_BACKEND_TASKS.md b/PI_AI_STUDIO_BACKEND_TASKS.md new file mode 100644 index 00000000..6df17733 --- /dev/null +++ b/PI_AI_STUDIO_BACKEND_TASKS.md @@ -0,0 +1,15 @@ +# Pi AI Studio Backend Responsibilities + +## Must Be Implemented as Real Logic + +1. Wallet balance must update only after confirmed transaction +2. Pi payments must use Pi SDK (Testnet first) +3. Orders change to PAID only after payment confirmation +4. Tax must be calculated per real transaction +5. Ledger entries must be written for every financial event +6. Government service requests must follow approval workflow +7. Agent commissions must be auto-calculated +8. Fraud detection scoring must run on transactions +9. Analytics data must be generated from real DB activity + +Fake balances or simulated payments are NOT allowed. diff --git a/Path: config/pi_domain_verification.txt Content: _pi-domain-verification cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f TTL: 300 b/Path: config/pi_domain_verification.txt Content: _pi-domain-verification cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f TTL: 300 new file mode 100644 index 00000000..3801ec05 --- /dev/null +++ b/Path: config/pi_domain_verification.txt Content: _pi-domain-verification cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f TTL: 300 @@ -0,0 +1 @@ +cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/npm run dev" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/npm run dev" new file mode 100644 index 00000000..11f233a1 --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/npm run dev" @@ -0,0 +1,15 @@ +--- + +## 3️⃣ Documentation paths + +**Folder:** `docs/` +**Files & commit messages:** + +| File | Commit message | +|------|----------------| +| `V0.2_Roadmap.md` | `docs: add V0.2 roadmap with Royal AI + monetization` | +| `Royal_AI_Concept.md` | `docs: add Royal AI concept documentation` | +| `Monetization_Model_Pi.md` | `docs: add Pi monetization model` | +| `Governance_Principles.md` | `docs: add governance principles` | + +**Example folder structure on GitHub:** diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" new file mode 100644 index 00000000..f0d85792 --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" @@ -0,0 +1,20 @@ +**Content (copy-paste):** +```markdown +# Testnet Submission Form - Royal Mix Global + +**App Name:** Royal Mix Global +**Network:** Testnet +**URL:** https://royal-mix-global.onrender.com +**Development URL:** https://royal-mix-global.onrender.com + +**Features:** +- Pi SDK login only +- Pi-exclusive transactions +- Royal AI moderation +- Monetization in Pi +- Governance principles in place + +**Validation Key Path:** frontend/public/validation-key.txt + +**Additional Notes:** +This submission is ready for Testnet review. All docs, previews, and validation key are included. diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" new file mode 100644 index 00000000..f0d85792 --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" @@ -0,0 +1,20 @@ +**Content (copy-paste):** +```markdown +# Testnet Submission Form - Royal Mix Global + +**App Name:** Royal Mix Global +**Network:** Testnet +**URL:** https://royal-mix-global.onrender.com +**Development URL:** https://royal-mix-global.onrender.com + +**Features:** +- Pi SDK login only +- Pi-exclusive transactions +- Royal AI moderation +- Monetization in Pi +- Governance principles in place + +**Validation Key Path:** frontend/public/validation-key.txt + +**Additional Notes:** +This submission is ready for Testnet review. All docs, previews, and validation key are included. diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" new file mode 100644 index 00000000..83371aff --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/docs/\342\224\234\342\224\200 V0.2_Roadmap.md \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\224\342\224\200 Governance_Principles.md" @@ -0,0 +1,6 @@ +--- + +## 4️⃣ Review form for Testnet + +**Path:** `review_form/Testnet_Submission_Form.md` +**Commit message:** diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/npm run dev" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/npm run dev" new file mode 100644 index 00000000..5fdd18ff --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/npm run dev" @@ -0,0 +1 @@ +npm install diff --git "a/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/\342\224\202 \342\224\224\342\224\200 Testnet_Submission_Form.md" "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/\342\224\202 \342\224\224\342\224\200 Testnet_Submission_Form.md" new file mode 100644 index 00000000..2435affe --- /dev/null +++ "b/RoyalMix/demo/ \342\224\234\342\224\200 README.md \342\224\234\342\224\200 docs/ \342\224\202 \342\224\234\342\224\200 V0.2_Roadmap.md \342\224\202 \342\224\234\342\224\200 Royal_AI_Concept.md \342\224\202 \342\224\234\342\224\200 Monetization_Model_Pi.md \342\224\202 \342\224\224\342\224\200 Governance_Principles.md \342\224\234\342\224\200 frontend/public/ \342\224\202 \342\224\224\342\224\200 validation-key.txt \342\224\234\342\224\200 review_form/\342\224\202 \342\224\224\342\224\200 Testnet_Submission_Form.md" @@ -0,0 +1,22 @@ +# Royal Mix Global + +Royal Mix Global is a utility platform powering creators, businesses, and communities with secure services, jobs, media, and Pi transactions. Built on the Pi Network Testnet, this app leverages: + +- **Royal AI**: AI-powered moderation and creative utilities +- **Pi-first monetization**: User rewards and Pi-based payments +- **Decentralized governance**: Community-driven principles and decision-making + +## Documentation +See detailed docs in `/docs`: +- V0.2_Roadmap.md +- Royal_AI_Concept.md +- Monetization_Model_Pi.md +- Governance_Principles.md + +## Getting Started + +### Sandbox Development +1. Clone the repo: + ```bash + git clone https://github.com/RoyalMix/demo.git + cd demo diff --git a/RoyalMix/demo/frontend/public b/RoyalMix/demo/frontend/public new file mode 100644 index 00000000..3801ec05 --- /dev/null +++ b/RoyalMix/demo/frontend/public @@ -0,0 +1 @@ +cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git a/Royal_AI_Concept.md b/Royal_AI_Concept.md new file mode 100644 index 00000000..5bcf5a9f --- /dev/null +++ b/Royal_AI_Concept.md @@ -0,0 +1,48 @@ +# Royal AI — Sovereign Creative Intelligence Engine + +Royal AI is the intelligence layer of Royal Mix Global. +It is not a chatbot. It is not an assistant. +It is an orchestration engine. + +--- + +## Purpose +- Empower humans, not replace them +- Coordinate creators, builders, and communities +- Transform trust into opportunity +- Enable Africa to export intelligence, not raw data + +--- + +## Core Principles +- Human–AI co-creation +- Transparency by design +- Safety over speed +- Context over generic output + +--- + +## Capabilities (V0.2) +- Creative assistance (text, ideas, structure) +- Task coordination & guidance +- Opportunity discovery +- Risk & clarity prompts +- Adaptive intelligence levels + +--- + +## What Royal AI Does NOT Do +- No political control +- No censorship engine +- No surveillance +- No autonomous decision-making + +--- + +## Positioning +Royal AI acts as: +- Brain → not ruler +- Guide → not authority +- Infrastructure → not platform lock-in + +“When the network thinks, it thinks through people.” diff --git a/SUPER_DATABASE_ARCHITECTURE.md b/SUPER_DATABASE_ARCHITECTURE.md new file mode 100644 index 00000000..63a86b3d --- /dev/null +++ b/SUPER_DATABASE_ARCHITECTURE.md @@ -0,0 +1,54 @@ +# Royal Mix Global — Super Database Architecture + +## Core Databases + +### 1. Main Relational Database (PostgreSQL) +Stores operational data. + +Tables: +- users (citizens, businesses, agents) +- wallets +- wallet_transactions +- products +- orders +- order_items +- merchant_profiles +- properties +- leases +- rent_payments + +### 2. Financial Ledger Database (Immutable) +Stores double-entry financial records. + +Tables: +- ledger_entries +(transaction_id, debit_account, credit_account, amount, currency, hash, timestamp) + +Purpose: +- Financial audit trail +- Tax verification +- Future blockchain anchoring + +### 3. Analytics & AI Database +Used for dashboards and AI engines. + +Tables: +- user_activity_logs +- transaction_metrics +- marketplace_stats +- agent_performance +- economic_indicators + +### 4. Cache Layer (Redis) +Used for: +- Wallet balances (fast reads) +- Sessions +- OTP codes +- Rate limiting + +### 5. Document Storage +Used for: +- IDs +- Business licenses +- Contracts +- Property documents diff --git a/V0.2_Roadmap.md b/V0.2_Roadmap.md new file mode 100644 index 00000000..eec1d575 --- /dev/null +++ b/V0.2_Roadmap.md @@ -0,0 +1,57 @@ +# Royal Mix Global — V0.2 Roadmap +## From Demo App to Digital Nation Infrastructure + +### Objective +Transition Royal Mix Global from a Pi Demo-based app into an Africa-first, +globally scalable intelligent platform powered by Royal AI. + +--- + +## Phase V0.2 — Intelligence & Utility (Testnet Safe) + +### Core Goals +- Introduce Royal AI as a creative & coordination engine +- Enable π-first monetization (testnet only) +- Prove trust, usefulness, and adoption readiness +- Stay 100% compliant with Pi Network policies + +--- + +## Key Components + +### 1. Royal AI (Light Core) +- AI-assisted creation & decision support +- Context-aware (Africa-first logic) +- Skill-adaptive responses +- Human-in-the-loop by default + +### 2. Monetization (π Testnet) +- Creator micro-rewards +- Verified micro-tasks +- Reputation → opportunity mapping +- No external currency + +### 3. Community Utility +- Jobs & services discovery +- Trust & reputation indicators +- Creator and builder dashboards + +--- + +## What V0.2 is NOT +- Not a government system +- Not a financial institution +- Not autonomous governance +- Not mainnet monetization + +--- + +## Success Metrics +- Stable Pi SDK authentication +- Successful testnet transactions +- Positive user retention +- Clear upgrade path to V0.3+ + +--- + +Royal Mix Global evolves carefully — power through intelligence, not force. diff --git a/action_executor.js b/action_executor.js new file mode 100644 index 00000000..54028a33 --- /dev/null +++ b/action_executor.js @@ -0,0 +1,6 @@ +export class ActionExecutor { + perform(intent, data) { + if (intent === "ORDER_STATUS") return "Your order is 15 minutes away."; + return "How may I assist you?"; + } +} diff --git a/adaptive_layout.js b/adaptive_layout.js new file mode 100644 index 00000000..75bb0fae --- /dev/null +++ b/adaptive_layout.js @@ -0,0 +1,9 @@ +export class AdaptiveLayout { + optimize(userContext) { + return { + fontScale: userContext.age > 45 ? 1.3 : 1.0, + buttonSize: userContext.device === "small" ? "large" : "normal", + layout: userContext.networkSpeed < 2 ? "lite" : "full" + }; + } +} diff --git a/ads-engine /ui AdsDashboard.js CreateAdForm.js AdAnalytics.js AdBilling.js b/ads-engine /ui AdsDashboard.js CreateAdForm.js AdAnalytics.js AdBilling.js new file mode 100644 index 00000000..c0ce820b --- /dev/null +++ b/ads-engine /ui AdsDashboard.js CreateAdForm.js AdAnalytics.js AdBilling.js @@ -0,0 +1,4 @@ +Create ad campaigns +Promote marketplace items +Boost seller visibility +Real-time ad spending reports diff --git a/ads-engine/ai/AdBiddingEngine.js b/ads-engine/ai/AdBiddingEngine.js new file mode 100644 index 00000000..159419ed --- /dev/null +++ b/ads-engine/ai/AdBiddingEngine.js @@ -0,0 +1,4 @@ +AI Logic +Auction system like Facebook/Google +Score = Bid + Relevance + CTR +Highest score wins impression diff --git a/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /ads-manager b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /ads-manager new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /ads-manager @@ -0,0 +1 @@ + diff --git a/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/core/rmix-os AdminConsole.js StaffRoles.js PermissionsMatrix.js b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/core/rmix-os AdminConsole.js StaffRoles.js PermissionsMatrix.js new file mode 100644 index 00000000..0cefd812 --- /dev/null +++ b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/core/rmix-os AdminConsole.js StaffRoles.js PermissionsMatrix.js @@ -0,0 +1,4 @@ +⚙️ Features +Permission-based access control +Department workflow automation +Internal communication channels diff --git a/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js new file mode 100644 index 00000000..c78b87da --- /dev/null +++ b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js @@ -0,0 +1,5 @@ +Key Features +Pi payments automatic payout +Mobile money settlements +Ledger reconciliations +Failed payout retries diff --git a/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js new file mode 100644 index 00000000..c78b87da --- /dev/null +++ b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/modules/settlements SettlementEngine.js Ledger.js PayoutScheduler.js WalletSync.js @@ -0,0 +1,5 @@ +Key Features +Pi payments automatic payout +Mobile money settlements +Ledger reconciliations +Failed payout retries diff --git a/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/support supportChatScreen.jsx faqScreen.jsx b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/support supportChatScreen.jsx faqScreen.jsx new file mode 100644 index 00000000..d3771c7c --- /dev/null +++ b/ads-engine/ai/core /gateway /auth /users /payments /pi-sdk /wallet /modules /market /pharmacy /liquor /delivery /fleet /inventory /ads /search /fraud /services /logistics-ai /prediction /auto-reorder /supplier-ranking /heatmaps /routing-ai /ui /dashboard /seller-center /driver-center /wallet /services/ai-support ChatFlowEngine.js IntentClassifier.js KnowledgeBase.js EscalationHandler.js /ui/support supportChatScreen.jsx faqScreen.jsx @@ -0,0 +1,6 @@ +AI Logic Summary +Intent classification +Auto-response +Escalation to human agent +Ticket tracking +Voice-to-text diff --git a/ads-engine/ai/notifications EventDispatcher.js PushService.js InAppNotifications.js b/ads-engine/ai/notifications EventDispatcher.js PushService.js InAppNotifications.js new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ads-engine/ai/notifications EventDispatcher.js PushService.js InAppNotifications.js @@ -0,0 +1 @@ + diff --git a/ads-engine/ai/search-engine SearchAPI.js RankingLogic.js AutoSuggest.js b/ads-engine/ai/search-engine SearchAPI.js RankingLogic.js AutoSuggest.js new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ads-engine/ai/search-engine SearchAPI.js RankingLogic.js AutoSuggest.js @@ -0,0 +1 @@ + diff --git a/ads-engine/ai/seller-center Dashboard.js SalesAnalytics.js InventoryView.js AdManager.js b/ads-engine/ai/seller-center Dashboard.js SalesAnalytics.js InventoryView.js AdManager.js new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/ads-engine/ai/seller-center Dashboard.js SalesAnalytics.js InventoryView.js AdManager.js @@ -0,0 +1 @@ + diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 config/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.json \342\224\202 \342\224\234\342\224\200\342\224\200 channels.json \342\224\202 \342\224\224\342\224\200\342\224\200 optimization_rules.json \342\224\202 \342\224\234\342\224\200\342\224\200 core/ \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer.py \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.py \342\224\202 \342\224\234\342\224\200\342\224\200 content_ranker.py \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_engine.py \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\234\342\224\200\342\224\200 ml_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 ranking_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 predictor.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 index.js \342\224\202 \342\224\234\342\224\200\342\224\200 auth.js \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer_routes.js \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_routes.js \342\224\202 \342\224\234\342\224\200\342\224\200 scripts/ \342\224\202 \342\224\234\342\224\200\342\224\200 run_daily.sh \342\224\202 \342\224\234\342\224\200\342\224\200 run_weekly.sh \342\224\202 \342\224\224\342\224\200\342\224\200 clean_cache.sh \342\224\202 \342\224\234\342\224\200\342\224\200 cron/ \342\224\202 \342\224\234\342\224\200\342\224\200 cron_daily.txt \342\224\202 \342\224\224\342\224\200\342\224\200 cron_hourly.txt \342\224\202 \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\234\342\224\200\342\224\200 system.log \342\224\202 \342\224\234\342\224\200\342\224\200 optimization.log \342\224\202 \342\224\224\342\224\200\342\224\200 errors.log \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 ai_system_overview.md \342\224\234\342\224\200\342\224\200 optimization_engine_v2.md \342\224\224\342\224\200\342\224\200 api_documentation.md" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 config/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.json \342\224\202 \342\224\234\342\224\200\342\224\200 channels.json \342\224\202 \342\224\224\342\224\200\342\224\200 optimization_rules.json \342\224\202 \342\224\234\342\224\200\342\224\200 core/ \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer.py \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.py \342\224\202 \342\224\234\342\224\200\342\224\200 content_ranker.py \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_engine.py \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\234\342\224\200\342\224\200 ml_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 ranking_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 predictor.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 index.js \342\224\202 \342\224\234\342\224\200\342\224\200 auth.js \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer_routes.js \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_routes.js \342\224\202 \342\224\234\342\224\200\342\224\200 scripts/ \342\224\202 \342\224\234\342\224\200\342\224\200 run_daily.sh \342\224\202 \342\224\234\342\224\200\342\224\200 run_weekly.sh \342\224\202 \342\224\224\342\224\200\342\224\200 clean_cache.sh \342\224\202 \342\224\234\342\224\200\342\224\200 cron/ \342\224\202 \342\224\234\342\224\200\342\224\200 cron_daily.txt \342\224\202 \342\224\224\342\224\200\342\224\200 cron_hourly.txt \342\224\202 \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\234\342\224\200\342\224\200 system.log \342\224\202 \342\224\234\342\224\200\342\224\200 optimization.log \342\224\202 \342\224\224\342\224\200\342\224\200 errors.log \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 ai_system_overview.md \342\224\234\342\224\200\342\224\200 optimization_engine_v2.md \342\224\224\342\224\200\342\224\200 api_documentation.md" new file mode 100644 index 00000000..f2e73d0c --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 config/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.json \342\224\202 \342\224\234\342\224\200\342\224\200 channels.json \342\224\202 \342\224\224\342\224\200\342\224\200 optimization_rules.json \342\224\202 \342\224\234\342\224\200\342\224\200 core/ \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer.py \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.py \342\224\202 \342\224\234\342\224\200\342\224\200 content_ranker.py \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_engine.py \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\234\342\224\200\342\224\200 ml_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 ranking_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 predictor.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 index.js \342\224\202 \342\224\234\342\224\200\342\224\200 auth.js \342\224\202 \342\224\234\342\224\200\342\224\200 optimizer_routes.js \342\224\202 \342\224\224\342\224\200\342\224\200 analytics_routes.js \342\224\202 \342\224\234\342\224\200\342\224\200 scripts/ \342\224\202 \342\224\234\342\224\200\342\224\200 run_daily.sh \342\224\202 \342\224\234\342\224\200\342\224\200 run_weekly.sh \342\224\202 \342\224\224\342\224\200\342\224\200 clean_cache.sh \342\224\202 \342\224\234\342\224\200\342\224\200 cron/ \342\224\202 \342\224\234\342\224\200\342\224\200 cron_daily.txt \342\224\202 \342\224\224\342\224\200\342\224\200 cron_hourly.txt \342\224\202 \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\234\342\224\200\342\224\200 system.log \342\224\202 \342\224\234\342\224\200\342\224\200 optimization.log \342\224\202 \342\224\224\342\224\200\342\224\200 errors.log \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 ai_system_overview.md \342\224\234\342\224\200\342\224\200 optimization_engine_v2.md \342\224\224\342\224\200\342\224\200 api_documentation.md" @@ -0,0 +1,14 @@ +const express = require("express"); +const app = express(); +const optimizerRoutes = require("./optimizer_routes"); +const analyticsRoutes = require("./analytics_routes"); +const auth = require("./auth"); + +app.use(express.json()); +app.use("/auth", auth); +app.use("/optimizer", optimizerRoutes); +app.use("/analytics", analyticsRoutes); + +app.listen(3000, () => { + console.log("API running on port 3000"); +}); diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/event_queue.js" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/event_queue.js" new file mode 100644 index 00000000..3e3a6fb7 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/event_queue.js" @@ -0,0 +1,10 @@ +const queue = []; + +function addEvent(event) { + queue.push(event); +} +function getNextEvent() { + return queue.shift(); +} + +module.exports = { addEvent, getNextEvent }; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_low_performance.js" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_low_performance.js" new file mode 100644 index 00000000..5685954d --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_low_performance.js" @@ -0,0 +1,4 @@ +module.exports = function(payload) { + console.log("⚠ Low performance detected", payload); + // AI re-optimizes content +}; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_new_content.js" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_new_content.js" new file mode 100644 index 00000000..bf87bf82 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_new_content.js" @@ -0,0 +1,4 @@ +module.exports = function(payload) { + console.log("🆕 New content detected!", payload); + // send to optimization engine +}; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_schedule_tick.js" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_schedule_tick.js" new file mode 100644 index 00000000..493df689 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_schedule_tick.js" @@ -0,0 +1,4 @@ +module.exports = function(payload) { + console.log("⏰ Scheduled event triggered"); + // trigger auto-posting +}; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_trending_detected.js" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_trending_detected.js" new file mode 100644 index 00000000..c787f11b --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/on_trending_detected.js" @@ -0,0 +1,4 @@ +module.exports = function(payload) { + console.log("🔥 Trending opportunity!", payload); + // AI calculates best follow-up post +}; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trigger_rules.json" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trigger_rules.json" new file mode 100644 index 00000000..d3eb017e --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trigger_rules.json" @@ -0,0 +1,6 @@ +{ + "newContent": { "priority": 1 }, + "scheduleTick": { "priority": 2 }, + "trendingDetected": { "priority": 1 }, + "lowPerformance": { "priority": 3 } +} diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 event_trigger_engine.md" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 event_trigger_engine.md" new file mode 100644 index 00000000..a8be586f --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 events/ \342\224\202 \342\224\234\342\224\200\342\224\200 dispatcher.js \342\224\202 \342\224\234\342\224\200\342\224\200 listeners/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_new_content.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_schedule_tick.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 on_trending_detected.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 on_low_performance.js \342\224\202 \342\224\234\342\224\200\342\224\200 queue/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 event_queue.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 workers.js \342\224\202 \342\224\224\342\224\200\342\224\200 rules/ \342\224\202 \342\224\234\342\224\200\342\224\200 trigger_rules.json \342\224\202 \342\224\224\342\224\200\342\224\200 priorities.json \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 event_trigger_engine.md" @@ -0,0 +1,16 @@ +const listeners = { + newContent: require("./listeners/on_new_content"), + schedule: require("./listeners/on_schedule_tick"), + trending: require("./listeners/on_trending_detected"), + lowPerformance: require("./listeners/on_low_performance"), +}; + +function dispatch(eventType, payload) { + if (!listeners[eventType]) { + console.log("Unknown event type:", eventType); + return; + } + listeners[eventType](payload); +} + +module.exports = dispatch; diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Memory Buffer \342\200\224 memory_buffer.py" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Memory Buffer \342\200\224 memory_buffer.py" new file mode 100644 index 00000000..cadb1b87 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Memory Buffer \342\200\224 memory_buffer.py" @@ -0,0 +1,6 @@ +class Memory: + def __init__(self): + self.buffer = [] + + def add(self, state, action, reward): + self.buffer.append((state, action, reward)) diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trend_detector.py" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trend_detector.py" new file mode 100644 index 00000000..dac6265c --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/trend_detector.py" @@ -0,0 +1,4 @@ +def detect_trend(content_metrics): + if content_metrics["velocity"] > 1.7: + return True + return False diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 prediction_engine_v1.md" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 prediction_engine_v1.md" new file mode 100644 index 00000000..57ae50df --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 prediction/ \342\224\202 \342\224\234\342\224\200\342\224\200 predictor.py \342\224\202 \342\224\234\342\224\200\342\224\200 engagement_model.pkl \342\224\202 \342\224\234\342\224\200\342\224\200 time_forecast_model.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 trend_detector.py \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\224\342\224\200\342\224\200 prediction_engine_v1.md" @@ -0,0 +1,15 @@ +import pickle +import numpy as np + +class Predictor: + def __init__(self): + self.engagement = pickle.load(open("engagement_model.pkl", "rb")) + self.time_model = pickle.load(open("time_forecast_model.pkl", "rb")) + + def predict_engagement(self, features): + return self.engagement.predict(np.array([features]))[0] + + def predict_best_time(self, features): + return self.time_model.predict(np.array([features]))[0] + +predictor = Predictor() diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Agent (AI Brain) \342\200\224 agent.py" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Agent (AI Brain) \342\200\224 agent.py" new file mode 100644 index 00000000..fc8d38c7 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Agent (AI Brain) \342\200\224 agent.py" @@ -0,0 +1,11 @@ +class Agent: + def __init__(self, policy_network, value_network): + self.policy = policy_network + self.value = value_network + + def decide_action(self, state): + return self.policy.predict([state])[0] + + def update_policy(self, reward, state): + # Reinforcement learning update cycle + pass diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Reward System \342\200\224 reward_system.py" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Reward System \342\200\224 reward_system.py" new file mode 100644 index 00000000..0a577079 --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Reward System \342\200\224 reward_system.py" @@ -0,0 +1,6 @@ +def calculate_reward(metrics): + reward = 0 + reward += metrics["engagement"] * 2 + reward += metrics["shares"] * 5 + reward -= metrics["drop_rate"] * 3 + return reward diff --git "a/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\202 \342\224\224\342\224\200\342\224\200 reinforcement_engine_v2.md" "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\202 \342\224\224\342\224\200\342\224\200 reinforcement_engine_v2.md" new file mode 100644 index 00000000..bcac836a --- /dev/null +++ "b/ai_automated_posting_system/ \342\224\202 \342\224\234\342\224\200\342\224\200 reinforcement_v2/ \342\224\202 \342\224\234\342\224\200\342\224\200 agent.py \342\224\202 \342\224\234\342\224\200\342\224\200 environment.py \342\224\202 \342\224\234\342\224\200\342\224\200 reward_system.py \342\224\202 \342\224\234\342\224\200\342\224\200 memory_buffer.py \342\224\202 \342\224\234\342\224\200\342\224\200 model/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 policy_network.pkl \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 value_network.pkl \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\202 \342\224\224\342\224\200\342\224\200 reinforcement_engine_v2.md" @@ -0,0 +1,13 @@ +class Environment: + def __init__(self): + self.state = None + + def observe_state(self, metrics): + self.state = [ + metrics["engagement"], + metrics["velocity"], + metrics["audience_growth"], + metrics["posting_time_score"], + metrics["trend_index"] + ] + return self.state diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/analytics analyticsDashboard.jsx b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/analytics analyticsDashboard.jsx new file mode 100644 index 00000000..edb56d42 --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/analytics analyticsDashboard.jsx @@ -0,0 +1,4 @@ +Sales analytics +User heatmaps +Delivery performance +Inventory turnover diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/marketing-ai CampaignGenerator.js UserSegmentation.js PersonalizationEngine.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/marketing-ai CampaignGenerator.js UserSegmentation.js PersonalizationEngine.js new file mode 100644 index 00000000..2b561481 --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/marketing-ai CampaignGenerator.js UserSegmentation.js PersonalizationEngine.js @@ -0,0 +1,3 @@ +Auto-segmentation +Product recommendations +Conversion optimization diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/blockchain-audit AuditTrail.js HashGenerator.js PiChainSync.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/blockchain-audit AuditTrail.js HashGenerator.js PiChainSync.js new file mode 100644 index 00000000..2b2d9c09 --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/blockchain-audit AuditTrail.js HashGenerator.js PiChainSync.js @@ -0,0 +1,3 @@ +Each transaction hashed +Traceable logs +Pi blockchain sync diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/security DeviceFingerprint.js RiskEngine.js BehaviorAnalysis.js GeoMismatchAI.js SIMSwapDetector.js IPReputationCheck.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/security DeviceFingerprint.js RiskEngine.js BehaviorAnalysis.js GeoMismatchAI.js SIMSwapDetector.js IPReputationCheck.js new file mode 100644 index 00000000..288ae35c --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/services/security DeviceFingerprint.js RiskEngine.js BehaviorAnalysis.js GeoMismatchAI.js SIMSwapDetector.js IPReputationCheck.js @@ -0,0 +1,4 @@ +Geo mismatch +VPN detection +SIM swap detection +Behavioral biometrics diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/social-commerce LiveShopping.js GroupShops.js InfluencerTools.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/social-commerce LiveShopping.js GroupShops.js InfluencerTools.js new file mode 100644 index 00000000..7184dee8 --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/modules/social-commerce LiveShopping.js GroupShops.js InfluencerTools.js @@ -0,0 +1,3 @@ +Community groups +Affiliate system +Live product demos diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/translator TranslateService.js LanguageDetector.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/translator TranslateService.js LanguageDetector.js new file mode 100644 index 00000000..5161b52f --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/services/services/translator TranslateService.js LanguageDetector.js @@ -0,0 +1,8 @@ +English +French +Swahili +Kinyarwanda +Kirundi +Bemba +Nyanja +Chinese diff --git a/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/voice-commerce SpeechToOrder.js VoiceIntentParser.js ProductMatcher.js b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/voice-commerce SpeechToOrder.js VoiceIntentParser.js ProductMatcher.js new file mode 100644 index 00000000..ac2a892a --- /dev/null +++ b/analytics ETLProcessor.js DataWarehouse.js MetricsEngine.js /ui/services/voice-commerce SpeechToOrder.js VoiceIntentParser.js ProductMatcher.js @@ -0,0 +1,3 @@ +Voice ordering +Voice payments +Voice search diff --git a/api/auto/cron_jobs.json b/api/auto/cron_jobs.json new file mode 100644 index 00000000..d8eecfb7 --- /dev/null +++ b/api/auto/cron_jobs.json @@ -0,0 +1,5 @@ +{ + "posting_interval_minutes": 30, + "trend_scan_interval_hours": 2, + "optimization_cycle_hours": 6 +} diff --git a/api/auto/post b/api/auto/post new file mode 100644 index 00000000..3b692cd3 --- /dev/null +++ b/api/auto/post @@ -0,0 +1,12 @@ +router.post("/auto/post", async (req, res) => { + const { platform, topic } = req.body; + const caption = buildCaption(topic); + const script = generateScript(topic); + + addToQueue({ + platformAPI: platformSelector(platform), + content: { script, caption } + }); + + res.json({ status: "queued", platform, topic }); +}); diff --git a/backend /frontend /docs /ai-engine /security /backend b/backend /frontend /docs /ai-engine /security /backend new file mode 100644 index 00000000..9cbe7648 --- /dev/null +++ b/backend /frontend /docs /ai-engine /security /backend @@ -0,0 +1,11 @@ +/backend + /src + /config + /routes + /controllers + /middleware + /models + /services + /utils + index.js + package.json diff --git a/backend /frontend /docs /ai-engine /security /docs b/backend /frontend /docs /ai-engine /security /docs new file mode 100644 index 00000000..33a3e7e4 --- /dev/null +++ b/backend /frontend /docs /ai-engine /security /docs @@ -0,0 +1,5 @@ +/docs + API_Documentation.md + Database_Schema.md + Security_Architecture.md + Payment_Flows.md diff --git a/backend /frontend /docs /ai-engine /security /frontend b/backend /frontend /docs /ai-engine /security /frontend new file mode 100644 index 00000000..544ba802 --- /dev/null +++ b/backend /frontend /docs /ai-engine /security /frontend @@ -0,0 +1,7 @@ +/frontend + /src + /screens + /components + /hooks + /context + App.js diff --git a/backend /frontend /docs /ai-engine /security /payments b/backend /frontend /docs /ai-engine /security /payments new file mode 100644 index 00000000..9cbe7648 --- /dev/null +++ b/backend /frontend /docs /ai-engine /security /payments @@ -0,0 +1,11 @@ +/backend + /src + /config + /routes + /controllers + /middleware + /models + /services + /utils + index.js + package.json diff --git a/backend/.env.templete b/backend/.env.templete new file mode 100644 index 00000000..f02771e3 --- /dev/null +++ b/backend/.env.templete @@ -0,0 +1,3 @@ +JWT_SECRET=supersecretkey +DB_URL=mongodb://localhost:27017/royalmix +PI_API_KEY=your_pi_key_here diff --git a/backend/app.js b/backend/app.js new file mode 100644 index 00000000..3f7952cd --- /dev/null +++ b/backend/app.js @@ -0,0 +1,10 @@ +const verificationRoutes = require("./routes/verification"); +app.use("/api/verify", verificationRoutes); +const verificationRoutes = require("./routes/verification"); +app.use("/api/verify", verificationRoutes); +const govDashboard = require("./routes/govDashboard"); +app.use("/api/gov", govDashboard); +const govDashboard = require("./routes/govDashboard"); +const healthRoute = require("./routes/health"); +app.use("/api/gov", govDashboard); +app.use("/api/health", healthRoute); diff --git a/backend/auth.js b/backend/auth.js new file mode 100644 index 00000000..21a426a7 --- /dev/null +++ b/backend/auth.js @@ -0,0 +1,12 @@ +const bcrypt = require("bcrypt"); +const saltRounds = 12; + +// Hash a password +function hashPassword(password) { + return bcrypt.hash(password, saltRounds); +} + +// Verify password +function verifyPassword(password, hash) { + return bcrypt.compare(password, hash); +} diff --git a/backend/backend/config/backend/middleware/auditLog.js b/backend/backend/config/backend/middleware/auditLog.js new file mode 100644 index 00000000..3ecd0bb0 --- /dev/null +++ b/backend/backend/config/backend/middleware/auditLog.js @@ -0,0 +1,8 @@ +const fs = require('fs'); + +function logAction(userId, action, details) { + const log = `${new Date().toISOString()} | ${userId} | ${action} | ${details}\n`; + fs.appendFileSync('logs/audit.log', log); +} + +module.exports = logAction; diff --git a/backend/backend/config/backend/middleware/backend/middleware/backend/payment/verify.js b/backend/backend/config/backend/middleware/backend/middleware/backend/payment/verify.js new file mode 100644 index 00000000..18f8322a --- /dev/null +++ b/backend/backend/config/backend/middleware/backend/middleware/backend/payment/verify.js @@ -0,0 +1,4 @@ +const verifySignature = (payload, signature, publicKey) => { + // implement crypto verification of user payments + return crypto.verify("sha256", Buffer.from(payload), publicKey, signature); +}; diff --git a/backend/backend/config/backend/middleware/backend/middleware/securityHeaders.js b/backend/backend/config/backend/middleware/backend/middleware/securityHeaders.js new file mode 100644 index 00000000..fd61a3bc --- /dev/null +++ b/backend/backend/config/backend/middleware/backend/middleware/securityHeaders.js @@ -0,0 +1,7 @@ +app.use((req, res, next) => { + res.setHeader("X-Frame-Options", "DENY"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.setHeader("X-XSS-Protection", "1; mode=block"); + res.setHeader("Referrer-Policy", "no-referrer"); + next(); +}); diff --git a/backend/backend/config/backend/middleware/frontend/src/deviceCheck.js b/backend/backend/config/backend/middleware/frontend/src/deviceCheck.js new file mode 100644 index 00000000..6bd3f2e2 --- /dev/null +++ b/backend/backend/config/backend/middleware/frontend/src/deviceCheck.js @@ -0,0 +1,5 @@ +function getDeviceFingerprint() { + return navigator.userAgent + navigator.platform + screen.width + screen.height; +} + +export default getDeviceFingerprint; diff --git a/backend/backend/config/backend/middleware/rateLimit.js b/backend/backend/config/backend/middleware/rateLimit.js new file mode 100644 index 00000000..ba95ed73 --- /dev/null +++ b/backend/backend/config/backend/middleware/rateLimit.js @@ -0,0 +1,9 @@ +const rateLimit = require('express-rate-limit'); + +const apiLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: 100, // limit each IP to 100 requests per window + message: 'Too many requests, try again later.', +}); + +module.exports = apiLimiter; diff --git a/backend/backend/config/encryption.js b/backend/backend/config/encryption.js new file mode 100644 index 00000000..42c13f31 --- /dev/null +++ b/backend/backend/config/encryption.js @@ -0,0 +1,19 @@ +const crypto = require("crypto"); +const algorithm = 'aes-256-gcm'; +const key = process.env.ENCRYPTION_KEY; + +function encrypt(text) { + const iv = crypto.randomBytes(16); + const cipher = crypto.createCipheriv(algorithm, key, iv); + let encrypted = cipher.update(text, 'utf8', 'hex'); + encrypted += cipher.final('hex'); + return { iv: iv.toString('hex'), data: encrypted }; +} + +function decrypt(ivHex, data) { + const iv = Buffer.from(ivHex, 'hex'); + const decipher = crypto.createDecipheriv(algorithm, key, iv); + let decrypted = decipher.update(data, 'hex', 'utf8'); + decrypted += decipher.final('utf8'); + return decrypted; +} diff --git a/backend/backend/server/ai-risk/riskController.js b/backend/backend/server/ai-risk/riskController.js new file mode 100644 index 00000000..d60f5b2c --- /dev/null +++ b/backend/backend/server/ai-risk/riskController.js @@ -0,0 +1,17 @@ +exports.analyzeRisk = async (req, res) => { + try { + const sampleData = { + suspiciousTransactions: 12, + taxEvasionRisk: "Medium", + illegalTradeSignals: 3, + anomalyScore: 67 + }; + + res.json({ + status: "Risk analysis complete", + data: sampleData + }); + } catch (error) { + res.status(500).json({ error: "Risk engine failure" }); + } +}; diff --git a/backend/backend/server/ai-risk/riskRoutes.js b/backend/backend/server/ai-risk/riskRoutes.js new file mode 100644 index 00000000..e07b5fac --- /dev/null +++ b/backend/backend/server/ai-risk/riskRoutes.js @@ -0,0 +1,7 @@ +const express = require("express"); +const router = express.Router(); +const { analyzeRisk } = require("./riskController"); + +router.get("/scan", analyzeRisk); + +module.exports = router; diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/README.md b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/README.md new file mode 100644 index 00000000..45f37dcb --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/README.md @@ -0,0 +1,12 @@ +# Royal Mix Global +Africa’s first AI-powered multi-currency wallet with Pi, Crypto, Mobile Money, Bank integrations. + +Features: +- Multi-currency wallet +- Pi payments (internal + mainnet-ready) +- Crypto transfer +- Mobile money integration +- Offline QR payments +- Bank account linking +- POS merchant system +- AI fraud detection diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/bank.routes.js b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/bank.routes.js new file mode 100644 index 00000000..bd1be334 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/bank.routes.js @@ -0,0 +1,3 @@ +router.post("/withdraw", (req, res) => { + res.json({ status: "pending bank approval" }); +}); diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/AI Modules" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/AI Modules" new file mode 100644 index 00000000..7b37cfcb --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/AI Modules" @@ -0,0 +1 @@ +feat(ai): integrate sales prediction and auto-response engine diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Backend Init" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Backend Init" new file mode 100644 index 00000000..ad325bac --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Backend Init" @@ -0,0 +1 @@ +feat(backend): start API structure with routing system diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Database Schema" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Database Schema" new file mode 100644 index 00000000..abd74a5c --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Database Schema" @@ -0,0 +1 @@ +feat(db): add initial database schema for users, agents, products diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Frontend Init" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Frontend Init" new file mode 100644 index 00000000..be8b34e7 --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Frontend Init" @@ -0,0 +1 @@ +feat(frontend): initialize UI components and base layout diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Optimization Pass" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Optimization Pass" new file mode 100644 index 00000000..ab0bf890 --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Optimization Pass" @@ -0,0 +1 @@ +perf: improve load speed and reduce app bundle size diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Security Layer" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Security Layer" new file mode 100644 index 00000000..2c22da19 --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/Security Layer" @@ -0,0 +1 @@ +chore(security): implement auth middleware and token validation diff --git "a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 architecture.md \342\224\234\342\224\200\342\224\200 api-spec.md \342\224\224\342\224\200\342\224\200 security.md" "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 architecture.md \342\224\234\342\224\200\342\224\200 api-spec.md \342\224\224\342\224\200\342\224\200 security.md" new file mode 100644 index 00000000..8b137891 --- /dev/null +++ "b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/backend/src/routes/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 README.md \342\224\234\342\224\200\342\224\200 LICENSE \342\224\234\342\224\200\342\224\200 .gitignore \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\202 \342\224\234\342\224\200\342\224\200 src/ \342\224\202 \342\224\234\342\224\200\342\224\200 components/ \342\224\202 \342\224\234\342\224\200\342\224\200 assets/ \342\224\202 \342\224\224\342\224\200\342\224\200 styles/ \342\224\202 \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 api/ \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\234\342\224\200\342\224\200 middleware/ \342\224\202 \342\224\234\342\224\200\342\224\200 models/ \342\224\202 \342\224\224\342\224\200\342\224\200 services/ \342\224\202 \342\224\234\342\224\200\342\224\200 database/ \342\224\202 \342\224\234\342\224\200\342\224\200 schema.sql \342\224\202 \342\224\224\342\224\200\342\224\200 migrations/ \342\224\202 \342\224\224\342\224\200\342\224\200 docs/\342\224\234\342\224\200\342\224\200 architecture.md \342\224\234\342\224\200\342\224\200 api-spec.md \342\224\224\342\224\200\342\224\200 security.md" @@ -0,0 +1 @@ + diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/mobile-money.routes.js b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/mobile-money.routes.js new file mode 100644 index 00000000..3553a8d0 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/backend/src/routes/mobile-money.routes.js @@ -0,0 +1,3 @@ +router.post("/debit", (req, res) => { + res.json({ status: "processing", gateway: "MTN/Airtel/M-Pesa" }); +}); diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/crypto.routes.js b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/crypto.routes.js new file mode 100644 index 00000000..af2fb760 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/backend/src/routes/crypto.routes.js @@ -0,0 +1,8 @@ +router.post("/create-address", (req, res) => { + return res.json({ address: "0xGeneratedWalletAddress" }); +}); + +router.post("/send", (req, res) => { + const { amount, to } = req.body; + return res.json({ status: "sent", amount, to }); +}); diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/pi.routes.js b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/pi.routes.js new file mode 100644 index 00000000..199db7e3 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/backend/src/routes/pi.routes.js @@ -0,0 +1,15 @@ +import express from "express"; +const router = express.Router(); + +router.post("/link", (req, res) => { + const { pi_username } = req.body; + if (!pi_username) return res.status(400).json({ error: "Missing Pi username" }); + return res.json({ status: "linked", pi_username }); +}); + +router.post("/transfer", (req, res) => { + const { amount, receiver } = req.body; + return res.json({ status: "success", amount, receiver }); +}); + +export default router; diff --git a/backend/backend/src/models/backend/src/models/backend/src/middleware/security.middleware.js b/backend/backend/src/models/backend/src/models/backend/src/middleware/security.middleware.js new file mode 100644 index 00000000..bdc2af89 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/backend/src/middleware/security.middleware.js @@ -0,0 +1,12 @@ +export function deviceSecurity(req, res, next) { + const device = req.headers["user-agent"]; + const ip = req.ip; + + if (!device) return res.status(403).json({ error: "Device not recognized." }); + + // Simple logging for now + console.log("Device:", device); + console.log("IP:", ip); + + next(); +} diff --git a/backend/backend/src/models/backend/src/models/transaction.model.js b/backend/backend/src/models/backend/src/models/transaction.model.js new file mode 100644 index 00000000..dd78b080 --- /dev/null +++ b/backend/backend/src/models/backend/src/models/transaction.model.js @@ -0,0 +1,11 @@ +export default { + id: "UUID", + user_id: "UUID", + type: "send|receive|swap|topup", + amount: 0, + currency: "", + method: "pi|crypto|mobile_money|bank", + status: "pending", + ref: "", + timestamp: Date.now() +}; diff --git a/backend/backend/src/models/wallet.model.js b/backend/backend/src/models/wallet.model.js new file mode 100644 index 00000000..fac8ec2e --- /dev/null +++ b/backend/backend/src/models/wallet.model.js @@ -0,0 +1,8 @@ +export default { + id: "UUID", + user_id: "UUID", + currency: "ZMW|USD|RWF|FBU|PI|USDT|USDC", + balance: 0, + is_primary: false, + created_at: Date.now() +}; diff --git a/backend/config/govConfig.js b/backend/config/govConfig.js new file mode 100644 index 00000000..eb70c435 --- /dev/null +++ b/backend/config/govConfig.js @@ -0,0 +1,8 @@ +module.exports = { + taxRates: { + VAT: 0.16, + serviceTax: 0.05 + }, + ministries: ["Finance", "Transport", "Trade"], + supportedCountries: ["Zambia", "Kenya", "Nigeria"] +}; diff --git a/backend/env.template b/backend/env.template new file mode 100644 index 00000000..a89ca0c6 --- /dev/null +++ b/backend/env.template @@ -0,0 +1,7 @@ +# Royal Mix Environment Template +JWT_SECRET=change_this_secret +DB_URL=mongodb://localhost:27017/royalmix +PI_API_KEY=your_pi_key_here +ENCRYPTION_KEY=royalmix_ultra_secure_key +GOVTECH_API_KEY=secure_govtech_key +INTEGRATION_LAYER_URL=https://api.royalmixglobal.com/integration-layer diff --git a/backend/index.js b/backend/index.js new file mode 100644 index 00000000..b5e4b0ef --- /dev/null +++ b/backend/index.js @@ -0,0 +1,21 @@ +import express from "express"; +import helmet from "helmet"; +import cors from "cors"; +import rateLimit from "express-rate-limit"; + +const app = express(); + +app.use(express.json()); +app.use(helmet()); +app.use(cors()); +app.use(rateLimit({ + windowMs: 15 * 60 * 1000, + max: 100 +})); + +app.get("/", (req, res) => { + res.send("Royal Mix Global Backend Running Securely"); +}); + +const PORT = process.env.PORT || 5000; +app.listen(PORT, () => console.log(`Server running on ${PORT}`)); diff --git a/backend/integration-layer b/backend/integration-layer new file mode 100644 index 00000000..d3f53ad7 --- /dev/null +++ b/backend/integration-layer @@ -0,0 +1,2 @@ +app.use("/integration-layer/govtech", require("./integration-layer/routes/govtech.routes")); +app.use("/integration-layer/payments", require("./integration-layer/routes/payments.routes")); diff --git a/backend/middleware/authMiddleware.js b/backend/middleware/authMiddleware.js new file mode 100644 index 00000000..7c003518 --- /dev/null +++ b/backend/middleware/authMiddleware.js @@ -0,0 +1,14 @@ +const jwt = require("jsonwebtoken"); + +module.exports = function (req, res, next) { + const token = req.headers["authorization"]; + if (!token) return res.status(403).json({ error: "No token provided" }); + + try { + const decoded = jwt.verify(token, process.env.JWT_SECRET); + req.user = decoded; + next(); + } catch { + res.status(401).json({ error: "Invalid token" }); + } +}; diff --git a/backend/middleware/encryption.js b/backend/middleware/encryption.js new file mode 100644 index 00000000..8090b45e --- /dev/null +++ b/backend/middleware/encryption.js @@ -0,0 +1,14 @@ +const crypto = require("crypto"); +const algorithm = "aes-256-cbc"; +const key = crypto.scryptSync(process.env.ENCRYPTION_KEY, "salt", 32); +const iv = Buffer.alloc(16, 0); + +exports.encrypt = (text) => { + const cipher = crypto.createCipheriv(algorithm, key, iv); + return cipher.update(text, "utf8", "hex") + cipher.final("hex"); +}; + +exports.decrypt = (hash) => { + const decipher = crypto.createDecipheriv(algorithm, key, iv); + return decipher.update(hash, "hex", "utf8") + decipher.final("utf8"); +}; diff --git a/backend/middleware/roleMiddleware.js b/backend/middleware/roleMiddleware.js new file mode 100644 index 00000000..05958424 --- /dev/null +++ b/backend/middleware/roleMiddleware.js @@ -0,0 +1,8 @@ +module.exports = (roles) => { + return (req, res, next) => { + if (!roles.includes(req.user.role)) { + return res.status(403).json({ error: "Access denied" }); + } + next(); + }; +}; diff --git a/backend/modules/analytics b/backend/modules/analytics new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/backend/modules/analytics @@ -0,0 +1 @@ + diff --git a/backend/modules/marketplace b/backend/modules/marketplace new file mode 100644 index 00000000..07e54dfe --- /dev/null +++ b/backend/modules/marketplace @@ -0,0 +1,6 @@ +marketplace/ + ├── product.model.js + ├── order.model.js + ├── order.service.js + ├── payment.integration.js + └── tax.integration.js diff --git a/backend/modules/property b/backend/modules/property new file mode 100644 index 00000000..dcdce740 --- /dev/null +++ b/backend/modules/property @@ -0,0 +1,5 @@ +property/ + ├── property.model.js + ├── lease.model.js + ├── rent.service.js + └── rent.tax.integration.js diff --git a/backend/modules/wallet b/backend/modules/wallet new file mode 100644 index 00000000..8ce08071 --- /dev/null +++ b/backend/modules/wallet @@ -0,0 +1,6 @@ +wallet/ + ├── wallet.model.js + ├── transaction.model.js + ├── wallet.service.js + ├── wallet.controller.js + └── ledger.integration.js diff --git a/backend/public/pi-domain-verification.txt b/backend/public/pi-domain-verification.txt new file mode 100644 index 00000000..c0972890 --- /dev/null +++ b/backend/public/pi-domain-verification.txt @@ -0,0 +1 @@ +pi-domain-verification=cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git a/backend/routes/govDashboard.js b/backend/routes/govDashboard.js new file mode 100644 index 00000000..d8ad4131 --- /dev/null +++ b/backend/routes/govDashboard.js @@ -0,0 +1,13 @@ +const express = require("express"); +const router = express.Router(); + +router.get("/stats", (req, res) => { + res.json({ + totalRevenue: 125000, + activeBusinesses: 8421, + topSector: "Retail", + alerts: [] + }); +}); + +module.exports = router; diff --git a/backend/routes/health.js b/backend/routes/health.js new file mode 100644 index 00000000..73ec3f81 --- /dev/null +++ b/backend/routes/health.js @@ -0,0 +1,8 @@ +const express = require("express"); +const router = express.Router(); + +router.get("/", (req, res) => { + res.json({ status: "Royal Mix Global API Running" }); +}); + +module.exports = router; diff --git a/backend/routes/verification.js b/backend/routes/verification.js new file mode 100644 index 00000000..b8c278eb --- /dev/null +++ b/backend/routes/verification.js @@ -0,0 +1,12 @@ +const express = require("express"); +const router = express.Router(); + +router.post("/verify-id", (req, res) => { + res.json({ status: "verified", level: "KYC Level 2" }); +}); + +router.post("/verify-business", (req, res) => { + res.json({ status: "business verified" }); +}); + +module.exports = router; diff --git "a/backend/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 integration-layer/ \342\234\205 (NEW) \342\224\202 \342\224\234\342\224\200\342\224\200 routes/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 agents.routes.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 business.routes.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.controller.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.controller.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 analytics.controller.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 services/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 tax.service.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 ai-analytics.service.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 notification.service.js \342\224\202 \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 config/\342\224\202 \342\224\234\342\224\200\342\224\200 ministries.config.json \342\224\202 \342\224\234\342\224\200\342\224\200 tax-rates.config.json \342\224\202 \342\224\224\342\224\200\342\224\200 agent-zones.config.json" "b/backend/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 integration-layer/ \342\234\205 (NEW) \342\224\202 \342\224\234\342\224\200\342\224\200 routes/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 agents.routes.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 business.routes.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.controller.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.controller.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 analytics.controller.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 services/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 tax.service.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 ai-analytics.service.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 notification.service.js \342\224\202 \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 config/\342\224\202 \342\224\234\342\224\200\342\224\200 ministries.config.json \342\224\202 \342\224\234\342\224\200\342\224\200 tax-rates.config.json \342\224\202 \342\224\224\342\224\200\342\224\200 agent-zones.config.json" new file mode 100644 index 00000000..8b137891 --- /dev/null +++ "b/backend/royal-mix-global/ \342\224\202 \342\224\234\342\224\200\342\224\200 frontend/ \342\224\234\342\224\200\342\224\200 backend/ \342\224\202 \342\224\234\342\224\200\342\224\200 integration-layer/ \342\234\205 (NEW) \342\224\202 \342\224\234\342\224\200\342\224\200 routes/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.routes.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 agents.routes.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 business.routes.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 controllers/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 govtech.controller.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 payments.controller.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 analytics.controller.js \342\224\202 \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 services/ \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 tax.service.js \342\224\202 \342\224\202 \342\224\234\342\224\200\342\224\200 ai-analytics.service.js \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 notification.service.js \342\224\202 \342\224\202 \342\224\202 \342\224\224\342\224\200\342\224\200 config/\342\224\202 \342\224\234\342\224\200\342\224\200 ministries.config.json \342\224\202 \342\224\234\342\224\200\342\224\200 tax-rates.config.json \342\224\202 \342\224\224\342\224\200\342\224\200 agent-zones.config.json" @@ -0,0 +1 @@ + diff --git a/backend/services/agentNetwork.js b/backend/services/agentNetwork.js new file mode 100644 index 00000000..6ac98641 --- /dev/null +++ b/backend/services/agentNetwork.js @@ -0,0 +1,7 @@ +exports.getAgentLocations = () => { + return [ + { city: "Lusaka", agents: 120 }, + { city: "Ndola", agents: 75 }, + { city: "Kitwe", agents: 63 } + ]; +}; diff --git a/backend/services/economicAI.js b/backend/services/economicAI.js new file mode 100644 index 00000000..ba369250 --- /dev/null +++ b/backend/services/economicAI.js @@ -0,0 +1,7 @@ +exports.analyzeEconomy = (transactions) => { + return { + growthTrend: "Positive", + riskAlerts: [], + topSectors: ["Retail", "Agriculture", "Transport"] + }; +}; diff --git a/backend/services/riskEngine.js b/backend/services/riskEngine.js new file mode 100644 index 00000000..5508ff4b --- /dev/null +++ b/backend/services/riskEngine.js @@ -0,0 +1,6 @@ +exports.detectRisk = (transaction) => { + if (transaction.amount > 10000) { + return { risk: "HIGH", reason: "Large transaction" }; + } + return { risk: "LOW" }; +}; diff --git a/backend/services/taxEngine.js b/backend/services/taxEngine.js new file mode 100644 index 00000000..6d72056d --- /dev/null +++ b/backend/services/taxEngine.js @@ -0,0 +1,8 @@ +exports.processTaxPayment = async (user, amount, type) => { + return { + status: "success", + message: `Payment processed for ${type}`, + amount, + timestamp: new Date() + }; +}; diff --git a/caption_builder.js b/caption_builder.js new file mode 100644 index 00000000..a34e0ba9 --- /dev/null +++ b/caption_builder.js @@ -0,0 +1,3 @@ +module.exports = function buildCaption(topic) { + return `🔥 ${topic}\nRoyal Mix Global — AI & Pi Network Revolution for Africa 🌍\n#RoyalMixGlobal #PiNetwork`; +}; diff --git a/cron_manager.js b/cron_manager.js new file mode 100644 index 00000000..f6f4b5c0 --- /dev/null +++ b/cron_manager.js @@ -0,0 +1,7 @@ +const cron = require("node-cron"); +const { processQueue } = require("./posting_queue"); + +cron.schedule("*/30 * * * *", () => { + console.log("[CRON] Processing posting queue..."); + processQueue(); +}); diff --git a/doc/deployment.md b/doc/deployment.md index 95fcf53c..bc0870cf 100644 --- a/doc/deployment.md +++ b/doc/deployment.md @@ -1,3 +1,8 @@ +nano README.md +# add one line: "Auto deploy test OK" +git add README.md +git commit -m "test: trigger automatic deploy" +git push origin main # Pi Platform Demo app: Deployment Guide **Warning: The purpose of this project is to be simple to run, with very few configuration steps. There is no** diff --git a/doc/marketing/AI_Campaign_Structure.md b/doc/marketing/AI_Campaign_Structure.md new file mode 100644 index 00000000..5f2c8ed1 --- /dev/null +++ b/doc/marketing/AI_Campaign_Structure.md @@ -0,0 +1,19 @@ +# Royal Mix Global — AI Marketing Campaign Structure (Africa Focus) + +## Goals +- Dominate Africa digital attention +- Acquire first 5M active users +- Convert 20% into monetized users +- Maximize Pi transactions processed in-app + +## Channels +- TikTok (short-form virality) +- YouTube + Shorts +- Facebook + Instagram (Ads + Reels) +- Telegram (community engagement) +- LinkedIn (B2B partnerships) + +## Technology +- AI content generation +- Pi SDK for transactions +- AI analytics for optimization diff --git a/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/Platform_Strategy.md b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/Platform_Strategy.md new file mode 100644 index 00000000..5358efa3 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/Platform_Strategy.md @@ -0,0 +1,24 @@ +TIKTOK STRATEGY: +- 3–5 videos per day +- Music trending sounds +- Challenges + Duets + +YOUTUBE STRATEGY: +- 3 tutorials/week +- 1 success-story/week +- Shorts 5/day + +FACEBOOK/IG STRATEGY: +- Run 3 ad groups simultaneously +- Target 18–36 age, urban cities +- Use Reels daily + +TELEGRAM STRATEGY: +- Daily updates + incentives +- “Agent earnings of the day” posts +- Private VIP group for top earners + +LINKEDIN STRATEGY: +- Weekly business insights +- Case studies +- Partner announcements diff --git a/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/analytics.js b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/analytics.js new file mode 100644 index 00000000..5e94f1d9 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/analytics.js @@ -0,0 +1,11 @@ +export const trackEvent = (eventName, data = {}) => { + console.log("AI Analytics Event:", eventName, data); + + // Placeholder: integrate with real analytics later + return { + status: "logged", + event: eventName, + payload: data, + timestamp: Date.now() + }; +}; diff --git a/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/content_scheduler.js b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/content_scheduler.js new file mode 100644 index 00000000..9494c3a3 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/content_scheduler.js @@ -0,0 +1,10 @@ +function schedulePost(platform, content, datetime) { + return { + platform, + content, + scheduled_for: datetime, + status: "queued" + }; +} + +module.exports = { schedulePost }; diff --git a/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/docs/marketing/AI_Posting_Calendar.md b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/docs/marketing/AI_Posting_Calendar.md new file mode 100644 index 00000000..0eac0955 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/doc/marketing/templates/doc/marketing/frontend/src/utils/backend/automation/docs/marketing/AI_Posting_Calendar.md @@ -0,0 +1,78 @@ +Week 1 — Awareness Boost (Build Massive Visibility) +TikTok & Reels +3 videos / day +Topics: +"Royal Mix Global ni iki?" +"Uko Agents barunguka buri munsi" +"Pi Payments mu minutes 2" +YouTube +2 tutorials: +How to register +How to earn as an agent +Facebook + Instagram +5 posts/week: +Benefits +Testimonials +Live demos +Telegram +Daily updates +Announce earnings leaderboard +LinkedIn +2 business posts/week: +Africa Digital Economy +Pi Network adoption +📅 Week 2 — Trust & Authority Building +TikTok & Reels +3 videos/day: +Success stories +"Aba agents barungutse $X" +“Pi Payments explained simply” +YouTube +2 live streams: +Q&A +Agent training +Facebook/IG +Run ads: +“Become an Agent” +“Pi Marketplace for Africa” +Telegram +Daily community challenges +Prize: Pi or Royal Mix Global credits +LinkedIn +Publish “Royal Mix Global Mission & Vision” +📅 Week 3 — High-Converting Monetization Push +TikTok & Reels +4 videos/day +Challenges: +#RoyalMixGlobalChallenge +“Earn Pi in 60 seconds” +YouTube +Upload: +Case study 1 +Agent earnings breakdown +Facebook/IG +Conversion Ads: +App installs +Agent onboarding +Telegram +Launch affiliate program +LinkedIn +Partnerships announcement +📅 Week 4 — Retention + Viral Growth +TikTok & Reels +4 videos/day +User-generated content +Duets with big creators +Reaction videos +YouTube +Success Story Compilation +Epic Promo Video Drop +Facebook/IG +Giveaway campaign: +“Invite 5 friends = Win Pi” +Telegram +VIP group for agents +Daily insights +Exclusive tools +LinkedIn +Monthly report: Growth & statistics diff --git a/doc/marketing/doc/marketing/templates/doc/marketing/templates/voice_over_script_v1.txt b/doc/marketing/doc/marketing/templates/doc/marketing/templates/voice_over_script_v1.txt new file mode 100644 index 00000000..c589e154 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/doc/marketing/templates/voice_over_script_v1.txt @@ -0,0 +1,6 @@ +Welcome to Royal Mix Global! +Powered by Pi Network technology. +Secure. Fast. Borderless. +For creators, agents, and entrepreneurs. +Earn more. Grow more. Dominate your market. +Royal Mix Global — Africa’s digital future starts now. diff --git a/doc/marketing/doc/marketing/templates/short_video_script.txt b/doc/marketing/doc/marketing/templates/short_video_script.txt new file mode 100644 index 00000000..d6c1b776 --- /dev/null +++ b/doc/marketing/doc/marketing/templates/short_video_script.txt @@ -0,0 +1,6 @@ +VIDEO TEMPLATE — 15 Seconds + +1. Hook (2s): "Know Royal Mix Global? Africa’s #1 Pi-powered marketplace is here!" +2. Benefit (5s): “Earn, buy, sell, withdraw faster than any app in Africa.” +3. Social proof (3s): “Thousands of agents already earning daily.” +4. CTA (4s): “Download now & start earning instantly!” diff --git a/docAI_Automated_Posting_System b/docAI_Automated_Posting_System new file mode 100644 index 00000000..fd7f74e5 --- /dev/null +++ b/docAI_Automated_Posting_System @@ -0,0 +1,14 @@ +# Royal Mix Global — AI Automated Posting System (V1) + +This system allows fully automated multi-platform posting driven by AI. + +Components: +- Trend detection +- Script generation +- Caption builder +- Multi-platform posting queue +- Scheduler with CRON +- Feedback learning engine + +Outcome: +Royal Mix Global becomes self-marketing and self-optimizing. diff --git a/driver_score.py b/driver_score.py new file mode 100644 index 00000000..c145794c --- /dev/null +++ b/driver_score.py @@ -0,0 +1,6 @@ +class DriverScore: + def evaluate(self, data): + score = 100 + score -= data["late_deliveries"] * 5 + score -= data["speeding"] * 2 + return max(score, 0) diff --git a/escrow_module.js b/escrow_module.js new file mode 100644 index 00000000..bc16713c --- /dev/null +++ b/escrow_module.js @@ -0,0 +1,8 @@ +export class EscrowModule { + hold(paymentId) { + return { status: "held", paymentId }; + } + release(paymentId) { + return { status: "released", paymentId }; + } +} diff --git a/eta_predictor.py b/eta_predictor.py new file mode 100644 index 00000000..c4298761 --- /dev/null +++ b/eta_predictor.py @@ -0,0 +1,5 @@ +import statistics + +class ETAPredictor: + def predict(self, history): + return statistics.mean(history) diff --git "a/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/execution_engine.md _scheduler.js" "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/execution_engine.md _scheduler.js" new file mode 100644 index 00000000..fc90f739 --- /dev/null +++ "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/execution_engine.md _scheduler.js" @@ -0,0 +1,3 @@ +module.exports.schedulePost = function(timestamp, content) { + console.log("🕒 Scheduling post for:", timestamp); +}; diff --git "a/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/executor.js" "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/executor.js" new file mode 100644 index 00000000..3f7342c8 --- /dev/null +++ "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/executor.js" @@ -0,0 +1,3 @@ +module.exports.execute = function(content) { + console.log("🚀 Executing auto-post:", content); +}; diff --git "a/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/failover.js" "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/failover.js" new file mode 100644 index 00000000..0b05834d --- /dev/null +++ "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/failover.js" @@ -0,0 +1,3 @@ +module.exports.handleFailure = function(error) { + console.log("⚠ Failover activated:", error); +}; diff --git "a/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/scheduler.js" "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/scheduler.js" new file mode 100644 index 00000000..fc90f739 --- /dev/null +++ "b/execution_engine/ \342\224\202 \342\224\234\342\224\200\342\224\200 scheduler.js \342\224\234\342\224\200\342\224\200 executor.js \342\224\234\342\224\200\342\224\200 failover.js \342\224\234\342\224\200\342\224\200 logs/ \342\224\202 \342\224\224\342\224\200\342\224\200 execution_logs.json \342\224\224\342\224\200\342\224\200 docs/scheduler.js" @@ -0,0 +1,3 @@ +module.exports.schedulePost = function(timestamp, content) { + console.log("🕒 Scheduling post for:", timestamp); +}; diff --git a/fraud_guard.js b/fraud_guard.js new file mode 100644 index 00000000..44305474 --- /dev/null +++ b/fraud_guard.js @@ -0,0 +1,7 @@ +export class FraudGuard { + evaluate(tx) { + return tx.ip_reputation === "clean" && + tx.sim_swap === false && + tx.geo_match === true; + } +} diff --git "a/frontend/ \342\224\224\342\224\200\342\224\200 public/validation-key.txt" "b/frontend/ \342\224\224\342\224\200\342\224\200 public/validation-key.txt" new file mode 100644 index 00000000..3801ec05 --- /dev/null +++ "b/frontend/ \342\224\224\342\224\200\342\224\200 public/validation-key.txt" @@ -0,0 +1 @@ +cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git "a/frontend/ \342\224\224\342\224\200\342\224\200 public/\342\224\224\342\224\200\342\224\200 validation-key.txt" "b/frontend/ \342\224\224\342\224\200\342\224\200 public/\342\224\224\342\224\200\342\224\200 validation-key.txt" new file mode 100644 index 00000000..3801ec05 --- /dev/null +++ "b/frontend/ \342\224\224\342\224\200\342\224\200 public/\342\224\224\342\224\200\342\224\200 validation-key.txt" @@ -0,0 +1 @@ +cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git a/frontend/public/validation-key.txt b/frontend/public/validation-key.txt new file mode 100644 index 00000000..3801ec05 --- /dev/null +++ b/frontend/public/validation-key.txt @@ -0,0 +1 @@ +cefc3ac44cdbbea470881534ced3b575e61706a7310cd2a60fc242553d9a198c8588944b7df8352ac4806bb89f8584b86c439bd1fcbb1c789e154ce3cb3dc73f diff --git a/frontend/src/core/RoleRouter.js b/frontend/src/core/RoleRouter.js new file mode 100644 index 00000000..bafa076d --- /dev/null +++ b/frontend/src/core/RoleRouter.js @@ -0,0 +1,8 @@ +export function getDashboardByRole(role) { + switch (role) { + case "government": return "/govtech"; + case "agent": return "/agents"; + case "citizen": return "/citizen"; + default: return "/"; + } +} diff --git a/frontend/src/modules/choco/ChocoMarket.js b/frontend/src/modules/choco/ChocoMarket.js new file mode 100644 index 00000000..43a4720d --- /dev/null +++ b/frontend/src/modules/choco/ChocoMarket.js @@ -0,0 +1,10 @@ +import React from "react"; + +export default function ChocoMarket() { + return ( +
Order snacks, beverages & retail goods
+Government Revenue, Taxes, Licenses & Permits
+ +Pi • Mobile Money • Bank
+