├── .DS_Store ├── bots └── .DS_Store ├── backend ├── .DS_Store ├── explorer │ ├── app │ │ ├── loading.tsx │ │ ├── .DS_Store │ │ ├── api │ │ │ ├── .DS_Store │ │ │ └── cleanup-scores │ │ │ │ └── route.ts │ │ ├── address │ │ │ └── .DS_Store │ │ ├── layout.tsx │ │ ├── blocks │ │ │ └── page.tsx │ │ ├── search │ │ │ └── page.tsx │ │ └── tokens │ │ │ └── page.tsx │ ├── .DS_Store │ ├── public │ │ ├── enigmatic-coder.png │ │ ├── mystical-aurory.png │ │ ├── stylized-apes.png │ │ ├── pixelated-primate.png │ │ ├── abstract-bear-shapes.png │ │ ├── stylized-deity-skull.png │ │ ├── stylized-fox-collection.png │ │ ├── placeholder-logo.png │ │ ├── placeholder.jpg │ │ ├── placeholder-user.jpg │ │ ├── placeholder-logo.svg │ │ └── placeholder.svg │ ├── pnpm-lock.yaml │ ├── types │ │ ├── block.ts │ │ ├── token.ts │ │ └── transaction.ts │ ├── postcss.config.mjs │ ├── lib │ │ ├── utils.ts │ │ ├── trust-score-storage.ts │ │ └── reputation.ts │ ├── components │ │ ├── ui │ │ │ ├── aspect-ratio.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── use-mobile.tsx │ │ │ ├── textarea.tsx │ │ │ ├── label.tsx │ │ │ ├── input.tsx │ │ │ ├── separator.tsx │ │ │ ├── progress.tsx │ │ │ ├── toaster.tsx │ │ │ ├── sonner.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── badge.tsx │ │ │ ├── tooltip.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── popover.tsx │ │ │ ├── avatar.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── toggle.tsx │ │ │ ├── alert.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── resizable.tsx │ │ │ ├── toggle-group.tsx │ │ │ ├── tabs.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── accordion.tsx │ │ │ ├── input-otp.tsx │ │ │ ├── calendar.tsx │ │ │ ├── breadcrumb.tsx │ │ │ ├── pagination.tsx │ │ │ ├── table.tsx │ │ │ └── drawer.tsx │ │ ├── theme-provider.tsx │ │ ├── sol-price-card.tsx │ │ ├── stats-card.tsx │ │ ├── matrix-background.tsx │ │ ├── block-list.tsx │ │ └── transaction-list.tsx │ ├── next.config.mjs │ ├── components.json │ ├── hooks │ │ └── use-mobile.ts │ ├── tsconfig.json │ ├── README.md │ ├── package.json │ ├── styles │ │ └── globals.css │ └── tailwind.config.ts └── api │ └── index.ts ├── frontend ├── .DS_Store ├── app │ ├── app │ │ ├── chat │ │ │ └── loading.tsx │ │ ├── reputation │ │ │ └── loading.tsx │ │ ├── trending │ │ │ └── loading.tsx │ │ ├── wallets │ │ │ └── loading.tsx │ │ ├── leaderboard │ │ │ └── loading.tsx │ │ └── layout.tsx │ └── layout.tsx ├── lib │ ├── .DS_Store │ └── utils.ts ├── public │ ├── dex-logos │ │ ├── orca.png │ │ ├── default.png │ │ ├── meteora.png │ │ └── raydium.png │ ├── dark-crypto-dashboard.png │ ├── placeholder-logo.png │ ├── placeholder.jpg │ ├── placeholder-user.jpg │ ├── placeholder-logo.svg │ └── placeholder.svg ├── pnpm-lock.yaml ├── postcss.config.mjs ├── components │ ├── ui │ │ ├── aspect-ratio.tsx │ │ ├── skeleton.tsx │ │ ├── collapsible.tsx │ │ ├── use-mobile.tsx │ │ ├── textarea.tsx │ │ ├── toaster.tsx │ │ ├── label.tsx │ │ ├── input.tsx │ │ ├── separator.tsx │ │ ├── progress.tsx │ │ ├── sonner.tsx │ │ ├── checkbox.tsx │ │ ├── slider.tsx │ │ ├── switch.tsx │ │ ├── badge.tsx │ │ ├── tooltip.tsx │ │ ├── hover-card.tsx │ │ ├── popover.tsx │ │ ├── avatar.tsx │ │ ├── radio-group.tsx │ │ ├── toggle.tsx │ │ ├── button-gradient.tsx │ │ ├── alert.tsx │ │ ├── scroll-area.tsx │ │ ├── resizable.tsx │ │ ├── toggle-group.tsx │ │ ├── tabs.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── accordion.tsx │ │ ├── input-otp.tsx │ │ ├── calendar.tsx │ │ ├── breadcrumb.tsx │ │ ├── pagination.tsx │ │ ├── table.tsx │ │ └── drawer.tsx │ ├── theme-provider.tsx │ ├── card-glow.tsx │ ├── background-gradient.tsx │ ├── app-sidebar.tsx │ └── live-stats-bar.tsx ├── components.json ├── hooks │ └── use-mobile.tsx ├── tsconfig.json ├── next.config.mjs ├── package.json ├── styles │ └── globals.css └── tailwind.config.ts ├── LICENSE └── README.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/.DS_Store -------------------------------------------------------------------------------- /bots/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/bots/.DS_Store -------------------------------------------------------------------------------- /backend/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/.DS_Store -------------------------------------------------------------------------------- /frontend/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/.DS_Store -------------------------------------------------------------------------------- /backend/explorer/app/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /frontend/app/app/chat/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /frontend/lib/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/lib/.DS_Store -------------------------------------------------------------------------------- /frontend/app/app/reputation/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /frontend/app/app/trending/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /frontend/app/app/wallets/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /backend/explorer/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/.DS_Store -------------------------------------------------------------------------------- /frontend/app/app/leaderboard/loading.tsx: -------------------------------------------------------------------------------- 1 | export default function Loading() { 2 | return null 3 | } 4 | -------------------------------------------------------------------------------- /backend/explorer/app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/app/.DS_Store -------------------------------------------------------------------------------- /backend/explorer/app/api/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/app/api/.DS_Store -------------------------------------------------------------------------------- /frontend/public/dex-logos/orca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/public/dex-logos/orca.png -------------------------------------------------------------------------------- /backend/explorer/app/address/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/app/address/.DS_Store -------------------------------------------------------------------------------- /frontend/public/dex-logos/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/public/dex-logos/default.png -------------------------------------------------------------------------------- /frontend/public/dex-logos/meteora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/public/dex-logos/meteora.png -------------------------------------------------------------------------------- /frontend/public/dex-logos/raydium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/public/dex-logos/raydium.png -------------------------------------------------------------------------------- /frontend/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false -------------------------------------------------------------------------------- /backend/explorer/public/enigmatic-coder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/enigmatic-coder.png -------------------------------------------------------------------------------- /backend/explorer/public/mystical-aurory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/mystical-aurory.png -------------------------------------------------------------------------------- /backend/explorer/public/stylized-apes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/stylized-apes.png -------------------------------------------------------------------------------- /frontend/public/dark-crypto-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/frontend/public/dark-crypto-dashboard.png -------------------------------------------------------------------------------- /backend/explorer/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false -------------------------------------------------------------------------------- /backend/explorer/public/pixelated-primate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/pixelated-primate.png -------------------------------------------------------------------------------- /backend/explorer/public/abstract-bear-shapes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/abstract-bear-shapes.png -------------------------------------------------------------------------------- /backend/explorer/public/stylized-deity-skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/stylized-deity-skull.png -------------------------------------------------------------------------------- /backend/explorer/types/block.ts: -------------------------------------------------------------------------------- 1 | export interface Block { 2 | blockNumber: number 3 | blockTime: number 4 | transactionCount: number 5 | } 6 | -------------------------------------------------------------------------------- /backend/explorer/public/stylized-fox-collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madridyeth/Trady/HEAD/backend/explorer/public/stylized-fox-collection.png -------------------------------------------------------------------------------- /frontend/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /backend/explorer/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /frontend/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /backend/explorer/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /frontend/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 4 | 5 | const AspectRatio = AspectRatioPrimitive.Root 6 | 7 | export { AspectRatio } 8 | -------------------------------------------------------------------------------- /backend/explorer/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio" 4 | 5 | const AspectRatio = AspectRatioPrimitive.Root 6 | 7 | export { AspectRatio } 8 | -------------------------------------------------------------------------------- /backend/explorer/app/api/cleanup-scores/route.ts: -------------------------------------------------------------------------------- 1 | import { cleanupOldScores } from "@/lib/trust-score-storage" 2 | import { NextResponse } from "next/server" 3 | 4 | export async function GET() { 5 | cleanupOldScores() 6 | return NextResponse.json({ success: true, message: "Old trust scores cleaned up" }) 7 | } 8 | -------------------------------------------------------------------------------- /backend/explorer/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | eslint: { 4 | ignoreDuringBuilds: true, 5 | }, 6 | typescript: { 7 | ignoreBuildErrors: true, 8 | }, 9 | images: { 10 | unoptimized: true, 11 | }, 12 | } 13 | 14 | export default nextConfig 15 | -------------------------------------------------------------------------------- /frontend/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /backend/explorer/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /frontend/components/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { 5 | ThemeProvider as NextThemesProvider, 6 | type ThemeProviderProps, 7 | } from 'next-themes' 8 | 9 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 10 | return {children} 11 | } 12 | -------------------------------------------------------------------------------- /backend/explorer/components/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { 5 | ThemeProvider as NextThemesProvider, 6 | type ThemeProviderProps, 7 | } from 'next-themes' 8 | 9 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 10 | return {children} 11 | } 12 | -------------------------------------------------------------------------------- /frontend/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /backend/explorer/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /backend/explorer/types/token.ts: -------------------------------------------------------------------------------- 1 | export interface TokenBalance { 2 | mint: string 3 | amount: number 4 | decimals: number 5 | tokenInfo?: TokenInfo 6 | } 7 | 8 | export interface TokenInfo { 9 | address: string 10 | name: string 11 | symbol: string 12 | decimals: number 13 | logoURI?: string | null 14 | price?: number 15 | marketCap?: number 16 | volume24h?: number 17 | holders?: number 18 | lastFetched?: number 19 | } 20 | -------------------------------------------------------------------------------- /frontend/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /backend/explorer/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /frontend/public/placeholder-logo.png: -------------------------------------------------------------------------------- 1 | �PNG 2 |  3 | IHDR�M��0PLTEZ? tRNS� �@��`P0p���w �IDATx��ؽJ3Q�7'��%�|?� ���E�l�7���(X�D������w`����[�*t����D���mD�}��4; ;�DDDDDDDDDDDD_�_İ��!�y�`�_�:�� ;Ļ�'|� ��;.I"����3*5����J�1�� �T��FI�� ��=��3܃�2~�b���0��U9\��]�4�#w0��Gt\&1 �?21,���o!e�m��ĻR�����5�� ؽAJ�9��R)�5�0.FFASaǃ�T�#|�K���I�������1� 4 | M������N"��$����G�V�T� ��T^^��A�$S��h(�������G]co"J׸^^�'�=���%� �W�6Ы�W��w�a�߇*�^^�YG�c���`'F����������������^5_�,�S�%IEND�B`� -------------------------------------------------------------------------------- /backend/explorer/public/placeholder-logo.png: -------------------------------------------------------------------------------- 1 | �PNG 2 |  3 | IHDR�M��0PLTEZ? tRNS� �@��`P0p���w �IDATx��ؽJ3Q�7'��%�|?� ���E�l�7���(X�D������w`����[�*t����D���mD�}��4; ;�DDDDDDDDDDDD_�_İ��!�y�`�_�:�� ;Ļ�'|� ��;.I"����3*5����J�1�� �T��FI�� ��=��3܃�2~�b���0��U9\��]�4�#w0��Gt\&1 �?21,���o!e�m��ĻR�����5�� ؽAJ�9��R)�5�0.FFASaǃ�T�#|�K���I�������1� 4 | M������N"��$����G�V�T� ��T^^��A�$S��h(�������G]co"J׸^^�'�=���%� �W�6Ы�W��w�a�߇*�^^�YG�c���`'F����������������^5_�,�S�%IEND�B`� -------------------------------------------------------------------------------- /backend/explorer/hooks/use-mobile.ts: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { useState, useEffect } from "react" 4 | 5 | export const useMobile = (): boolean => { 6 | const [isMobile, setIsMobile] = useState(false) 7 | 8 | useEffect(() => { 9 | const handleResize = () => { 10 | setIsMobile(window.innerWidth < 768) // Adjust breakpoint as needed 11 | } 12 | 13 | handleResize() // Initial check 14 | 15 | window.addEventListener("resize", handleResize) 16 | 17 | return () => { 18 | window.removeEventListener("resize", handleResize) 19 | } 20 | }, []) 21 | 22 | return isMobile 23 | } 24 | -------------------------------------------------------------------------------- /frontend/hooks/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /frontend/components/ui/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /backend/explorer/components/ui/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | const MOBILE_BREAKPOINT = 768 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined) 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 12 | } 13 | mql.addEventListener("change", onChange) 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) 15 | return () => mql.removeEventListener("change", onChange) 16 | }, []) 17 | 18 | return !!isMobile 19 | } 20 | -------------------------------------------------------------------------------- /frontend/app/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type React from "react" 2 | import { LiveStatsBar } from "@/components/live-stats-bar" 3 | import { AppHeader } from "@/components/app-header" 4 | import { BackgroundGradient } from "@/components/background-gradient" 5 | import { FloatingElements } from "@/components/floating-elements" 6 | 7 | export default function AppLayout({ 8 | children, 9 | }: { 10 | children: React.ReactNode 11 | }) { 12 | return ( 13 |
14 | 15 | 16 | 17 |
{children}
18 | 19 |
20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["dom", "dom.iterable", "esnext"], 4 | "allowJs": true, 5 | "target": "ES6", 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /backend/explorer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["dom", "dom.iterable", "esnext"], 4 | "allowJs": true, 5 | "target": "ES6", 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /frontend/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Textarea = React.forwardRef< 6 | HTMLTextAreaElement, 7 | React.ComponentProps<"textarea"> 8 | >(({ className, ...props }, ref) => { 9 | return ( 10 |