From 99cd0a9eb6399eb6b6c781ec4a4df601106aee35 Mon Sep 17 00:00:00 2001 From: GiFTED! Date: Sun, 12 Jul 2026 18:57:31 +0100 Subject: [PATCH 1/4] refactor: move desktop app to apps/desktop monorepo layout --- .github/workflows/release.yml | 4 ++-- .gitignore | 7 ++++--- README.md | 16 +++++++++------- {app => apps/desktop}/eslint.config.js | 0 {app => apps/desktop}/index.html | 0 {app => apps/desktop}/package.json | 0 {app => apps/desktop}/src-tauri/Cargo.lock | 0 {app => apps/desktop}/src-tauri/Cargo.toml | 0 {app => apps/desktop}/src-tauri/build.rs | 0 .../desktop}/src-tauri/icons/128x128.png | Bin .../desktop}/src-tauri/icons/128x128@2x.png | Bin {app => apps/desktop}/src-tauri/icons/32x32.png | Bin {app => apps/desktop}/src-tauri/icons/64x64.png | Bin .../src-tauri/icons/Square107x107Logo.png | Bin .../src-tauri/icons/Square142x142Logo.png | Bin .../src-tauri/icons/Square150x150Logo.png | Bin .../src-tauri/icons/Square284x284Logo.png | Bin .../src-tauri/icons/Square30x30Logo.png | Bin .../src-tauri/icons/Square310x310Logo.png | Bin .../src-tauri/icons/Square44x44Logo.png | Bin .../src-tauri/icons/Square71x71Logo.png | Bin .../src-tauri/icons/Square89x89Logo.png | Bin .../desktop}/src-tauri/icons/StoreLogo.png | Bin .../android/mipmap-anydpi-v26/ic_launcher.xml | 0 .../icons/android/mipmap-hdpi/ic_launcher.png | Bin .../mipmap-hdpi/ic_launcher_foreground.png | Bin .../android/mipmap-hdpi/ic_launcher_round.png | Bin .../icons/android/mipmap-mdpi/ic_launcher.png | Bin .../mipmap-mdpi/ic_launcher_foreground.png | Bin .../android/mipmap-mdpi/ic_launcher_round.png | Bin .../icons/android/mipmap-xhdpi/ic_launcher.png | Bin .../mipmap-xhdpi/ic_launcher_foreground.png | Bin .../android/mipmap-xhdpi/ic_launcher_round.png | Bin .../icons/android/mipmap-xxhdpi/ic_launcher.png | Bin .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin .../android/mipmap-xxhdpi/ic_launcher_round.png | Bin .../android/mipmap-xxxhdpi/ic_launcher.png | Bin .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin .../mipmap-xxxhdpi/ic_launcher_round.png | Bin .../android/values/ic_launcher_background.xml | 0 {app => apps/desktop}/src-tauri/icons/icon.icns | Bin {app => apps/desktop}/src-tauri/icons/icon.ico | Bin {app => apps/desktop}/src-tauri/icons/icon.png | Bin .../src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin .../src-tauri/icons/ios/AppIcon-20x20@2x-1.png | Bin .../src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin .../src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin .../src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin .../src-tauri/icons/ios/AppIcon-29x29@2x-1.png | Bin .../src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin .../src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin .../src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin .../src-tauri/icons/ios/AppIcon-40x40@2x-1.png | Bin .../src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin .../src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin .../src-tauri/icons/ios/AppIcon-512@2x.png | Bin .../src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin .../src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin .../src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin .../src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin .../icons/ios/AppIcon-83.5x83.5@2x.png | Bin {app => apps/desktop}/src-tauri/src/lib.rs | 0 {app => apps/desktop}/src-tauri/src/main.rs | 0 {app => apps/desktop}/src-tauri/tauri.conf.json | 0 {app => apps/desktop}/src/App.tsx | 0 .../desktop}/src/components/CommandPalette.tsx | 0 {app => apps/desktop}/src/components/Panel.tsx | 0 .../src/components/PanelErrorBoundary.tsx | 0 .../desktop}/src/components/PontoonMark.tsx | 0 .../desktop}/src/components/panel-context.ts | 0 .../src/components/ui/address-input.tsx | 0 .../desktop}/src/components/ui/badge.tsx | 0 .../desktop}/src/components/ui/button.tsx | 0 .../desktop}/src/components/ui/card.tsx | 0 .../desktop}/src/components/ui/command.tsx | 0 .../desktop}/src/components/ui/copy-button.tsx | 0 .../desktop}/src/components/ui/dialog.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../desktop}/src/components/ui/empty-state.tsx | 0 .../desktop}/src/components/ui/index.ts | 0 .../desktop}/src/components/ui/input.tsx | 0 {app => apps/desktop}/src/components/ui/kbd.tsx | 0 .../desktop}/src/components/ui/list-item.tsx | 0 .../desktop}/src/components/ui/log-viewer.tsx | 0 .../desktop}/src/components/ui/mini-bars.tsx | 0 .../desktop}/src/components/ui/mono-value.tsx | 0 .../desktop}/src/components/ui/phase-pill.tsx | 0 .../desktop}/src/components/ui/resizable.tsx | 0 .../desktop}/src/components/ui/scroll-area.tsx | 0 .../src/components/ui/section-label.tsx | 0 .../desktop}/src/components/ui/separator.tsx | 0 .../desktop}/src/components/ui/skeleton.tsx | 0 .../desktop}/src/components/ui/stat-card.tsx | 0 .../desktop}/src/components/ui/table.tsx | 0 .../desktop}/src/components/ui/tabs.tsx | 0 .../desktop}/src/components/ui/textarea.tsx | 0 .../desktop}/src/components/ui/tooltip.tsx | 0 .../desktop}/src/components/ui/tree.tsx | 0 .../desktop}/src/components/ui/virtual-list.tsx | 0 {app => apps/desktop}/src/hooks/useAccounts.ts | 0 .../desktop}/src/hooks/useAddressOptions.ts | 0 {app => apps/desktop}/src/hooks/useBenchmark.ts | 0 {app => apps/desktop}/src/hooks/useBlocks.ts | 0 .../desktop}/src/hooks/useBridgeStatus.ts | 0 {app => apps/desktop}/src/hooks/useConfig.ts | 0 {app => apps/desktop}/src/hooks/useContracts.ts | 0 {app => apps/desktop}/src/hooks/useCoverage.ts | 0 .../desktop}/src/hooks/useDeterminism.ts | 0 {app => apps/desktop}/src/hooks/useFork.ts | 0 {app => apps/desktop}/src/hooks/useGetMethod.ts | 0 {app => apps/desktop}/src/hooks/useLibraries.ts | 0 {app => apps/desktop}/src/hooks/useLogStream.ts | 0 .../desktop}/src/hooks/useSendMessage.ts | 0 .../desktop}/src/hooks/useShardAccount.ts | 0 {app => apps/desktop}/src/hooks/useSnapshots.ts | 0 {app => apps/desktop}/src/hooks/useStepExec.ts | 0 {app => apps/desktop}/src/hooks/useTestRun.ts | 0 .../desktop}/src/hooks/useTimeControl.ts | 0 {app => apps/desktop}/src/hooks/useVmSteps.ts | 0 {app => apps/desktop}/src/hooks/useWorkspace.ts | 0 {app => apps/desktop}/src/lib/address.ts | 0 {app => apps/desktop}/src/lib/cn.ts | 0 {app => apps/desktop}/src/lib/examples.ts | 0 {app => apps/desktop}/src/lib/exitCodes.ts | 0 {app => apps/desktop}/src/lib/format.ts | 0 {app => apps/desktop}/src/lib/tlb/cellParser.ts | 0 {app => apps/desktop}/src/lib/walletVersions.ts | 0 {app => apps/desktop}/src/main.tsx | 0 .../desktop}/src/panels/A1/WorkspacePanel.tsx | 0 .../panels/A10-snapshots/SnapshotDiffView.tsx | 0 .../A10-snapshots/SnapshotManagerPanel.tsx | 0 .../src/panels/A10-snapshots/snapshotGraph.ts | 0 .../desktop}/src/panels/A11-fork/ForkPanel.tsx | 0 .../src/panels/A12-config/ConfigPanel.tsx | 0 .../src/panels/A13-libraries/LibrariesPanel.tsx | 0 .../desktop}/src/panels/A14-logs/LogsPanel.tsx | 0 .../src/panels/A15-coverage/CoveragePanel.tsx | 0 .../src/panels/A16-benchmark/BenchmarkPanel.tsx | 0 .../desktop}/src/panels/A17-step/StackView.tsx | 0 .../src/panels/A17-step/StepExecPanel.tsx | 0 .../desktop}/src/panels/A17-step/StepList.tsx | 0 .../desktop}/src/panels/A18-mitm/MitmPanel.tsx | 0 .../panels/A19-determinism/DeterminismPanel.tsx | 0 .../desktop}/src/panels/A2/AccountDetail.tsx | 0 .../desktop}/src/panels/A2/AccountsPanel.tsx | 0 .../src/panels/A20-tests/TestRunnerPanel.tsx | 0 .../desktop}/src/panels/A3/AbiMethods.tsx | 0 .../desktop}/src/panels/A3/ContractDetail.tsx | 0 .../src/panels/A3/ContractRegistryPanel.tsx | 0 .../desktop}/src/panels/A4/SenderPanel.tsx | 0 .../src/panels/A5-getmethod/CellTreeView.tsx | 0 .../src/panels/A5-getmethod/GetMethodPanel.tsx | 0 .../src/panels/A5-getmethod/StackArgsEditor.tsx | 0 .../src/panels/A5-getmethod/StackEditor.tsx | 0 .../desktop}/src/panels/A6/EventsList.tsx | 0 .../desktop}/src/panels/A6/InspectorPanel.tsx | 0 .../desktop}/src/panels/A6/PhaseBreakdown.tsx | 0 .../desktop}/src/panels/A6/StepTrace.tsx | 0 .../desktop}/src/panels/A6/TxNodeView.tsx | 0 {app => apps/desktop}/src/panels/A6/layout.ts | 0 .../panels/A7-explorer/BlockExplorerPanel.tsx | 0 .../src/panels/A7-explorer/TxDetail.tsx | 0 .../desktop}/src/panels/A8-state/NodeDetail.tsx | 0 .../src/panels/A8-state/StateInspectorPanel.tsx | 0 .../desktop}/src/panels/A8-state/cellTree.ts | 0 .../src/panels/A9-time/TimeControlPanel.tsx | 0 .../src/panels/A9-time/storageFeeProjection.ts | 0 {app => apps/desktop}/src/panels/registry.ts | 0 {app => apps/desktop}/src/polyfills.ts | 0 {app => apps/desktop}/src/query/queryClient.ts | 0 {app => apps/desktop}/src/rpc/bootstrap.ts | 0 {app => apps/desktop}/src/rpc/client.ts | 0 {app => apps/desktop}/src/rpc/codec.ts | 0 {app => apps/desktop}/src/rpc/contract.ts | 0 {app => apps/desktop}/src/rpc/messageTree.ts | 0 {app => apps/desktop}/src/rpc/transport.ts | 0 {app => apps/desktop}/src/state/logStore.ts | 0 {app => apps/desktop}/src/state/store.ts | 0 {app => apps/desktop}/src/state/traceStore.ts | 0 {app => apps/desktop}/src/styles.css | 0 {app => apps/desktop}/tsconfig.json | 0 {app => apps/desktop}/vite.config.ts | 0 pnpm-workspace.yaml | 2 +- scripts/build-sidecar.mjs | 2 +- 184 files changed, 17 insertions(+), 14 deletions(-) rename {app => apps/desktop}/eslint.config.js (100%) rename {app => apps/desktop}/index.html (100%) rename {app => apps/desktop}/package.json (100%) rename {app => apps/desktop}/src-tauri/Cargo.lock (100%) rename {app => apps/desktop}/src-tauri/Cargo.toml (100%) rename {app => apps/desktop}/src-tauri/build.rs (100%) rename {app => apps/desktop}/src-tauri/icons/128x128.png (100%) rename {app => apps/desktop}/src-tauri/icons/128x128@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/32x32.png (100%) rename {app => apps/desktop}/src-tauri/icons/64x64.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square107x107Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square142x142Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square150x150Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square284x284Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square30x30Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square310x310Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square44x44Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square71x71Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/Square89x89Logo.png (100%) rename {app => apps/desktop}/src-tauri/icons/StoreLogo.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename {app => apps/desktop}/src-tauri/icons/android/values/ic_launcher_background.xml (100%) rename {app => apps/desktop}/src-tauri/icons/icon.icns (100%) rename {app => apps/desktop}/src-tauri/icons/icon.ico (100%) rename {app => apps/desktop}/src-tauri/icons/icon.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-20x20@1x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-20x20@2x-1.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-20x20@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-20x20@3x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-29x29@1x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-29x29@2x-1.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-29x29@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-29x29@3x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-40x40@1x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-40x40@2x-1.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-40x40@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-40x40@3x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-512@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-60x60@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-60x60@3x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-76x76@1x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-76x76@2x.png (100%) rename {app => apps/desktop}/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png (100%) rename {app => apps/desktop}/src-tauri/src/lib.rs (100%) rename {app => apps/desktop}/src-tauri/src/main.rs (100%) rename {app => apps/desktop}/src-tauri/tauri.conf.json (100%) rename {app => apps/desktop}/src/App.tsx (100%) rename {app => apps/desktop}/src/components/CommandPalette.tsx (100%) rename {app => apps/desktop}/src/components/Panel.tsx (100%) rename {app => apps/desktop}/src/components/PanelErrorBoundary.tsx (100%) rename {app => apps/desktop}/src/components/PontoonMark.tsx (100%) rename {app => apps/desktop}/src/components/panel-context.ts (100%) rename {app => apps/desktop}/src/components/ui/address-input.tsx (100%) rename {app => apps/desktop}/src/components/ui/badge.tsx (100%) rename {app => apps/desktop}/src/components/ui/button.tsx (100%) rename {app => apps/desktop}/src/components/ui/card.tsx (100%) rename {app => apps/desktop}/src/components/ui/command.tsx (100%) rename {app => apps/desktop}/src/components/ui/copy-button.tsx (100%) rename {app => apps/desktop}/src/components/ui/dialog.tsx (100%) rename {app => apps/desktop}/src/components/ui/dropdown-menu.tsx (100%) rename {app => apps/desktop}/src/components/ui/empty-state.tsx (100%) rename {app => apps/desktop}/src/components/ui/index.ts (100%) rename {app => apps/desktop}/src/components/ui/input.tsx (100%) rename {app => apps/desktop}/src/components/ui/kbd.tsx (100%) rename {app => apps/desktop}/src/components/ui/list-item.tsx (100%) rename {app => apps/desktop}/src/components/ui/log-viewer.tsx (100%) rename {app => apps/desktop}/src/components/ui/mini-bars.tsx (100%) rename {app => apps/desktop}/src/components/ui/mono-value.tsx (100%) rename {app => apps/desktop}/src/components/ui/phase-pill.tsx (100%) rename {app => apps/desktop}/src/components/ui/resizable.tsx (100%) rename {app => apps/desktop}/src/components/ui/scroll-area.tsx (100%) rename {app => apps/desktop}/src/components/ui/section-label.tsx (100%) rename {app => apps/desktop}/src/components/ui/separator.tsx (100%) rename {app => apps/desktop}/src/components/ui/skeleton.tsx (100%) rename {app => apps/desktop}/src/components/ui/stat-card.tsx (100%) rename {app => apps/desktop}/src/components/ui/table.tsx (100%) rename {app => apps/desktop}/src/components/ui/tabs.tsx (100%) rename {app => apps/desktop}/src/components/ui/textarea.tsx (100%) rename {app => apps/desktop}/src/components/ui/tooltip.tsx (100%) rename {app => apps/desktop}/src/components/ui/tree.tsx (100%) rename {app => apps/desktop}/src/components/ui/virtual-list.tsx (100%) rename {app => apps/desktop}/src/hooks/useAccounts.ts (100%) rename {app => apps/desktop}/src/hooks/useAddressOptions.ts (100%) rename {app => apps/desktop}/src/hooks/useBenchmark.ts (100%) rename {app => apps/desktop}/src/hooks/useBlocks.ts (100%) rename {app => apps/desktop}/src/hooks/useBridgeStatus.ts (100%) rename {app => apps/desktop}/src/hooks/useConfig.ts (100%) rename {app => apps/desktop}/src/hooks/useContracts.ts (100%) rename {app => apps/desktop}/src/hooks/useCoverage.ts (100%) rename {app => apps/desktop}/src/hooks/useDeterminism.ts (100%) rename {app => apps/desktop}/src/hooks/useFork.ts (100%) rename {app => apps/desktop}/src/hooks/useGetMethod.ts (100%) rename {app => apps/desktop}/src/hooks/useLibraries.ts (100%) rename {app => apps/desktop}/src/hooks/useLogStream.ts (100%) rename {app => apps/desktop}/src/hooks/useSendMessage.ts (100%) rename {app => apps/desktop}/src/hooks/useShardAccount.ts (100%) rename {app => apps/desktop}/src/hooks/useSnapshots.ts (100%) rename {app => apps/desktop}/src/hooks/useStepExec.ts (100%) rename {app => apps/desktop}/src/hooks/useTestRun.ts (100%) rename {app => apps/desktop}/src/hooks/useTimeControl.ts (100%) rename {app => apps/desktop}/src/hooks/useVmSteps.ts (100%) rename {app => apps/desktop}/src/hooks/useWorkspace.ts (100%) rename {app => apps/desktop}/src/lib/address.ts (100%) rename {app => apps/desktop}/src/lib/cn.ts (100%) rename {app => apps/desktop}/src/lib/examples.ts (100%) rename {app => apps/desktop}/src/lib/exitCodes.ts (100%) rename {app => apps/desktop}/src/lib/format.ts (100%) rename {app => apps/desktop}/src/lib/tlb/cellParser.ts (100%) rename {app => apps/desktop}/src/lib/walletVersions.ts (100%) rename {app => apps/desktop}/src/main.tsx (100%) rename {app => apps/desktop}/src/panels/A1/WorkspacePanel.tsx (100%) rename {app => apps/desktop}/src/panels/A10-snapshots/SnapshotDiffView.tsx (100%) rename {app => apps/desktop}/src/panels/A10-snapshots/SnapshotManagerPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A10-snapshots/snapshotGraph.ts (100%) rename {app => apps/desktop}/src/panels/A11-fork/ForkPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A12-config/ConfigPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A13-libraries/LibrariesPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A14-logs/LogsPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A15-coverage/CoveragePanel.tsx (100%) rename {app => apps/desktop}/src/panels/A16-benchmark/BenchmarkPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A17-step/StackView.tsx (100%) rename {app => apps/desktop}/src/panels/A17-step/StepExecPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A17-step/StepList.tsx (100%) rename {app => apps/desktop}/src/panels/A18-mitm/MitmPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A19-determinism/DeterminismPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A2/AccountDetail.tsx (100%) rename {app => apps/desktop}/src/panels/A2/AccountsPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A20-tests/TestRunnerPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A3/AbiMethods.tsx (100%) rename {app => apps/desktop}/src/panels/A3/ContractDetail.tsx (100%) rename {app => apps/desktop}/src/panels/A3/ContractRegistryPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A4/SenderPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A5-getmethod/CellTreeView.tsx (100%) rename {app => apps/desktop}/src/panels/A5-getmethod/GetMethodPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A5-getmethod/StackArgsEditor.tsx (100%) rename {app => apps/desktop}/src/panels/A5-getmethod/StackEditor.tsx (100%) rename {app => apps/desktop}/src/panels/A6/EventsList.tsx (100%) rename {app => apps/desktop}/src/panels/A6/InspectorPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A6/PhaseBreakdown.tsx (100%) rename {app => apps/desktop}/src/panels/A6/StepTrace.tsx (100%) rename {app => apps/desktop}/src/panels/A6/TxNodeView.tsx (100%) rename {app => apps/desktop}/src/panels/A6/layout.ts (100%) rename {app => apps/desktop}/src/panels/A7-explorer/BlockExplorerPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A7-explorer/TxDetail.tsx (100%) rename {app => apps/desktop}/src/panels/A8-state/NodeDetail.tsx (100%) rename {app => apps/desktop}/src/panels/A8-state/StateInspectorPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A8-state/cellTree.ts (100%) rename {app => apps/desktop}/src/panels/A9-time/TimeControlPanel.tsx (100%) rename {app => apps/desktop}/src/panels/A9-time/storageFeeProjection.ts (100%) rename {app => apps/desktop}/src/panels/registry.ts (100%) rename {app => apps/desktop}/src/polyfills.ts (100%) rename {app => apps/desktop}/src/query/queryClient.ts (100%) rename {app => apps/desktop}/src/rpc/bootstrap.ts (100%) rename {app => apps/desktop}/src/rpc/client.ts (100%) rename {app => apps/desktop}/src/rpc/codec.ts (100%) rename {app => apps/desktop}/src/rpc/contract.ts (100%) rename {app => apps/desktop}/src/rpc/messageTree.ts (100%) rename {app => apps/desktop}/src/rpc/transport.ts (100%) rename {app => apps/desktop}/src/state/logStore.ts (100%) rename {app => apps/desktop}/src/state/store.ts (100%) rename {app => apps/desktop}/src/state/traceStore.ts (100%) rename {app => apps/desktop}/src/styles.css (100%) rename {app => apps/desktop}/tsconfig.json (100%) rename {app => apps/desktop}/vite.config.ts (100%) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f007ddf..46dbbf4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,7 +42,7 @@ jobs: - uses: Swatinem/rust-cache@v2 with: - workspaces: app/src-tauri + workspaces: apps/desktop/src-tauri - name: install linux dependencies if: matrix.os == 'ubuntu-22.04' @@ -68,7 +68,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - projectPath: app + projectPath: apps/desktop tagName: v__VERSION__ releaseName: 'Pontoon v__VERSION__' releaseBody: 'Download the installer that matches your operating system.' diff --git a/.gitignore b/.gitignore index 2c077f4..382b9b8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,12 @@ node_modules # Build build dist +.next # Rust / Tauri -app/src-tauri/target/ -app/src-tauri/gen/schemas/ -app/src-tauri/binaries/ +apps/desktop/src-tauri/target/ +apps/desktop/src-tauri/gen/schemas/ +apps/desktop/src-tauri/binaries/ # AI tools .claude diff --git a/README.md b/README.md index d50d633..94550a6 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,12 @@ Highlights: ``` pontoon/ pnpm + TurboRepo monorepo -├── app/ @pontoon/app — Tauri + React 19 + Vite 6 + Tailwind 4 desktop GUI -│ ├── src/panels/ A1–A20 inspection panels -│ ├── src/rpc/ wire contract (57 methods), codec, message-tree types -│ └── src-tauri/ Tauri shell (spawns the bridge as a sidecar) +├── apps/ +│ ├── desktop/ @pontoon/app — Tauri + React 19 + Vite 6 + Tailwind 4 desktop GUI +│ │ ├── src/panels/ A1–A20 inspection panels +│ │ ├── src/rpc/ wire contract (57 methods), codec, message-tree types +│ │ └── src-tauri/ Tauri shell (spawns the bridge as a sidecar) +│ └── website/ marketing + docs site └── packages/ ├── bridge/ @pontoon/bridge — real @ton/sandbox JSON-RPC bridge (default) └── mock-bridge/ @pontoon/mock-bridge — canned fixtures for fast offline UI work @@ -51,7 +53,7 @@ pontoon/ pnpm + TurboRepo monorepo - `tree.ts` — `BlockchainTransaction[]` → message-tree (`TxNode`) + `vm_logs_full` → VM steps - `encode.ts` — bigint↔decimal-string, Cell↔base64 BOC, address↔raw `0:` -**The frontend** never changes its wire contract — `app/src/rpc/contract.ts` is the fixed boundary both bridges satisfy. Most capabilities are fully real; four that need a user's Blueprint project + toolchain (`contract.deploy` by wrapper, `contract.abi` from `.abi.json`, `test.run`, FunC/Tact source coverage) degrade gracefully with a clear "attach a Blueprint project" note and light up once one is attached. +**The frontend** never changes its wire contract — `apps/desktop/src/rpc/contract.ts` is the fixed boundary both bridges satisfy. Most capabilities are fully real; four that need a user's Blueprint project + toolchain (`contract.deploy` by wrapper, `contract.abi` from `.abi.json`, `test.run`, FunC/Tact source coverage) degrade gracefully with a clear "attach a Blueprint project" note and light up once one is attached. --- @@ -77,7 +79,7 @@ Then open the printed Vite URL. The UI auto-connects to the bridge at `127.0.0.1 ```bash pnpm desktop:dev # Tauri dev shell over the live Vite + bridge stack -pnpm desktop:build # production bundle (installers under app/src-tauri/target/release/bundle/) +pnpm desktop:build # production bundle (installers under apps/desktop/src-tauri/target/release/bundle/) ``` In dev the shell reuses the tsx bridge on `127.0.0.1:37631`. Production bundles embed the bridge as a compiled sidecar binary instead: the shell generates a session token, starts the sidecar on an OS-assigned local port, waits for its `READY ` signal after sandbox warmup, injects `window.__PONTOON_BRIDGE__`, and kills the sidecar on exit — so a packaged app and a dev stack can run side by side. @@ -139,4 +141,4 @@ pnpm --filter @pontoon/bridge smoke - `DESIGN.md` — UI design language and panel-by-panel reference. - `PRODUCT.md` — product scope and the @ton/sandbox API → panel mapping. -- The wire contract (`app/src/rpc/`) is the contract between UI and bridge — keep both bridges in lockstep with it. +- The wire contract (`apps/desktop/src/rpc/`) is the contract between UI and bridge — keep both bridges in lockstep with it. diff --git a/app/eslint.config.js b/apps/desktop/eslint.config.js similarity index 100% rename from app/eslint.config.js rename to apps/desktop/eslint.config.js diff --git a/app/index.html b/apps/desktop/index.html similarity index 100% rename from app/index.html rename to apps/desktop/index.html diff --git a/app/package.json b/apps/desktop/package.json similarity index 100% rename from app/package.json rename to apps/desktop/package.json diff --git a/app/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock similarity index 100% rename from app/src-tauri/Cargo.lock rename to apps/desktop/src-tauri/Cargo.lock diff --git a/app/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml similarity index 100% rename from app/src-tauri/Cargo.toml rename to apps/desktop/src-tauri/Cargo.toml diff --git a/app/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs similarity index 100% rename from app/src-tauri/build.rs rename to apps/desktop/src-tauri/build.rs diff --git a/app/src-tauri/icons/128x128.png b/apps/desktop/src-tauri/icons/128x128.png similarity index 100% rename from app/src-tauri/icons/128x128.png rename to apps/desktop/src-tauri/icons/128x128.png diff --git a/app/src-tauri/icons/128x128@2x.png b/apps/desktop/src-tauri/icons/128x128@2x.png similarity index 100% rename from app/src-tauri/icons/128x128@2x.png rename to apps/desktop/src-tauri/icons/128x128@2x.png diff --git a/app/src-tauri/icons/32x32.png b/apps/desktop/src-tauri/icons/32x32.png similarity index 100% rename from app/src-tauri/icons/32x32.png rename to apps/desktop/src-tauri/icons/32x32.png diff --git a/app/src-tauri/icons/64x64.png b/apps/desktop/src-tauri/icons/64x64.png similarity index 100% rename from app/src-tauri/icons/64x64.png rename to apps/desktop/src-tauri/icons/64x64.png diff --git a/app/src-tauri/icons/Square107x107Logo.png b/apps/desktop/src-tauri/icons/Square107x107Logo.png similarity index 100% rename from app/src-tauri/icons/Square107x107Logo.png rename to apps/desktop/src-tauri/icons/Square107x107Logo.png diff --git a/app/src-tauri/icons/Square142x142Logo.png b/apps/desktop/src-tauri/icons/Square142x142Logo.png similarity index 100% rename from app/src-tauri/icons/Square142x142Logo.png rename to apps/desktop/src-tauri/icons/Square142x142Logo.png diff --git a/app/src-tauri/icons/Square150x150Logo.png b/apps/desktop/src-tauri/icons/Square150x150Logo.png similarity index 100% rename from app/src-tauri/icons/Square150x150Logo.png rename to apps/desktop/src-tauri/icons/Square150x150Logo.png diff --git a/app/src-tauri/icons/Square284x284Logo.png b/apps/desktop/src-tauri/icons/Square284x284Logo.png similarity index 100% rename from app/src-tauri/icons/Square284x284Logo.png rename to apps/desktop/src-tauri/icons/Square284x284Logo.png diff --git a/app/src-tauri/icons/Square30x30Logo.png b/apps/desktop/src-tauri/icons/Square30x30Logo.png similarity index 100% rename from app/src-tauri/icons/Square30x30Logo.png rename to apps/desktop/src-tauri/icons/Square30x30Logo.png diff --git a/app/src-tauri/icons/Square310x310Logo.png b/apps/desktop/src-tauri/icons/Square310x310Logo.png similarity index 100% rename from app/src-tauri/icons/Square310x310Logo.png rename to apps/desktop/src-tauri/icons/Square310x310Logo.png diff --git a/app/src-tauri/icons/Square44x44Logo.png b/apps/desktop/src-tauri/icons/Square44x44Logo.png similarity index 100% rename from app/src-tauri/icons/Square44x44Logo.png rename to apps/desktop/src-tauri/icons/Square44x44Logo.png diff --git a/app/src-tauri/icons/Square71x71Logo.png b/apps/desktop/src-tauri/icons/Square71x71Logo.png similarity index 100% rename from app/src-tauri/icons/Square71x71Logo.png rename to apps/desktop/src-tauri/icons/Square71x71Logo.png diff --git a/app/src-tauri/icons/Square89x89Logo.png b/apps/desktop/src-tauri/icons/Square89x89Logo.png similarity index 100% rename from app/src-tauri/icons/Square89x89Logo.png rename to apps/desktop/src-tauri/icons/Square89x89Logo.png diff --git a/app/src-tauri/icons/StoreLogo.png b/apps/desktop/src-tauri/icons/StoreLogo.png similarity index 100% rename from app/src-tauri/icons/StoreLogo.png rename to apps/desktop/src-tauri/icons/StoreLogo.png diff --git a/app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml b/apps/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml rename to apps/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png rename to apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png rename to apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png diff --git a/app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png rename to apps/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png diff --git a/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png rename to apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png diff --git a/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png rename to apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png diff --git a/app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png rename to apps/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png diff --git a/app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png rename to apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png diff --git a/app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png rename to apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png rename to apps/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png diff --git a/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png diff --git a/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png diff --git a/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png b/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png diff --git a/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from app/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png rename to apps/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/app/src-tauri/icons/android/values/ic_launcher_background.xml b/apps/desktop/src-tauri/icons/android/values/ic_launcher_background.xml similarity index 100% rename from app/src-tauri/icons/android/values/ic_launcher_background.xml rename to apps/desktop/src-tauri/icons/android/values/ic_launcher_background.xml diff --git a/app/src-tauri/icons/icon.icns b/apps/desktop/src-tauri/icons/icon.icns similarity index 100% rename from app/src-tauri/icons/icon.icns rename to apps/desktop/src-tauri/icons/icon.icns diff --git a/app/src-tauri/icons/icon.ico b/apps/desktop/src-tauri/icons/icon.ico similarity index 100% rename from app/src-tauri/icons/icon.ico rename to apps/desktop/src-tauri/icons/icon.ico diff --git a/app/src-tauri/icons/icon.png b/apps/desktop/src-tauri/icons/icon.png similarity index 100% rename from app/src-tauri/icons/icon.png rename to apps/desktop/src-tauri/icons/icon.png diff --git a/app/src-tauri/icons/ios/AppIcon-20x20@1x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-20x20@1x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png diff --git a/app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png b/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-20x20@2x-1.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png diff --git a/app/src-tauri/icons/ios/AppIcon-20x20@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-20x20@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-20x20@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-20x20@3x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@1x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-29x29@1x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png b/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-29x29@2x-1.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-29x29@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-29x29@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-29x29@3x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png diff --git a/app/src-tauri/icons/ios/AppIcon-40x40@1x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-40x40@1x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png diff --git a/app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-40x40@2x-1.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png diff --git a/app/src-tauri/icons/ios/AppIcon-40x40@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-40x40@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-40x40@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-40x40@3x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png diff --git a/app/src-tauri/icons/ios/AppIcon-512@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-512@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-512@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-60x60@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-60x60@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-60x60@3x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-60x60@3x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png diff --git a/app/src-tauri/icons/ios/AppIcon-76x76@1x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-76x76@1x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png diff --git a/app/src-tauri/icons/ios/AppIcon-76x76@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-76x76@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png diff --git a/app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png b/apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png similarity index 100% rename from app/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png rename to apps/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png diff --git a/app/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs similarity index 100% rename from app/src-tauri/src/lib.rs rename to apps/desktop/src-tauri/src/lib.rs diff --git a/app/src-tauri/src/main.rs b/apps/desktop/src-tauri/src/main.rs similarity index 100% rename from app/src-tauri/src/main.rs rename to apps/desktop/src-tauri/src/main.rs diff --git a/app/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json similarity index 100% rename from app/src-tauri/tauri.conf.json rename to apps/desktop/src-tauri/tauri.conf.json diff --git a/app/src/App.tsx b/apps/desktop/src/App.tsx similarity index 100% rename from app/src/App.tsx rename to apps/desktop/src/App.tsx diff --git a/app/src/components/CommandPalette.tsx b/apps/desktop/src/components/CommandPalette.tsx similarity index 100% rename from app/src/components/CommandPalette.tsx rename to apps/desktop/src/components/CommandPalette.tsx diff --git a/app/src/components/Panel.tsx b/apps/desktop/src/components/Panel.tsx similarity index 100% rename from app/src/components/Panel.tsx rename to apps/desktop/src/components/Panel.tsx diff --git a/app/src/components/PanelErrorBoundary.tsx b/apps/desktop/src/components/PanelErrorBoundary.tsx similarity index 100% rename from app/src/components/PanelErrorBoundary.tsx rename to apps/desktop/src/components/PanelErrorBoundary.tsx diff --git a/app/src/components/PontoonMark.tsx b/apps/desktop/src/components/PontoonMark.tsx similarity index 100% rename from app/src/components/PontoonMark.tsx rename to apps/desktop/src/components/PontoonMark.tsx diff --git a/app/src/components/panel-context.ts b/apps/desktop/src/components/panel-context.ts similarity index 100% rename from app/src/components/panel-context.ts rename to apps/desktop/src/components/panel-context.ts diff --git a/app/src/components/ui/address-input.tsx b/apps/desktop/src/components/ui/address-input.tsx similarity index 100% rename from app/src/components/ui/address-input.tsx rename to apps/desktop/src/components/ui/address-input.tsx diff --git a/app/src/components/ui/badge.tsx b/apps/desktop/src/components/ui/badge.tsx similarity index 100% rename from app/src/components/ui/badge.tsx rename to apps/desktop/src/components/ui/badge.tsx diff --git a/app/src/components/ui/button.tsx b/apps/desktop/src/components/ui/button.tsx similarity index 100% rename from app/src/components/ui/button.tsx rename to apps/desktop/src/components/ui/button.tsx diff --git a/app/src/components/ui/card.tsx b/apps/desktop/src/components/ui/card.tsx similarity index 100% rename from app/src/components/ui/card.tsx rename to apps/desktop/src/components/ui/card.tsx diff --git a/app/src/components/ui/command.tsx b/apps/desktop/src/components/ui/command.tsx similarity index 100% rename from app/src/components/ui/command.tsx rename to apps/desktop/src/components/ui/command.tsx diff --git a/app/src/components/ui/copy-button.tsx b/apps/desktop/src/components/ui/copy-button.tsx similarity index 100% rename from app/src/components/ui/copy-button.tsx rename to apps/desktop/src/components/ui/copy-button.tsx diff --git a/app/src/components/ui/dialog.tsx b/apps/desktop/src/components/ui/dialog.tsx similarity index 100% rename from app/src/components/ui/dialog.tsx rename to apps/desktop/src/components/ui/dialog.tsx diff --git a/app/src/components/ui/dropdown-menu.tsx b/apps/desktop/src/components/ui/dropdown-menu.tsx similarity index 100% rename from app/src/components/ui/dropdown-menu.tsx rename to apps/desktop/src/components/ui/dropdown-menu.tsx diff --git a/app/src/components/ui/empty-state.tsx b/apps/desktop/src/components/ui/empty-state.tsx similarity index 100% rename from app/src/components/ui/empty-state.tsx rename to apps/desktop/src/components/ui/empty-state.tsx diff --git a/app/src/components/ui/index.ts b/apps/desktop/src/components/ui/index.ts similarity index 100% rename from app/src/components/ui/index.ts rename to apps/desktop/src/components/ui/index.ts diff --git a/app/src/components/ui/input.tsx b/apps/desktop/src/components/ui/input.tsx similarity index 100% rename from app/src/components/ui/input.tsx rename to apps/desktop/src/components/ui/input.tsx diff --git a/app/src/components/ui/kbd.tsx b/apps/desktop/src/components/ui/kbd.tsx similarity index 100% rename from app/src/components/ui/kbd.tsx rename to apps/desktop/src/components/ui/kbd.tsx diff --git a/app/src/components/ui/list-item.tsx b/apps/desktop/src/components/ui/list-item.tsx similarity index 100% rename from app/src/components/ui/list-item.tsx rename to apps/desktop/src/components/ui/list-item.tsx diff --git a/app/src/components/ui/log-viewer.tsx b/apps/desktop/src/components/ui/log-viewer.tsx similarity index 100% rename from app/src/components/ui/log-viewer.tsx rename to apps/desktop/src/components/ui/log-viewer.tsx diff --git a/app/src/components/ui/mini-bars.tsx b/apps/desktop/src/components/ui/mini-bars.tsx similarity index 100% rename from app/src/components/ui/mini-bars.tsx rename to apps/desktop/src/components/ui/mini-bars.tsx diff --git a/app/src/components/ui/mono-value.tsx b/apps/desktop/src/components/ui/mono-value.tsx similarity index 100% rename from app/src/components/ui/mono-value.tsx rename to apps/desktop/src/components/ui/mono-value.tsx diff --git a/app/src/components/ui/phase-pill.tsx b/apps/desktop/src/components/ui/phase-pill.tsx similarity index 100% rename from app/src/components/ui/phase-pill.tsx rename to apps/desktop/src/components/ui/phase-pill.tsx diff --git a/app/src/components/ui/resizable.tsx b/apps/desktop/src/components/ui/resizable.tsx similarity index 100% rename from app/src/components/ui/resizable.tsx rename to apps/desktop/src/components/ui/resizable.tsx diff --git a/app/src/components/ui/scroll-area.tsx b/apps/desktop/src/components/ui/scroll-area.tsx similarity index 100% rename from app/src/components/ui/scroll-area.tsx rename to apps/desktop/src/components/ui/scroll-area.tsx diff --git a/app/src/components/ui/section-label.tsx b/apps/desktop/src/components/ui/section-label.tsx similarity index 100% rename from app/src/components/ui/section-label.tsx rename to apps/desktop/src/components/ui/section-label.tsx diff --git a/app/src/components/ui/separator.tsx b/apps/desktop/src/components/ui/separator.tsx similarity index 100% rename from app/src/components/ui/separator.tsx rename to apps/desktop/src/components/ui/separator.tsx diff --git a/app/src/components/ui/skeleton.tsx b/apps/desktop/src/components/ui/skeleton.tsx similarity index 100% rename from app/src/components/ui/skeleton.tsx rename to apps/desktop/src/components/ui/skeleton.tsx diff --git a/app/src/components/ui/stat-card.tsx b/apps/desktop/src/components/ui/stat-card.tsx similarity index 100% rename from app/src/components/ui/stat-card.tsx rename to apps/desktop/src/components/ui/stat-card.tsx diff --git a/app/src/components/ui/table.tsx b/apps/desktop/src/components/ui/table.tsx similarity index 100% rename from app/src/components/ui/table.tsx rename to apps/desktop/src/components/ui/table.tsx diff --git a/app/src/components/ui/tabs.tsx b/apps/desktop/src/components/ui/tabs.tsx similarity index 100% rename from app/src/components/ui/tabs.tsx rename to apps/desktop/src/components/ui/tabs.tsx diff --git a/app/src/components/ui/textarea.tsx b/apps/desktop/src/components/ui/textarea.tsx similarity index 100% rename from app/src/components/ui/textarea.tsx rename to apps/desktop/src/components/ui/textarea.tsx diff --git a/app/src/components/ui/tooltip.tsx b/apps/desktop/src/components/ui/tooltip.tsx similarity index 100% rename from app/src/components/ui/tooltip.tsx rename to apps/desktop/src/components/ui/tooltip.tsx diff --git a/app/src/components/ui/tree.tsx b/apps/desktop/src/components/ui/tree.tsx similarity index 100% rename from app/src/components/ui/tree.tsx rename to apps/desktop/src/components/ui/tree.tsx diff --git a/app/src/components/ui/virtual-list.tsx b/apps/desktop/src/components/ui/virtual-list.tsx similarity index 100% rename from app/src/components/ui/virtual-list.tsx rename to apps/desktop/src/components/ui/virtual-list.tsx diff --git a/app/src/hooks/useAccounts.ts b/apps/desktop/src/hooks/useAccounts.ts similarity index 100% rename from app/src/hooks/useAccounts.ts rename to apps/desktop/src/hooks/useAccounts.ts diff --git a/app/src/hooks/useAddressOptions.ts b/apps/desktop/src/hooks/useAddressOptions.ts similarity index 100% rename from app/src/hooks/useAddressOptions.ts rename to apps/desktop/src/hooks/useAddressOptions.ts diff --git a/app/src/hooks/useBenchmark.ts b/apps/desktop/src/hooks/useBenchmark.ts similarity index 100% rename from app/src/hooks/useBenchmark.ts rename to apps/desktop/src/hooks/useBenchmark.ts diff --git a/app/src/hooks/useBlocks.ts b/apps/desktop/src/hooks/useBlocks.ts similarity index 100% rename from app/src/hooks/useBlocks.ts rename to apps/desktop/src/hooks/useBlocks.ts diff --git a/app/src/hooks/useBridgeStatus.ts b/apps/desktop/src/hooks/useBridgeStatus.ts similarity index 100% rename from app/src/hooks/useBridgeStatus.ts rename to apps/desktop/src/hooks/useBridgeStatus.ts diff --git a/app/src/hooks/useConfig.ts b/apps/desktop/src/hooks/useConfig.ts similarity index 100% rename from app/src/hooks/useConfig.ts rename to apps/desktop/src/hooks/useConfig.ts diff --git a/app/src/hooks/useContracts.ts b/apps/desktop/src/hooks/useContracts.ts similarity index 100% rename from app/src/hooks/useContracts.ts rename to apps/desktop/src/hooks/useContracts.ts diff --git a/app/src/hooks/useCoverage.ts b/apps/desktop/src/hooks/useCoverage.ts similarity index 100% rename from app/src/hooks/useCoverage.ts rename to apps/desktop/src/hooks/useCoverage.ts diff --git a/app/src/hooks/useDeterminism.ts b/apps/desktop/src/hooks/useDeterminism.ts similarity index 100% rename from app/src/hooks/useDeterminism.ts rename to apps/desktop/src/hooks/useDeterminism.ts diff --git a/app/src/hooks/useFork.ts b/apps/desktop/src/hooks/useFork.ts similarity index 100% rename from app/src/hooks/useFork.ts rename to apps/desktop/src/hooks/useFork.ts diff --git a/app/src/hooks/useGetMethod.ts b/apps/desktop/src/hooks/useGetMethod.ts similarity index 100% rename from app/src/hooks/useGetMethod.ts rename to apps/desktop/src/hooks/useGetMethod.ts diff --git a/app/src/hooks/useLibraries.ts b/apps/desktop/src/hooks/useLibraries.ts similarity index 100% rename from app/src/hooks/useLibraries.ts rename to apps/desktop/src/hooks/useLibraries.ts diff --git a/app/src/hooks/useLogStream.ts b/apps/desktop/src/hooks/useLogStream.ts similarity index 100% rename from app/src/hooks/useLogStream.ts rename to apps/desktop/src/hooks/useLogStream.ts diff --git a/app/src/hooks/useSendMessage.ts b/apps/desktop/src/hooks/useSendMessage.ts similarity index 100% rename from app/src/hooks/useSendMessage.ts rename to apps/desktop/src/hooks/useSendMessage.ts diff --git a/app/src/hooks/useShardAccount.ts b/apps/desktop/src/hooks/useShardAccount.ts similarity index 100% rename from app/src/hooks/useShardAccount.ts rename to apps/desktop/src/hooks/useShardAccount.ts diff --git a/app/src/hooks/useSnapshots.ts b/apps/desktop/src/hooks/useSnapshots.ts similarity index 100% rename from app/src/hooks/useSnapshots.ts rename to apps/desktop/src/hooks/useSnapshots.ts diff --git a/app/src/hooks/useStepExec.ts b/apps/desktop/src/hooks/useStepExec.ts similarity index 100% rename from app/src/hooks/useStepExec.ts rename to apps/desktop/src/hooks/useStepExec.ts diff --git a/app/src/hooks/useTestRun.ts b/apps/desktop/src/hooks/useTestRun.ts similarity index 100% rename from app/src/hooks/useTestRun.ts rename to apps/desktop/src/hooks/useTestRun.ts diff --git a/app/src/hooks/useTimeControl.ts b/apps/desktop/src/hooks/useTimeControl.ts similarity index 100% rename from app/src/hooks/useTimeControl.ts rename to apps/desktop/src/hooks/useTimeControl.ts diff --git a/app/src/hooks/useVmSteps.ts b/apps/desktop/src/hooks/useVmSteps.ts similarity index 100% rename from app/src/hooks/useVmSteps.ts rename to apps/desktop/src/hooks/useVmSteps.ts diff --git a/app/src/hooks/useWorkspace.ts b/apps/desktop/src/hooks/useWorkspace.ts similarity index 100% rename from app/src/hooks/useWorkspace.ts rename to apps/desktop/src/hooks/useWorkspace.ts diff --git a/app/src/lib/address.ts b/apps/desktop/src/lib/address.ts similarity index 100% rename from app/src/lib/address.ts rename to apps/desktop/src/lib/address.ts diff --git a/app/src/lib/cn.ts b/apps/desktop/src/lib/cn.ts similarity index 100% rename from app/src/lib/cn.ts rename to apps/desktop/src/lib/cn.ts diff --git a/app/src/lib/examples.ts b/apps/desktop/src/lib/examples.ts similarity index 100% rename from app/src/lib/examples.ts rename to apps/desktop/src/lib/examples.ts diff --git a/app/src/lib/exitCodes.ts b/apps/desktop/src/lib/exitCodes.ts similarity index 100% rename from app/src/lib/exitCodes.ts rename to apps/desktop/src/lib/exitCodes.ts diff --git a/app/src/lib/format.ts b/apps/desktop/src/lib/format.ts similarity index 100% rename from app/src/lib/format.ts rename to apps/desktop/src/lib/format.ts diff --git a/app/src/lib/tlb/cellParser.ts b/apps/desktop/src/lib/tlb/cellParser.ts similarity index 100% rename from app/src/lib/tlb/cellParser.ts rename to apps/desktop/src/lib/tlb/cellParser.ts diff --git a/app/src/lib/walletVersions.ts b/apps/desktop/src/lib/walletVersions.ts similarity index 100% rename from app/src/lib/walletVersions.ts rename to apps/desktop/src/lib/walletVersions.ts diff --git a/app/src/main.tsx b/apps/desktop/src/main.tsx similarity index 100% rename from app/src/main.tsx rename to apps/desktop/src/main.tsx diff --git a/app/src/panels/A1/WorkspacePanel.tsx b/apps/desktop/src/panels/A1/WorkspacePanel.tsx similarity index 100% rename from app/src/panels/A1/WorkspacePanel.tsx rename to apps/desktop/src/panels/A1/WorkspacePanel.tsx diff --git a/app/src/panels/A10-snapshots/SnapshotDiffView.tsx b/apps/desktop/src/panels/A10-snapshots/SnapshotDiffView.tsx similarity index 100% rename from app/src/panels/A10-snapshots/SnapshotDiffView.tsx rename to apps/desktop/src/panels/A10-snapshots/SnapshotDiffView.tsx diff --git a/app/src/panels/A10-snapshots/SnapshotManagerPanel.tsx b/apps/desktop/src/panels/A10-snapshots/SnapshotManagerPanel.tsx similarity index 100% rename from app/src/panels/A10-snapshots/SnapshotManagerPanel.tsx rename to apps/desktop/src/panels/A10-snapshots/SnapshotManagerPanel.tsx diff --git a/app/src/panels/A10-snapshots/snapshotGraph.ts b/apps/desktop/src/panels/A10-snapshots/snapshotGraph.ts similarity index 100% rename from app/src/panels/A10-snapshots/snapshotGraph.ts rename to apps/desktop/src/panels/A10-snapshots/snapshotGraph.ts diff --git a/app/src/panels/A11-fork/ForkPanel.tsx b/apps/desktop/src/panels/A11-fork/ForkPanel.tsx similarity index 100% rename from app/src/panels/A11-fork/ForkPanel.tsx rename to apps/desktop/src/panels/A11-fork/ForkPanel.tsx diff --git a/app/src/panels/A12-config/ConfigPanel.tsx b/apps/desktop/src/panels/A12-config/ConfigPanel.tsx similarity index 100% rename from app/src/panels/A12-config/ConfigPanel.tsx rename to apps/desktop/src/panels/A12-config/ConfigPanel.tsx diff --git a/app/src/panels/A13-libraries/LibrariesPanel.tsx b/apps/desktop/src/panels/A13-libraries/LibrariesPanel.tsx similarity index 100% rename from app/src/panels/A13-libraries/LibrariesPanel.tsx rename to apps/desktop/src/panels/A13-libraries/LibrariesPanel.tsx diff --git a/app/src/panels/A14-logs/LogsPanel.tsx b/apps/desktop/src/panels/A14-logs/LogsPanel.tsx similarity index 100% rename from app/src/panels/A14-logs/LogsPanel.tsx rename to apps/desktop/src/panels/A14-logs/LogsPanel.tsx diff --git a/app/src/panels/A15-coverage/CoveragePanel.tsx b/apps/desktop/src/panels/A15-coverage/CoveragePanel.tsx similarity index 100% rename from app/src/panels/A15-coverage/CoveragePanel.tsx rename to apps/desktop/src/panels/A15-coverage/CoveragePanel.tsx diff --git a/app/src/panels/A16-benchmark/BenchmarkPanel.tsx b/apps/desktop/src/panels/A16-benchmark/BenchmarkPanel.tsx similarity index 100% rename from app/src/panels/A16-benchmark/BenchmarkPanel.tsx rename to apps/desktop/src/panels/A16-benchmark/BenchmarkPanel.tsx diff --git a/app/src/panels/A17-step/StackView.tsx b/apps/desktop/src/panels/A17-step/StackView.tsx similarity index 100% rename from app/src/panels/A17-step/StackView.tsx rename to apps/desktop/src/panels/A17-step/StackView.tsx diff --git a/app/src/panels/A17-step/StepExecPanel.tsx b/apps/desktop/src/panels/A17-step/StepExecPanel.tsx similarity index 100% rename from app/src/panels/A17-step/StepExecPanel.tsx rename to apps/desktop/src/panels/A17-step/StepExecPanel.tsx diff --git a/app/src/panels/A17-step/StepList.tsx b/apps/desktop/src/panels/A17-step/StepList.tsx similarity index 100% rename from app/src/panels/A17-step/StepList.tsx rename to apps/desktop/src/panels/A17-step/StepList.tsx diff --git a/app/src/panels/A18-mitm/MitmPanel.tsx b/apps/desktop/src/panels/A18-mitm/MitmPanel.tsx similarity index 100% rename from app/src/panels/A18-mitm/MitmPanel.tsx rename to apps/desktop/src/panels/A18-mitm/MitmPanel.tsx diff --git a/app/src/panels/A19-determinism/DeterminismPanel.tsx b/apps/desktop/src/panels/A19-determinism/DeterminismPanel.tsx similarity index 100% rename from app/src/panels/A19-determinism/DeterminismPanel.tsx rename to apps/desktop/src/panels/A19-determinism/DeterminismPanel.tsx diff --git a/app/src/panels/A2/AccountDetail.tsx b/apps/desktop/src/panels/A2/AccountDetail.tsx similarity index 100% rename from app/src/panels/A2/AccountDetail.tsx rename to apps/desktop/src/panels/A2/AccountDetail.tsx diff --git a/app/src/panels/A2/AccountsPanel.tsx b/apps/desktop/src/panels/A2/AccountsPanel.tsx similarity index 100% rename from app/src/panels/A2/AccountsPanel.tsx rename to apps/desktop/src/panels/A2/AccountsPanel.tsx diff --git a/app/src/panels/A20-tests/TestRunnerPanel.tsx b/apps/desktop/src/panels/A20-tests/TestRunnerPanel.tsx similarity index 100% rename from app/src/panels/A20-tests/TestRunnerPanel.tsx rename to apps/desktop/src/panels/A20-tests/TestRunnerPanel.tsx diff --git a/app/src/panels/A3/AbiMethods.tsx b/apps/desktop/src/panels/A3/AbiMethods.tsx similarity index 100% rename from app/src/panels/A3/AbiMethods.tsx rename to apps/desktop/src/panels/A3/AbiMethods.tsx diff --git a/app/src/panels/A3/ContractDetail.tsx b/apps/desktop/src/panels/A3/ContractDetail.tsx similarity index 100% rename from app/src/panels/A3/ContractDetail.tsx rename to apps/desktop/src/panels/A3/ContractDetail.tsx diff --git a/app/src/panels/A3/ContractRegistryPanel.tsx b/apps/desktop/src/panels/A3/ContractRegistryPanel.tsx similarity index 100% rename from app/src/panels/A3/ContractRegistryPanel.tsx rename to apps/desktop/src/panels/A3/ContractRegistryPanel.tsx diff --git a/app/src/panels/A4/SenderPanel.tsx b/apps/desktop/src/panels/A4/SenderPanel.tsx similarity index 100% rename from app/src/panels/A4/SenderPanel.tsx rename to apps/desktop/src/panels/A4/SenderPanel.tsx diff --git a/app/src/panels/A5-getmethod/CellTreeView.tsx b/apps/desktop/src/panels/A5-getmethod/CellTreeView.tsx similarity index 100% rename from app/src/panels/A5-getmethod/CellTreeView.tsx rename to apps/desktop/src/panels/A5-getmethod/CellTreeView.tsx diff --git a/app/src/panels/A5-getmethod/GetMethodPanel.tsx b/apps/desktop/src/panels/A5-getmethod/GetMethodPanel.tsx similarity index 100% rename from app/src/panels/A5-getmethod/GetMethodPanel.tsx rename to apps/desktop/src/panels/A5-getmethod/GetMethodPanel.tsx diff --git a/app/src/panels/A5-getmethod/StackArgsEditor.tsx b/apps/desktop/src/panels/A5-getmethod/StackArgsEditor.tsx similarity index 100% rename from app/src/panels/A5-getmethod/StackArgsEditor.tsx rename to apps/desktop/src/panels/A5-getmethod/StackArgsEditor.tsx diff --git a/app/src/panels/A5-getmethod/StackEditor.tsx b/apps/desktop/src/panels/A5-getmethod/StackEditor.tsx similarity index 100% rename from app/src/panels/A5-getmethod/StackEditor.tsx rename to apps/desktop/src/panels/A5-getmethod/StackEditor.tsx diff --git a/app/src/panels/A6/EventsList.tsx b/apps/desktop/src/panels/A6/EventsList.tsx similarity index 100% rename from app/src/panels/A6/EventsList.tsx rename to apps/desktop/src/panels/A6/EventsList.tsx diff --git a/app/src/panels/A6/InspectorPanel.tsx b/apps/desktop/src/panels/A6/InspectorPanel.tsx similarity index 100% rename from app/src/panels/A6/InspectorPanel.tsx rename to apps/desktop/src/panels/A6/InspectorPanel.tsx diff --git a/app/src/panels/A6/PhaseBreakdown.tsx b/apps/desktop/src/panels/A6/PhaseBreakdown.tsx similarity index 100% rename from app/src/panels/A6/PhaseBreakdown.tsx rename to apps/desktop/src/panels/A6/PhaseBreakdown.tsx diff --git a/app/src/panels/A6/StepTrace.tsx b/apps/desktop/src/panels/A6/StepTrace.tsx similarity index 100% rename from app/src/panels/A6/StepTrace.tsx rename to apps/desktop/src/panels/A6/StepTrace.tsx diff --git a/app/src/panels/A6/TxNodeView.tsx b/apps/desktop/src/panels/A6/TxNodeView.tsx similarity index 100% rename from app/src/panels/A6/TxNodeView.tsx rename to apps/desktop/src/panels/A6/TxNodeView.tsx diff --git a/app/src/panels/A6/layout.ts b/apps/desktop/src/panels/A6/layout.ts similarity index 100% rename from app/src/panels/A6/layout.ts rename to apps/desktop/src/panels/A6/layout.ts diff --git a/app/src/panels/A7-explorer/BlockExplorerPanel.tsx b/apps/desktop/src/panels/A7-explorer/BlockExplorerPanel.tsx similarity index 100% rename from app/src/panels/A7-explorer/BlockExplorerPanel.tsx rename to apps/desktop/src/panels/A7-explorer/BlockExplorerPanel.tsx diff --git a/app/src/panels/A7-explorer/TxDetail.tsx b/apps/desktop/src/panels/A7-explorer/TxDetail.tsx similarity index 100% rename from app/src/panels/A7-explorer/TxDetail.tsx rename to apps/desktop/src/panels/A7-explorer/TxDetail.tsx diff --git a/app/src/panels/A8-state/NodeDetail.tsx b/apps/desktop/src/panels/A8-state/NodeDetail.tsx similarity index 100% rename from app/src/panels/A8-state/NodeDetail.tsx rename to apps/desktop/src/panels/A8-state/NodeDetail.tsx diff --git a/app/src/panels/A8-state/StateInspectorPanel.tsx b/apps/desktop/src/panels/A8-state/StateInspectorPanel.tsx similarity index 100% rename from app/src/panels/A8-state/StateInspectorPanel.tsx rename to apps/desktop/src/panels/A8-state/StateInspectorPanel.tsx diff --git a/app/src/panels/A8-state/cellTree.ts b/apps/desktop/src/panels/A8-state/cellTree.ts similarity index 100% rename from app/src/panels/A8-state/cellTree.ts rename to apps/desktop/src/panels/A8-state/cellTree.ts diff --git a/app/src/panels/A9-time/TimeControlPanel.tsx b/apps/desktop/src/panels/A9-time/TimeControlPanel.tsx similarity index 100% rename from app/src/panels/A9-time/TimeControlPanel.tsx rename to apps/desktop/src/panels/A9-time/TimeControlPanel.tsx diff --git a/app/src/panels/A9-time/storageFeeProjection.ts b/apps/desktop/src/panels/A9-time/storageFeeProjection.ts similarity index 100% rename from app/src/panels/A9-time/storageFeeProjection.ts rename to apps/desktop/src/panels/A9-time/storageFeeProjection.ts diff --git a/app/src/panels/registry.ts b/apps/desktop/src/panels/registry.ts similarity index 100% rename from app/src/panels/registry.ts rename to apps/desktop/src/panels/registry.ts diff --git a/app/src/polyfills.ts b/apps/desktop/src/polyfills.ts similarity index 100% rename from app/src/polyfills.ts rename to apps/desktop/src/polyfills.ts diff --git a/app/src/query/queryClient.ts b/apps/desktop/src/query/queryClient.ts similarity index 100% rename from app/src/query/queryClient.ts rename to apps/desktop/src/query/queryClient.ts diff --git a/app/src/rpc/bootstrap.ts b/apps/desktop/src/rpc/bootstrap.ts similarity index 100% rename from app/src/rpc/bootstrap.ts rename to apps/desktop/src/rpc/bootstrap.ts diff --git a/app/src/rpc/client.ts b/apps/desktop/src/rpc/client.ts similarity index 100% rename from app/src/rpc/client.ts rename to apps/desktop/src/rpc/client.ts diff --git a/app/src/rpc/codec.ts b/apps/desktop/src/rpc/codec.ts similarity index 100% rename from app/src/rpc/codec.ts rename to apps/desktop/src/rpc/codec.ts diff --git a/app/src/rpc/contract.ts b/apps/desktop/src/rpc/contract.ts similarity index 100% rename from app/src/rpc/contract.ts rename to apps/desktop/src/rpc/contract.ts diff --git a/app/src/rpc/messageTree.ts b/apps/desktop/src/rpc/messageTree.ts similarity index 100% rename from app/src/rpc/messageTree.ts rename to apps/desktop/src/rpc/messageTree.ts diff --git a/app/src/rpc/transport.ts b/apps/desktop/src/rpc/transport.ts similarity index 100% rename from app/src/rpc/transport.ts rename to apps/desktop/src/rpc/transport.ts diff --git a/app/src/state/logStore.ts b/apps/desktop/src/state/logStore.ts similarity index 100% rename from app/src/state/logStore.ts rename to apps/desktop/src/state/logStore.ts diff --git a/app/src/state/store.ts b/apps/desktop/src/state/store.ts similarity index 100% rename from app/src/state/store.ts rename to apps/desktop/src/state/store.ts diff --git a/app/src/state/traceStore.ts b/apps/desktop/src/state/traceStore.ts similarity index 100% rename from app/src/state/traceStore.ts rename to apps/desktop/src/state/traceStore.ts diff --git a/app/src/styles.css b/apps/desktop/src/styles.css similarity index 100% rename from app/src/styles.css rename to apps/desktop/src/styles.css diff --git a/app/tsconfig.json b/apps/desktop/tsconfig.json similarity index 100% rename from app/tsconfig.json rename to apps/desktop/tsconfig.json diff --git a/app/vite.config.ts b/apps/desktop/vite.config.ts similarity index 100% rename from app/vite.config.ts rename to apps/desktop/vite.config.ts diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0eb9d87..82e3416 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,5 @@ packages: - - "app" + - "apps/*" - "packages/*" allowBuilds: esbuild: true diff --git a/scripts/build-sidecar.mjs b/scripts/build-sidecar.mjs index a85205c..b5b22ed 100644 --- a/scripts/build-sidecar.mjs +++ b/scripts/build-sidecar.mjs @@ -39,7 +39,7 @@ if (!triple || !TARGETS[triple]) { } const entry = join(repoRoot, 'packages', 'bridge', 'server.ts'); -const outDir = join(repoRoot, 'app', 'src-tauri', 'binaries'); +const outDir = join(repoRoot, 'apps', 'desktop', 'src-tauri', 'binaries'); // Tauri's bundle.externalBin expects - (plus .exe on Windows). const ext = triple === 'x86_64-pc-windows-msvc' ? '.exe' : ''; const outfile = join(outDir, `pontoon-bridge-${triple}${ext}`); From b8238451c9e3f007c3f02194e80b6d97998b6405 Mon Sep 17 00:00:00 2001 From: GiFTED! Date: Sun, 12 Jul 2026 18:57:38 +0100 Subject: [PATCH 2/4] feat: add marketing website under apps/website --- .gitignore | 1 + apps/website/app/globals.css | 155 +++++ apps/website/app/layout.tsx | 39 ++ apps/website/app/page.tsx | 23 + apps/website/components/cta.tsx | 46 ++ apps/website/components/features.tsx | 81 +++ apps/website/components/hero.tsx | 83 +++ apps/website/components/how-it-works.tsx | 54 ++ apps/website/components/panels.tsx | 54 ++ apps/website/components/pontoon-mark.tsx | 32 + apps/website/components/section-header.tsx | 27 + apps/website/components/site-footer.tsx | 69 +++ apps/website/components/site-nav.tsx | 48 ++ apps/website/components/trace-panel.tsx | 153 +++++ apps/website/lib/site.ts | 8 + apps/website/next-env.d.ts | 6 + apps/website/next.config.mjs | 12 + apps/website/package.json | 26 + apps/website/postcss.config.mjs | 5 + apps/website/tsconfig.json | 41 ++ pnpm-lock.yaml | 689 ++++++++++++++++++++- turbo.json | 2 +- 22 files changed, 1652 insertions(+), 2 deletions(-) create mode 100644 apps/website/app/globals.css create mode 100644 apps/website/app/layout.tsx create mode 100644 apps/website/app/page.tsx create mode 100644 apps/website/components/cta.tsx create mode 100644 apps/website/components/features.tsx create mode 100644 apps/website/components/hero.tsx create mode 100644 apps/website/components/how-it-works.tsx create mode 100644 apps/website/components/panels.tsx create mode 100644 apps/website/components/pontoon-mark.tsx create mode 100644 apps/website/components/section-header.tsx create mode 100644 apps/website/components/site-footer.tsx create mode 100644 apps/website/components/site-nav.tsx create mode 100644 apps/website/components/trace-panel.tsx create mode 100644 apps/website/lib/site.ts create mode 100644 apps/website/next-env.d.ts create mode 100644 apps/website/next.config.mjs create mode 100644 apps/website/package.json create mode 100644 apps/website/postcss.config.mjs create mode 100644 apps/website/tsconfig.json diff --git a/.gitignore b/.gitignore index 382b9b8..ea71b74 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ node_modules build dist .next +*.tsbuildinfo # Rust / Tauri apps/desktop/src-tauri/target/ diff --git a/apps/website/app/globals.css b/apps/website/app/globals.css new file mode 100644 index 0000000..e94bd1f --- /dev/null +++ b/apps/website/app/globals.css @@ -0,0 +1,155 @@ +@import "tailwindcss"; + +/* ───────────────────────────────────────────────────────────────────────── + Pontoon marketing site — dark-first, single theme. Tokens mirror the + product's design system (apps/desktop/src/styles.css): neutral charcoal + surfaces, one vibrant pontoon green reserved for signal. Marketing keeps + the same palette so the site and the app read as one product. + ───────────────────────────────────────────────────────────────────────── */ + +:root { + --brand: oklch(0.78 0.155 163); + --brand-deep: oklch(0.62 0.135 163); + --brand-foreground: oklch(0.2 0.05 163); + + --background: oklch(0.175 0.003 170); + --well: oklch(0.145 0.003 170); + --foreground: oklch(0.93 0.003 170); + --card: oklch(0.212 0.003 170); + --card-raised: oklch(0.235 0.004 170); + --muted: oklch(0.265 0.004 170); + --muted-foreground: oklch(0.66 0.006 170); + --faint-foreground: oklch(0.61 0.006 170); + --border: oklch(0.29 0.005 170); + --border-strong: oklch(0.37 0.006 170); + --rail: oklch(0.16 0.003 170); + --accent: oklch(0.285 0.008 168); + + --success: oklch(0.74 0.14 158); + --warning: oklch(0.79 0.14 76); + --danger: oklch(0.64 0.19 25); + + --radius: 0.625rem; +} + +@theme inline { + --color-background: var(--background); + --color-well: var(--well); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-raised: var(--card-raised); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-faint: var(--faint-foreground); + --color-border: var(--border); + --color-border-strong: var(--border-strong); + --color-rail: var(--rail); + --color-accent: var(--accent); + --color-brand: var(--brand); + --color-brand-deep: var(--brand-deep); + --color-brand-foreground: var(--brand-foreground); + --color-success: var(--success); + --color-warning: var(--warning); + --color-danger: var(--danger); + + --font-sans: var(--font-archivo), ui-sans-serif, system-ui, -apple-system, sans-serif; + --font-mono: var(--font-jetbrains), "SFMono-Regular", Consolas, ui-monospace, monospace; + + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 0.35rem); +} + +* { + border-color: var(--border); +} + +html { + scroll-behavior: smooth; +} + +body { + background: var(--background); + color: var(--foreground); + font-family: var(--font-sans); + font-synthesis: none; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +::selection { + background: color-mix(in oklch, var(--brand) 30%, transparent); + color: var(--foreground); +} + +:focus-visible { + outline: 2px solid var(--brand); + outline-offset: 2px; + border-radius: 5px; +} + +h1, +h2, +h3 { + text-wrap: balance; +} +p { + text-wrap: pretty; +} + +.font-mono { + font-family: var(--font-mono); + font-feature-settings: "tnum" 1, "cv01" 1; +} + +.tnum { + font-variant-numeric: tabular-nums; +} + +/* Structural dot grid — the product's Local Sandbox backdrop. */ +.dot-grid { + background-image: radial-gradient(circle at center, var(--border) 1px, transparent 1px); + background-size: 22px 22px; +} + +/* Fine engineering grid for large section backdrops. */ +.line-grid { + background-image: + linear-gradient(to right, var(--border) 1px, transparent 1px), + linear-gradient(to bottom, var(--border) 1px, transparent 1px); + background-size: 64px 64px; +} + +/* Live-status dot — breathes only to signal connection, like the app. */ +.live-dot { + position: relative; +} +.live-dot::after { + content: ""; + position: absolute; + inset: -4px; + border-radius: 9999px; + background: var(--brand); + opacity: 0.35; + animation: live-pulse 2.4s ease-in-out infinite; +} + +@keyframes live-pulse { + 0%, 100% { transform: scale(0.7); opacity: 0.35; } + 50% { transform: scale(1.15); opacity: 0; } +} + +/* One orchestrated page-load reveal. */ +.reveal { + opacity: 0; + transform: translateY(14px); + animation: reveal-in 0.7s cubic-bezier(0.22, 1, 0.36, 1) forwards; +} +@keyframes reveal-in { + to { opacity: 1; transform: none; } +} + +@media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + .reveal { animation: none; opacity: 1; transform: none; } + .live-dot::after { animation: none; opacity: 0; } +} diff --git a/apps/website/app/layout.tsx b/apps/website/app/layout.tsx new file mode 100644 index 0000000..8656a66 --- /dev/null +++ b/apps/website/app/layout.tsx @@ -0,0 +1,39 @@ +import type { Metadata } from "next"; +import { Archivo, JetBrains_Mono } from "next/font/google"; +import "./globals.css"; + +const archivo = Archivo({ + subsets: ["latin"], + variable: "--font-archivo", + display: "swap" +}); + +const jetbrainsMono = JetBrains_Mono({ + subsets: ["latin"], + variable: "--font-jetbrains", + display: "swap" +}); + +export const metadata: Metadata = { + metadataBase: new URL("https://pontoon.dev"), + title: "Pontoon: the desktop inspector for @ton/sandbox", + description: + "Pontoon is a local-first desktop tool for @ton/sandbox. Deploy contracts, send messages, and watch the whole async transaction tree: phase-level fees, TVM traces, and state, without reading raw VM logs.", + keywords: ["TON", "@ton/sandbox", "Blueprint", "TVM", "smart contracts", "debugger", "desktop"], + openGraph: { + title: "Pontoon: the desktop inspector for @ton/sandbox", + description: + "Make TON's async execution visible. A local-first desktop debugger for @ton/sandbox.", + type: "website" + } +}; + +export default function RootLayout({ + children +}: Readonly<{ children: React.ReactNode }>) { + return ( + + {children} + + ); +} diff --git a/apps/website/app/page.tsx b/apps/website/app/page.tsx new file mode 100644 index 0000000..fa234af --- /dev/null +++ b/apps/website/app/page.tsx @@ -0,0 +1,23 @@ +import { SiteNav } from "@/components/site-nav"; +import { Hero } from "@/components/hero"; +import { Features } from "@/components/features"; +import { HowItWorks } from "@/components/how-it-works"; +import { Panels } from "@/components/panels"; +import { Cta } from "@/components/cta"; +import { SiteFooter } from "@/components/site-footer"; + +export default function Home() { + return ( + <> + +
+ + + + + +
+ + + ); +} diff --git a/apps/website/components/cta.tsx b/apps/website/components/cta.tsx new file mode 100644 index 0000000..345bbc6 --- /dev/null +++ b/apps/website/components/cta.tsx @@ -0,0 +1,46 @@ +import { ArrowRight, Github } from "lucide-react"; +import { PontoonMark } from "./pontoon-mark"; +import { GITHUB_URL, RELEASES_URL } from "@/lib/site"; + +export function Cta() { + return ( +
+
+
+
+
+ + + +

+ Debug your next TON transaction without reading a single VM log. +

+

+ Free and local-first. Open a project, send a message, and watch the tree. +

+ +
+
+
+
+ ); +} diff --git a/apps/website/components/features.tsx b/apps/website/components/features.tsx new file mode 100644 index 0000000..834d148 --- /dev/null +++ b/apps/website/components/features.tsx @@ -0,0 +1,81 @@ +import { + Waypoints, + Receipt, + Footprints, + Binary, + GitBranch, + Gauge +} from "lucide-react"; +import { SectionHeader } from "./section-header"; + +const FEATURES = [ + { + icon: Waypoints, + label: "INSPECT", + title: "Transaction-tree inspector", + body: "The async message tree is the primary view. Expand every internal message, see the fan-out, and read status and fees inline." + }, + { + icon: Receipt, + label: "FEES", + title: "Phase-level breakdown", + body: "Compute, action, and storage fees split out per transaction, so you know exactly where the gas went." + }, + { + icon: Footprints, + label: "DEBUG", + title: "TVM step debugger", + body: "Step through VM instructions with a synchronized stack view and the current opcode kept in focus." + }, + { + icon: Binary, + label: "DECODE", + title: "Cell & TL-B viewer", + body: "Inspect BOC cells as a typed tree with breadcrumbs, decoded against your TL-B schema." + }, + { + icon: GitBranch, + label: "STATE", + title: "Snapshots & time control", + body: "Branch, fork, and revert sandbox state. Advance logical time to test timeouts deterministically." + }, + { + icon: Gauge, + label: "MEASURE", + title: "Coverage & benchmarks", + body: "FunC and Tact source coverage plus gas benchmarks, pulled straight from your test runs." + } +]; + +export function Features() { + return ( +
+
+ + Pontoon is a display layer for the sandbox you already run. It turns raw VM output into + the structures TON developers actually reason about. + + +
+ {FEATURES.map(({ icon: Icon, label, title, body }) => ( +
+
+ + + + {label} +
+
+

{title}

+

{body}

+
+
+ ))} +
+
+
+ ); +} diff --git a/apps/website/components/hero.tsx b/apps/website/components/hero.tsx new file mode 100644 index 0000000..badc6a9 --- /dev/null +++ b/apps/website/components/hero.tsx @@ -0,0 +1,83 @@ +import { ArrowRight, Github } from "lucide-react"; +import { TracePanel } from "./trace-panel"; +import { GITHUB_URL, RELEASES_URL } from "@/lib/site"; + +const SIGNALS = ["@ton/sandbox", "57 wire methods", "local-first", "no testnet"]; + +export function Hero() { + return ( +
+
+ +
+
+
+ + DESKTOP INSPECTOR · @ton/sandbox +
+ +

+ Make TON's async execution{" "} + visible. +

+ +

+ Pontoon is a local-first desktop tool for @ton/sandbox. + Deploy contracts, send messages, and watch the whole async transaction tree: + phase-level fees, TVM traces, and state changes, without leaving your desk or + reading raw VM logs. +

+ + + +
+ {SIGNALS.map((s, i) => ( + + {i > 0 && /} + {s} + + ))} +
+
+ +
+ +
+
+
+ ); +} diff --git a/apps/website/components/how-it-works.tsx b/apps/website/components/how-it-works.tsx new file mode 100644 index 0000000..f49b9e4 --- /dev/null +++ b/apps/website/components/how-it-works.tsx @@ -0,0 +1,54 @@ +import { SectionHeader } from "./section-header"; + +const STEPS = [ + { + n: "01", + tag: "blueprint", + title: "Point it at your project", + body: "Attach a Blueprint project or run against seeded treasuries. Pontoon spins up one live Blockchain.create() instance locally." + }, + { + n: "02", + tag: "bridge", + title: "The bridge streams the sandbox", + body: "A local WebSocket bridge speaks a fixed 57-method wire contract over port 37631: every deploy, message, and trace, as it happens." + }, + { + n: "03", + tag: "inspect", + title: "Read the execution", + body: "The desktop app renders the async tree, phase fees, TVM traces, and state. A failed transaction becomes something you look at, not something you decode." + } +]; + +export function HowItWorks() { + return ( +
+
+
+ + Everything runs on your machine against @ton/sandbox. Same inputs, same results, every + run. + + +
+ {STEPS.map((step) => ( +
+
+ {step.n} + + {step.tag} + +
+

{step.title}

+

{step.body}

+
+ ))} +
+
+
+ ); +} diff --git a/apps/website/components/panels.tsx b/apps/website/components/panels.tsx new file mode 100644 index 0000000..be8793b --- /dev/null +++ b/apps/website/components/panels.tsx @@ -0,0 +1,54 @@ +import { SectionHeader } from "./section-header"; + +const GROUPS = [ + { + header: "COMPOSE", + items: ["Deploy", "Send message", "Get-method runner"] + }, + { + header: "INSPECT", + items: ["Transaction inspector", "Message tree", "TVM step debugger", "Cell & TL-B viewer"] + }, + { + header: "CHAIN STATE", + items: ["Accounts", "Contracts", "State inspector", "Block explorer"] + }, + { + header: "OBSERVABILITY", + items: ["Logs console", "Coverage", "Benchmarks", "Snapshots", "Time control", "Test runner"] + } +]; + +export function Panels() { + return ( +
+
+ + Two-level navigation in the Supabase-studio pattern, with a ⌘K command palette. Every + panel keeps its trace when you leave, so you never lose a response. + + +
+ {GROUPS.map((group) => ( +
+
+ {group.header} +
+
    + {group.items.map((item) => ( +
  • + + {item} +
  • + ))} +
+
+ ))} +
+
+
+ ); +} diff --git a/apps/website/components/pontoon-mark.tsx b/apps/website/components/pontoon-mark.tsx new file mode 100644 index 0000000..ca497be --- /dev/null +++ b/apps/website/components/pontoon-mark.tsx @@ -0,0 +1,32 @@ +export function PontoonMark({ + size = 24, + className +}: { + size?: number; + className?: string; +}) { + return ( + + ); +} diff --git a/apps/website/components/section-header.tsx b/apps/website/components/section-header.tsx new file mode 100644 index 0000000..8d47d94 --- /dev/null +++ b/apps/website/components/section-header.tsx @@ -0,0 +1,27 @@ +export function SectionHeader({ + eyebrow, + title, + children +}: { + eyebrow?: string; + title: string; + children?: React.ReactNode; +}) { + return ( +
+ {eyebrow && ( +
{eyebrow}
+ )} +

+ {title} +

+ {children && ( +

{children}

+ )} +
+ ); +} diff --git a/apps/website/components/site-footer.tsx b/apps/website/components/site-footer.tsx new file mode 100644 index 0000000..46c134b --- /dev/null +++ b/apps/website/components/site-footer.tsx @@ -0,0 +1,69 @@ +import { PontoonMark } from "./pontoon-mark"; +import { GITHUB_URL, RELEASES_URL } from "@/lib/site"; + +const COLUMNS = [ + { + header: "PRODUCT", + links: [ + { label: "Features", href: "#features" }, + { label: "How it works", href: "#how" }, + { label: "Panels", href: "#panels" } + ] + }, + { + header: "RESOURCES", + links: [ + { label: "GitHub", href: GITHUB_URL }, + { label: "Releases", href: RELEASES_URL }, + { label: "@ton/sandbox", href: "https://github.com/ton-org/sandbox" } + ] + } +]; + +export function SiteFooter() { + return ( +
+
+
+
+ + + + Pontoon +
+

+ A desktop display layer for @ton/sandbox. Built for TON smart-contract developers. +

+

local-first · deterministic

+
+ +
+ {COLUMNS.map((col) => ( +
+
{col.header}
+ +
+ ))} +
+
+ +
+
+ © {new Date().getFullYear()} Entrypoint Labs + Pontoon · dev.entrypoint.pontoon +
+
+
+ ); +} diff --git a/apps/website/components/site-nav.tsx b/apps/website/components/site-nav.tsx new file mode 100644 index 0000000..c9a6eeb --- /dev/null +++ b/apps/website/components/site-nav.tsx @@ -0,0 +1,48 @@ +import { PontoonMark } from "./pontoon-mark"; +import { GITHUB_URL, RELEASES_URL, NAV_LINKS } from "@/lib/site"; + +export function SiteNav() { + return ( +
+ +
+ ); +} diff --git a/apps/website/components/trace-panel.tsx b/apps/website/components/trace-panel.tsx new file mode 100644 index 0000000..78d14ed --- /dev/null +++ b/apps/website/components/trace-panel.tsx @@ -0,0 +1,153 @@ +type Kind = "ext" | "int" | "log"; + +type TraceRow = { + depth: number; + kind: Kind; + target: string; + selector: string; + op: string; + fee: string; + selected?: boolean; +}; + +const ROWS: TraceRow[] = [ + { depth: 0, kind: "ext", target: "Wallet v4 · Alice", selector: "external-in", op: "0x0", fee: "0.0038" }, + { depth: 1, kind: "int", target: "Jetton Wallet · Alice", selector: "transfer", op: "0x0f8a7ea5", fee: "0.0121", selected: true }, + { depth: 2, kind: "int", target: "Jetton Wallet · Bob", selector: "internalTransfer", op: "0x178d4519", fee: "0.0104" }, + { depth: 3, kind: "int", target: "Wallet v4 · Bob", selector: "transfer_notification", op: "0x7362d09c", fee: "0.0021" }, + { depth: 3, kind: "int", target: "Jetton Wallet · Alice", selector: "excesses", op: "0xd53276db", fee: "0.0006" }, + { depth: 1, kind: "log", target: "event · burn", selector: "forward 0.0100 TON", op: "", fee: "" } +]; + +const KIND_LABEL: Record = { + ext: "EXT-IN", + int: "INTERNAL", + log: "LOG" +}; + +function Guides({ depth }: { depth: number }) { + return ( + <> + {Array.from({ length: depth }).map((_, i) => ( + + + + ))} + + ); +} + +export function TracePanel({ className }: { className?: string }) { + return ( +
+ {/* titlebar */} +
+
+
+ + + +
+ + transaction inspector + +
+
+ + + bridge · 37631 + +
+
+ + {/* tree */} +
+ {ROWS.map((row, i) => ( +
+ + + {/* caret */} + + {row.kind === "log" ? "·" : i === ROWS.length - 1 || ROWS[i + 1]?.depth <= row.depth ? "▸" : "▾"} + + + {/* kind tag */} + + {KIND_LABEL[row.kind]} + + + {/* target */} + + {row.target} + + + {/* selector / op */} + {row.op ? ( + + {row.selector} + {row.op} + + ) : ( + {row.selector} + )} + + + {row.fee && ( + <> + + + {row.fee} TON + + + )} + +
+ ))} +
+ + {/* phase-fee footer */} +
+
+ PHASE BREAKDOWN · transfer + total 0.0121 TON +
+
+ + + +
+
+ + compute 0.0071 + + + action 0.0038 + + + storage 0.0002 + +
+
+
+ ); +} diff --git a/apps/website/lib/site.ts b/apps/website/lib/site.ts new file mode 100644 index 0000000..2e20aaa --- /dev/null +++ b/apps/website/lib/site.ts @@ -0,0 +1,8 @@ +export const GITHUB_URL = "https://github.com/EntrypointLabs/Pontoon"; +export const RELEASES_URL = "https://github.com/EntrypointLabs/Pontoon/releases"; + +export const NAV_LINKS = [ + { label: "Features", href: "#features" }, + { label: "How it works", href: "#how" }, + { label: "Panels", href: "#panels" } +]; diff --git a/apps/website/next-env.d.ts b/apps/website/next-env.d.ts new file mode 100644 index 0000000..c4b7818 --- /dev/null +++ b/apps/website/next-env.d.ts @@ -0,0 +1,6 @@ +/// +/// +import "./.next/dev/types/routes.d.ts"; + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/website/next.config.mjs b/apps/website/next.config.mjs new file mode 100644 index 0000000..d77f10a --- /dev/null +++ b/apps/website/next.config.mjs @@ -0,0 +1,12 @@ +import { join } from "node:path"; + +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + turbopack: { + // Pin the monorepo root so file tracing ignores stray lockfiles elsewhere. + root: join(import.meta.dirname, "..", "..") + } +}; + +export default nextConfig; diff --git a/apps/website/package.json b/apps/website/package.json new file mode 100644 index 0000000..78d4ab1 --- /dev/null +++ b/apps/website/package.json @@ -0,0 +1,26 @@ +{ + "name": "@pontoon/website", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "next dev --port 3100", + "build": "next build", + "start": "next start --port 3100", + "tsc": "tsc --noEmit" + }, + "dependencies": { + "lucide-react": "^0.468.0", + "next": "^16.2.10", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.0.0", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", + "tailwindcss": "^4.0.0", + "typescript": "^5.6.0" + } +} diff --git a/apps/website/postcss.config.mjs b/apps/website/postcss.config.mjs new file mode 100644 index 0000000..50a4f5b --- /dev/null +++ b/apps/website/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {} + } +}; diff --git a/apps/website/tsconfig.json b/apps/website/tsconfig.json new file mode 100644 index 0000000..803331c --- /dev/null +++ b/apps/website/tsconfig.json @@ -0,0 +1,41 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": [ + "./*" + ] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c73ac3..f25d29f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ importers: specifier: ^2.3.0 version: 2.9.16 - app: + apps/desktop: dependencies: '@dagrejs/dagre': specifier: ^3.0.0 @@ -133,6 +133,40 @@ importers: specifier: ^3.0.0 version: 3.2.4(@types/node@24.12.4)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3) + apps/website: + dependencies: + lucide-react: + specifier: ^0.468.0 + version: 0.468.0(react@19.2.6) + next: + specifier: ^16.2.10 + version: 16.2.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: + specifier: ^19.2.0 + version: 19.2.6 + react-dom: + specifier: ^19.2.0 + version: 19.2.6(react@19.2.6) + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.0.0 + version: 4.3.2 + '@types/node': + specifier: ^22.0.0 + version: 22.20.1 + '@types/react': + specifier: ^19.0.0 + version: 19.2.15 + '@types/react-dom': + specifier: ^19.0.0 + version: 19.2.3(@types/react@19.2.15) + tailwindcss: + specifier: ^4.0.0 + version: 4.3.0 + typescript: + specifier: ^5.6.0 + version: 5.9.3 + packages/bridge: dependencies: '@ton/core': @@ -179,6 +213,10 @@ importers: packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@babel/code-frame@7.29.7': resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} @@ -268,6 +306,9 @@ packages: '@dagrejs/graphlib@4.0.1': resolution: {integrity: sha512-IvcV6FduIIAmLwnH+yun+QtV36SC7mERqa86aClNqmMN09WhmPPYU8ckHrZBozErf+UvHPWOTJYaGYiIcs0DgA==} + '@emnapi/runtime@1.11.2': + resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -662,6 +703,159 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -678,6 +872,61 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@next/env@16.2.10': + resolution: {integrity: sha512-zLPxg9M0MEHmygpj5OuxjQ+vHMiy/K7cSp74G8ecYolmgUWw0RwN02tF56npup/+qaI8JB97hQgS/r2Hb6QwVA==} + + '@next/swc-darwin-arm64@16.2.10': + resolution: {integrity: sha512-v9IdJCa0H0mbo+8z5zwUpOk1Vj7RjkcI5uNYf5Ws1y6szf/p3Mzl9hLaST8SCt6L9h8NGnruZcd2+o0NTNwDhA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.2.10': + resolution: {integrity: sha512-17IS0jJRViROGmA9uGdNR8VPJpfbnaVG7E9qhso5jDLkmyd0lSDORWxbcKINzcFqzZqGwGtMSnrFRxBpuUYjLQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.2.10': + resolution: {integrity: sha512-GRQRsRtuciNJvB54AvvuQTiq0oZtFwa1owQqtZD8wwnGpM2L39MV22kpI72YSXLKIyY40LC66EiLFv4PiicXxg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.2.10': + resolution: {integrity: sha512-zkN9MQYS7UQBro+FnISUq1itaQjXI9xqISzuQ+2bc921NcJ1x4yPCqrn77tVN6/dOOXaaWVX3k6/bR07pPwK+A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.2.10': + resolution: {integrity: sha512-iCVJnwvrPYECvA6WM/7+oo+OiTvedIKLxtCLAZP4xZR3nXa1zmzZyLPbYCmWvpd4CvMYF1EMTafd0ii3DygLvA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.2.10': + resolution: {integrity: sha512-ov2g4H0dHY9bPoOU83m91hWT7Iq5qy13bUnyyshLU3HGR1Ownn0X9QpmDPc5iIUaahTp7f7LeGAhV4DSFtackw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.2.10': + resolution: {integrity: sha512-DwAnhLX76HQiFFQNgWlcK+JzlnD1rZ+UK/WY0ZMI/deXpvgnesjNYrqcfo1JzBuz4Kf7o3brIBL0glI1junatA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.2.10': + resolution: {integrity: sha512-0JXq3b85Jk9Jg4ntLUbXSPvoDw3gpZou7twuKdoFG2jOw635v7+IiXfTaa0TxVMyx78pUjnrVYwLgjKfX4e6/A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -1188,39 +1437,75 @@ packages: cpu: [x64] os: [win32] + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tailwindcss/node@4.3.0': resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} + '@tailwindcss/node@4.3.2': + resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==} + '@tailwindcss/oxide-android-arm64@4.3.0': resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} engines: {node: '>= 20'} cpu: [arm64] os: [android] + '@tailwindcss/oxide-android-arm64@4.3.2': + resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + '@tailwindcss/oxide-darwin-arm64@4.3.0': resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] + '@tailwindcss/oxide-darwin-arm64@4.3.2': + resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.3.0': resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.3.2': + resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + '@tailwindcss/oxide-freebsd-x64@4.3.0': resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] + '@tailwindcss/oxide-freebsd-x64@4.3.2': + resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} engines: {node: '>= 20'} @@ -1228,6 +1513,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} engines: {node: '>= 20'} @@ -1235,6 +1527,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} engines: {node: '>= 20'} @@ -1242,6 +1541,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-x64-musl@4.3.0': resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} engines: {node: '>= 20'} @@ -1249,6 +1555,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-x64-musl@4.3.2': + resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-wasm32-wasi@4.3.0': resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} @@ -1261,22 +1574,53 @@ packages: - '@emnapi/wasi-threads' - tslib + '@tailwindcss/oxide-wasm32-wasi@4.3.2': + resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} engines: {node: '>= 20'} cpu: [x64] os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + '@tailwindcss/oxide@4.3.0': resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} engines: {node: '>= 20'} + '@tailwindcss/oxide@4.3.2': + resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.3.2': + resolution: {integrity: sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==} + '@tailwindcss/vite@4.3.0': resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} peerDependencies: @@ -1491,6 +1835,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/node@22.20.1': + resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + '@types/node@24.12.4': resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} @@ -1727,6 +2074,9 @@ packages: classcat@5.0.5: resolution: {integrity: sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==} + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1848,6 +2198,10 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + enhanced-resolve@5.21.6: + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} + engines: {node: '>=10.13.0'} + enhanced-resolve@5.22.1: resolution: {integrity: sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==} engines: {node: '>=10.13.0'} @@ -2265,6 +2619,27 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + next@16.2.10: + resolution: {integrity: sha512-2som5AVXb3kE6Yjine3/mNbBayYF58eguBWIVVUdr1y/L426xyVEgYxgBG+1QC34P2x5E+tcDup6XkuOAX3dCA==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-releases@2.0.46: resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} engines: {node: '>=18'} @@ -2307,6 +2682,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} @@ -2404,6 +2783,10 @@ packages: engines: {node: '>=10'} hasBin: true + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2448,6 +2831,19 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2469,6 +2865,9 @@ packages: tailwindcss@4.3.0: resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} + tailwindcss@4.3.2: + resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==} + tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -2550,6 +2949,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -2747,6 +3149,8 @@ packages: snapshots: + '@alloc/quick-lru@5.2.0': {} + '@babel/code-frame@7.29.7': dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -2865,6 +3269,11 @@ snapshots: '@dagrejs/graphlib@4.0.1': {} + '@emnapi/runtime@1.11.2': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -3104,6 +3513,103 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3123,6 +3629,32 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@next/env@16.2.10': {} + + '@next/swc-darwin-arm64@16.2.10': + optional: true + + '@next/swc-darwin-x64@16.2.10': + optional: true + + '@next/swc-linux-arm64-gnu@16.2.10': + optional: true + + '@next/swc-linux-arm64-musl@16.2.10': + optional: true + + '@next/swc-linux-x64-gnu@16.2.10': + optional: true + + '@next/swc-linux-x64-musl@16.2.10': + optional: true + + '@next/swc-win32-arm64-msvc@16.2.10': + optional: true + + '@next/swc-win32-x64-msvc@16.2.10': + optional: true + '@radix-ui/number@1.1.1': {} '@radix-ui/primitive@1.1.3': {} @@ -3551,6 +4083,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.4': optional: true + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 @@ -3561,42 +4097,88 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.3.0 + '@tailwindcss/node@4.3.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.21.6 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.2 + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true + '@tailwindcss/oxide-android-arm64@4.3.2': + optional: true + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true + '@tailwindcss/oxide-darwin-arm64@4.3.2': + optional: true + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true + '@tailwindcss/oxide-darwin-x64@4.3.2': + optional: true + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true + '@tailwindcss/oxide-freebsd-x64@4.3.2': + optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + optional: true + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true + '@tailwindcss/oxide-linux-x64-musl@4.3.2': + optional: true + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true + '@tailwindcss/oxide-wasm32-wasi@4.3.2': + optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + optional: true + '@tailwindcss/oxide@4.3.0': optionalDependencies: '@tailwindcss/oxide-android-arm64': 4.3.0 @@ -3612,6 +4194,29 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + '@tailwindcss/oxide@4.3.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-x64': 4.3.2 + '@tailwindcss/oxide-freebsd-x64': 4.3.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-x64-musl': 4.3.2 + '@tailwindcss/oxide-wasm32-wasi': 4.3.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.2 + + '@tailwindcss/postcss@4.3.2': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.2 + '@tailwindcss/oxide': 4.3.2 + postcss: 8.5.15 + tailwindcss: 4.3.2 + '@tailwindcss/vite@4.3.0(vite@6.4.2(@types/node@24.12.4)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.22.3))': dependencies: '@tailwindcss/node': 4.3.0 @@ -3802,6 +4407,10 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/node@22.20.1': + dependencies: + undici-types: 6.21.0 + '@types/node@24.12.4': dependencies: undici-types: 7.16.0 @@ -4106,6 +4715,8 @@ snapshots: classcat@5.0.5: {} + client-only@0.0.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -4219,6 +4830,11 @@ snapshots: emoji-regex@8.0.0: {} + enhanced-resolve@5.21.6: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + enhanced-resolve@5.22.1: dependencies: graceful-fs: 4.2.11 @@ -4626,6 +5242,30 @@ snapshots: natural-compare@1.4.0: {} + next@16.2.10(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + '@next/env': 16.2.10 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.10.33 + caniuse-lite: 1.0.30001793 + postcss: 8.4.31 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(react@19.2.6) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.10 + '@next/swc-darwin-x64': 16.2.10 + '@next/swc-linux-arm64-gnu': 16.2.10 + '@next/swc-linux-arm64-musl': 16.2.10 + '@next/swc-linux-x64-gnu': 16.2.10 + '@next/swc-linux-x64-musl': 16.2.10 + '@next/swc-win32-arm64-msvc': 16.2.10 + '@next/swc-win32-x64-msvc': 16.2.10 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + node-releases@2.0.46: {} optionator@0.9.4: @@ -4661,6 +5301,12 @@ snapshots: picomatch@4.0.4: {} + postcss@8.4.31: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.15: dependencies: nanoid: 3.3.12 @@ -4761,6 +5407,38 @@ snapshots: semver@7.8.1: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -4799,6 +5477,11 @@ snapshots: dependencies: js-tokens: 9.0.1 + styled-jsx@5.1.6(react@19.2.6): + dependencies: + client-only: 0.0.1 + react: 19.2.6 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -4821,6 +5504,8 @@ snapshots: tailwindcss@4.3.0: {} + tailwindcss@4.3.2: {} + tapable@2.3.3: {} teslabot@1.5.0: {} @@ -4891,6 +5576,8 @@ snapshots: typescript@5.9.3: {} + undici-types@6.21.0: {} + undici-types@7.16.0: {} update-browserslist-db@1.2.3(browserslist@4.28.2): diff --git a/turbo.json b/turbo.json index eeffc86..c31c799 100644 --- a/turbo.json +++ b/turbo.json @@ -4,7 +4,7 @@ "tasks": { "build": { "dependsOn": ["^build"], - "outputs": ["dist/**"] + "outputs": ["dist/**", ".next/**", "!.next/cache/**"] }, "tsc": { "cache": true From 3688adeb64cbfe23d3a3db08f33e66d91adc180c Mon Sep 17 00:00:00 2001 From: GiFTED! Date: Sun, 12 Jul 2026 19:19:46 +0100 Subject: [PATCH 3/4] fix(desktop): resolve repo root three levels up in build.rs --- apps/desktop/src-tauri/build.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/apps/desktop/src-tauri/build.rs b/apps/desktop/src-tauri/build.rs index efa8ed0..e79944a 100644 --- a/apps/desktop/src-tauri/build.rs +++ b/apps/desktop/src-tauri/build.rs @@ -6,15 +6,15 @@ fn main() { } fn build_sidecar() { - println!("cargo:rerun-if-changed=../../scripts/build-sidecar.mjs"); - println!("cargo:rerun-if-changed=../../packages/bridge/package.json"); - println!("cargo:rerun-if-changed=../../packages/bridge/tsconfig.json"); - println!("cargo:rerun-if-changed=../../packages/bridge/server.ts"); - println!("cargo:rerun-if-changed=../../packages/bridge/handlers.ts"); - println!("cargo:rerun-if-changed=../../packages/bridge/state.ts"); - println!("cargo:rerun-if-changed=../../packages/bridge/tree.ts"); - println!("cargo:rerun-if-changed=../../packages/bridge/encode.ts"); - println!("cargo:rerun-if-changed=../../pnpm-lock.yaml"); + println!("cargo:rerun-if-changed=../../../scripts/build-sidecar.mjs"); + println!("cargo:rerun-if-changed=../../../packages/bridge/package.json"); + println!("cargo:rerun-if-changed=../../../packages/bridge/tsconfig.json"); + println!("cargo:rerun-if-changed=../../../packages/bridge/server.ts"); + println!("cargo:rerun-if-changed=../../../packages/bridge/handlers.ts"); + println!("cargo:rerun-if-changed=../../../packages/bridge/state.ts"); + println!("cargo:rerun-if-changed=../../../packages/bridge/tree.ts"); + println!("cargo:rerun-if-changed=../../../packages/bridge/encode.ts"); + println!("cargo:rerun-if-changed=../../../pnpm-lock.yaml"); let target = env::var("TARGET").expect("Cargo did not provide TARGET"); let manifest_dir = PathBuf::from( @@ -23,7 +23,8 @@ fn build_sidecar() { let repo_root = manifest_dir .parent() .and_then(|path| path.parent()) - .expect("src-tauri should live two levels below the repository root"); + .and_then(|path| path.parent()) + .expect("src-tauri should live three levels below the repository root"); let script = repo_root.join("scripts").join("build-sidecar.mjs"); let status = Command::new("node") From a8aca5b2ad5cdafd534f9599cf3b5ed9cf3fb172 Mon Sep 17 00:00:00 2001 From: GiFTED! Date: Sun, 12 Jul 2026 19:28:07 +0100 Subject: [PATCH 4/4] chore: set app identifier and site URLs to entrypointlabs.xyz --- apps/desktop/src-tauri/tauri.conf.json | 2 +- apps/website/app/layout.tsx | 2 +- apps/website/components/site-footer.tsx | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 09cdf44..7ac4fb4 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "$schema": "https://schema.tauri.app/config/2", "productName": "Pontoon", "version": "0.1.0", - "identifier": "dev.entrypoint.pontoon", + "identifier": "xyz.entrypointlabs.pontoon", "build": { "beforeDevCommand": "pnpm -w dev", "beforeBuildCommand": "pnpm build", diff --git a/apps/website/app/layout.tsx b/apps/website/app/layout.tsx index 8656a66..cf17419 100644 --- a/apps/website/app/layout.tsx +++ b/apps/website/app/layout.tsx @@ -15,7 +15,7 @@ const jetbrainsMono = JetBrains_Mono({ }); export const metadata: Metadata = { - metadataBase: new URL("https://pontoon.dev"), + metadataBase: new URL("https://pontoon.entrypointlabs.xyz"), title: "Pontoon: the desktop inspector for @ton/sandbox", description: "Pontoon is a local-first desktop tool for @ton/sandbox. Deploy contracts, send messages, and watch the whole async transaction tree: phase-level fees, TVM traces, and state, without reading raw VM logs.", diff --git a/apps/website/components/site-footer.tsx b/apps/website/components/site-footer.tsx index 46c134b..d7d40d4 100644 --- a/apps/website/components/site-footer.tsx +++ b/apps/website/components/site-footer.tsx @@ -61,7 +61,14 @@ export function SiteFooter() {
© {new Date().getFullYear()} Entrypoint Labs - Pontoon · dev.entrypoint.pontoon + + entrypointlabs.xyz +