strade-stx 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/package.json +10 -1
  2. package/contracts/CoreMarketPlace.clar +0 -227
  3. package/contracts/DisputeResolution_clar.clar +0 -265
  4. package/contracts/EscrowService.clar +0 -171
  5. package/contracts/UserProfile.clar +0 -280
  6. package/contracts/ft-trait.clar +0 -24
  7. package/contracts/token.clar +0 -178
  8. package/frontend/README.md +0 -10
  9. package/frontend/components.json +0 -22
  10. package/frontend/dist/assets/index-BacuuL66.css +0 -1
  11. package/frontend/dist/assets/index-jryypd5B.js +0 -194
  12. package/frontend/dist/favicon.png +0 -0
  13. package/frontend/dist/index.html +0 -15
  14. package/frontend/dist/manifest.json +0 -15
  15. package/frontend/dist/vite.svg +0 -1
  16. package/frontend/empty-mock.js +0 -1
  17. package/frontend/eslint.config.js +0 -23
  18. package/frontend/eslint.config.mjs +0 -25
  19. package/frontend/index.html +0 -14
  20. package/frontend/next.config.ts +0 -17
  21. package/frontend/package-lock.json +0 -14740
  22. package/frontend/package.json +0 -56
  23. package/frontend/postcss.config.js +0 -5
  24. package/frontend/postcss.config.mjs +0 -5
  25. package/frontend/public/favicon.png +0 -0
  26. package/frontend/public/file.svg +0 -1
  27. package/frontend/public/globe.svg +0 -1
  28. package/frontend/public/manifest.json +0 -15
  29. package/frontend/public/next.svg +0 -1
  30. package/frontend/public/vercel.svg +0 -1
  31. package/frontend/public/vite.svg +0 -1
  32. package/frontend/public/window.svg +0 -1
  33. package/frontend/src/App.css +0 -42
  34. package/frontend/src/App.tsx +0 -177
  35. package/frontend/src/app/about/page.tsx +0 -208
  36. package/frontend/src/app/favicon.ico +0 -0
  37. package/frontend/src/app/globals.css +0 -129
  38. package/frontend/src/app/help/page.tsx +0 -167
  39. package/frontend/src/app/how-it-works/page.tsx +0 -274
  40. package/frontend/src/app/layout.tsx +0 -55
  41. package/frontend/src/app/marketplace/page.tsx +0 -324
  42. package/frontend/src/app/my-listings/page.tsx +0 -318
  43. package/frontend/src/app/page.tsx +0 -15
  44. package/frontend/src/assets/react.svg +0 -1
  45. package/frontend/src/components/ConfirmDialog.tsx +0 -54
  46. package/frontend/src/components/CreateListingForm.tsx +0 -231
  47. package/frontend/src/components/ErrorBoundary.tsx +0 -73
  48. package/frontend/src/components/FilterPanel.tsx +0 -10
  49. package/frontend/src/components/Footer.tsx +0 -100
  50. package/frontend/src/components/Header.tsx +0 -268
  51. package/frontend/src/components/ImageUpload.tsx +0 -147
  52. package/frontend/src/components/LandingPage.tsx +0 -322
  53. package/frontend/src/components/ListingCard.tsx +0 -154
  54. package/frontend/src/components/LoadingSkeleton.tsx +0 -44
  55. package/frontend/src/components/MobileNav.tsx +0 -89
  56. package/frontend/src/components/NotificationBell.tsx +0 -8
  57. package/frontend/src/components/NotificationPanel.tsx +0 -14
  58. package/frontend/src/components/README.md +0 -14
  59. package/frontend/src/components/SearchBar.tsx +0 -10
  60. package/frontend/src/components/TestnetBanner.tsx +0 -29
  61. package/frontend/src/components/ThemeToggle.tsx +0 -32
  62. package/frontend/src/components/__tests__/Header.test.tsx +0 -70
  63. package/frontend/src/components/__tests__/ListingCard.test.tsx +0 -86
  64. package/frontend/src/components/providers/ThemeProvider.tsx +0 -9
  65. package/frontend/src/components/ui/alert-dialog.tsx +0 -141
  66. package/frontend/src/components/ui/avatar.tsx +0 -53
  67. package/frontend/src/components/ui/badge.tsx +0 -46
  68. package/frontend/src/components/ui/button.tsx +0 -60
  69. package/frontend/src/components/ui/card.tsx +0 -92
  70. package/frontend/src/components/ui/dialog.tsx +0 -143
  71. package/frontend/src/components/ui/dropdown-menu.tsx +0 -257
  72. package/frontend/src/components/ui/input.tsx +0 -21
  73. package/frontend/src/components/ui/label.tsx +0 -24
  74. package/frontend/src/components/ui/select.tsx +0 -187
  75. package/frontend/src/components/ui/sonner.tsx +0 -40
  76. package/frontend/src/components/ui/textarea.tsx +0 -18
  77. package/frontend/src/context/README.md +0 -27
  78. package/frontend/src/index.css +0 -166
  79. package/frontend/src/lib/notificationEvents.ts +0 -10
  80. package/frontend/src/lib/notificationStore.ts +0 -13
  81. package/frontend/src/lib/notifications.ts +0 -13
  82. package/frontend/src/lib/search.ts +0 -28
  83. package/frontend/src/lib/stacks.ts +0 -189
  84. package/frontend/src/lib/utils.ts +0 -6
  85. package/frontend/src/main.tsx +0 -10
  86. package/frontend/src/test/setup.ts +0 -23
  87. package/frontend/src/types.d.ts +0 -9
  88. package/frontend/tsconfig.app.json +0 -28
  89. package/frontend/tsconfig.json +0 -41
  90. package/frontend/tsconfig.node.json +0 -26
  91. package/frontend/vercel.json +0 -4
  92. package/frontend/vite.config.ts +0 -6
  93. package/frontend/vitest.config.ts +0 -17
  94. package/scripts/auto-activity.sh +0 -9
  95. package/scripts/cancel-pending.ts +0 -67
  96. package/scripts/check-balances.ts +0 -23
  97. package/scripts/distribute-evenly.ts +0 -56
  98. package/scripts/drain-accounts.ts +0 -70
  99. package/scripts/fund-accounts.ts +0 -88
  100. package/scripts/fund-active.ts +0 -59
  101. package/scripts/fund-unfunded.ts +0 -88
  102. package/scripts/generate-activity.ts +0 -181
  103. package/scripts/git-activity-generator.ts +0 -154
  104. package/scripts/mobile-server.ts +0 -123
