From 8be37d3e924c91574e507dba4edca6213a45fa9a Mon Sep 17 00:00:00 2001 From: Arkaprabha Chakraborty Date: Sun, 5 Apr 2026 00:43:23 +0530 Subject: [PATCH] init --- dmtp/README.md | 381 + dmtp/client/.gitignore | 41 + dmtp/client/README.md | 36 + dmtp/client/app/_sections/badge-showcase.tsx | 31 + .../client/app/_sections/feature-showcase.tsx | 74 + dmtp/client/app/_sections/hero-section.tsx | 150 + dmtp/client/app/_sections/how-it-works.tsx | 79 + .../app/_sections/integrations-section.tsx | 78 + .../client/app/_sections/reputation-meter.tsx | 26 + dmtp/client/app/_sections/stats-section.tsx | 37 + dmtp/client/app/_sections/task-examples.tsx | 94 + dmtp/client/app/_sections/testimonials.tsx | 229 + dmtp/client/app/dashboard/page.tsx | 430 + dmtp/client/app/favicon.ico | Bin 0 -> 25931 bytes dmtp/client/app/globals.css | 168 + dmtp/client/app/layout.tsx | 42 + dmtp/client/app/page.tsx | 213 + dmtp/client/app/profile/page.tsx | 165 + .../app/submissions/[submissionId]/page.tsx | 366 + dmtp/client/app/tasks/[taskId]/page.tsx | 310 + .../client/app/tasks/[taskId]/submit/page.tsx | 715 + dmtp/client/app/tasks/page.tsx | 262 + dmtp/client/components.json | 22 + dmtp/client/components/auth/AuthGuard.tsx | 62 + dmtp/client/components/layout/Navbar.tsx | 70 + dmtp/client/components/layout/footer.tsx | 132 + dmtp/client/components/modals/AuthModal.tsx | 64 + .../components/modals/NetworkSwitchModal.tsx | 76 + .../components/modals/TransactionModal.tsx | 70 + dmtp/client/components/tasks/TaskCard.tsx | 65 + dmtp/client/components/theme-provider.tsx | 11 + dmtp/client/components/ui/LoadingSpinner.tsx | 13 + dmtp/client/components/ui/button.tsx | 60 + dmtp/client/components/ui/card.tsx | 92 + .../client/components/wallet/WalletButton.tsx | 102 + dmtp/client/hooks/useAuth.ts | 98 + dmtp/client/hooks/useCUSDBalance.ts | 38 + dmtp/client/hooks/useTaskContract.ts | 123 + dmtp/client/hooks/useTransactions.ts | 52 + dmtp/client/hooks/useWallet.ts | 5 + dmtp/client/hooks/useWalletConnection.ts | 189 + dmtp/client/lib/api.ts | 106 + dmtp/client/lib/auth.ts | 73 + dmtp/client/lib/celo.ts | 66 + dmtp/client/lib/contracts.ts | 49 + dmtp/client/lib/minipay.ts | 57 + dmtp/client/lib/utils.ts | 35 + dmtp/client/next.config.ts | 7 + dmtp/client/package-lock.json | 12385 ++++++++++++++++ dmtp/client/package.json | 42 + dmtp/client/postcss.config.mjs | 7 + dmtp/client/providers/AuthProvider.tsx | 37 + dmtp/client/providers/QueryProvider.tsx | 20 + dmtp/client/public/file.svg | 1 + dmtp/client/public/globe.svg | 1 + dmtp/client/public/next.svg | 1 + dmtp/client/public/vercel.svg | 1 + dmtp/client/public/window.svg | 1 + dmtp/client/tsconfig.json | 44 + dmtp/client/types/index.ts | 66 + dmtp/client_admin/.env.example | 9 + dmtp/client_admin/.gitignore | 5 + dmtp/client_admin/README.md | 32 + dmtp/client_admin/package-lock.json | 953 ++ dmtp/client_admin/package.json | 14 + dmtp/client_admin/src/public/index.html | 449 + dmtp/client_admin/src/server.js | 354 + dmtp/server/.gitignore | 18 + dmtp/server/TROUBLESHOOTING.md | 198 + dmtp/server/approve-cusd.ts | 91 + dmtp/server/check-contract-config.ts | 56 + dmtp/server/check-db.sh | 12 + dmtp/server/check-stalled-job.ts | 66 + dmtp/server/check-tasks-without-contract.ts | 43 + dmtp/server/check-wallet-balance.ts | 36 + dmtp/server/cleanup-old-tasks.ts | 94 + dmtp/server/cleanup-test-data.ts | 48 + dmtp/server/contracts/MockERC20.sol | 12 + dmtp/server/contracts/TaskEscrow.sol | 288 + dmtp/server/create-task-with-blockchain.ts | 132 + dmtp/server/debug-payment.js | 76 + dmtp/server/deploy-test-token.ts | 99 + dmtp/server/diagnose-task-mismatch.ts | 98 + dmtp/server/hardhat.config.ts | 68 + dmtp/server/package-lock.json | 10215 +++++++++++++ dmtp/server/package.json | 66 + dmtp/server/prisma.config.ts | 12 + .../20251026032137_init/migration.sql | 140 + .../prisma/migrations/migration_lock.toml | 3 + dmtp/server/prisma/schema.prisma | 123 + dmtp/server/redeploy-task-escrow.ts | 76 + dmtp/server/scripts/deploy.js | 59 + dmtp/server/scripts/deploy.ts | 72 + dmtp/server/scripts/interact.js | 72 + dmtp/server/scripts/interact.ts | 87 + dmtp/server/seedTasks.ts | 129 + dmtp/server/show-env-info.ts | 99 + dmtp/server/src/app.ts | 64 + dmtp/server/src/config/ai.config.js | 73 + dmtp/server/src/config/ai.config.ts | 81 + dmtp/server/src/config/moderation.config.js | 98 + dmtp/server/src/config/moderation.config.ts | 107 + dmtp/server/src/config/redis.config.js | 95 + dmtp/server/src/config/redis.config.ts | 100 + .../src/controllers/submission.controller.js | 451 + .../server/src/controllers/task.controller.js | 242 + .../server/src/controllers/task.controller.ts | 413 + .../server/src/controllers/user.controller.js | 148 + .../server/src/controllers/user.controller.ts | 165 + dmtp/server/src/dashboard.ts | 22 + dmtp/server/src/database/connections.js | 30 + dmtp/server/src/database/connections.ts | 29 + dmtp/server/src/database/seed.js | 51 + dmtp/server/src/database/seed.ts | 55 + .../server/src/middlewares/auth.middleware.js | 91 + .../server/src/middlewares/auth.middleware.ts | 106 + .../src/middlewares/error.middleware.js | 57 + .../src/middlewares/error.middleware.ts | 86 + .../src/middlewares/rate-limit.middleware.js | 72 + .../src/middlewares/rate-limit.middleware.ts | 94 + .../src/middlewares/validation.middleware.js | 23 + .../src/middlewares/validation.middleware.ts | 23 + dmtp/server/src/queues/indes.ts | 2 + dmtp/server/src/queues/verification.queue.ts | 87 + dmtp/server/src/routes/index.js | 64 + dmtp/server/src/routes/index.ts | 31 + dmtp/server/src/routes/moderation.routes.js | 10 + dmtp/server/src/routes/moderation.routes.ts | 13 + dmtp/server/src/routes/payment.routes.js | 71 + dmtp/server/src/routes/payment.routes.ts | 53 + dmtp/server/src/routes/submission.routes.js | 18 + dmtp/server/src/routes/submission.routes.ts | 44 + dmtp/server/src/routes/task.routes.js | 18 + dmtp/server/src/routes/task.routes.ts | 43 + dmtp/server/src/routes/test.routes.ts | 159 + dmtp/server/src/routes/user.routes.ts | 33 + dmtp/server/src/server.ts | 24 + .../src/services/ai-verification.service.ts | 245 + .../server/src/services/blockchain.service.ts | 318 + dmtp/server/src/services/cache.service.ts | 82 + .../services/content-moderation.service.js | 213 + .../services/content-moderation.service.ts | 264 + dmtp/server/src/services/gemini.service.js | 92 + dmtp/server/src/services/gemini.service.ts | 143 + .../services/moderation-filters.service.js | 87 + .../services/moderation-filters.service.ts | 106 + .../src/services/notification.service.js | 149 + .../src/services/notification.service.ts | 187 + dmtp/server/src/services/payment.service.js | 189 + dmtp/server/src/services/payment.service.ts | 230 + .../services/verification-worker.service.js | 134 + .../services/verification-worker.service.ts | 147 + dmtp/server/src/services/webhook.service.js | 158 + dmtp/server/src/types/ai.types.js | 2 + dmtp/server/src/types/ai.types.ts | 67 + dmtp/server/src/types/api.types.js | 2 + dmtp/server/src/types/api.types.ts | 86 + dmtp/server/src/types/database.types.js | 35 + dmtp/server/src/types/database.types.ts | 153 + dmtp/server/src/types/moderation.types.js | 19 + dmtp/server/src/types/moderation.types.ts | 86 + dmtp/server/src/utils/moderation-logger.js | 132 + dmtp/server/src/utils/moderation-logger.ts | 115 + dmtp/server/src/utils/queue-logger.js | 117 + dmtp/server/src/utils/queue-logger.ts | 95 + dmtp/server/src/utils/rate-limiter.js | 78 + dmtp/server/src/utils/rate-limiter.ts | 94 + dmtp/server/src/utils/response.util.js | 61 + dmtp/server/src/utils/response.util.ts | 77 + dmtp/server/src/utils/retry.js | 49 + dmtp/server/src/utils/retry.ts | 67 + dmtp/server/src/utils/signature.util.js | 41 + dmtp/server/src/utils/signature.util.ts | 46 + .../src/validators/submission.validator.js | 54 + .../src/validators/submission.validator.ts | 63 + dmtp/server/src/validators/task.validator.js | 78 + dmtp/server/src/validators/task.validator.ts | 91 + dmtp/server/src/validators/user.validator.ts | 27 + dmtp/server/src/workers/index.js | 19 + dmtp/server/src/workers/index.ts | 20 + .../server/src/workers/verification.worker.ts | 392 + dmtp/server/test-db-sync.ts | 84 + dmtp/server/test-gemini-json.ts | 45 + dmtp/server/test-queue.ts | 21 + dmtp/server/test-worker-manual.ts | 64 + dmtp/server/test-worker.ts | 70 + dmtp/server/test/TaskEscrow.test.js | 243 + dmtp/server/test/TaskEscrow.test.ts | 359 + dmtp/server/test/ai-verification.test.js | 100 + dmtp/server/test/ai-verification.test.ts | 132 + dmtp/server/test/content-moderation.test.js | 173 + dmtp/server/test/content-moderation.test.ts | 214 + dmtp/server/tsconfig.json | 16 + negot8/.env.example | 54 + negot8/.gitignore | 46 + negot8/README.md | 816 + negot8/SETUP.md | 138 + negot8/backend/agents/__init__.py | 0 negot8/backend/agents/base_agent.py | 57 + negot8/backend/agents/matching_agent.py | 111 + negot8/backend/agents/negotiation.py | 125 + negot8/backend/agents/negotiator_agent.py | 97 + negot8/backend/agents/personal_agent.py | 51 + negot8/backend/api.py | 491 + negot8/backend/blockchain_web3/__init__.py | 1 + negot8/backend/blockchain_web3/blockchain.py | 210 + .../backend/blockchain_web3/contract_abi.py | 67 + negot8/backend/config.py | 25 + negot8/backend/database.py | 568 + negot8/backend/features/__init__.py | 3 + negot8/backend/features/base_feature.py | 65 + negot8/backend/features/collaborative.py | 121 + negot8/backend/features/conflict.py | 104 + negot8/backend/features/expenses.py | 114 + negot8/backend/features/freelance.py | 142 + negot8/backend/features/generic.py | 62 + negot8/backend/features/marketplace.py | 119 + negot8/backend/features/roommate.py | 123 + negot8/backend/features/scheduling.py | 148 + negot8/backend/features/trip.py | 338 + negot8/backend/mock/__init__.py | 2 + negot8/backend/mock/responses.py | 171 + negot8/backend/personality/__init__.py | 0 negot8/backend/personality/profiles.py | 45 + negot8/backend/protocol/messages.py | 24 + negot8/backend/run.py | 323 + negot8/backend/serve.py | 31 + negot8/backend/telegram-bots/__init__.py | 0 negot8/backend/telegram-bots/bot.py | 1718 +++ negot8/backend/test_eof | 1 + negot8/backend/tools/calculator.py | 19 + negot8/backend/tools/google_calendar.py | 279 + negot8/backend/tools/pdf_generator.py | 513 + negot8/backend/tools/tavily_search.py | 25 + negot8/backend/tools/upi_generator.py | 16 + negot8/backend/voice/elevenlabs_tts.py | 52 + negot8/contracts/AgreementRegistry.sol | 53 + negot8/contracts/deploy.py | 81 + negot8/dashboard/.gitignore | 41 + negot8/dashboard/README.md | 36 + negot8/dashboard/app/analytics/page.tsx | 376 + negot8/dashboard/app/dashboard/page.tsx | 462 + negot8/dashboard/app/docs/page.tsx | 413 + negot8/dashboard/app/favicon.ico | Bin 0 -> 25931 bytes negot8/dashboard/app/globals.css | 114 + negot8/dashboard/app/history/page.tsx | 293 + negot8/dashboard/app/layout.tsx | 43 + .../dashboard/app/negotiation/[id]/page.tsx | 335 + .../app/negotiation/[id]/resolved/page.tsx | 353 + negot8/dashboard/app/page.tsx | 474 + negot8/dashboard/app/preferences/page.tsx | 351 + negot8/dashboard/app/profile/page.tsx | 188 + .../components/ConcessionTimeline.tsx | 71 + negot8/dashboard/components/FairnessScore.tsx | 65 + .../components/NegotiationTimeline.tsx | 161 + .../dashboard/components/ResolutionCard.tsx | 184 + .../components/SatisfactionChart.tsx | 96 + negot8/dashboard/components/Sidebar.tsx | 87 + negot8/dashboard/lib/api.ts | 19 + negot8/dashboard/lib/socket.ts | 37 + negot8/dashboard/lib/types.ts | 104 + negot8/dashboard/lib/utils.ts | 86 + negot8/dashboard/next.config.ts | 14 + negot8/dashboard/package-lock.json | 2195 +++ negot8/dashboard/package.json | 26 + negot8/dashboard/postcss.config.mjs | 7 + negot8/dashboard/public/file.svg | 1 + negot8/dashboard/public/globe.svg | 1 + negot8/dashboard/public/next.svg | 1 + negot8/dashboard/public/vercel.svg | 1 + negot8/dashboard/public/window.svg | 1 + negot8/dashboard/tsconfig.json | 34 + negot8/docs/build-guide-new.md | 3004 ++++ negot8/docs/milestone.md | 1595 ++ negot8/docs/negoT8_Blockchain_Guide.md | 446 + negot8/docs/new-milestone.md | 1880 +++ negot8/docs/web3-milestone-revised (1).md | 1330 ++ negot8/requirements.txt | 52 + negot8/test/bot_runner_test.py | 112 + negot8/test/test_apis.py | 47 + negot8/test/test_milestone4.py | 327 + negot8/test/test_milestone5_all.py | 412 + negot8/test/test_negotiation.py | 59 + negot8/test/test_pdf_generator.py | 281 + negot8/test/test_pending_flow.py | 269 + negot8/test/test_personal_agent.py | 37 + negot8/test/test_telegram.py | 19 + negot8/test/test_tools.py | 26 + thirdeye/.gitignore | 40 + thirdeye/README.md | 996 ++ thirdeye/backend/agents/classifier.py | 34 + thirdeye/backend/agents/context_detector.py | 107 + .../backend/agents/cross_group_analyst.py | 287 + thirdeye/backend/agents/document_ingestor.py | 200 + thirdeye/backend/agents/jira_agent.py | 373 + thirdeye/backend/agents/json_utils.py | 43 + thirdeye/backend/agents/link_fetcher.py | 213 + thirdeye/backend/agents/meet_cross_ref.py | 188 + thirdeye/backend/agents/meet_ingestor.py | 342 + thirdeye/backend/agents/pattern_detector.py | 114 + thirdeye/backend/agents/query_agent.py | 68 + thirdeye/backend/agents/signal_extractor.py | 128 + thirdeye/backend/agents/voice_handler.py | 281 + thirdeye/backend/agents/voice_transcriber.py | 194 + thirdeye/backend/agents/web_search.py | 84 + thirdeye/backend/api/routes.py | 785 + thirdeye/backend/bot/bot.py | 1500 ++ thirdeye/backend/bot/commands.py | 150 + thirdeye/backend/config.py | 62 + thirdeye/backend/db/chroma.py | 279 + thirdeye/backend/db/embeddings.py | 67 + thirdeye/backend/db/models.py | 57 + thirdeye/backend/integrations/__init__.py | 0 thirdeye/backend/integrations/jira_client.py | 346 + thirdeye/backend/pipeline.py | 288 + thirdeye/backend/providers.py | 177 + thirdeye/dashboard/.gitignore | 41 + thirdeye/dashboard/README.md | 36 + thirdeye/dashboard/app/agents/AgentCards.tsx | 208 + thirdeye/dashboard/app/agents/AgentStats.tsx | 104 + .../dashboard/app/agents/SystemTicker.tsx | 30 + thirdeye/dashboard/app/agents/agents.css | 82 + thirdeye/dashboard/app/agents/page.tsx | 75 + thirdeye/dashboard/app/chats/page.tsx | 714 + .../dashboard/app/components/InsightHero.tsx | 121 + .../app/components/IntelligenceTicker.tsx | 45 + .../dashboard/app/components/LiveSignals.tsx | 85 + .../app/components/MaterialSymbols.tsx | 18 + .../dashboard/app/components/MetricTiles.tsx | 62 + thirdeye/dashboard/app/components/Sidebar.tsx | 129 + thirdeye/dashboard/app/components/TopBar.tsx | 82 + thirdeye/dashboard/app/favicon.ico | Bin 0 -> 25931 bytes thirdeye/dashboard/app/globals.css | 469 + .../app/intelligence/IntelFooter.tsx | 28 + .../app/intelligence/IntelligenceCards.tsx | 318 + .../app/intelligence/KnowledgeMesh.tsx | 87 + .../app/intelligence/ThoughtStreams.tsx | 86 + .../app/intelligence/intelligence.css | 49 + thirdeye/dashboard/app/intelligence/page.tsx | 107 + thirdeye/dashboard/app/jira/page.tsx | 924 ++ .../app/knowledge-base/EntityPanel.tsx | 242 + .../app/knowledge-base/FloatingControls.tsx | 76 + .../app/knowledge-base/KnowledgeBrowser.tsx | 548 + .../app/knowledge-base/NetworkMap.tsx | 610 + .../app/knowledge-base/RightPanelTabs.tsx | 45 + .../knowledge-base/SystemTickerKnowledge.tsx | 73 + .../app/knowledge-base/knowledge.css | 59 + .../dashboard/app/knowledge-base/page.tsx | 42 + thirdeye/dashboard/app/layout.tsx | 26 + thirdeye/dashboard/app/lib/api.ts | 437 + thirdeye/dashboard/app/logs/EventDetails.tsx | 38 + thirdeye/dashboard/app/logs/LogAnalytics.tsx | 32 + thirdeye/dashboard/app/logs/LogTable.tsx | 135 + .../dashboard/app/logs/MasterTerminal.tsx | 28 + .../dashboard/app/logs/SystemTickerLogs.tsx | 20 + thirdeye/dashboard/app/logs/logs.css | 90 + thirdeye/dashboard/app/logs/page.tsx | 42 + thirdeye/dashboard/app/meetings/page.tsx | 533 + thirdeye/dashboard/app/mission/page.tsx | 348 + thirdeye/dashboard/app/page.tsx | 514 + thirdeye/dashboard/next.config.ts | 18 + thirdeye/dashboard/package-lock.json | 1707 +++ thirdeye/dashboard/package.json | 24 + thirdeye/dashboard/postcss.config.mjs | 7 + thirdeye/dashboard/public/file.svg | 1 + thirdeye/dashboard/public/globe.svg | 1 + thirdeye/dashboard/public/new-logo.png | Bin 0 -> 713602 bytes thirdeye/dashboard/public/next.svg | 1 + thirdeye/dashboard/public/thirdeye-logo.svg | 14 + thirdeye/dashboard/public/vercel.svg | 1 + thirdeye/dashboard/public/window.svg | 1 + thirdeye/dashboard/tsconfig.json | 34 + thirdeye/docs/BATCHING_CONFIG.md | 204 + thirdeye/docs/TESTING_WITH_MEET_TELEGRAM.md | 510 + thirdeye/docs/Voice_milestones.md | 1506 ++ thirdeye/docs/additional.md | 1622 ++ thirdeye/docs/implementation.md | 2129 +++ thirdeye/docs/jira_milestones.md | 2039 +++ thirdeye/docs/meet_extension.md | 2372 +++ thirdeye/docs/sot.md | 1522 ++ thirdeye/meet_extension/background.js | 7 + thirdeye/meet_extension/content.js | 255 + thirdeye/meet_extension/icon128.png | Bin 0 -> 70 bytes thirdeye/meet_extension/icon16.png | Bin 0 -> 70 bytes thirdeye/meet_extension/icon48.png | Bin 0 -> 70 bytes thirdeye/meet_extension/manifest.json | 33 + thirdeye/meet_extension/popup.html | 144 + thirdeye/meet_extension/popup.js | 109 + thirdeye/meet_extension/test.py | 11 + thirdeye/package-lock.json | 227 + thirdeye/package.json | 9 + thirdeye/requirements.txt | 15 + thirdeye/run_all.py | 62 + thirdeye/run_api.py | 8 + thirdeye/run_bot.py | 9 + thirdeye/scripts/clear_db.py | 59 + thirdeye/scripts/clear_db_advanced.py | 194 + thirdeye/scripts/debug_meet.py | 84 + thirdeye/scripts/debug_signals.py | 62 + thirdeye/scripts/seed_demo.py | 109 + thirdeye/scripts/test_m0.py | 36 + thirdeye/scripts/test_m1.py | 56 + thirdeye/scripts/test_m11.py | 237 + thirdeye/scripts/test_m12.py | 131 + thirdeye/scripts/test_m13.py | 229 + thirdeye/scripts/test_m14.py | 157 + thirdeye/scripts/test_m15.py | 245 + thirdeye/scripts/test_m16.py | 198 + thirdeye/scripts/test_m17.py | 184 + thirdeye/scripts/test_m18.py | 206 + thirdeye/scripts/test_m19.py | 246 + thirdeye/scripts/test_m2.py | 110 + thirdeye/scripts/test_m20.py | 132 + thirdeye/scripts/test_m21.py | 144 + thirdeye/scripts/test_m22.py | 232 + thirdeye/scripts/test_m3.py | 73 + thirdeye/scripts/test_m4.py | 56 + thirdeye/scripts/test_m5.py | 77 + thirdeye/scripts/test_m6_precheck.py | 23 + thirdeye/stitch_agents.html | 440 + thirdeye/stitch_dashboard.html | 296 + thirdeye/stitch_intelligence.html | 348 + thirdeye/stitch_knowledge.html | 422 + thirdeye/stitch_logs.html | 514 + thirdeye/test_ollama.py | 44 + 425 files changed, 101853 insertions(+) create mode 100644 dmtp/README.md create mode 100644 dmtp/client/.gitignore create mode 100644 dmtp/client/README.md create mode 100644 dmtp/client/app/_sections/badge-showcase.tsx create mode 100644 dmtp/client/app/_sections/feature-showcase.tsx create mode 100644 dmtp/client/app/_sections/hero-section.tsx create mode 100644 dmtp/client/app/_sections/how-it-works.tsx create mode 100644 dmtp/client/app/_sections/integrations-section.tsx create mode 100644 dmtp/client/app/_sections/reputation-meter.tsx create mode 100644 dmtp/client/app/_sections/stats-section.tsx create mode 100644 dmtp/client/app/_sections/task-examples.tsx create mode 100644 dmtp/client/app/_sections/testimonials.tsx create mode 100644 dmtp/client/app/dashboard/page.tsx create mode 100644 dmtp/client/app/favicon.ico create mode 100644 dmtp/client/app/globals.css create mode 100644 dmtp/client/app/layout.tsx create mode 100644 dmtp/client/app/page.tsx create mode 100644 dmtp/client/app/profile/page.tsx create mode 100644 dmtp/client/app/submissions/[submissionId]/page.tsx create mode 100644 dmtp/client/app/tasks/[taskId]/page.tsx create mode 100644 dmtp/client/app/tasks/[taskId]/submit/page.tsx create mode 100644 dmtp/client/app/tasks/page.tsx create mode 100644 dmtp/client/components.json create mode 100644 dmtp/client/components/auth/AuthGuard.tsx create mode 100644 dmtp/client/components/layout/Navbar.tsx create mode 100644 dmtp/client/components/layout/footer.tsx create mode 100644 dmtp/client/components/modals/AuthModal.tsx create mode 100644 dmtp/client/components/modals/NetworkSwitchModal.tsx create mode 100644 dmtp/client/components/modals/TransactionModal.tsx create mode 100644 dmtp/client/components/tasks/TaskCard.tsx create mode 100644 dmtp/client/components/theme-provider.tsx create mode 100644 dmtp/client/components/ui/LoadingSpinner.tsx create mode 100644 dmtp/client/components/ui/button.tsx create mode 100644 dmtp/client/components/ui/card.tsx create mode 100644 dmtp/client/components/wallet/WalletButton.tsx create mode 100644 dmtp/client/hooks/useAuth.ts create mode 100644 dmtp/client/hooks/useCUSDBalance.ts create mode 100644 dmtp/client/hooks/useTaskContract.ts create mode 100644 dmtp/client/hooks/useTransactions.ts create mode 100644 dmtp/client/hooks/useWallet.ts create mode 100644 dmtp/client/hooks/useWalletConnection.ts create mode 100644 dmtp/client/lib/api.ts create mode 100644 dmtp/client/lib/auth.ts create mode 100644 dmtp/client/lib/celo.ts create mode 100644 dmtp/client/lib/contracts.ts create mode 100644 dmtp/client/lib/minipay.ts create mode 100644 dmtp/client/lib/utils.ts create mode 100644 dmtp/client/next.config.ts create mode 100644 dmtp/client/package-lock.json create mode 100644 dmtp/client/package.json create mode 100644 dmtp/client/postcss.config.mjs create mode 100644 dmtp/client/providers/AuthProvider.tsx create mode 100644 dmtp/client/providers/QueryProvider.tsx create mode 100644 dmtp/client/public/file.svg create mode 100644 dmtp/client/public/globe.svg create mode 100644 dmtp/client/public/next.svg create mode 100644 dmtp/client/public/vercel.svg create mode 100644 dmtp/client/public/window.svg create mode 100644 dmtp/client/tsconfig.json create mode 100644 dmtp/client/types/index.ts create mode 100644 dmtp/client_admin/.env.example create mode 100644 dmtp/client_admin/.gitignore create mode 100644 dmtp/client_admin/README.md create mode 100644 dmtp/client_admin/package-lock.json create mode 100644 dmtp/client_admin/package.json create mode 100644 dmtp/client_admin/src/public/index.html create mode 100644 dmtp/client_admin/src/server.js create mode 100644 dmtp/server/.gitignore create mode 100644 dmtp/server/TROUBLESHOOTING.md create mode 100644 dmtp/server/approve-cusd.ts create mode 100644 dmtp/server/check-contract-config.ts create mode 100644 dmtp/server/check-db.sh create mode 100644 dmtp/server/check-stalled-job.ts create mode 100644 dmtp/server/check-tasks-without-contract.ts create mode 100644 dmtp/server/check-wallet-balance.ts create mode 100644 dmtp/server/cleanup-old-tasks.ts create mode 100644 dmtp/server/cleanup-test-data.ts create mode 100644 dmtp/server/contracts/MockERC20.sol create mode 100644 dmtp/server/contracts/TaskEscrow.sol create mode 100644 dmtp/server/create-task-with-blockchain.ts create mode 100644 dmtp/server/debug-payment.js create mode 100644 dmtp/server/deploy-test-token.ts create mode 100644 dmtp/server/diagnose-task-mismatch.ts create mode 100644 dmtp/server/hardhat.config.ts create mode 100644 dmtp/server/package-lock.json create mode 100644 dmtp/server/package.json create mode 100644 dmtp/server/prisma.config.ts create mode 100644 dmtp/server/prisma/migrations/20251026032137_init/migration.sql create mode 100644 dmtp/server/prisma/migrations/migration_lock.toml create mode 100644 dmtp/server/prisma/schema.prisma create mode 100644 dmtp/server/redeploy-task-escrow.ts create mode 100644 dmtp/server/scripts/deploy.js create mode 100644 dmtp/server/scripts/deploy.ts create mode 100644 dmtp/server/scripts/interact.js create mode 100644 dmtp/server/scripts/interact.ts create mode 100644 dmtp/server/seedTasks.ts create mode 100644 dmtp/server/show-env-info.ts create mode 100644 dmtp/server/src/app.ts create mode 100644 dmtp/server/src/config/ai.config.js create mode 100644 dmtp/server/src/config/ai.config.ts create mode 100644 dmtp/server/src/config/moderation.config.js create mode 100644 dmtp/server/src/config/moderation.config.ts create mode 100644 dmtp/server/src/config/redis.config.js create mode 100644 dmtp/server/src/config/redis.config.ts create mode 100644 dmtp/server/src/controllers/submission.controller.js create mode 100644 dmtp/server/src/controllers/task.controller.js create mode 100644 dmtp/server/src/controllers/task.controller.ts create mode 100644 dmtp/server/src/controllers/user.controller.js create mode 100644 dmtp/server/src/controllers/user.controller.ts create mode 100644 dmtp/server/src/dashboard.ts create mode 100644 dmtp/server/src/database/connections.js create mode 100644 dmtp/server/src/database/connections.ts create mode 100644 dmtp/server/src/database/seed.js create mode 100644 dmtp/server/src/database/seed.ts create mode 100644 dmtp/server/src/middlewares/auth.middleware.js create mode 100644 dmtp/server/src/middlewares/auth.middleware.ts create mode 100644 dmtp/server/src/middlewares/error.middleware.js create mode 100644 dmtp/server/src/middlewares/error.middleware.ts create mode 100644 dmtp/server/src/middlewares/rate-limit.middleware.js create mode 100644 dmtp/server/src/middlewares/rate-limit.middleware.ts create mode 100644 dmtp/server/src/middlewares/validation.middleware.js create mode 100644 dmtp/server/src/middlewares/validation.middleware.ts create mode 100644 dmtp/server/src/queues/indes.ts create mode 100644 dmtp/server/src/queues/verification.queue.ts create mode 100644 dmtp/server/src/routes/index.js create mode 100644 dmtp/server/src/routes/index.ts create mode 100644 dmtp/server/src/routes/moderation.routes.js create mode 100644 dmtp/server/src/routes/moderation.routes.ts create mode 100644 dmtp/server/src/routes/payment.routes.js create mode 100644 dmtp/server/src/routes/payment.routes.ts create mode 100644 dmtp/server/src/routes/submission.routes.js create mode 100644 dmtp/server/src/routes/submission.routes.ts create mode 100644 dmtp/server/src/routes/task.routes.js create mode 100644 dmtp/server/src/routes/task.routes.ts create mode 100644 dmtp/server/src/routes/test.routes.ts create mode 100644 dmtp/server/src/routes/user.routes.ts create mode 100644 dmtp/server/src/server.ts create mode 100644 dmtp/server/src/services/ai-verification.service.ts create mode 100644 dmtp/server/src/services/blockchain.service.ts create mode 100644 dmtp/server/src/services/cache.service.ts create mode 100644 dmtp/server/src/services/content-moderation.service.js create mode 100644 dmtp/server/src/services/content-moderation.service.ts create mode 100644 dmtp/server/src/services/gemini.service.js create mode 100644 dmtp/server/src/services/gemini.service.ts create mode 100644 dmtp/server/src/services/moderation-filters.service.js create mode 100644 dmtp/server/src/services/moderation-filters.service.ts create mode 100644 dmtp/server/src/services/notification.service.js create mode 100644 dmtp/server/src/services/notification.service.ts create mode 100644 dmtp/server/src/services/payment.service.js create mode 100644 dmtp/server/src/services/payment.service.ts create mode 100644 dmtp/server/src/services/verification-worker.service.js create mode 100644 dmtp/server/src/services/verification-worker.service.ts create mode 100644 dmtp/server/src/services/webhook.service.js create mode 100644 dmtp/server/src/types/ai.types.js create mode 100644 dmtp/server/src/types/ai.types.ts create mode 100644 dmtp/server/src/types/api.types.js create mode 100644 dmtp/server/src/types/api.types.ts create mode 100644 dmtp/server/src/types/database.types.js create mode 100644 dmtp/server/src/types/database.types.ts create mode 100644 dmtp/server/src/types/moderation.types.js create mode 100644 dmtp/server/src/types/moderation.types.ts create mode 100644 dmtp/server/src/utils/moderation-logger.js create mode 100644 dmtp/server/src/utils/moderation-logger.ts create mode 100644 dmtp/server/src/utils/queue-logger.js create mode 100644 dmtp/server/src/utils/queue-logger.ts create mode 100644 dmtp/server/src/utils/rate-limiter.js create mode 100644 dmtp/server/src/utils/rate-limiter.ts create mode 100644 dmtp/server/src/utils/response.util.js create mode 100644 dmtp/server/src/utils/response.util.ts create mode 100644 dmtp/server/src/utils/retry.js create mode 100644 dmtp/server/src/utils/retry.ts create mode 100644 dmtp/server/src/utils/signature.util.js create mode 100644 dmtp/server/src/utils/signature.util.ts create mode 100644 dmtp/server/src/validators/submission.validator.js create mode 100644 dmtp/server/src/validators/submission.validator.ts create mode 100644 dmtp/server/src/validators/task.validator.js create mode 100644 dmtp/server/src/validators/task.validator.ts create mode 100644 dmtp/server/src/validators/user.validator.ts create mode 100644 dmtp/server/src/workers/index.js create mode 100644 dmtp/server/src/workers/index.ts create mode 100644 dmtp/server/src/workers/verification.worker.ts create mode 100644 dmtp/server/test-db-sync.ts create mode 100644 dmtp/server/test-gemini-json.ts create mode 100644 dmtp/server/test-queue.ts create mode 100644 dmtp/server/test-worker-manual.ts create mode 100644 dmtp/server/test-worker.ts create mode 100644 dmtp/server/test/TaskEscrow.test.js create mode 100644 dmtp/server/test/TaskEscrow.test.ts create mode 100644 dmtp/server/test/ai-verification.test.js create mode 100644 dmtp/server/test/ai-verification.test.ts create mode 100644 dmtp/server/test/content-moderation.test.js create mode 100644 dmtp/server/test/content-moderation.test.ts create mode 100644 dmtp/server/tsconfig.json create mode 100644 negot8/.env.example create mode 100644 negot8/.gitignore create mode 100644 negot8/README.md create mode 100644 negot8/SETUP.md create mode 100644 negot8/backend/agents/__init__.py create mode 100644 negot8/backend/agents/base_agent.py create mode 100644 negot8/backend/agents/matching_agent.py create mode 100644 negot8/backend/agents/negotiation.py create mode 100644 negot8/backend/agents/negotiator_agent.py create mode 100644 negot8/backend/agents/personal_agent.py create mode 100644 negot8/backend/api.py create mode 100644 negot8/backend/blockchain_web3/__init__.py create mode 100644 negot8/backend/blockchain_web3/blockchain.py create mode 100644 negot8/backend/blockchain_web3/contract_abi.py create mode 100644 negot8/backend/config.py create mode 100644 negot8/backend/database.py create mode 100644 negot8/backend/features/__init__.py create mode 100644 negot8/backend/features/base_feature.py create mode 100644 negot8/backend/features/collaborative.py create mode 100644 negot8/backend/features/conflict.py create mode 100644 negot8/backend/features/expenses.py create mode 100644 negot8/backend/features/freelance.py create mode 100644 negot8/backend/features/generic.py create mode 100644 negot8/backend/features/marketplace.py create mode 100644 negot8/backend/features/roommate.py create mode 100644 negot8/backend/features/scheduling.py create mode 100644 negot8/backend/features/trip.py create mode 100644 negot8/backend/mock/__init__.py create mode 100644 negot8/backend/mock/responses.py create mode 100644 negot8/backend/personality/__init__.py create mode 100644 negot8/backend/personality/profiles.py create mode 100644 negot8/backend/protocol/messages.py create mode 100644 negot8/backend/run.py create mode 100644 negot8/backend/serve.py create mode 100644 negot8/backend/telegram-bots/__init__.py create mode 100644 negot8/backend/telegram-bots/bot.py create mode 100644 negot8/backend/test_eof create mode 100644 negot8/backend/tools/calculator.py create mode 100644 negot8/backend/tools/google_calendar.py create mode 100644 negot8/backend/tools/pdf_generator.py create mode 100644 negot8/backend/tools/tavily_search.py create mode 100644 negot8/backend/tools/upi_generator.py create mode 100644 negot8/backend/voice/elevenlabs_tts.py create mode 100644 negot8/contracts/AgreementRegistry.sol create mode 100644 negot8/contracts/deploy.py create mode 100644 negot8/dashboard/.gitignore create mode 100644 negot8/dashboard/README.md create mode 100644 negot8/dashboard/app/analytics/page.tsx create mode 100644 negot8/dashboard/app/dashboard/page.tsx create mode 100644 negot8/dashboard/app/docs/page.tsx create mode 100644 negot8/dashboard/app/favicon.ico create mode 100644 negot8/dashboard/app/globals.css create mode 100644 negot8/dashboard/app/history/page.tsx create mode 100644 negot8/dashboard/app/layout.tsx create mode 100644 negot8/dashboard/app/negotiation/[id]/page.tsx create mode 100644 negot8/dashboard/app/negotiation/[id]/resolved/page.tsx create mode 100644 negot8/dashboard/app/page.tsx create mode 100644 negot8/dashboard/app/preferences/page.tsx create mode 100644 negot8/dashboard/app/profile/page.tsx create mode 100644 negot8/dashboard/components/ConcessionTimeline.tsx create mode 100644 negot8/dashboard/components/FairnessScore.tsx create mode 100644 negot8/dashboard/components/NegotiationTimeline.tsx create mode 100644 negot8/dashboard/components/ResolutionCard.tsx create mode 100644 negot8/dashboard/components/SatisfactionChart.tsx create mode 100644 negot8/dashboard/components/Sidebar.tsx create mode 100644 negot8/dashboard/lib/api.ts create mode 100644 negot8/dashboard/lib/socket.ts create mode 100644 negot8/dashboard/lib/types.ts create mode 100644 negot8/dashboard/lib/utils.ts create mode 100644 negot8/dashboard/next.config.ts create mode 100644 negot8/dashboard/package-lock.json create mode 100644 negot8/dashboard/package.json create mode 100644 negot8/dashboard/postcss.config.mjs create mode 100644 negot8/dashboard/public/file.svg create mode 100644 negot8/dashboard/public/globe.svg create mode 100644 negot8/dashboard/public/next.svg create mode 100644 negot8/dashboard/public/vercel.svg create mode 100644 negot8/dashboard/public/window.svg create mode 100644 negot8/dashboard/tsconfig.json create mode 100644 negot8/docs/build-guide-new.md create mode 100644 negot8/docs/milestone.md create mode 100644 negot8/docs/negoT8_Blockchain_Guide.md create mode 100644 negot8/docs/new-milestone.md create mode 100644 negot8/docs/web3-milestone-revised (1).md create mode 100644 negot8/requirements.txt create mode 100644 negot8/test/bot_runner_test.py create mode 100644 negot8/test/test_apis.py create mode 100644 negot8/test/test_milestone4.py create mode 100644 negot8/test/test_milestone5_all.py create mode 100644 negot8/test/test_negotiation.py create mode 100644 negot8/test/test_pdf_generator.py create mode 100644 negot8/test/test_pending_flow.py create mode 100644 negot8/test/test_personal_agent.py create mode 100644 negot8/test/test_telegram.py create mode 100644 negot8/test/test_tools.py create mode 100644 thirdeye/.gitignore create mode 100644 thirdeye/README.md create mode 100644 thirdeye/backend/agents/classifier.py create mode 100644 thirdeye/backend/agents/context_detector.py create mode 100644 thirdeye/backend/agents/cross_group_analyst.py create mode 100644 thirdeye/backend/agents/document_ingestor.py create mode 100644 thirdeye/backend/agents/jira_agent.py create mode 100644 thirdeye/backend/agents/json_utils.py create mode 100644 thirdeye/backend/agents/link_fetcher.py create mode 100644 thirdeye/backend/agents/meet_cross_ref.py create mode 100644 thirdeye/backend/agents/meet_ingestor.py create mode 100644 thirdeye/backend/agents/pattern_detector.py create mode 100644 thirdeye/backend/agents/query_agent.py create mode 100644 thirdeye/backend/agents/signal_extractor.py create mode 100644 thirdeye/backend/agents/voice_handler.py create mode 100644 thirdeye/backend/agents/voice_transcriber.py create mode 100644 thirdeye/backend/agents/web_search.py create mode 100644 thirdeye/backend/api/routes.py create mode 100644 thirdeye/backend/bot/bot.py create mode 100644 thirdeye/backend/bot/commands.py create mode 100644 thirdeye/backend/config.py create mode 100644 thirdeye/backend/db/chroma.py create mode 100644 thirdeye/backend/db/embeddings.py create mode 100644 thirdeye/backend/db/models.py create mode 100644 thirdeye/backend/integrations/__init__.py create mode 100644 thirdeye/backend/integrations/jira_client.py create mode 100644 thirdeye/backend/pipeline.py create mode 100644 thirdeye/backend/providers.py create mode 100644 thirdeye/dashboard/.gitignore create mode 100644 thirdeye/dashboard/README.md create mode 100644 thirdeye/dashboard/app/agents/AgentCards.tsx create mode 100644 thirdeye/dashboard/app/agents/AgentStats.tsx create mode 100644 thirdeye/dashboard/app/agents/SystemTicker.tsx create mode 100644 thirdeye/dashboard/app/agents/agents.css create mode 100644 thirdeye/dashboard/app/agents/page.tsx create mode 100644 thirdeye/dashboard/app/chats/page.tsx create mode 100644 thirdeye/dashboard/app/components/InsightHero.tsx create mode 100644 thirdeye/dashboard/app/components/IntelligenceTicker.tsx create mode 100644 thirdeye/dashboard/app/components/LiveSignals.tsx create mode 100644 thirdeye/dashboard/app/components/MaterialSymbols.tsx create mode 100644 thirdeye/dashboard/app/components/MetricTiles.tsx create mode 100644 thirdeye/dashboard/app/components/Sidebar.tsx create mode 100644 thirdeye/dashboard/app/components/TopBar.tsx create mode 100644 thirdeye/dashboard/app/favicon.ico create mode 100644 thirdeye/dashboard/app/globals.css create mode 100644 thirdeye/dashboard/app/intelligence/IntelFooter.tsx create mode 100644 thirdeye/dashboard/app/intelligence/IntelligenceCards.tsx create mode 100644 thirdeye/dashboard/app/intelligence/KnowledgeMesh.tsx create mode 100644 thirdeye/dashboard/app/intelligence/ThoughtStreams.tsx create mode 100644 thirdeye/dashboard/app/intelligence/intelligence.css create mode 100644 thirdeye/dashboard/app/intelligence/page.tsx create mode 100644 thirdeye/dashboard/app/jira/page.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/EntityPanel.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/FloatingControls.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/KnowledgeBrowser.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/NetworkMap.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/RightPanelTabs.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/SystemTickerKnowledge.tsx create mode 100644 thirdeye/dashboard/app/knowledge-base/knowledge.css create mode 100644 thirdeye/dashboard/app/knowledge-base/page.tsx create mode 100644 thirdeye/dashboard/app/layout.tsx create mode 100644 thirdeye/dashboard/app/lib/api.ts create mode 100644 thirdeye/dashboard/app/logs/EventDetails.tsx create mode 100644 thirdeye/dashboard/app/logs/LogAnalytics.tsx create mode 100644 thirdeye/dashboard/app/logs/LogTable.tsx create mode 100644 thirdeye/dashboard/app/logs/MasterTerminal.tsx create mode 100644 thirdeye/dashboard/app/logs/SystemTickerLogs.tsx create mode 100644 thirdeye/dashboard/app/logs/logs.css create mode 100644 thirdeye/dashboard/app/logs/page.tsx create mode 100644 thirdeye/dashboard/app/meetings/page.tsx create mode 100644 thirdeye/dashboard/app/mission/page.tsx create mode 100644 thirdeye/dashboard/app/page.tsx create mode 100644 thirdeye/dashboard/next.config.ts create mode 100644 thirdeye/dashboard/package-lock.json create mode 100644 thirdeye/dashboard/package.json create mode 100644 thirdeye/dashboard/postcss.config.mjs create mode 100644 thirdeye/dashboard/public/file.svg create mode 100644 thirdeye/dashboard/public/globe.svg create mode 100644 thirdeye/dashboard/public/new-logo.png create mode 100644 thirdeye/dashboard/public/next.svg create mode 100644 thirdeye/dashboard/public/thirdeye-logo.svg create mode 100644 thirdeye/dashboard/public/vercel.svg create mode 100644 thirdeye/dashboard/public/window.svg create mode 100644 thirdeye/dashboard/tsconfig.json create mode 100644 thirdeye/docs/BATCHING_CONFIG.md create mode 100644 thirdeye/docs/TESTING_WITH_MEET_TELEGRAM.md create mode 100644 thirdeye/docs/Voice_milestones.md create mode 100644 thirdeye/docs/additional.md create mode 100644 thirdeye/docs/implementation.md create mode 100644 thirdeye/docs/jira_milestones.md create mode 100644 thirdeye/docs/meet_extension.md create mode 100644 thirdeye/docs/sot.md create mode 100644 thirdeye/meet_extension/background.js create mode 100644 thirdeye/meet_extension/content.js create mode 100644 thirdeye/meet_extension/icon128.png create mode 100644 thirdeye/meet_extension/icon16.png create mode 100644 thirdeye/meet_extension/icon48.png create mode 100644 thirdeye/meet_extension/manifest.json create mode 100644 thirdeye/meet_extension/popup.html create mode 100644 thirdeye/meet_extension/popup.js create mode 100644 thirdeye/meet_extension/test.py create mode 100644 thirdeye/package-lock.json create mode 100644 thirdeye/package.json create mode 100644 thirdeye/requirements.txt create mode 100644 thirdeye/run_all.py create mode 100644 thirdeye/run_api.py create mode 100644 thirdeye/run_bot.py create mode 100644 thirdeye/scripts/clear_db.py create mode 100644 thirdeye/scripts/clear_db_advanced.py create mode 100644 thirdeye/scripts/debug_meet.py create mode 100644 thirdeye/scripts/debug_signals.py create mode 100644 thirdeye/scripts/seed_demo.py create mode 100644 thirdeye/scripts/test_m0.py create mode 100644 thirdeye/scripts/test_m1.py create mode 100644 thirdeye/scripts/test_m11.py create mode 100644 thirdeye/scripts/test_m12.py create mode 100644 thirdeye/scripts/test_m13.py create mode 100644 thirdeye/scripts/test_m14.py create mode 100644 thirdeye/scripts/test_m15.py create mode 100644 thirdeye/scripts/test_m16.py create mode 100644 thirdeye/scripts/test_m17.py create mode 100644 thirdeye/scripts/test_m18.py create mode 100644 thirdeye/scripts/test_m19.py create mode 100644 thirdeye/scripts/test_m2.py create mode 100644 thirdeye/scripts/test_m20.py create mode 100644 thirdeye/scripts/test_m21.py create mode 100644 thirdeye/scripts/test_m22.py create mode 100644 thirdeye/scripts/test_m3.py create mode 100644 thirdeye/scripts/test_m4.py create mode 100644 thirdeye/scripts/test_m5.py create mode 100644 thirdeye/scripts/test_m6_precheck.py create mode 100644 thirdeye/stitch_agents.html create mode 100644 thirdeye/stitch_dashboard.html create mode 100644 thirdeye/stitch_intelligence.html create mode 100644 thirdeye/stitch_knowledge.html create mode 100644 thirdeye/stitch_logs.html create mode 100644 thirdeye/test_ollama.py diff --git a/dmtp/README.md b/dmtp/README.md new file mode 100644 index 0000000..f1cbf63 --- /dev/null +++ b/dmtp/README.md @@ -0,0 +1,381 @@ +# 🪙 D.M.T.P — Agentic AI-Verified Micro-Task Platform on Celo Blockchain + +An **AI-powered decentralized task Platform** built on **Celo Sepolia Testnet**, where requesters post micro-tasks, workers complete them, AI verifies the results, and **payments are automatically released in cUSD** upon approval. + +--- + +## 📋 Table of Contents + +- [Overview](#-overview) +- [Tech Stack](#️-tech-stack) +- [AI Integration](#-ai-integration-google-gemini-15-pro) +- [Database Schema](#️-database-schema-core-entities) +- [Folder Structure](#-folder-structure) +- [Setup Guide](#️-setup-guide) +- [Smart Contract Deployment](#-smart-contract-deployment) +- [Workflow](#-workflow) +- [API Examples](#-example-api-calls) +- [Architecture](#-architecture-diagram) +- [Features](#-features-checklist) +- [Testing](#-testing) +- [Deployment](#-deployment) +- [Future Roadmap](#-future-roadmap) +- [License](#-license) + +--- + +## ⚡ Overview + +**D.M.T.P** introduces verifiable trust between micro-task requesters and workers. AI moderation (powered by **Google Gemini**) ensures submissions are **authentic and high-quality**, while the **TaskEscrow smart contract** on **Celo** guarantees transparent, secure on-chain payments. + +### Key Features + +- 🤖 **AI-Powered Verification** — Automated content moderation using Google Gemini +- ⛓️ **Blockchain Escrow** — Smart contract-based payment security +- 💰 **Instant Payments** — Automatic cUSD release upon task approval +- 🔐 **Wallet Authentication** — Secure login via MetaMask or MiniPay +- 📊 **Real-Time Updates** — Live task and submission status tracking +- 🎯 **Quality Control** — AI prevents spam, fraud, and low-effort submissions + +--- + +## 🛠️ Tech Stack + +### 🖥️ Frontend — Next.js (App Router) + +| Feature | Library/Framework | +| ------------------ | --------------------------------------------------- | +| UI Components | [shadcn/ui](https://ui.shadcn.com) | +| Styling | [TailwindCSS](https://tailwindcss.com) | +| State Management | [Zustand](https://zustand-demo.pmnd.rs) | +| Data Fetching | [TanStack Query](https://tanstack.com/query/v5) | +| Wallet Integration | [wagmi](https://wagmi.sh) + [viem](https://viem.sh) | +| Blockchain SDK | [@celo/contractkit](https://docs.celo.org/) | +| Wallets Supported | **MiniPay** and **MetaMask** | +| AI Moderation | [Google Gemini 1.5](https://ai.google.dev/gemini-api/) | + +### ⚙️ Backend — Express.js + TypeScript + +| Feature | Technology | +| ----------------- | ------------------------------------------ | +| Framework | Express.js | +| Database | PostgreSQL + Prisma ORM | +| Job Queue | Bull + Redis | +| AI Verification | Gemini API | +| Blockchain | Celo Sepolia | +| Authentication | Wallet Signature (EIP-191) | +| File Verification | cUSD Escrow via TaskEscrow.sol | +| Notifications | Background service + WebSocket placeholder | + +### ⛓️ Blockchain — Celo Sepolia Testnet + +- **Smart Contract:** `TaskEscrow.sol` + - Holds task payments in escrow + - Releases funds when AI-verified + - Refunds requester if submissions are rejected +- **Token:** `cUSD` (Stablecoin) +- **Network RPC:** https://forno.celo-sepolia.celo-testnet.org +- **Explorer:** [CeloScan (Sepolia)](https://sepolia.celoscan.io) + +--- + +## 🤖 AI Integration (Google Gemini 2.5 Pro) + +Used for: + +- ✅ Spam, fraud, and duplicate prevention +- ✅ Toxic or low-effort content rejection +- ✅ Criteria-based submission scoring + +Gemini runs asynchronously in a **Bull Queue worker**, sending results via webhook to approve or reject submissions. + +--- + +## 🗄️ Database Schema (Core Entities) + +| Table | Description | +| ----------------------- | ---------------------------------------------------------------------------------- | +| **users** | Stores wallet addresses, roles (`requester` / `worker`), reputation & earnings | +| **tasks** | Contains task metadata, blockchain taskID, payment amount, expiry | +| **submissions** | Tracks worker submissions, AI verification results | +| **payments** | Logs payment releases (+txHash) | +| **notifications** | In-app notifications for verification or payment updates | + +--- + +## 💎 Folder Structure + +``` +D.M.T.P/ +├── client/ # Next.js frontend +│ ├── app/ # App Router pages +│ ├── components/ # shadcn + custom UI +│ ├── hooks/ # Zustand + wagmi hooks +│ ├── lib/ # API client + Celo utils +│ └── types/ # Shared TypeScript models +│ +└── server/ # Express backend + ├── src/ + │ ├── routes/ # /api/v1 tasks, submissions, users + │ ├── controllers/ # Request handlers + │ ├── services/ # AI, blockchain, queue, moderation + │ ├── workers/ # Bull verification worker + │ └── database/ # Prisma schema + migrations + └── prisma/ +``` + +--- + +## ⚙️ Setup Guide + +### Prerequisites + +- ✅ Node.js >= 20 +- ✅ npm >= 9 +- ✅ Redis (running locally or hosted) +- ✅ PostgreSQL database +- ✅ Celo wallet with test cUSD + +### 1️⃣ Environment Variables + +#### `.env` (Backend) + +```env +# Server +PORT=3001 +NODE_ENV=development + +# Database +DATABASE_URL="postgresql://user:password@localhost:5432/D.M.T.P" + +# Blockchain +PRIVATE_KEY=YOUR_PRIVATE_KEY_WITH_CUSD +CELO_RPC_URL=https://forno.celo-sepolia.celo-testnet.org +CONTRACT_ADDRESS=0xYourTaskEscrowAddress +CUSD_SEPOLIA_ADDRESS=0x874069fa1eb16d44d622f2e0ca25eea172369bc1 + +# AI (Gemini) +GEMINI_API_KEY=your_google_gemini_api_key + +# Redis +REDIS_HOST=localhost +REDIS_PORT=6379 +``` + +#### `.env.local` (Frontend) + +```env +NEXT_PUBLIC_API_URL=http://localhost:3001 +NEXT_PUBLIC_CELO_RPC_URL=https://forno.celo-sepolia.celo-testnet.org +NEXT_PUBLIC_CUSD_ADDRESS=0x874069fa1eb16d44d622f2e0ca25eea172369bc1 +NEXT_PUBLIC_CONTRACT_ADDRESS=0xYourTaskEscrowAddress +NEXT_PUBLIC_CHAIN_ID=44787 +``` + +### 2️⃣ Backend Setup + +```bash +cd server +npm install + +# Prisma setup + migrate +npx prisma generate +npx prisma db push + +# Start Redis (using Docker) +docker run -d -p 6379:6379 redis:alpine + +# Start backend in dev mode +npm run dev +``` + +### 3️⃣ Frontend Setup + +```bash +cd client +npm install +npm run dev +``` + +Visit → [http://localhost:3000](http://localhost:3000) + +--- + +## 💰 Smart Contract Deployment + +### Our Deployed Smart Contract- [0xa520d207c91C0FE0e9cFe8D63AbE02fd18B2254e](https://sepolia.celoscan.io/address/0xa520d207c91c0fe0e9cfe8d63abe02fd18b2254e) +Deploy `TaskEscrow.sol` on **Celo Sepolia** using Remix or Hardhat. + +### Compile & Deploy + +```bash +npx hardhat run scripts/deploy.ts --network celo-sepolia +``` + +### Verify Contract + +```bash +npx hardhat verify --network celo-sepolia 0xYourContractAddress "0x874069fa1eb16d44d622f2e0ca25eea172369bc1" +``` + +--- + +## 🧠 Workflow + +### ✳️ Requester Flow + +1. Connect wallet → Create Task +2. Payment locked in smart contract +3. Task visible to workers + +### 🛠️ Worker Flow + +1. Accept Task → Submit Response +2. Gemini AI verifies content +3. If approved ✅ → Payment auto-released (cUSD) +4. If rejected ❌ → Refund to requester + +--- + +## 🧾 Example API Calls + +### Create Task + +```http +POST /api/v1/tasks/create +Content-Type: application/json + +{ + "title": "Label Images", + "description": "Tag each image with emotion category", + "paymentAmount": 3.5, + "expiresAt": "2025-11-10T12:00:00Z" +} +``` + +### Submit Task + +```http +POST /api/v1/submissions/submit +Content-Type: application/json + +{ + "taskId": "uuid", + "submissionData": { + "imageUrls": ["https://ipfs.tech/image1.png"], + "metadata": { "label": "happy" } + } +} +``` + +**AI Queue → Gemini Verification → Payment Released** + +--- + +## 🧱 Architecture Diagram + +``` +┌────────────┐ +│ Next.js │────┐ +└────────────┘ │ + ▼ +┌───────────┐ ┌──────────────┐ +│Express.js │◄─│ PostgreSQL │ +└───────────┘ └──────────────┘ + │ +┌─────┼──────┐ +▼ ▼ ▼ +Gemini Redis Celo +AI /Bull Network +(Verify) (Queue) (Escrow) +``` + +--- + +## ✅ Features Checklist + +- [X] Wallet Signature Login (EIP-191) +- [X] Gemini-based Content Moderation +- [X] Blockchain-Backed Escrow Payments +- [X] Task + Submission CRUD +- [X] Bull Queue Worker Verification +- [X] Real-Time Status Updates +- [X] cUSD Balance Tracking +- [X] Transaction Confirmation + CeloScan Link +- [X] Admin + Requester Dashboard +- [X] Fully Responsive UI + +--- + +## 🧪 Testing + +```bash +# Run backend tests +cd server +npm run test + +# Database Studio +npx prisma studio + +# Queue dashboard +npm run bull:dashboard +``` + +--- + +## 🌍 Deployment + +### Suggested Setup + +| Layer | Platform | Notes | +| -------- | ------------------------------------------------------- | ------------------------ | +| Frontend | [Vercel](https://vercel.com) | Auto-deploy from main | +| Backend | [Railway](https://railway.app) / [Render](https://render.com) | Node + Postgres service | +| Database | Neon / Supabase | Free Postgres DB | +| Redis | Upstash / Redis Cloud | Connection for Bull jobs | + +--- + +## 🧠 Future Roadmap + +- 🪄 On-chain Gemini verification proofs +- 🧩 Decentralized task reputation scoring +- 💬 Worker messaging + chat +- 🪶 File uploads to IPFS / Web3.Storage +- ⚙️ Multi-network support (Base, Polygon) + +--- + +## 🪙 Credits + +Developed with 💚 on the Celo blockchain. + +Built using **Next.js**, **Celo ContractKit**, **Gemini AI**, and **Prisma**. + +--- + +## 📝 License + +This project is licensed under the **MIT License** — feel free to fork and extend 💡 + +--- + +## 👥 Contributing + +Contributions are welcome! Please feel free to submit a Pull Request. + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +--- + +## 📧 Contact + +For questions or support, please open an issue on [GitHub](https://github.com/Rio-awsm/micro-job-ai-agent-web3/issues). + +--- + +

Made with ❤️ for the Celo ecosystem

diff --git a/dmtp/client/.gitignore b/dmtp/client/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/dmtp/client/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/dmtp/client/README.md b/dmtp/client/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/dmtp/client/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/dmtp/client/app/_sections/badge-showcase.tsx b/dmtp/client/app/_sections/badge-showcase.tsx new file mode 100644 index 0000000..ef673e4 --- /dev/null +++ b/dmtp/client/app/_sections/badge-showcase.tsx @@ -0,0 +1,31 @@ +const badges = [ + { name: "Quick Starter", icon: "⚡", earned: true }, + { name: "Accuracy Master", icon: "🎯", earned: true }, + { name: "Streak Champion", icon: "🔥", earned: true }, + { name: "Top Performer", icon: "👑", earned: false }, + { name: "Community Helper", icon: "🤝", earned: false }, + { name: "Legendary Worker", icon: "⭐", earned: false }, +] + +export function BadgeShowcase() { + return ( +
+

Badges

+
+ {badges.map((badge, index) => ( +
+
{badge.icon}
+

{badge.name}

+
+ ))} +
+
+ ) +} diff --git a/dmtp/client/app/_sections/feature-showcase.tsx b/dmtp/client/app/_sections/feature-showcase.tsx new file mode 100644 index 0000000..a09ed57 --- /dev/null +++ b/dmtp/client/app/_sections/feature-showcase.tsx @@ -0,0 +1,74 @@ +"use client" + +import { motion } from "framer-motion" +import { Brain, Wallet, Zap } from "lucide-react" + +export function FeatureShowcase() { + const features = [ + { + title: "Seamless Task Marketplace", + description: "Browse thousands of AI-verified tasks. Filter by category, difficulty, and earning potential.", + icon: Zap, + delay: 0, + }, + { + title: "AI-Powered Verification", + description: "Advanced AI models verify your work instantly. Get paid only for quality submissions.", + icon: Brain, + delay: 0.1, + }, + { + title: "Instant Payments", + description: "Earn cUSD instantly on Celo Sepolia. Withdraw anytime with zero fees.", + icon: Wallet, + delay: 0.2, + }, + ] + + return ( +
+
+ +

+ Why Choose{" "} + D.M.T.P +

+

+ The most advanced AI-powered microtask platform with instant payments and transparent verification. +

+
+ +
+ {features.map((feature, i) => { + const Icon = feature.icon + return ( + +
+ {/* Icon */} +
+ +
+ +

{feature.title}

+

{feature.description}

+
+
+ ) + })} +
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/hero-section.tsx b/dmtp/client/app/_sections/hero-section.tsx new file mode 100644 index 0000000..279b89f --- /dev/null +++ b/dmtp/client/app/_sections/hero-section.tsx @@ -0,0 +1,150 @@ +"use client" + +import { Button } from "@/components/ui/button" +import { useAuth } from "@/hooks/useAuth"; +import { useCUSDBalance } from "@/hooks/useCUSDBalance"; +import { useWalletConnection } from "@/hooks/useWalletConnection"; +import { motion } from "framer-motion" +import { ArrowRight, CheckCircle } from "lucide-react" +import { useState } from "react"; + +export function HeroSection() { + const { address, isConnected, isConnecting, connect, disconnect, chainId } = useWalletConnection(); + const { authenticate, isAuthenticating, clearAuth, isAuthenticated } = useAuth(); + const { data: balance } = useCUSDBalance(address); + const [showNetworkModal, setShowNetworkModal] = useState(false); + + const expectedChainId = parseInt(process.env.NEXT_PUBLIC_CHAIN_ID || '11142220'); + const isWrongNetwork = isConnected && chainId !== expectedChainId; + + const handleConnect = async () => { + try { + // Step 1: Connect wallet + await connect(); + + // Step 2: Authenticate + await authenticate(); + } catch (error) { + console.error('Connection/Authentication error:', error); + } + }; + + return ( +
+ {/* Green accent border on top */} +
+ + {/* Content */} +
+
+ {/* Left Column - Main Content */} +
+ + + + AI-Powered Verification + + + + +

+ Complete tasks.{" "} + + Get verified by AI. + {" "} + Earn instantly. +

+
+ + + Join the AI-powered microtask marketplace on Celo Sepolia. Complete data labeling, surveys, and content + moderation tasks. Get paid in cUSD instantly. + + + + + + + + + {/* Feature Pills */} + + {[ + { label: "Powered by Gemini AI" }, + { label: "Built on Celo Sepolia" }, + { label: "Instant Payments" }, + ].map((item, i) => ( +
+
+ {item.label} +
+ ))} + +
+ + {/* Right Column - Stats Box */} + +

Platform Statistics

+
+
+
2,847
+
Active Tasks
+
+
+
$24,392
+
Paid This Week
+
+
+
15,234
+
Verified Workers
+
+
+
+
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/how-it-works.tsx b/dmtp/client/app/_sections/how-it-works.tsx new file mode 100644 index 0000000..4df50c3 --- /dev/null +++ b/dmtp/client/app/_sections/how-it-works.tsx @@ -0,0 +1,79 @@ +"use client" + +import { motion } from "framer-motion" +import { CheckSquare, TrendingUp, Wallet, Zap } from "lucide-react" + +const steps = [ + { + icon: Wallet, + title: "Connect Wallet", + description: "Link your Celo wallet to get started in seconds", + }, + { + icon: CheckSquare, + title: "Complete Tasks", + description: "Choose from available tasks and complete them", + }, + { + icon: Zap, + title: "AI Verification", + description: "Gemini AI verifies your work instantly", + }, + { + icon: TrendingUp, + title: "Earn & Withdraw", + description: "Get paid in cUSD directly to your wallet", + }, +] + +export function HowItWorks() { + return ( +
+
+ +

+ How it{" "} + works +

+

Get started in 4 simple steps

+
+ +
+ {steps.map((step, index) => ( + + {index < steps.length - 1 && ( +
+ )} + +
+
+ +
+ +
+ {index + 1} +
+ +

{step.title}

+

{step.description}

+
+ + ))} +
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/integrations-section.tsx b/dmtp/client/app/_sections/integrations-section.tsx new file mode 100644 index 0000000..fa65d0a --- /dev/null +++ b/dmtp/client/app/_sections/integrations-section.tsx @@ -0,0 +1,78 @@ +"use client" + +import { motion } from "framer-motion" +import { Code2, Database, MessageSquare, Zap } from "lucide-react" + +export function IntegrationsSection() { + const integrations = [ + { + icon: Code2, + title: "API Integration", + description: "Connect with your favorite tools to streamline workflows", + }, + { + icon: Database, + title: "Data Sync", + description: "Seamless data synchronization across platforms", + }, + { + icon: Zap, + title: "Automation", + description: "Automate repetitive tasks with intelligent workflows", + }, + { + icon: MessageSquare, + title: "Communication", + description: "Real-time notifications and updates", + }, + ] + + return ( +
+
+ {/* Header */} + +
+ INTEGRATIONS +
+

+ Seamless{" "} + + Integrations + +

+

Connect with your favorite tools to streamline workflows

+
+ + {/* Integration Grid */} +
+ {integrations.map((integration, index) => { + const Icon = integration.icon + return ( + +
+ +
+

{integration.title}

+

{integration.description}

+
+ ) + })} +
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/reputation-meter.tsx b/dmtp/client/app/_sections/reputation-meter.tsx new file mode 100644 index 0000000..3dfe69c --- /dev/null +++ b/dmtp/client/app/_sections/reputation-meter.tsx @@ -0,0 +1,26 @@ +export function ReputationMeter() { + const reputation = 78 + const nextLevel = 85 + + return ( +
+
+
+

Reputation Score

+

{reputation}

+
+
+

Next Level

+

{nextLevel}

+
+
+
+
+
+

{nextLevel - reputation} points until next level

+
+ ) +} diff --git a/dmtp/client/app/_sections/stats-section.tsx b/dmtp/client/app/_sections/stats-section.tsx new file mode 100644 index 0000000..f6e4256 --- /dev/null +++ b/dmtp/client/app/_sections/stats-section.tsx @@ -0,0 +1,37 @@ +"use client" + +import { motion } from "framer-motion" + +const stats = [ + { label: "Active Workers", value: "12,450", suffix: "+" }, + { label: "Tasks Completed", value: "2.3M", suffix: "" }, + { label: "Total Earnings", value: "$450K", suffix: "" }, + { label: "Avg Task Pay", value: "$2.50", suffix: "" }, +] + +export function StatsSection() { + return ( +
+
+
+ {stats.map((stat, index) => ( + +
+ {stat.value} + {stat.suffix} +
+

{stat.label}

+
+ ))} +
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/task-examples.tsx b/dmtp/client/app/_sections/task-examples.tsx new file mode 100644 index 0000000..8657c64 --- /dev/null +++ b/dmtp/client/app/_sections/task-examples.tsx @@ -0,0 +1,94 @@ +"use client" + +import { motion } from "framer-motion" +import { CheckCircle2 } from "lucide-react" + +const taskExamples = [ + { + category: "Data Labeling", + tasks: ["Image classification", "Object detection", "Text annotation"], + earning: "$1.50 - $5.00", + time: "5-15 min", + }, + { + category: "Content Moderation", + tasks: ["Review flagged content", "Verify guidelines compliance", "Quality assurance"], + earning: "$2.00 - $6.00", + time: "10-20 min", + }, + { + category: "Surveys & Research", + tasks: ["Market research", "User feedback", "Opinion surveys"], + earning: "$1.00 - $4.00", + time: "5-10 min", + }, + { + category: "Transcription", + tasks: ["Audio transcription", "Video captioning", "Translation"], + earning: "$3.00 - $8.00", + time: "15-30 min", + }, +] + +export function TaskExamples() { + return ( +
+
+ +

+ Available{" "} + + Task Types + +

+

Choose from diverse tasks that match your skills and schedule

+
+ +
+ {taskExamples.map((task, index) => ( + +
+

+ {task.category} +

+
    + {task.tasks.map((item, i) => ( +
  • + + {item} +
  • + ))} +
+
+
+

Earning

+

{task.earning}

+
+
+

Time

+

{task.time}

+
+
+
+
+ ))} +
+
+
+ ) +} diff --git a/dmtp/client/app/_sections/testimonials.tsx b/dmtp/client/app/_sections/testimonials.tsx new file mode 100644 index 0000000..aeaaf69 --- /dev/null +++ b/dmtp/client/app/_sections/testimonials.tsx @@ -0,0 +1,229 @@ +"use client" + +import { motion } from "framer-motion" +import { Star } from "lucide-react" +import { useEffect, useState } from "react" + +const testimonials = [ + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, + { + name: "Sarah Chen", + role: "Student", + content: "I earn $200-300 per week doing tasks in my spare time. The AI verification is super fast!", + rating: 5, + avatar: "SC", + }, + { + name: "Marcus Johnson", + role: "Freelancer", + content: "Finally a platform where I get paid instantly. No more waiting for payments. Love it!", + rating: 5, + avatar: "MJ", + }, + { + name: "Elena Rodriguez", + role: "Remote Worker", + content: "The variety of tasks keeps things interesting. I've earned over $2000 in 3 months.", + rating: 5, + avatar: "ER", + }, + { + name: "James Park", + role: "Side Hustler", + content: "Best platform I've used. Transparent, fair, and the Celo integration is seamless.", + rating: 5, + avatar: "JP", + }, +] + +export function Testimonials() { + const [currentIndex, setCurrentIndex] = useState(0) + + useEffect(() => { + const interval = setInterval(() => { + setCurrentIndex((prev) => (prev + 1) % testimonials.length) + }, 5000) + return () => clearInterval(interval) + }, []) + + return ( +
+
+
+

Loved by workers worldwide

+

Join thousands earning on D.M.T.P

+
+ +
+ + {testimonials.map((testimonial, index) => ( + +
+
+
+ {testimonial.avatar} +
+
+

{testimonial.name}

+

{testimonial.role}

+
+
+
+ {Array.from({ length: testimonial.rating }).map((_, i) => ( + + ))} +
+

{testimonial.content}

+
+
+ ))} +
+ +
+
+
+ ) +} diff --git a/dmtp/client/app/dashboard/page.tsx b/dmtp/client/app/dashboard/page.tsx new file mode 100644 index 0000000..c0406be --- /dev/null +++ b/dmtp/client/app/dashboard/page.tsx @@ -0,0 +1,430 @@ +'use client'; + +import { useWalletConnection } from '@/hooks/useWalletConnection'; +import { api } from '@/lib/api'; +import { formatCurrency } from '@/lib/utils'; +import { VerificationStatus } from '@/types'; +import { useQuery } from '@tanstack/react-query'; +import { motion } from 'framer-motion'; +import { Award, CheckCircle2, Clock, ExternalLink, Lock, TrendingUp, Wallet, XCircle } from 'lucide-react'; +import Link from 'next/link'; +import { useEffect } from 'react'; +import { Bar, BarChart, CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts"; +import { LoadingSpinner } from '@/components/ui/LoadingSpinner'; + +const earningsData = [ + { day: "Mon", earnings: 12.5 }, + { day: "Tue", earnings: 18.3 }, + { day: "Wed", earnings: 15.7 }, + { day: "Thu", earnings: 22.1 }, + { day: "Fri", earnings: 25.4 }, + { day: "Sat", earnings: 19.8 }, + { day: "Sun", earnings: 28.6 }, +] + +const tasksData = [ + { day: "Mon", completed: 4 }, + { day: "Tue", completed: 6 }, + { day: "Wed", completed: 5 }, + { day: "Thu", completed: 7 }, + { day: "Fri", completed: 8 }, + { day: "Sat", completed: 6 }, + { day: "Sun", completed: 9 }, +] + +export default function DashboardPage() { + const { isConnected, address, connect } = useWalletConnection(); + + const { data: profileData, isLoading: profileLoading, refetch: refetchProfile } = useQuery({ + queryKey: ['profile'], + queryFn: () => api.users.getProfile(), + enabled: isConnected, + }); + + const { data: submissionsData, isLoading: submissionsLoading, refetch: refetchSubmissions } = useQuery({ + queryKey: ['submissions'], + queryFn: () => api.submissions.mySubmissions(), + enabled: isConnected, + }); + + // Refetch when wallet connects + useEffect(() => { + if (isConnected) { + refetchProfile(); + refetchSubmissions(); + } + }, [isConnected, refetchProfile, refetchSubmissions]); + + if (!isConnected) { + return ( +
+ {/* Animated Background */} +
+ + +
+ +
+ + + + +

+ + Connect Your Wallet + +

+

+ Please connect your wallet to view your dashboard and track your earnings +

+ + + Connect Wallet + +
+
+
+ ); + } + + if (profileLoading || submissionsLoading) { + return ( +
+ +
+ ); + } + + const profile = profileData?.data; + const submissions = submissionsData?.data || []; + + const stats = [ + { + icon: Wallet, + label: 'Total Earnings', + value: formatCurrency(profile?.totalEarnings || 0), + gradient: 'from-green-500 to-green-600', + bgGradient: 'from-green-500/10 to-green-600/5', + border: 'border-green-500/30', + }, + { + icon: CheckCircle2, + label: 'Completed Tasks', + value: profile?.stats?.submissionsApproved || 0, + gradient: 'from-green-500 to-green-600', + bgGradient: 'from-green-500/10 to-green-600/5', + border: 'border-green-500/30', + }, + { + icon: TrendingUp, + label: 'Approval Rate', + value: `${profile?.stats?.approvalRate || 0}%`, + gradient: 'from-blue-500 to-blue-600', + bgGradient: 'from-blue-500/10 to-blue-600/5', + border: 'border-blue-500/30', + }, + { + icon: Award, + label: 'Reputation', + value: `⭐ ${profile?.reputationScore || 0}`, + gradient: 'from-green-400 to-green-500', + bgGradient: 'from-green-400/10 to-green-500/5', + border: 'border-green-400/30', + }, + ]; + + const getStatusConfig = (status: string) => { + switch (status) { + case VerificationStatus.APPROVED: + return { icon: CheckCircle2, color: 'text-green-600', bg: 'bg-green-100', text: 'Approved' }; + case VerificationStatus.REJECTED: + return { icon: XCircle, color: 'text-red-600', bg: 'bg-red-100', text: 'Rejected' }; + default: + return { icon: Clock, color: 'text-green-600', bg: 'bg-green-100', text: 'Pending' }; + } + }; + + return ( +
+ {/* Animated Background */} +
+ + +
+ +
+ {/* Header */} + +
+
+

+ + Dashboard + +

+
+ + {address?.slice(0, 6)}...{address?.slice(-4)} +
+
+
+ + + + + Active Worker + +
+
+
+ + {/* Stats Grid */} +
+ {stats.map((stat, index) => ( + +
+
+ +
+ +
+
{stat.label}
+
{stat.value}
+
+ ))} +
+ + {/* Recent Submissions */} + +
+

+ + Recent Submissions +

+
+ + {submissions.length === 0 ? ( +
+ + + +

No submissions yet

+ + + Browse Tasks + + + +
+ ) : ( +
+ + + + + + + + + + + + {submissions.map((submission: any, index: number) => { + const statusConfig = getStatusConfig(submission.verificationStatus); + const StatusIcon = statusConfig.icon; + + return ( + + + + + + + + ); + })} + +
+ Task + + Amount + + Status + + Date + + Action +
+
+ {submission.task.title} +
+
+
+ {formatCurrency(submission.task.paymentAmount)} +
+
+ + + {statusConfig.text} + + + {new Date(submission.createdAt).toLocaleDateString()} + + + View Details + + +
+
+ )} +
+ +
+ {/* Earnings Chart */} +
+

Weekly Earnings

+ + + + + + + + + + + + + + + +
+ + {/* Tasks Chart */} +
+

Tasks Completed

+ + + + + + + + + + + + + + + +
+
+
+
+ ); +} \ No newline at end of file diff --git a/dmtp/client/app/favicon.ico b/dmtp/client/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/dmtp/client/app/globals.css b/dmtp/client/app/globals.css new file mode 100644 index 0000000..8d517a2 --- /dev/null +++ b/dmtp/client/app/globals.css @@ -0,0 +1,168 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.45 0.15 155); + --primary-foreground: oklch(1 0 0); + --secondary: oklch(0.96 0 0); + --secondary-foreground: oklch(0.145 0 0); + --muted: oklch(0.96 0 0); + --muted-foreground: oklch(0.45 0 0); + --accent: oklch(0.50 0.15 155); + --accent-foreground: oklch(1 0 0); + --destructive: oklch(0.55 0.22 25); + --destructive-foreground: oklch(1 0 0); + --border: oklch(0.85 0 0); + --input: oklch(0.85 0 0); + --ring: oklch(0.45 0.15 155); + --chart-1: oklch(0.55 0.15 155); + --chart-2: oklch(0.60 0.12 185); + --chart-3: oklch(0.40 0.07 230); + --chart-4: oklch(0.83 0.19 85); + --chart-5: oklch(0.77 0.19 70); + --radius: 0.25rem; + --sidebar: oklch(0.98 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.45 0.15 155); + --sidebar-primary-foreground: oklch(1 0 0); + --sidebar-accent: oklch(0.96 0 0); + --sidebar-accent-foreground: oklch(0.145 0 0); + --sidebar-border: oklch(0.85 0 0); + --sidebar-ring: oklch(0.45 0.15 155); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.145 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.269 0 0); + --input: oklch(0.269 0 0); + --ring: oklch(0.439 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); +} + +@theme inline { + --font-sans: "Inter", "Inter Fallback"; + + /* McMaster-Carr inspired: Clean white with green accents */ + --color-background: #ffffff; + --color-foreground: #1a1a1a; + --color-card: #ffffff; + --color-card-hover: #f9fafb; + + /* Green Theme */ + --color-primary: #008542; + --color-primary-dark: #006633; + --color-accent: #00a854; + --color-accent-light: #4caf50; + + /* Semantic */ + --color-success: #008542; + --color-warning: #f59e0b; + --color-error: #dc2626; + --color-info: #0066cc; + + /* Borders & Dividers */ + --color-border: #d1d5db; + --color-border-light: #e5e7eb; + + /* Radius */ + --radius: 0.5rem; + + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} + +/* Removed glow effects, added smooth transitions only */ +.transition-smooth { + @apply transition-all duration-300 ease-out; +} + +/* Scrollbar styling */ +::-webkit-scrollbar { + @apply w-2; +} + +::-webkit-scrollbar-track { + @apply bg-background; +} + +::-webkit-scrollbar-thumb { + @apply bg-border hover:bg-border-light; +} diff --git a/dmtp/client/app/layout.tsx b/dmtp/client/app/layout.tsx new file mode 100644 index 0000000..4b8c2a2 --- /dev/null +++ b/dmtp/client/app/layout.tsx @@ -0,0 +1,42 @@ +import { Footer } from "@/components/layout/footer"; +import { Navbar } from "@/components/layout/Navbar"; +import { ThemeProvider } from "@/components/theme-provider"; +import { AuthProvider } from "@/providers/AuthProvider"; +import { QueryProvider } from "@/providers/QueryProvider"; +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import "./globals.css"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata: Metadata = { + title: "Celo Task Marketplace", + description: "AI-powered micro-task marketplace on Celo blockchain", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + + + + +
{children}
+