@@ -1,56 +0,0 @@
1
- {
2
- "name": "strade",
3
- "version": "0.1.0",
4
- "private": true,
5
- "scripts": {
6
- "dev": "next dev",
7
- "build": "next build --webpack",
8
- "start": "next start",
9
- "lint": "eslint",
10
- "test": "vitest run",
11
- "test:watch": "vitest"
12
- },
13
- "dependencies": {
14
- "@radix-ui/react-alert-dialog": "^1.1.15",
15
- "@radix-ui/react-avatar": "^1.1.10",
16
- "@radix-ui/react-dialog": "^1.1.15",
17
- "@radix-ui/react-dropdown-menu": "^2.1.16",
18
- "@radix-ui/react-label": "^2.1.7",
19
- "@radix-ui/react-select": "^2.2.6",
20
- "@radix-ui/react-slot": "^1.2.3",
21
- "@stacks/blockchain-api-client": "^8.13.1",
22
- "@stacks/connect": "^8.2.0",
23
- "@stacks/network": "^7.2.0",
24
- "@stacks/transactions": "^7.2.0",
25
- "class-variance-authority": "^0.7.1",
26
- "clsx": "^2.1.1",
27
- "framer-motion": "^12.23.26",
28
- "lucide-react": "^0.545.0",
29
- "next": "^16.1.6",
30
- "next-themes": "^0.4.6",
31
- "react": "19.1.0",
32
- "react-dom": "19.1.0",
33
- "sonner": "^2.0.7",
34
- "tailwind-merge": "^3.3.1"
35
- },
36
- "devDependencies": {
37
- "@eslint/eslintrc": "^3",
38
- "@tailwindcss/postcss": "^4",
39
- "@testing-library/jest-dom": "^6.9.1",
40
- "@testing-library/react": "^16.3.0",
41
- "@testing-library/user-event": "^14.6.1",
42
- "@types/node": "^20",
43
- "@types/react": "^19",
44
- "@types/react-dom": "^19",
45
- "@vitejs/plugin-react": "^5.0.4",
46
- "eslint": "^9",
47
- "eslint-config-next": "15.5.5",
48
- "jsdom": "^27.0.0",
49
- "null-loader": "^4.0.1",
50
- "tailwindcss": "^4",
51
- "ts-loader": "^9.5.4",
52
- "tw-animate-css": "^1.4.0",
53
- "typescript": "^5",
54
- "vitest": "^3.2.4"
55
- }
56
- }
@@ -1,5 +0,0 @@
1
- export default {
2
- plugins: {
3
- '@tailwindcss/postcss': {},
4
- },
5
- }
@@ -1,5 +0,0 @@
1
- const config = {
2
- plugins: ["@tailwindcss/postcss"],
3
- };
4
-
5
- export default config;
Binary file
@@ -1 +0,0 @@
1
- <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -1,15 +0,0 @@
1
- {
2
- "name": "StackPay",
3
- "short_name": "StackPay",
4
- "start_url": "/",
5
- "display": "standalone",
6
- "background_color": "#0a0a0f",
7
- "theme_color": "#00ff9d",
8
- "icons": [
9
- {
10
- "src": "/vite.svg",
11
- "sizes": "any",
12
- "type": "image/svg+xml"
13
- }
14
- ]
15
- }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
@@ -1,42 +0,0 @@
1
- #root {
2
- max-width: 1280px;
3
- margin: 0 auto;
4
- padding: 2rem;
5
- text-align: center;
6
- }
7
-
8
- .logo {
9
- height: 6em;
10
- padding: 1.5em;
11
- will-change: filter;
12
- transition: filter 300ms;
13
- }
14
- .logo:hover {
15
- filter: drop-shadow(0 0 2em #646cffaa);
16
- }
17
- .logo.react:hover {
18
- filter: drop-shadow(0 0 2em #61dafbaa);
19
- }
20
-
21
- @keyframes logo-spin {
22
- from {
23
- transform: rotate(0deg);
24
- }
25
- to {
26
- transform: rotate(360deg);
27
- }
28
- }
29
-
30
- @media (prefers-reduced-motion: no-preference) {
31
- a:nth-of-type(2) .logo {
32
- animation: logo-spin infinite 20s linear;
33
- }
34
- }
35
-
36
- .card {
37
- padding: 2em;
38
- }
39
-
40
- .read-the-docs {
41
- color: #888;
42
- }
@@ -1,177 +0,0 @@
1
- import { BrowserRouter, Link, Route, Routes, useLocation } from 'react-router-dom';
2
- import { motion, AnimatePresence } from 'framer-motion';
3
- import { Analytics } from '@vercel/analytics/react';
4
- import { Toaster } from 'react-hot-toast';
5
-
6
- const navLinks = [
7
- { path: '/dashboard', label: 'Dashboard', icon: '📊' },
8
- { path: '/about', label: 'About', icon: '📖' },
9
- ];
10
-
11
- function Navigation() {
12
- const location = useLocation();
13
-
14
- return (
15
- <nav className="fixed top-6 left-1/2 -translate-x-1/2 z-50 w-[95%] max-w-7xl">
16
- <div className="glass rounded-2xl px-6 py-4 border border-app-border shadow-floating flex items-center justify-between">
17
- <Link to="/" className="flex items-center group">
18
- <span className="font-serif font-bold text-2xl tracking-tighter text-text-main group-hover:text-accent-indigo transition-colors duration-300">
19
- Your<span className="italic">Brand</span>
20
- </span>
21
- </Link>
22
-
23
- <div className="flex items-center gap-2">
24
- {navLinks.map((link) => {
25
- const isActive = location.pathname === link.path;
26
- return (
27
- <Link
28
- key={link.path}
29
- to={link.path}
30
- className={`px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
31
- isActive
32
- ? 'bg-accent-indigo text-white shadow-premium'
33
- : 'text-text-dim hover:text-accent-indigo hover:bg-app-hover'
34
- }`}
35
- >
36
- {link.icon} {link.label}
37
- </Link>
38
- );
39
- })}
40
- </div>
41
- </div>
42
- </nav>
43
- );
44
- }
45
-
46
- function AnimatedRoutes() {
47
- const location = useLocation();
48
-
49
- return (
50
- <AnimatePresence mode="wait">
51
- <Routes location={location} key={location.pathname}>
52
- <Route path="/" element={<LandingPage />} />
53
- <Route path="/dashboard" element={<PageWrapper><Dashboard /></PageWrapper>} />
54
- <Route path="/about" element={<PageWrapper><About /></PageWrapper>} />
55
- </Routes>
56
- </AnimatePresence>
57
- );
58
- }
59
-
60
- function PageWrapper({ children }: { children: React.ReactNode }) {
61
- return (
62
- <motion.div
63
- initial={{ opacity: 0, y: 15 }}
64
- animate={{ opacity: 1, y: 0 }}
65
- exit={{ opacity: 0, y: -15 }}
66
- transition={{ duration: 0.4, ease: [0.16, 1, 0.3, 1] }}
67
- className="pt-44 pb-24 px-6 min-h-screen"
68
- >
69
- <div className="max-w-7xl mx-auto">
70
- {children}
71
- </div>
72
- </motion.div>
73
- );
74
- }
75
-
76
- function LandingPage() {
77
- return (
78
- <div className="pt-32 pb-24 px-6">
79
- <div className="max-w-6xl mx-auto">
80
- <motion.div
81
- initial={{ opacity: 0, y: 20 }}
82
- animate={{ opacity: 1, y: 0 }}
83
- className="text-center mb-20"
84
- >
85
- <h1 className="font-serif font-bold text-6xl md:text-7xl tracking-tighter text-text-main mb-6">
86
- Welcome to Your
87
- <br />
88
- <span className="italic text-accent-indigo">New Project</span>
89
- </h1>
90
- <p className="text-xl text-text-dim max-w-2xl mx-auto mb-10">
91
- A modern React template with Tailwind CSS, Framer Motion, and React Router.
92
- </p>
93
- <Link
94
- to="/dashboard"
95
- className="inline-flex items-center gap-2 px-8 py-4 bg-accent-indigo text-white rounded-xl font-medium hover:shadow-premium transition-all"
96
- >
97
- Get Started →
98
- </Link>
99
- </motion.div>
100
-
101
- <div className="grid md:grid-cols-3 gap-6">
102
- {[
103
- { icon: '⚡', title: 'Fast', desc: 'Built with Vite for lightning-fast development' },
104
- { icon: '🎨', title: 'Beautiful', desc: 'Tailwind CSS with custom design system' },
105
- { icon: '✨', title: 'Animated', desc: 'Smooth animations with Framer Motion' }
106
- ].map((feature, i) => (
107
- <motion.div
108
- key={i}
109
- initial={{ opacity: 0, y: 20 }}
110
- animate={{ opacity: 1, y: 0 }}
111
- transition={{ delay: i * 0.1 }}
112
- className="glass rounded-2xl p-8 border border-app-border"
113
- >
114
- <div className="text-4xl mb-4">{feature.icon}</div>
115
- <h3 className="font-bold text-xl mb-2">{feature.title}</h3>
116
- <p className="text-text-dim">{feature.desc}</p>
117
- </motion.div>
118
- ))}
119
- </div>
120
- </div>
121
- </div>
122
- );
123
- }
124
-
125
- function Dashboard() {
126
- return (
127
- <div className="glass rounded-2xl p-8 border border-app-border">
128
- <h2 className="font-serif font-bold text-3xl mb-4">Dashboard</h2>
129
- <p className="text-text-dim">Build your dashboard here.</p>
130
- </div>
131
- );
132
- }
133
-
134
- function About() {
135
- return (
136
- <div className="glass rounded-2xl p-8 border border-app-border">
137
- <h2 className="font-serif font-bold text-3xl mb-4">About</h2>
138
- <p className="text-text-dim">Add your about content here.</p>
139
- </div>
140
- );
141
- }
142
-
143
- function App() {
144
- return (
145
- <BrowserRouter>
146
- <Analytics />
147
- <Toaster position="top-right" />
148
- <div className="min-h-screen bg-app-bg grid-subtle selection:bg-accent-indigo/10 selection:text-accent-indigo">
149
- <Navigation />
150
- <main className="relative">
151
- <AnimatedRoutes />
152
- </main>
153
-
154
- <footer className="border-t border-app-border py-16 px-6 bg-white">
155
- <div className="max-w-7xl mx-auto flex flex-col md:flex-row items-center justify-between gap-10">
156
- <div className="flex flex-col items-center md:items-start gap-5">
157
- <span className="font-serif font-bold text-2xl tracking-tighter text-text-main">
158
- Your<span className="italic">Brand</span>
159
- </span>
160
- <p className="text-sm text-text-pale max-w-xs text-center md:text-left leading-relaxed">
161
- Your tagline or description here
162
- </p>
163
- </div>
164
-
165
- <div className="flex flex-col items-center md:items-end gap-4">
166
- <p className="text-xs text-text-pale uppercase tracking-widest font-medium">
167
- © 2026 YOUR BRAND
168
- </p>
169
- </div>
170
- </div>
171
- </footer>
172
- </div>
173
- </BrowserRouter>
174
- );
175
- }
176
-
177
- export default App;
@@ -1,208 +0,0 @@
1
- 'use client';
2
-
3
- import { motion } from 'framer-motion';
4
- import Header from '@/components/Header';
5
- import Footer from '@/components/Footer';
6
- import TestnetBanner from '@/components/TestnetBanner';
7
- import { Shield, Target, Zap, Heart } from 'lucide-react';
8
-
9
- const fadeInUp = {
10
- initial: { opacity: 0, y: 20 },
11
- animate: { opacity: 1, y: 0 },
12
- transition: { duration: 0.5 }
13
- };
14
-
15
- export default function AboutPage() {
16
- return (
17
- <div className="min-h-screen flex flex-col bg-white dark:bg-black">
18
- <TestnetBanner />
19
- <Header />
20
-
21
- <main className="flex-1">
22
- {/* Hero Section */}
23
- <section className="py-24 border-b border-gray-200 dark:border-gray-800">
24
- <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
25
- <motion.div
26
- initial="initial"
27
- animate="animate"
28
- variants={fadeInUp}
29
- >
30
- <h1 className="text-4xl sm:text-5xl font-bold text-black dark:text-white mb-6">
31
- Building the Future of
32
- <br />
33
- Decentralized Commerce
34
- </h1>
35
- <p className="text-lg text-gray-600 dark:text-gray-400 max-w-2xl mx-auto">
36
- Strade is a decentralized marketplace built on the Stacks blockchain,
37
- enabling secure peer-to-peer transactions without intermediaries.
38
- </p>
39
- </motion.div>
40
- </div>
41
- </section>
42
-
43
- {/* Mission Section */}
44
- <section className="py-24 border-b border-gray-200 dark:border-gray-800">
45
- <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
46
- <div className="grid grid-cols-1 md:grid-cols-2 gap-12 items-center">
47
- <motion.div
48
- initial={{ opacity: 0, x: -20 }}
49
- whileInView={{ opacity: 1, x: 0 }}
50
- viewport={{ once: true }}
51
- transition={{ duration: 0.5 }}
52
- >
53
- <h2 className="text-3xl font-bold text-black dark:text-white mb-6">
54
- Our Mission
55
- </h2>
56
- <p className="text-gray-600 dark:text-gray-400 mb-4">
57
- We believe that commerce should be accessible, transparent, and secure
58
- for everyone. Traditional marketplaces are controlled by centralized
59
- entities that charge high fees, censor content, and own your data.
60
- </p>
61
- <p className="text-gray-600 dark:text-gray-400">
62
- Strade empowers users to trade directly with each other using blockchain
63
- technology, eliminating middlemen while ensuring security through smart
64
- contracts and community governance.
65
- </p>
66
- </motion.div>
67
-
68
- <motion.div
69
- initial={{ opacity: 0, x: 20 }}
70
- whileInView={{ opacity: 1, x: 0 }}
71
- viewport={{ once: true }}
72
- transition={{ duration: 0.5 }}
73
- className="grid grid-cols-2 gap-6"
74
- >
75
- {[
76
- { icon: Shield, title: 'Security First', desc: 'Smart contract protection' },
77
- { icon: Target, title: 'User Focused', desc: 'Built for traders' },
78
- { icon: Zap, title: 'Fast & Efficient', desc: 'Instant settlements' },
79
- { icon: Heart, title: 'Community Driven', desc: 'Open governance' }
80
- ].map((item, index) => (
81
- <div
82
- key={index}
83
- className="p-6 border border-gray-200 dark:border-gray-800 rounded-lg"
84
- >
85
- <item.icon className="h-8 w-8 text-black dark:text-white mb-3" />
86
- <h3 className="font-semibold text-black dark:text-white mb-1">
87
- {item.title}
88
- </h3>
89
- <p className="text-sm text-gray-600 dark:text-gray-400">
90
- {item.desc}
91
- </p>
92
- </div>
93
- ))}
94
- </motion.div>
95
- </div>
96
- </div>
97
- </section>
98
-
99
- {/* Technology Section */}
100
- <section className="py-24 border-b border-gray-200 dark:border-gray-800">
101
- <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
102
- <motion.div
103
- initial={{ opacity: 0, y: 20 }}
104
- whileInView={{ opacity: 1, y: 0 }}
105
- viewport={{ once: true }}
106
- transition={{ duration: 0.5 }}
107
- className="text-center mb-12"
108
- >
109
- <h2 className="text-3xl font-bold text-black dark:text-white mb-4">
110
- Built on Stacks
111
- </h2>
112
- <p className="text-gray-600 dark:text-gray-400">
113
- Leveraging Bitcoin's security with smart contract capabilities
114
- </p>
115
- </motion.div>
116
-
117
- <div className="space-y-8">
118
- {[
119
- {
120
- title: 'Bitcoin Security',
121
- description: 'Stacks brings smart contracts to Bitcoin, inheriting its unmatched security and decentralization.'
122
- },
123
- {
124
- title: 'Clarity Smart Contracts',
125
- description: 'Our contracts are written in Clarity, a decidable language that prevents common vulnerabilities.'
126
- },
127
- {
128
- title: 'Proof of Transfer',
129
- description: 'Stacks uses PoX consensus to anchor to Bitcoin, providing the security of Bitcoin without its energy cost.'
130
- },
131
- {
132
- title: 'Open Source',
133
- description: 'All our smart contracts are open source and verified on-chain for complete transparency.'
134
- }
135
- ].map((item, index) => (
136
- <motion.div
137
- key={index}
138
- initial={{ opacity: 0, y: 20 }}
139
- whileInView={{ opacity: 1, y: 0 }}
140
- viewport={{ once: true }}
141
- transition={{ duration: 0.5, delay: index * 0.1 }}
142
- className="p-6 border border-gray-200 dark:border-gray-800 rounded-lg"
143
- >
144
- <h3 className="text-xl font-semibold text-black dark:text-white mb-2">
145
- {item.title}
146
- </h3>
147
- <p className="text-gray-600 dark:text-gray-400">
148
- {item.description}
149
- </p>
150
- </motion.div>
151
- ))}
152
- </div>
153
- </div>
154
- </section>
155
-
156
- {/* Values Section */}
157
- <section className="py-24">
158
- <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
159
- <motion.div
160
- initial={{ opacity: 0, y: 20 }}
161
- whileInView={{ opacity: 1, y: 0 }}
162
- viewport={{ once: true }}
163
- transition={{ duration: 0.5 }}
164
- >
165
- <h2 className="text-3xl font-bold text-black dark:text-white mb-12">
166
- Our Core Values
167
- </h2>
168
-
169
- <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
170
- {[
171
- {
172
- title: 'Transparency',
173
- description: 'All transactions and contract logic are visible on-chain'
174
- },
175
- {
176
- title: 'Decentralization',
177
- description: 'No single entity controls the marketplace'
178
- },
179
- {
180
- title: 'Innovation',
181
- description: 'Constantly improving with the latest blockchain technology'
182
- }
183
- ].map((value, index) => (
184
- <motion.div
185
- key={index}
186
- initial={{ opacity: 0, y: 20 }}
187
- whileInView={{ opacity: 1, y: 0 }}
188
- viewport={{ once: true }}
189
- transition={{ duration: 0.5, delay: index * 0.1 }}
190
- >
191
- <h3 className="text-xl font-semibold text-black dark:text-white mb-3">
192
- {value.title}
193
- </h3>
194
- <p className="text-gray-600 dark:text-gray-400">
195
- {value.description}
196
- </p>
197
- </motion.div>
198
- ))}
199
- </div>
200
- </motion.div>
201
- </div>
202
- </section>
203
- </main>
204
-
205
- <Footer />
206
- </div>
207
- );
208
- }
Binary file
@@ -1,129 +0,0 @@
1
- @import "tailwindcss";
2
- @import "tw-animate-css";
3
-
4
- @custom-variant dark (&:is(.dark *));
5
-
6
- @theme inline {
7
- --color-background: var(--background);
8
- --color-foreground: var(--foreground);
9
- --font-sans: var(--font-geist-sans);
10
- --font-mono: var(--font-geist-mono);
11
- --color-sidebar-ring: var(--sidebar-ring);
12
- --color-sidebar-border: var(--sidebar-border);
13
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
14
- --color-sidebar-accent: var(--sidebar-accent);
15
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
16
- --color-sidebar-primary: var(--sidebar-primary);
17
- --color-sidebar-foreground: var(--sidebar-foreground);
18
- --color-sidebar: var(--sidebar);
19
- --color-chart-5: var(--chart-5);
20
- --color-chart-4: var(--chart-4);
21
- --color-chart-3: var(--chart-3);
22
- --color-chart-2: var(--chart-2);
23
- --color-chart-1: var(--chart-1);
24
- --color-ring: var(--ring);
25
- --color-input: var(--input);
26
- --color-border: var(--border);
27
- --color-destructive: var(--destructive);
28
- --color-accent-foreground: var(--accent-foreground);
29
- --color-accent: var(--accent);
30
- --color-muted-foreground: var(--muted-foreground);
31
- --color-muted: var(--muted);
32
- --color-secondary-foreground: var(--secondary-foreground);
33
- --color-secondary: var(--secondary);
34
- --color-primary-foreground: var(--primary-foreground);
35
- --color-primary: var(--primary);
36
- --color-popover-foreground: var(--popover-foreground);
37
- --color-popover: var(--popover);
38
- --color-card-foreground: var(--card-foreground);
39
- --color-card: var(--card);
40
- --radius-sm: calc(var(--radius) - 4px);
41
- --radius-md: calc(var(--radius) - 2px);
42
- --radius-lg: var(--radius);
43
- --radius-xl: calc(var(--radius) + 4px);
44
- }
45
-
46
- :root {
47
- --radius: 0.625rem;
48
- --background: oklch(1 0 0);
49
- --foreground: oklch(0.129 0.042 264.695);
50
- --card: oklch(1 0 0);
51
- --card-foreground: oklch(0.129 0.042 264.695);
52
- --popover: oklch(1 0 0);
53
- --popover-foreground: oklch(0.129 0.042 264.695);
54
- --primary: oklch(0.208 0.042 265.755);
55
- --primary-foreground: oklch(0.984 0.003 247.858);
56
- --secondary: oklch(0.968 0.007 247.896);
57
- --secondary-foreground: oklch(0.208 0.042 265.755);
58
- --muted: oklch(0.968 0.007 247.896);
59
- --muted-foreground: oklch(0.554 0.046 257.417);
60
- --accent: oklch(0.968 0.007 247.896);
61
- --accent-foreground: oklch(0.208 0.042 265.755);
62
- --destructive: oklch(0.577 0.245 27.325);
63
- --border: oklch(0.929 0.013 255.508);
64
- --input: oklch(0.929 0.013 255.508);
65
- --ring: oklch(0.704 0.04 256.788);
66
- --chart-1: oklch(0.646 0.222 41.116);
67
- --chart-2: oklch(0.6 0.118 184.704);
68
- --chart-3: oklch(0.398 0.07 227.392);
69
- --chart-4: oklch(0.828 0.189 84.429);
70
- --chart-5: oklch(0.769 0.188 70.08);
71
- --sidebar: oklch(0.984 0.003 247.858);
72
- --sidebar-foreground: oklch(0.129 0.042 264.695);
73
- --sidebar-primary: oklch(0.208 0.042 265.755);
74
- --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
75
- --sidebar-accent: oklch(0.968 0.007 247.896);
76
- --sidebar-accent-foreground: oklch(0.208 0.042 265.755);
77
- --sidebar-border: oklch(0.929 0.013 255.508);
78
- --sidebar-ring: oklch(0.704 0.04 256.788);
79
- }
80
-
81
- .dark {
82
- --background: oklch(0.129 0.042 264.695);
83
- --foreground: oklch(0.984 0.003 247.858);
84
- --card: oklch(0.208 0.042 265.755);
85
- --card-foreground: oklch(0.984 0.003 247.858);
86
- --popover: oklch(0.208 0.042 265.755);
87
- --popover-foreground: oklch(0.984 0.003 247.858);
88
- --primary: oklch(0.929 0.013 255.508);
89
- --primary-foreground: oklch(0.208 0.042 265.755);
90
- --secondary: oklch(0.279 0.041 260.031);
91
- --secondary-foreground: oklch(0.984 0.003 247.858);
92
- --muted: oklch(0.279 0.041 260.031);
93
- --muted-foreground: oklch(0.704 0.04 256.788);
94
- --accent: oklch(0.279 0.041 260.031);
95
- --accent-foreground: oklch(0.984 0.003 247.858);
96
- --destructive: oklch(0.704 0.191 22.216);
97
- --border: oklch(1 0 0 / 10%);
98
- --input: oklch(1 0 0 / 15%);
99
- --ring: oklch(0.551 0.027 264.364);
100
- --chart-1: oklch(0.488 0.243 264.376);
101
- --chart-2: oklch(0.696 0.17 162.48);
102
- --chart-3: oklch(0.769 0.188 70.08);
103
- --chart-4: oklch(0.627 0.265 303.9);
104
- --chart-5: oklch(0.645 0.246 16.439);
105
- --sidebar: oklch(0.208 0.042 265.755);
106
- --sidebar-foreground: oklch(0.984 0.003 247.858);
107
- --sidebar-primary: oklch(0.488 0.243 264.376);
108
- --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
109
- --sidebar-accent: oklch(0.279 0.041 260.031);
110
- --sidebar-accent-foreground: oklch(0.984 0.003 247.858);
111
- --sidebar-border: oklch(1 0 0 / 10%);
112
- --sidebar-ring: oklch(0.551 0.027 264.364);
113
- }
114
-
115
- @layer base {
116
- * {
117
- @apply border-border outline-ring/50;
118
- }
119
- body {
120
- @apply bg-background text-foreground;
121
- }
122
- }
123
- /* mobile base */
124
- /* touch-action */
125
- /* safe-area */
126
- /* scroll-snap */
127
- /* breakpoints */
128
- /* overflow-x: hidden */
129
- /* touch-action: manipulation */