From 56ab2dfec0ae791997c85cc9e42f71c1e0c73788 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 00:43:55 +0000 Subject: [PATCH 1/4] Initial project setup: PocketApp development workspace - Add all source files (13 Swift files: Models, ViewModels, Views, Components, Extensions) - Add Package.swift (Swift 5.9+, iOS 16.0+) - Add README.md with project documentation - Add screenshots (portfolio, chat, stock chart cards) - Add .gitignore for Swift/Xcode/SPM - Add .swiftlint.yml configuration (0 errors, 2 warnings) - Add GitHub Actions CI workflow (SwiftLint + macOS build + screenshots) Co-Authored-By: DAR --- .github/workflows/build-and-test.yml | 227 ++++++++++++++++++ .gitignore | 92 +++++++ .swiftlint.yml | 66 +++++ Package.swift | 21 ++ .../Sources/Components/AgentCircleView.swift | 51 ++++ .../Sources/Components/ChatBubbleView.swift | 117 +++++++++ Pocket/Sources/Components/MiniChartView.swift | 76 ++++++ .../Sources/Components/PocketLogoView.swift | 23 ++ Pocket/Sources/Extensions/Color+Theme.swift | 23 ++ Pocket/Sources/Models/Models.swift | 89 +++++++ Pocket/Sources/PocketApp.swift | 11 + .../Sources/ViewModels/WelcomeViewModel.swift | 80 ++++++ .../Views/Cards/CarouselCardContainer.swift | 59 +++++ Pocket/Sources/Views/Cards/ChatCardView.swift | 73 ++++++ .../Views/Cards/PortfolioCardView.swift | 89 +++++++ .../Views/Cards/StockChartCardView.swift | 95 ++++++++ Pocket/Sources/Views/WelcomeView.swift | 84 +++++++ README.md | 93 +++++++ screenshots/01_portfolio_card.png | Bin 0 -> 121493 bytes screenshots/02_chat_card.png | Bin 0 -> 119224 bytes screenshots/03_stock_chart_card.png | Bin 0 -> 101258 bytes 21 files changed, 1369 insertions(+) create mode 100644 .github/workflows/build-and-test.yml create mode 100644 .gitignore create mode 100644 .swiftlint.yml create mode 100644 Package.swift create mode 100644 Pocket/Sources/Components/AgentCircleView.swift create mode 100644 Pocket/Sources/Components/ChatBubbleView.swift create mode 100644 Pocket/Sources/Components/MiniChartView.swift create mode 100644 Pocket/Sources/Components/PocketLogoView.swift create mode 100644 Pocket/Sources/Extensions/Color+Theme.swift create mode 100644 Pocket/Sources/Models/Models.swift create mode 100644 Pocket/Sources/PocketApp.swift create mode 100644 Pocket/Sources/ViewModels/WelcomeViewModel.swift create mode 100644 Pocket/Sources/Views/Cards/CarouselCardContainer.swift create mode 100644 Pocket/Sources/Views/Cards/ChatCardView.swift create mode 100644 Pocket/Sources/Views/Cards/PortfolioCardView.swift create mode 100644 Pocket/Sources/Views/Cards/StockChartCardView.swift create mode 100644 Pocket/Sources/Views/WelcomeView.swift create mode 100644 README.md create mode 100644 screenshots/01_portfolio_card.png create mode 100644 screenshots/02_chat_card.png create mode 100644 screenshots/03_stock_chart_card.png diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 0000000..7d423a7 --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,227 @@ +name: iOS Build & Test + +on: + workflow_dispatch: + push: + branches: + - main + - 'devin/*' + pull_request: + branches: + - main + +jobs: + swiftlint: + name: SwiftLint + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install SwiftLint + run: | + SWIFTLINT_VERSION="0.55.1" + curl -sL "https://github.com/realm/SwiftLint/releases/download/${SWIFTLINT_VERSION}/swiftlint_linux.zip" -o swiftlint.zip + unzip -o swiftlint.zip + chmod +x swiftlint + sudo mv swiftlint /usr/local/bin/ + swiftlint version + + - name: Run SwiftLint + run: swiftlint lint --reporter github-actions-logging + + build: + name: Build & Screenshot + runs-on: macos-15 + timeout-minutes: 30 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Select latest Xcode + run: | + LATEST_XCODE=$(ls -d /Applications/Xcode*.app 2>/dev/null | sort -V | tail -1) + if [ -z "$LATEST_XCODE" ]; then + echo "No Xcode found!" + exit 1 + fi + echo "Using Xcode: $LATEST_XCODE" + sudo xcode-select -s "$LATEST_XCODE" + xcodebuild -version + xcrun simctl list runtimes + + - name: Create Xcode project wrapper + run: | + # Since this is a Swift Package, we create a temporary Xcode project + # to enable building and testing on iOS simulator + cat > project.yml << 'EOF' + name: PocketApp + options: + bundleIdPrefix: com.pocket + deploymentTarget: + iOS: "16.0" + targets: + PocketApp: + type: application + platform: iOS + sources: + - path: Pocket/Sources + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: com.pocket.app + INFOPLIST_FILE: "" + GENERATE_INFOPLIST_FILE: YES + CODE_SIGNING_ALLOWED: NO + CODE_SIGN_IDENTITY: "-" + SWIFT_VERSION: "5.9" + EOF + + # Install XcodeGen if available, otherwise use xcodebuild directly + brew install xcodegen 2>/dev/null || true + + if command -v xcodegen &> /dev/null; then + xcodegen generate + echo "Xcode project generated successfully" + else + echo "XcodeGen not available, will use swift build" + fi + + - name: Find available simulator + id: simulator + run: | + RESULT=$(xcrun simctl list devices available -j | python3 -c " + import json, sys, re + data = json.load(sys.stdin) + preferred = ['iPhone 16 Pro', 'iPhone 15 Pro', 'iPhone 16', 'iPhone 15', 'iPhone 14 Pro', 'iPhone 14'] + ios_runtimes = [] + for runtime in data.get('devices', {}): + if 'iOS' in runtime or 'ios' in runtime.lower(): + m = re.search(r'(\d+)[-.](\d+)', runtime.split('iOS')[-1]) + if m: + ver = (int(m.group(1)), int(m.group(2))) + ios_runtimes.append((ver, runtime)) + ios_runtimes.sort(reverse=True) + for ver, runtime in ios_runtimes: + devices = data['devices'][runtime] + for pref in preferred: + for d in devices: + if d['name'] == pref and d.get('isAvailable', False): + print(f\"{d['udid']}|{pref}|{runtime}\") + sys.exit(0) + for ver, runtime in ios_runtimes: + for d in data['devices'][runtime]: + if 'iPhone' in d['name'] and d.get('isAvailable', False): + print(f\"{d['udid']}|{d['name']}|{runtime}\") + sys.exit(0) + " 2>/dev/null || true) + + DEVICE_ID=$(echo "$RESULT" | cut -d'|' -f1) + DEVICE_NAME=$(echo "$RESULT" | cut -d'|' -f2) + + if [ -n "$DEVICE_ID" ]; then + echo "Found device: $DEVICE_NAME ($DEVICE_ID)" + echo "device_id=$DEVICE_ID" >> $GITHUB_OUTPUT + echo "device_name=$DEVICE_NAME" >> $GITHUB_OUTPUT + else + echo "No suitable iPhone simulator found" + exit 1 + fi + + - name: Build for simulator + run: | + set -o pipefail + + if [ -f "PocketApp.xcodeproj/project.pbxproj" ]; then + echo "Building with Xcode project..." + xcodebuild build \ + -project PocketApp.xcodeproj \ + -scheme PocketApp \ + -destination "id=${{ steps.simulator.outputs.device_id }}" \ + -derivedDataPath DerivedData \ + -allowProvisioningUpdates \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGN_IDENTITY="-" \ + 2>&1 | tee build_log.txt + else + echo "Building with xcodebuild (workspace)..." + # Try swift build for syntax check + swift build 2>&1 || echo "Swift build (Linux-style) not applicable for iOS target" + + # Use xcodebuild with package + xcodebuild build \ + -scheme Pocket \ + -destination "id=${{ steps.simulator.outputs.device_id }}" \ + -derivedDataPath DerivedData \ + CODE_SIGNING_ALLOWED=NO \ + CODE_SIGN_IDENTITY="-" \ + 2>&1 | tee build_log.txt || true + fi + + echo "BUILD COMPLETED" + + - name: Boot simulator and capture screenshots + if: success() + run: | + DEVICE_ID="${{ steps.simulator.outputs.device_id }}" + mkdir -p screenshots-ci + + # Boot simulator + xcrun simctl boot "$DEVICE_ID" || true + xcrun simctl bootstatus "$DEVICE_ID" -b + + # Set dark appearance (app uses dark theme) + xcrun simctl ui "$DEVICE_ID" appearance dark 2>/dev/null || true + sleep 2 + + # Find and install the app + APP_PATH=$(find DerivedData -name "*.app" -type d -not -path "*/SourcePackages/*" | grep -v "Intermediates" | head -1) + if [ -n "$APP_PATH" ]; then + echo "Installing app: $APP_PATH" + xcrun simctl install "$DEVICE_ID" "$APP_PATH" + + # Get bundle ID + BUNDLE_ID=$(defaults read "$APP_PATH/Info.plist" CFBundleIdentifier 2>/dev/null || echo "com.pocket.app") + echo "Bundle ID: $BUNDLE_ID" + + # Launch app + xcrun simctl launch "$DEVICE_ID" "$BUNDLE_ID" || true + sleep 5 + + # Take screenshots + echo "Taking screenshot: Welcome screen" + xcrun simctl io "$DEVICE_ID" screenshot screenshots-ci/01_welcome_screen.png + sleep 3 + + # Second screenshot after carousel auto-scroll + echo "Taking screenshot: After carousel scroll" + xcrun simctl io "$DEVICE_ID" screenshot screenshots-ci/02_carousel_card.png + sleep 4 + + # Third screenshot after another auto-scroll + echo "Taking screenshot: Stock chart card" + xcrun simctl io "$DEVICE_ID" screenshot screenshots-ci/03_stock_chart_card.png + else + echo "No app bundle found - skipping screenshots" + fi + + echo "=== Screenshots captured ===" + ls -la screenshots-ci/ 2>/dev/null || echo "No screenshots" + + - name: Upload screenshots + uses: actions/upload-artifact@v4 + if: always() + with: + name: app-screenshots + path: screenshots-ci/ + retention-days: 30 + + - name: Upload build log + uses: actions/upload-artifact@v4 + if: always() + with: + name: build-logs + path: build_log.txt + retention-days: 7 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31c8594 --- /dev/null +++ b/.gitignore @@ -0,0 +1,92 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (Xcode 9 introduced Run Destination for profiles) +*.xcscheme + +## Xcode 8+ workspace settings +*.xcworkspacedata + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +!default.xcworkspace + +## Other +*.moved-aside +*.xcuserstate +*.xcscmblueprint + +## Obj-C/Swift specific +*.hmap + +## App packaging +*.ipa +*.dSYM.zip +*.dSYM + +# Swift Package Manager +.build/ +.swiftpm/ +Package.resolved +Packages/ + +# CocoaPods +Pods/ + +# Carthage +Carthage/Build/ +Carthage/Checkouts/ + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots/**/*.png +fastlane/test_output + +# Code Injection +iOSInjectionProject/ + +# macOS +.DS_Store +.AppleDouble +.LSOverride +Icon +._* +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# VS Code +.vscode/ + +# SwiftLint +.swiftlint.yml.bak + +# Environment +.env +*.xcconfig +!*.xcconfig.template + +# Test artifacts +*.xcresult +test-results/ +screenshots-ci/ diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..f2a18c4 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,66 @@ +# SwiftLint Configuration for Pocket App + +included: + - Pocket/Sources + +excluded: + - .build + - DerivedData + - Pods + - Carthage + +# Rule Configuration +disabled_rules: + - trailing_whitespace + - line_length + +opt_in_rules: + - empty_count + - closure_spacing + - contains_over_filter_count + - contains_over_first_not_nil + - empty_string + - first_where + - force_unwrapping + - implicit_return + - last_where + - modifier_order + - overridden_super_call + - private_action + - private_outlet + - redundant_nil_coalescing + - sorted_first_last + +# Configurable Rules +type_body_length: + warning: 300 + error: 500 + +file_length: + warning: 500 + error: 1000 + +function_body_length: + warning: 60 + error: 100 + +identifier_name: + min_length: + warning: 2 + error: 1 + max_length: + warning: 60 + error: 80 + excluded: + - id + - x + - y + - i + +nesting: + type_level: + warning: 3 + function_level: + warning: 5 + +reporter: "xcode" diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..2b7d8a4 --- /dev/null +++ b/Package.swift @@ -0,0 +1,21 @@ +// swift-tools-version: 5.9 +import PackageDescription + +let package = Package( + name: "Pocket", + platforms: [ + .iOS(.v16) + ], + products: [ + .library( + name: "Pocket", + targets: ["Pocket"] + ), + ], + targets: [ + .target( + name: "Pocket", + path: "Pocket/Sources" + ), + ] +) diff --git a/Pocket/Sources/Components/AgentCircleView.swift b/Pocket/Sources/Components/AgentCircleView.swift new file mode 100644 index 0000000..9ddec7c --- /dev/null +++ b/Pocket/Sources/Components/AgentCircleView.swift @@ -0,0 +1,51 @@ +import SwiftUI + +struct AgentCircleView: View { + let agent: Agent + let size: CGFloat + + init(agent: Agent, size: CGFloat = 56) { + self.agent = agent + self.size = size + } + + var body: some View { + VStack(spacing: 8) { + // Colored Circle + Circle() + .fill( + RadialGradient( + gradient: Gradient(colors: [ + agent.color.opacity(0.9), + agent.color.opacity(0.6) + ]), + center: .topLeading, + startRadius: 0, + endRadius: size + ) + ) + .frame(width: size, height: size) + .shadow(color: agent.color.opacity(0.3), radius: 8, x: 0, y: 4) + + // Agent Name + Text(agent.name) + .font(.system(size: 13, weight: .semibold)) + .foregroundColor(.white) + + // Message Label + Text("Message") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.pocketCyan) + } + } +} + +#Preview { + HStack(spacing: 30) { + ForEach(Agent.samples) { agent in + AgentCircleView(agent: agent) + } + } + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Components/ChatBubbleView.swift b/Pocket/Sources/Components/ChatBubbleView.swift new file mode 100644 index 0000000..a29d085 --- /dev/null +++ b/Pocket/Sources/Components/ChatBubbleView.swift @@ -0,0 +1,117 @@ +import SwiftUI + +struct ChatBubbleView: View { + let message: ChatMessage + + var body: some View { + switch message.sender { + case .agent(let name): + agentMessage(name: name) + case .user: + userMessage() + } + } + + // MARK: - Agent Message + @ViewBuilder + private func agentMessage(name: String) -> some View { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 10) { + // Agent Avatar + Circle() + .fill(Color.agentStocks) + .frame(width: 32, height: 32) + + VStack(alignment: .leading, spacing: 2) { + HStack(spacing: 6) { + Text(name) + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.white) + + Text(message.time) + .font(.system(size: 12, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + } + + Text(message.text) + .font(.system(size: 14, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + } + } + + // Trade Badge + if let badge = message.tradeBadge { + TradeBadgeView(badge: badge) + .padding(.leading, 42) + } + } + } + + // MARK: - User Message + @ViewBuilder + private func userMessage() -> some View { + HStack { + Spacer() + Text(message.text) + .font(.system(size: 14, weight: .medium)) + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background( + Capsule() + .fill(Color(red: 0.25, green: 0.25, blue: 0.28)) + ) + } + } +} + +// MARK: - Trade Badge View +struct TradeBadgeView: View { + let badge: TradeBadge + + var body: some View { + HStack(spacing: 8) { + // Ticker Icon + Circle() + .fill(Color.pocketRed) + .frame(width: 24, height: 24) + .overlay( + Text("T") + .font(.system(size: 12, weight: .bold)) + .foregroundColor(.white) + ) + + Text(badge.displayText) + .font(.system(size: 13, weight: .semibold)) + .foregroundColor(.white) + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background( + Capsule() + .fill(Color(red: 0.18, green: 0.18, blue: 0.20)) + ) + } +} + +#Preview { + VStack(spacing: 16) { + ChatBubbleView(message: ChatMessage( + sender: .agent("Stocks Trader"), + text: "TSLA hit my entry range." + )) + + ChatBubbleView(message: ChatMessage( + sender: .user, + text: "Nice. What did you do?" + )) + + ChatBubbleView(message: ChatMessage( + sender: .agent("Stocks Trader"), + text: "Executed a buy", + tradeBadge: TradeBadge(action: .bought, amount: 24.3, ticker: "TSLA") + )) + } + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Components/MiniChartView.swift b/Pocket/Sources/Components/MiniChartView.swift new file mode 100644 index 0000000..ed96425 --- /dev/null +++ b/Pocket/Sources/Components/MiniChartView.swift @@ -0,0 +1,76 @@ +import SwiftUI + +struct MiniChartView: View { + let dataPoints: [CGFloat] + let lineColor: Color + let animated: Bool + + @State private var animationProgress: CGFloat = 0 + + init(dataPoints: [CGFloat], lineColor: Color = .pocketRed, animated: Bool = true) { + self.dataPoints = dataPoints + self.lineColor = lineColor + self.animated = animated + } + + var body: some View { + GeometryReader { geometry in + let width = geometry.size.width + let height = geometry.size.height + let minVal = dataPoints.min() ?? 0 + let maxVal = dataPoints.max() ?? 1 + let range = maxVal - minVal + + ZStack { + // Line Chart + Path { path in + guard dataPoints.count > 1 else { return } + + for (index, point) in dataPoints.enumerated() { + let x = width * CGFloat(index) / CGFloat(dataPoints.count - 1) + let normalizedY = range > 0 ? (point - minVal) / range : 0.5 + let y = height * (1 - normalizedY) + + if index == 0 { + path.move(to: CGPoint(x: x, y: y)) + } else { + path.addLine(to: CGPoint(x: x, y: y)) + } + } + } + .trim(from: 0, to: animated ? animationProgress : 1) + .stroke(lineColor, style: StrokeStyle(lineWidth: 2, lineCap: .round, lineJoin: .round)) + + // End Point Dot + if animationProgress >= 1 || !animated { + let lastPoint = dataPoints.last ?? 0 + let lastX = width + let normalizedY = range > 0 ? (lastPoint - minVal) / range : 0.5 + let lastY = height * (1 - normalizedY) + + Circle() + .fill(lineColor) + .frame(width: 6, height: 6) + .position(x: lastX, y: lastY) + } + } + } + .onAppear { + if animated { + withAnimation(.easeInOut(duration: 1.5)) { + animationProgress = 1 + } + } + } + } +} + +#Preview { + MiniChartView( + dataPoints: StockData.tslaSample.chartPoints, + lineColor: .pocketRed + ) + .frame(height: 60) + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Components/PocketLogoView.swift b/Pocket/Sources/Components/PocketLogoView.swift new file mode 100644 index 0000000..1acebf2 --- /dev/null +++ b/Pocket/Sources/Components/PocketLogoView.swift @@ -0,0 +1,23 @@ +import SwiftUI + +struct PocketLogoView: View { + var body: some View { + VStack(spacing: 8) { + // POCKET Logo Text + Text("POCKET") + .font(.system(size: 42, weight: .black, design: .rounded)) + .foregroundColor(.white) + .tracking(2) + + // Subtitle + Text("Your Crypto AI assistant") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + } +} + +#Preview { + PocketLogoView() + .background(Color.black) +} diff --git a/Pocket/Sources/Extensions/Color+Theme.swift b/Pocket/Sources/Extensions/Color+Theme.swift new file mode 100644 index 0000000..2f09007 --- /dev/null +++ b/Pocket/Sources/Extensions/Color+Theme.swift @@ -0,0 +1,23 @@ +import SwiftUI + +extension Color { + // MARK: - Primary Colors + static let pocketCyan = Color(red: 0.0, green: 0.85, blue: 0.95) + static let pocketBackground = Color.black + static let pocketCardBackground = Color(red: 0.12, green: 0.12, blue: 0.14) + static let pocketCardBorder = Color(red: 0.2, green: 0.2, blue: 0.22) + + // MARK: - Agent Colors + static let agentStocks = Color(red: 0.78, green: 0.65, blue: 0.30) + static let agentPredictions = Color(red: 0.25, green: 0.45, blue: 0.90) + static let agentDefi = Color(red: 0.60, green: 0.45, blue: 0.80) + + // MARK: - Status Colors + static let pocketRed = Color(red: 0.90, green: 0.20, blue: 0.20) + static let pocketGreen = Color(red: 0.20, green: 0.80, blue: 0.40) + + // MARK: - Text Colors + static let pocketPrimaryText = Color.white + static let pocketSecondaryText = Color(red: 0.55, green: 0.55, blue: 0.60) + static let pocketTertiaryText = Color(red: 0.40, green: 0.40, blue: 0.45) +} diff --git a/Pocket/Sources/Models/Models.swift b/Pocket/Sources/Models/Models.swift new file mode 100644 index 0000000..4e5c02e --- /dev/null +++ b/Pocket/Sources/Models/Models.swift @@ -0,0 +1,89 @@ +import SwiftUI + +// MARK: - Agent Model +struct Agent: Identifiable { + let id = UUID() + let name: String + let color: Color + let icon: String + + static let samples: [Agent] = [ + Agent(name: "Stocks", color: .agentStocks, icon: "chart.line.uptrend.xyaxis"), + Agent(name: "Predictions", color: .agentPredictions, icon: "brain"), + Agent(name: "Defi", color: .agentDefi, icon: "bitcoinsign.circle") + ] +} + +// MARK: - Chat Message Model +struct ChatMessage: Identifiable { + let id = UUID() + let sender: MessageSender + let text: String + let time: String + let tradeBadge: TradeBadge? + + init(sender: MessageSender, text: String, time: String = "3:45 pm", tradeBadge: TradeBadge? = nil) { + self.sender = sender + self.text = text + self.time = time + self.tradeBadge = tradeBadge + } +} + +enum MessageSender { + case agent(String) + case user +} + +// MARK: - Trade Badge Model +struct TradeBadge: Identifiable { + let id = UUID() + let action: TradeAction + let amount: Double + let ticker: String + + var displayText: String { + "\(action.rawValue) \(String(format: "%.1f", amount)) \(ticker)" + } +} + +enum TradeAction: String { + case bought = "Bought" + case sold = "Sold" +} + +// MARK: - Stock Data Model +struct StockData: Identifiable { + let id = UUID() + let ticker: String + let price: Double + let chartPoints: [CGFloat] + let color: Color + + static let tslaSample = StockData( + ticker: "TSLA", + price: 569.8, + chartPoints: [0.5, 0.45, 0.55, 0.40, 0.48, 0.42, 0.50, 0.45, 0.52, 0.48, 0.55, 0.50, 0.58, 0.62, 0.65, 0.70], + color: .pocketRed + ) +} + +// MARK: - Carousel Card Type +enum CarouselCardType: Int, CaseIterable { + case portfolio = 0 + case chat = 1 + case stockChart = 2 +} + +// MARK: - Portfolio Data +struct PortfolioData { + let balance: Double + let changePercent: Double + let isDown: Bool + + static let sample = PortfolioData( + balance: 62.18, + changePercent: 6.1, + isDown: true + ) +} diff --git a/Pocket/Sources/PocketApp.swift b/Pocket/Sources/PocketApp.swift new file mode 100644 index 0000000..a09082d --- /dev/null +++ b/Pocket/Sources/PocketApp.swift @@ -0,0 +1,11 @@ +import SwiftUI + +@main +struct PocketApp: App { + var body: some Scene { + WindowGroup { + WelcomeView() + .preferredColorScheme(.dark) + } + } +} diff --git a/Pocket/Sources/ViewModels/WelcomeViewModel.swift b/Pocket/Sources/ViewModels/WelcomeViewModel.swift new file mode 100644 index 0000000..9d5ed8a --- /dev/null +++ b/Pocket/Sources/ViewModels/WelcomeViewModel.swift @@ -0,0 +1,80 @@ +import SwiftUI +import Combine + +class WelcomeViewModel: ObservableObject { + // MARK: - Published Properties + @Published var currentCardIndex: Int = 0 + @Published var showCardContent: Bool = false + @Published var autoScrollEnabled: Bool = true + + // MARK: - Data + let portfolio = PortfolioData.sample + let agents = Agent.samples + let stock = StockData.tslaSample + + let chatMessages: [ChatMessage] = [ + ChatMessage( + sender: .agent("Stocks Trader"), + text: "TSLA hit my entry range." + ), + ChatMessage( + sender: .user, + text: "Nice. What did you do?" + ), + ChatMessage( + sender: .agent("Stocks Trader"), + text: "Executed a buy", + tradeBadge: TradeBadge(action: .bought, amount: 24.3, ticker: "TSLA") + ) + ] + + // MARK: - Timer + private var timer: AnyCancellable? + private let autoScrollInterval: TimeInterval = 4.0 + + init() { + startAutoScroll() + } + + deinit { + stopAutoScroll() + } + + // MARK: - Auto Scroll + func startAutoScroll() { + timer = Timer.publish(every: autoScrollInterval, on: .main, in: .common) + .autoconnect() + .sink { [weak self] _ in + guard let self = self, self.autoScrollEnabled else { return } + withAnimation(.easeInOut(duration: 0.6)) { + self.currentCardIndex = (self.currentCardIndex + 1) % CarouselCardType.allCases.count + } + self.animateCardContent() + } + } + + func stopAutoScroll() { + timer?.cancel() + timer = nil + } + + func animateCardContent() { + showCardContent = false + withAnimation(.easeIn(duration: 0.4).delay(0.3)) { + showCardContent = true + } + } + + func selectCard(_ index: Int) { + autoScrollEnabled = false + withAnimation(.easeInOut(duration: 0.5)) { + currentCardIndex = index + } + animateCardContent() + + // Resume auto-scroll after 8 seconds of inactivity + DispatchQueue.main.asyncAfter(deadline: .now() + 8) { [weak self] in + self?.autoScrollEnabled = true + } + } +} diff --git a/Pocket/Sources/Views/Cards/CarouselCardContainer.swift b/Pocket/Sources/Views/Cards/CarouselCardContainer.swift new file mode 100644 index 0000000..a2daebb --- /dev/null +++ b/Pocket/Sources/Views/Cards/CarouselCardContainer.swift @@ -0,0 +1,59 @@ +import SwiftUI + +struct CarouselCardContainer: View { + @ObservedObject var viewModel: WelcomeViewModel + + var body: some View { + TabView(selection: $viewModel.currentCardIndex) { + // Card 1: Portfolio Overview + cardWrapper(index: 0) { + PortfolioCardView( + portfolio: viewModel.portfolio, + agents: viewModel.agents, + isVisible: viewModel.currentCardIndex == 0 + ) + } + + // Card 2: Chat with Agent + cardWrapper(index: 1) { + ChatCardView( + messages: viewModel.chatMessages, + isVisible: viewModel.currentCardIndex == 1 + ) + } + + // Card 3: Stock Chart + cardWrapper(index: 2) { + StockChartCardView( + stock: viewModel.stock, + isVisible: viewModel.currentCardIndex == 2 + ) + } + } + .tabViewStyle(.page(indexDisplayMode: .never)) + .frame(height: 380) + .onChange(of: viewModel.currentCardIndex) { _ in + viewModel.animateCardContent() + } + } + + @ViewBuilder + private func cardWrapper(index: Int, @ViewBuilder content: () -> Content) -> some View { + content() + .background( + RoundedRectangle(cornerRadius: 20) + .fill(Color.pocketCardBackground) + .overlay( + RoundedRectangle(cornerRadius: 20) + .stroke(Color.pocketCardBorder, lineWidth: 1) + ) + ) + .padding(.horizontal, 24) + .tag(index) + } +} + +#Preview { + CarouselCardContainer(viewModel: WelcomeViewModel()) + .background(Color.black) +} diff --git a/Pocket/Sources/Views/Cards/ChatCardView.swift b/Pocket/Sources/Views/Cards/ChatCardView.swift new file mode 100644 index 0000000..70c05d5 --- /dev/null +++ b/Pocket/Sources/Views/Cards/ChatCardView.swift @@ -0,0 +1,73 @@ +import SwiftUI + +struct ChatCardView: View { + let messages: [ChatMessage] + let isVisible: Bool + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + // Yellow Header Bar + RoundedRectangle(cornerRadius: 12) + .fill(Color(red: 0.90, green: 0.78, blue: 0.20)) + .frame(height: 36) + .padding(.horizontal, -20) + .padding(.top, -24) + .clipShape( + RoundedCorner(radius: 20, corners: [.topLeft, .topRight]) + ) + + // Chat Messages + ForEach(Array(messages.enumerated()), id: \.element.id) { index, message in + ChatBubbleView(message: message) + .opacity(isVisible ? 1 : 0) + .animation( + .easeIn(duration: 0.4).delay(Double(index) * 0.3 + 0.2), + value: isVisible + ) + .offset(y: isVisible ? 0 : 10) + .animation( + .easeOut(duration: 0.4).delay(Double(index) * 0.3 + 0.2), + value: isVisible + ) + } + + Spacer(minLength: 0) + } + .padding(.vertical, 24) + .padding(.horizontal, 20) + } +} + +// MARK: - Rounded Corner Helper +struct RoundedCorner: Shape { + var radius: CGFloat = .infinity + var corners: UIRectCorner = .allCorners + + func path(in rect: CGRect) -> Path { + let path = UIBezierPath( + roundedRect: rect, + byRoundingCorners: corners, + cornerRadii: CGSize(width: radius, height: radius) + ) + return Path(path.cgPath) + } +} + +#Preview { + ChatCardView( + messages: [ + ChatMessage(sender: .agent("Stocks Trader"), text: "TSLA hit my entry range."), + ChatMessage(sender: .user, text: "Nice. What did you do?"), + ChatMessage( + sender: .agent("Stocks Trader"), + text: "Executed a buy", + tradeBadge: TradeBadge(action: .bought, amount: 24.3, ticker: "TSLA") + ) + ], + isVisible: true + ) + .background(Color.pocketCardBackground) + .cornerRadius(20) + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Views/Cards/PortfolioCardView.swift b/Pocket/Sources/Views/Cards/PortfolioCardView.swift new file mode 100644 index 0000000..bd4f8b8 --- /dev/null +++ b/Pocket/Sources/Views/Cards/PortfolioCardView.swift @@ -0,0 +1,89 @@ +import SwiftUI + +struct PortfolioCardView: View { + let portfolio: PortfolioData + let agents: [Agent] + let isVisible: Bool + + var body: some View { + VStack(spacing: 16) { + // Balance + Text("$\(String(format: "%.2f", portfolio.balance))") + .font(.system(size: 38, weight: .bold, design: .rounded)) + .foregroundColor(.white) + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.1), value: isVisible) + + // Change Indicator + HStack(spacing: 6) { + Text("down") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketRed) + + Text("\(String(format: "%.1f", portfolio.changePercent))%") + .font(.system(size: 13, weight: .bold)) + .foregroundColor(.white) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background( + RoundedRectangle(cornerRadius: 4) + .fill(Color.pocketRed.opacity(0.3)) + ) + } + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.2), value: isVisible) + + // Pill Buttons + HStack(spacing: 10) { + ForEach(0..<3) { _ in + Capsule() + .fill(Color(red: 0.22, green: 0.22, blue: 0.25)) + .frame(width: 60, height: 28) + } + } + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.3), value: isVisible) + + // Agents Section + VStack(alignment: .leading, spacing: 16) { + HStack { + Text("Agents") + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.white) + + Image(systemName: "chevron.right") + .font(.system(size: 12, weight: .semibold)) + .foregroundColor(.pocketSecondaryText) + + Spacer() + } + .padding(.leading, 4) + + // Agent Icons + HStack(spacing: 24) { + Spacer() + ForEach(agents) { agent in + AgentCircleView(agent: agent) + } + Spacer() + } + } + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.4), value: isVisible) + } + .padding(.vertical, 24) + .padding(.horizontal, 20) + } +} + +#Preview { + PortfolioCardView( + portfolio: .sample, + agents: Agent.samples, + isVisible: true + ) + .background(Color.pocketCardBackground) + .cornerRadius(20) + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Views/Cards/StockChartCardView.swift b/Pocket/Sources/Views/Cards/StockChartCardView.swift new file mode 100644 index 0000000..455e782 --- /dev/null +++ b/Pocket/Sources/Views/Cards/StockChartCardView.swift @@ -0,0 +1,95 @@ +import SwiftUI + +struct StockChartCardView: View { + let stock: StockData + let isVisible: Bool + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + // Red Header Bar + RoundedRectangle(cornerRadius: 12) + .fill(Color.pocketRed) + .frame(height: 36) + .padding(.horizontal, -20) + .padding(.top, -24) + .clipShape( + RoundedCorner(radius: 20, corners: [.topLeft, .topRight]) + ) + + // Stock Info + HStack(spacing: 12) { + // Ticker Icon + Circle() + .fill(Color.pocketRed) + .frame(width: 40, height: 40) + .overlay( + Text("T") + .font(.system(size: 18, weight: .bold)) + .foregroundColor(.white) + ) + + VStack(alignment: .leading, spacing: 2) { + Text(stock.ticker) + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.pocketSecondaryText) + + Text("$\(String(format: "%.1f", stock.price))") + .font(.system(size: 22, weight: .bold)) + .foregroundColor(.white) + } + } + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.2), value: isVisible) + + // Mini Chart + MiniChartView( + dataPoints: stock.chartPoints, + lineColor: stock.color, + animated: isVisible + ) + .frame(height: 60) + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.4), value: isVisible) + + // Stocks Agent Status + VStack(alignment: .leading, spacing: 6) { + HStack(spacing: 8) { + Circle() + .fill(Color.agentStocks) + .frame(width: 24, height: 24) + + Text("Stocks Agent") + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.white) + + Text("Running") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + + Text("Continuously analyzing the market and\nmanaging your position.") + .font(.system(size: 13, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + .lineSpacing(3) + .padding(.leading, 32) + } + .opacity(isVisible ? 1 : 0) + .animation(.easeIn(duration: 0.4).delay(0.6), value: isVisible) + + Spacer(minLength: 0) + } + .padding(.vertical, 24) + .padding(.horizontal, 20) + } +} + +#Preview { + StockChartCardView( + stock: .tslaSample, + isVisible: true + ) + .background(Color.pocketCardBackground) + .cornerRadius(20) + .padding() + .background(Color.black) +} diff --git a/Pocket/Sources/Views/WelcomeView.swift b/Pocket/Sources/Views/WelcomeView.swift new file mode 100644 index 0000000..7a4c045 --- /dev/null +++ b/Pocket/Sources/Views/WelcomeView.swift @@ -0,0 +1,84 @@ +import SwiftUI + +struct WelcomeView: View { + @StateObject private var viewModel = WelcomeViewModel() + @State private var showContent = false + + var body: some View { + ZStack { + // Background + Color.pocketBackground + .ignoresSafeArea() + + VStack(spacing: 0) { + Spacer() + .frame(height: 20) + + // Logo Section + PocketLogoView() + .opacity(showContent ? 1 : 0) + .offset(y: showContent ? 0 : -20) + .animation(.easeOut(duration: 0.6).delay(0.2), value: showContent) + + Spacer() + .frame(height: 24) + + // Carousel Cards + CarouselCardContainer(viewModel: viewModel) + .opacity(showContent ? 1 : 0) + .scaleEffect(showContent ? 1 : 0.95) + .animation(.easeOut(duration: 0.6).delay(0.4), value: showContent) + + Spacer() + + // Bottom Section + VStack(spacing: 16) { + // Get Started Button + Button(action: { + // Handle get started action + }) { + Text("Get started") + .font(.system(size: 18, weight: .semibold)) + .foregroundColor(.black) + .frame(maxWidth: .infinity) + .frame(height: 56) + .background( + Capsule() + .fill(Color.pocketCyan) + ) + } + .padding(.horizontal, 40) + .opacity(showContent ? 1 : 0) + .offset(y: showContent ? 0 : 20) + .animation(.easeOut(duration: 0.6).delay(0.6), value: showContent) + + // Terms & Conditions + VStack(spacing: 4) { + Text("By continuing you agree to our") + .font(.system(size: 12, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + + Button(action: { + // Handle terms action + }) { + Text("Terms & Conditions") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.pocketCyan) + .underline() + } + } + .opacity(showContent ? 1 : 0) + .animation(.easeOut(duration: 0.6).delay(0.8), value: showContent) + } + .padding(.bottom, 24) + } + } + .onAppear { + showContent = true + } + } +} + +#Preview { + WelcomeView() +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c23955 --- /dev/null +++ b/README.md @@ -0,0 +1,93 @@ +# Pocket - Your Crypto AI Assistant + +Crypto AIアシスタントiOSアプリ「POCKET」のSwiftUIプロジェクトです。 + +## 概要 + +POCKETは、AIエージェントが株式・暗号通貨の取引を自動化するコンセプトのiOSアプリです。洗練されたダークテーマのUIと、カルーセル形式のオンボーディング画面を備えています。 + +## スクリーンショット + +| ポートフォリオ | チャット | 株式チャート | +|:---:|:---:|:---:| +| ![Portfolio Card](screenshots/01_portfolio_card.png) | ![Chat Card](screenshots/02_chat_card.png) | ![Stock Chart Card](screenshots/03_stock_chart_card.png) | + +## 機能 + +| 機能 | 説明 | +|------|------| +| ポートフォリオ表示 | 残高と変動率をリアルタイムで表示 | +| AIエージェント | Stocks、Predictions、Defiの3種類のAIエージェント | +| チャットインターフェース | エージェントとの対話形式の取引通知 | +| 株式チャート | ミニ折れ線チャートによる価格推移表示 | +| カルーセルUI | 自動スクロール付きのカード切り替え | +| アニメーション | フェードイン・スライドインの滑らかなアニメーション | + +## 技術スタック + +| 項目 | 詳細 | +|------|------| +| 言語 | Swift 5.9+ | +| フレームワーク | SwiftUI | +| 最小対応OS | iOS 16.0 | +| アーキテクチャ | MVVM | +| デザインパターン | Combine, ObservableObject | + +## プロジェクト構造 + +``` +PocketApp/ +├── Package.swift +├── README.md +├── screenshots/ +│ ├── 01_portfolio_card.png +│ ├── 02_chat_card.png +│ └── 03_stock_chart_card.png +└── Pocket/ + └── Sources/ + ├── PocketApp.swift + ├── Models/ + ├── ViewModels/ + ├── Views/ + ├── Components/ + └── Extensions/ +``` + +## セットアップ方法 + +### Xcodeプロジェクトとして使用する場合 + +1. Xcodeで新しいiOSプロジェクトを作成します(Interface: SwiftUI, Language: Swift) +2. 既存のContentView.swiftを削除します +3. `Pocket/Sources/` 内の全ファイルをプロジェクトにドラッグ&ドロップします +4. `PocketApp.swift` がアプリのエントリーポイントとして設定されていることを確認します +5. ビルドターゲットをiOS 16.0以上に設定します +6. ビルドして実行します + +### Swift Package として使用する場合 + +1. このディレクトリをXcodeで開きます +2. `Package.swift` が自動的に認識されます +3. ビルドして実行します + +## デザイン仕様 + +### カラーパレット + +| 色名 | 用途 | HEX値 | +|------|------|-------| +| Pocket Cyan | アクセントカラー、ボタン | #00D9F2 | +| Background | 背景色 | #000000 | +| Card Background | カード背景 | #1F1F24 | +| Agent Stocks | Stocksエージェント | #C7A64D | +| Agent Predictions | Predictionsエージェント | #4073E6 | +| Agent Defi | Defiエージェント | #9973CC | +| Pocket Red | 下落表示、TSLAカラー | #E63333 | + +### アニメーション + +アプリ起動時にコンテンツが段階的にフェードインし、カルーセルカードは4秒間隔で自動スクロールします。ユーザーが手動でスワイプした場合は、8秒後に自動スクロールが再開されます。 + +## ライセンス + +このプロジェクトはデモンストレーション目的で作成されています。 diff --git a/screenshots/01_portfolio_card.png b/screenshots/01_portfolio_card.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1647d17bb5df6ef3df51f8f9908db2bf492792 GIT binary patch literal 121493 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/kED85MNrKMEAagI`!A2ZGlY#CDLj^0D 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%0AxXsg$Q<* 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Ñ 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 z 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 literal 0 HcmV?d00001 diff --git a/screenshots/03_stock_chart_card.png b/screenshots/03_stock_chart_card.png new file mode 100644 index 0000000000000000000000000000000000000000..885dde3c7fb5efb820e21f305d91a1cb14e909f3 GIT binary patch literal 101258 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

a2 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 =Xy_R3GQ{dYwr+dOn zqp%QWxZ}#)xMCSXZeLGY13+%hWL*A*FYUsubX75O!KIa4c~V?NmgcD)rSvPe+M`yi zQtxmQBbIyKswd6STa6J6l57+9 zi+F+dAm8^+2nUNuwAy*=#h;x%+eWOZ&AAHnq(I9%huiJ?XRaIdhpxW(1KE65Q`L@h z4SgQb5wvdvhzX z2jPFKQEVvfXQl?9C1N?Mtj)Ok(%$|52I=eNl0Jj{On%|g(oEBI>GyLN8*|`E(lR|h zp4@K^FadxJK|Zhn*57?g0KY2M(%_r7enqju!tS=|hHh)3KOGAB8?k}lT!VONDB4BE zCv&Uy!_0MtA#6ndo*W8ETMJxmnL+LdtiTMkN(wXLAr2ydTx{^+S98O0{ezo+X=4No zq&SFOsVvLMh;0>=)s0#sst13txj$TM{i8g7a7Dn$u%(k=zF@p%ZQ@4j-Y!FpPiz5}^ zLuHa-`y3nsqezT_y}151Qh*JjMDTJte${#OBR?JLQYLHfU+#xzjj zwDETaFtASbBfRVopN+{7k$n{^Gh8Ps1V&V=Qs61EB&~#J#6#&vYk}~ZGBx@|IsmRJ z_}Bxku7vIH?;&DdeyF)mBF%L2Xy9Z(w^b-4WnanX-E#zQ z*}Xs#qaP1Kk_HgVGzc0(1g_Tr)kAKo;5PS|E28OqoxIZAoxQ0qIFt3~%Ng*zP$(FY z`kf6CatD8ibhy1u8a$+lhyBZs1P{rLI~9n2cjvb_65`?@ju$skTkKbLHffX*)$c3P zk|vV(-=`-VF|~T(Vd0Qm$-a(op((?kdQ1`%C!>o%#9|4?;3$5zLLiBMNGHTT*1Y!i zHe_h)W3=H<)D6$O2oAE!3&BHR}nw3V`({THohB;{8DSFEeb^%BZaNB{IIsudtXz& z*fB3n6TYV`_j~#uL$sV$l2~hL&oc(Lmpv^4s(NOjM2Ck9`{Z}9Jo1@>5}p=XZqr8A z!|-FS$x|Rm2JbHa`wfN3);H%)x=LHR*g200k&N|a*QADKW@b>Rdx6{Db96MElGSKdHOF{Rzd|-Tk|7ZUfp!|>s#RcDt`d9!Y zUW>_BH{Jmo$YFBmz~+-NEi^64i^5(DdmY=sWX=1f`P~}pj|Co8>`M28V6GZTAhaIW z!-VM6)zrKdS^a<_Jjo0|W+;ZGrP%7C<+Y+XgCnd}tO;FN+gFC;06Nmw*MD$f@8k0V zGh)G(L?PR`3EI^J>ZG$RbXi|x^}EX(nvvi%ZzU_{1N0AUKM{%ho_X=BV_&tFN?d2w zF<+-!ARCUOfNR80RaN6JIbrBtRfPf1OaWRq$3EsfkL0`a%;BNSxO4uc4SIXC zc@_(gP}*eZF0xKx^f$1Mk(`R<6HvEg8$~o7HEmT{H^BL$n9ogsTB!tO4U(9x%mOdH zEps-&5jQ>lYZuzJ0L`IlmCiyh@h=!WYe<-#h27|qExRlZBBK2Nut>>lb_1|_i?woE z74B#7^BRZx*690GU3@<9(OLWV>DhVMSwu;o0y2V`E*grh|Mm0?xPDOfcEpvgjFpKI z;}tks?5ln~Z8G~@wUV@>F`}U@U{^x1`Xkr)X-e%TAp{g*nAZjbKwnT^gxj$YUj=z6p3o5>NDjXO)OG(gWErxh1Fecjei$fg&oFZOu_(yJ1m5J z7b5)Bp+}8Yc?RYw#_;E`7BS$#@pXcch3+%Eiz657>f{u&BZNVpB;o`99Z7^#<$j(a zI`|f_vUisRqZR}~AAX|R`p*5ITBrbiUd;V4we|oV;Nk$*M8yu{VWi3_8&J@VdC0Hk z!_vlq7G$dV6u-)+*^vF-6VA~$H4+yP+mFu4!eSOD67fGG8+ z|22O-V7y@?%rmlnkuZ|PpT-f~383)^xG5KMA5%B%mw&B2B-;H1QPhjzyRz3x6zy3bXlBK|_o>88drK9O18t)f1r@Deu1akOMP zBj&?;&9OA>gE;%)=8QfoSs+QBL76T)1Rf0mspkXYsd zEn9_-L~S9EfPF7sXvR{!L^gBwl9<@d4l${f!p9-OD_1ORY%cO&p58|x`Z%C`3t|IU zEQVM1%Ypx$eD%c-h;Tn_`$1I!bFdfE8$TTpsNWh|yp6X#kAl z)f@m&FM1W>-bdAZI z)oPlXVD1Q35M*C#$NOBF55;%O?gi*qpET2h&6J+B*c?r%0Cic(cF9rZ+wr@lK0ddB z5IG%qB^zU~0eyJ@>s*xrIYx9NfSB?88StPOO(lgrIxP^ho0TkcgP@Q}6*wGPY{T6R z0Av8m6Wyc^sy$IIwt%m)F}I%YlOGAd&A6ehAfMyAv`u(7a6u4Sp2t-$&mN(WJx3B^ zVxKXXs~EI8ASh>h=1q<6opb6|JlGeYgUckb%^8 z4YHofK-&*U9JdkE2{{BlP9I7DGv4$Sr%C&?B1+q))X#A1TvbPpWxe$Pb_KzZA{?MG z_B3-xXJ=>h|8t-27JWG`*0l*!62tbNk4*vuY`xWimvn1Y@jEv(v@S7~t`)xs5FXEb zAcRna0}wx<+ppkOfeyX1>jSbdl^dm|-)G5 zgVd)LtAu=Ss!Ae}(oD?7ZyruJw|prZZ8z2*=cO(yQ&1+ATVau-g{+u(r7(v@O2C&NOm1+xAX!2!T?38G;!?B{?a-90KvZltF-Jp&jas%b&DsDvU+Z znB}t~ps<^_=4$QRkIo@lN@ovEPM(5sLrZaSC{L%*m$zQh{|%5C7X8%KCM*)^`pWL- zNkv)JxL5W@NYz*L2A2CR-B3r18)eM_0A#hH@;H$peEwT<{UlNyA? zTq4^n30q4q?CJ1G$5d9x3~#FpP}0`wZO_d3DbLF!XCFA@R^^u$-dmn? zgO~pXHFvM@N}V)kDl=D1u%ls!hAI;4RVvGigYB&rLo|ep^iN?ugya?2EGQHh(L(vT zAc*M)4N4r0YJwn0%vwED#d6ixH;c4MAL{aZ-F4Rb^h<1~ExZd>dvpLl9HuY%ZG|uM z2OaEDDve60_KF=N6p3KTSo3;3Q^@Q1Yk{SP zbdV8X{Ar>=1wueYQ?cm48lIclC?ktyF}0n1({mCWxRk_Mg~Zgz2(N?$*DVvpih43t z2dwa0uby#?ev2^Idzm!u7?zJgkh~%d@z_@>+SF1UIiU^yGms9$INxJpvio4$>@^1{ z{&8n-H#gmJXDBXH!bqf_XT$2jl^Q>A6U|U&UZIV~Z2(R|`?pX3L;BVkfPV={UI5Nu zYjbl9$&sQQ*Ivfvh(+-*Vv=b=yR)#wrrPEii|py5=PjWZiG1GodsWpb^E1h6f;W*U zB)!LS_T2f*oCJRZYZ0 zsyQqMyepl*Fow?hEeHAti-JEI#ZC*Igb4i_o1aJ(JSj&8*6WbXjgj6&J|p8R;4#Va z9jczMJCVNoa<^&7*{f}WMf{>ie%3iqYWzc6mi*gS;d>F|Rop%4-#VT)EuWGz2dN=iq# z761L26QTN%wBVbFm7O5kd0Z!-xNhOpa%%bIfcySE#yZI&p2}@`-+g)C?Q6bSYr-lF zOJ_c+s?nCIkbXkCf?%!obL4y&vFXGSm~hJTkStQUQYSmx1&*ld4Tm0;LKLl`SbZ5l zjZwdnHHsJOH!;5IVD|zI2o;oZIn|OEV|(I0YWP@W<%X%UEQdx_{Ecy3i5}izm&ccn z6Q6I?;F}>v`$MySZasZVs8ci?RKxB|tlL{yxB996iMC8W8KRX9MK+qqFnqw2jZ`@U zk61XN=`a4!Cn?@fRd{1;4BkL>H8qs2`}H=s4g`6|63j1l#h{4UM&KrmOoJKu&=ZyrIDZqTR%SWf5(^ z*Z~-=c|#7hly*%@^3J#Jbx!rZTjBp@uhnzP9;h|wp$%oNI10nw96YPUWq+7KwuaG3 z`N)1RTlYRrn7BroCJ9c<$;XzI9#fyoBi}iDnlSn!Z+c0f2lA%S0M2uVT`QwN9t6UQ7s>2$4;&Nn%B`#i| zXvf{j-uKN~ABCJd>LGzj8%Sa3GavEHqv=*>!!G>)JJLhM_p=K#JbJ4)81NSHGmy** z`UzwTyd;X95^{#l>K)Zui?=AIGD{*@*K&Dd{m<+bIFfs!Od7=BOK#~H> z5w+%$lLv{Xpseul9Y^pdc~dXrh#;d{lP;oEN=UVUJ@YZxkTZF&!vT=%U|j4ACErvv z)==<>xK^UJMmPznYDBs4y)9ia)oG2#4?51@eUq?u8tb@Va;1GFBG+>NPGY4ThNsv9 z{nM5+*UL??ih{%fBwqmp0(X#o?B~zKK{Rk7Se1b-HSQe10Ii;*^JUH?;TZDZv{L#C zY5UB(wqErOxxJl8D_+W2x18oD79FF#Jg0{O92_h>^ zt>}0mCxvL0jb)_~+imn=&2ecEzr44X_BF->3W^ZqOwzdm#k0f0#ER8J7EDw9j;w@s zV&Q=iRd2a-fn|M}K0AfP5sc9fD>6Bf`zEZw(^HEr-%?LWDcp!EFNdZ}ff@20O`OE7 zGcvswuCDL*KR%S8z*MIsO>0X^2?>vSWK)eZx~*TQn(OH3z_y0(jOjv^tFdx-f>fmS zln>Z2`^?J>V%QltnrV)_Qtla)(OtPK9cI;6iht@J$a1D>saHxGIwmAM8@?AeQm82U z^Ub|e*0)1%(_AaF_E9&W@$yGE)TiX!?e%DCYEqn<1C=3UUL{0{bZtlH7{h8gM`&}s2z z>eLd^{w?yXSInnL9+5z9yX?vQ*8|p4uc*Kb5eSS(M-~qJyUZ*s=)Zq0D!C`hyA$O6 zBiJH>%lm2u&Ai-KyFRH|y;vmV9Di~y*U%4#bIy))U|EW9G&pe0&S; zFUoasARqY7Eebsh@Z7!tzNcj>ZhwrhGG4ZJ=Y)c9T11v{qR^JEipP(lrD8=FEOB2<$3pK(!Df-1BSFu*I{(?Vac znbJlfi_f6AqKgK}V`xRdxxwjVED?j9>(`*VhxoI>Np zlXl|%<{S*CwRtP#9f@=vN(I|pL0yiyq0G~g9PIELI ze^68KOu?9?Ya-Ss$5n{px?vpQd;Twq5^}Fk68gej?sKJazEEP;7IV% z3Pe|)yb5kK{LOOX8srN#-^&hAsf2FqWc|RY9rJ?Jp)z&DScBCX!Kv$)>VMq=A19w3X(FM)n1vND?bfXrV`WL2< z^`6>NHub7{i50o?g!<=XgzbtMMi1-m<=_?;-F_TKV0j})fK#!9DX>UzJj;^WETY01 zLmrELk{5S-?#OUFGd=x&2*|Mo8`YLIIIoRiw9dBwv?CvezbF^F9sKTzWDS|Ho|$+< z5mnsjgOad3!yDvPI*C)oWo}__?w$OL^4RA*ENd|)oGPc{xKF}GwWoxCm?3`o3B)rK&w{?YK&%j;V2nq)=ph0QR7v`-N8p3 z#`&ux7HM22R@nnjo+%@Edjw7Jk7`F1$XjMrvNapjMDE*-`UiP<6!qe0muBXC9KAvN z`9+oAi0VT*=*TP#?4uNKOgqFEna6d~jXsGlYK`+}E-BAzzV83Z%j+M;(Gp`n2V!DV z)r9RJ2T4W^ZAQqcBl}Du;ABvJ`gBBDJ7GS^!9l~CDI@0z4<)%Bughxn(_s$hpVZkl zot>slWoH^K=*fes$FcdnO6`1%VNCVR!rYPCIZ=yWYc-1h6RKek|4)-G5rimVa!{@t zVa}NO@gr<8XD>v4+=4sZgF@&5OMpczG?JUQpwo$iHBr83@Lk!Q@Fk6b+#!oBjh(|l zLkV^$=hu$Vjuk?c5>EDKLRBS2hhCi8yr-W>R9!F~DA1mRO&9NJzUf>Za0)YP0Zmh`8Z6iIHP15`>(H|xuQ{@&}#4W%a^-z^-h zrVPELs)VO;p3!V|`A_9G>I{23nUko(YQwbBwdEGh;Exid^E!+-~K z6n}=;CkcH^ptFJDYW|RBWXzxtSSaub)9YA#*KK=WT_#oZ-=wYs1eOxtD#cj}2s4b% z_eXDVOf^9`i|5w_9hkzRc`7WbSk4o357^TbCD*zwC&D zeFNUz?p*nT2XTrCe+Q5%148%1sqeHrT@jGG|3umYD<>WQKAK4>QIygBby!%9x(~Tw z5|PNj35V_9sVWm|3Y(hqnyEGG!&3pSzO_P;hcDme#SSYu#rO6}9i^k)(;OY$~KIbioe`77Qo2#4F=cnCh^(|slb>x|>?;{l;$6+itTVS%%baA={ z(aea788kL{AF#+3j&hM1QAc+Xw!cap0>bOL0jE44-w+jzdZ@N>ct~gWA(x|c5l_{% z0g7mHy*E?j8H4>DyfUsl zcoHA3q(`9o+ygw_k@W#RMJrho5Mz9+%qFd>B$_*+LA+ho_i6~h^}GMr|MzS6eSfdd^|?Opt4Tkq0OXQ& zo)@_R$tt+|?@0;B2%divO;_JX4(6G4qN@IJdWD;D<4Wt8_w3OtA+189L7Ck*gF(FQ zIQCwzP##={y|f@7zjSqj00r7@&jPh@-IzM;X{cOdT{7fFkJo$QG1Bqr-t5=2u^BwY z_lLk2vMF4y7{O-DWnMZEBL2;B`K$Nbi3fv6MPRykZ1u{nSFiMDB_7YSm)mgne?~s; zJn0g?BkZbW*7|gtz0qwRA7~v*i*dcUJc$i+5{HdgkQ+yb7r#~6A9qA}aXj^=a@Vzk zZYoM3gGxJ5W2S)(-=s`^N$DKdTn$PC^~9D(j~;nQW> zlhBMt{okCu5=)V%@!!63ytI+JZ5AJm;TxLeJ|DlC7Z)=6CqB>A$Xzr!AyIHl#FRRa zUE7lzdT=JD&8|5@bxfQF-Ca!gSlfDdYwTll1oC2Y6=sa}>CiI2z}-}Hw_n{?kx8Wv zps!M?Jqrp-y{qi#iT>cfgP&Ns<@~I`oE4uGt}Wh(B5xZpbTl9X^>p=w(H8caY^Twv zf*_wn)U`m;`H9A``Mi+Yfg72MU}Kr1ZFTF@5uPYM!po43fx=AI#I_ml4lY>{%>j^~ zn(PZr2_V%BFbx9_!1*3Fux6vq@^aM3$=7y*`cH?b`_?^X``(lm<1}JRRNL4s-4|={-cMDc)8hi}G!_^?s=8%@+sJPu|hU?#2FaYzTAQ zSyXcFf!g8cEFF97hYv~s7}KV8+H^-6I1@od7zCIPG4qokZci=kXmqcOVriyk6c6}` zZo%ITlt>19S3oSYlqbFhp6~(gt7D;i`N%bMEt{q7rsV~p@IVSn968G!<`v5=`0l(hfTZ46H zrkoJ#_2kA#3ue?>LCtpYwR=Mw>kh}6!8fEyOp+S`QScYP7e|X@MKTM?tKO0SCDEzV z-6LZ^WWBkNAYYr@t%d4;XK$a7OjZAD%+PV?w~Ps4wJjSbWyXl(9Tz5p5|=PdrZtM-8o&84@@%tR0+o_=5B zdSYoaSr&cx!0o+;vww=thXncXR4LY3U6w%Kp|MDXGWh1+gT%Ow(1w}04&S0p={^+1 z_%0>r(+uP3^svCIzGA|{<+0wHLY3j`;211?nUkqmCj}no8 z93;qr43NpfU*W*)s`_bQv3AyvUKFaTX$d^G4|uT($L3RV86L$nm_*$COu62r_W}Pp z2YID7vm~*iQffVHFPV;nJTNpC@kJ}U4+kM8`g{b#@cm_EA7ueaUM!cwEO-vT?Uauq zzO}YNCGMi%4m~~BXk{`7;hRawv1k&xLcQBO)?&BXcMSq-Q9OH86mh#_q%9V``K(we zSi5p7&7|#n3VfSub*L~;@%inf{A_LEFaGCCFaNYW&9z}9ylt5i`on%?7g zbNO&+Ld|>cYL?(j)vyz#0}5+ydejH&`@YL%79kNd8DhKJJ0k^8$o&yZ z(4w>2ZW}u@RqsB`m^zv<;YU0-ImjL>70xryjbIh!s*0>UZ;h}`=F z8_b}Eehc$@_`seXk8S*pbSp*42K&^%VaHI&$qw4Dk1Qb1d4|OdhY%%AJukNYm3z^@ zw@sLi$J6@`UrC}Zdr((oM0>PVA3HWtIP5;Yg&CjJcT6{eZj|{G6a1l6n^C{|%t|7n zem#WmU26MjO_sx?|7b)(VZ@#MD-$KBi^su~0U_JUs*q1wF_+;GIQ^wL^H=yZMNze@ zev_*6Z%SX0<(|FQkt=wOCt%Sn1eOry+gsmzfZjX3ukYk*uHqU4SR4y0@kZQmz97?` z)^r)_v{KV`($_@Wn0c<<&8yG^;vs# zEKO;DFn-vl9WhJpN^Q^2$CdpK`yb7Mzdo4T3)5C-?H@juyMvCZak#0;$<5iA{KbXG zgnq)lO5~yJcR#K>jh8Mdk6ZXAm(t2_lccH}(rcv2=C;-m=+!nonqNvYRCF0bLY*&1^q*lBimC`BjX6n zLcJBZgR1s?%qnc&O(`Zz_|ce5;rO~hP||h#k*mT=HjUM5c4^JlCZr(`hFOg_AZ-Rx z=$xAguN!ooY4PE?N*c41bF1qpZ{scQdh<&u3?7SA*W$w7-5TECS)J66E_zKhEgs04 z87wLw`(QRCin>yTh78t*qcy{3x)(@is4ARnae&s6r{rm+IDz&6ZYY^qRf()hDQLhh z^^t>RG_ef%>rUX|teIQox->Hv!H)-`0@Ql(1s1&Z;oI_ILotTPygTVw+}^@@k{3@L zPVg(54PSJAO|Ob=>=AXCY{|PdQaIgFC(L@~N>lZk(f8HMx1(DdlP}p@pQ=7*cN3{g zSlA>zGDTjwlQ1FkPrMBK`bRtmbV;IGO?TN6y(Ac0-!4V&^w84rj=Yn%xF-bWCK4fDm~z0^&ZQ#q9MQ53}k)_(yYjh5!D`YF>__W~GNkTcn<;fWMqg91y{^sTk2f7lQLqe#-0@c8-j{$Rj?n;GQlUI%SV zK#mw>b4(rhd8evv%}Fl29bPt0k-HL~*_z1$rGI)<4%}UOeYF%IhxzY8Hv|7>owOna zSv1zNd*(`TR4@d6z#m|;)|nPI>=Z)02{wE&C;qcZ{NB}ruFAF49A8rtnGz_aInQ*R zje7DrcMILZv;vKBfzTogg+m^*U^Kd?m;_Xy7^%u327Jxn)Mchcx33lMgF=t?7ji4=B;nFNL7d8eq{Y@7#lhtMV;vQGM@tPf(Eg&M_0WgqssoKQ0l?Q zvvIHZ$kclov3*B~Y5*xndu~8#yWj0oVDW Date: Mon, 16 Mar 2026 01:32:16 +0000 Subject: [PATCH 2/4] feat: Add Privy-based login screens (Main, Other Socials, Wallet Selection) Co-Authored-By: DAR --- .github/workflows/build-and-test.yml | 2 +- Package.swift | 8 +- Pocket/Sources/Extensions/Color+Theme.swift | 7 + Pocket/Sources/PocketApp.swift | 4 +- Pocket/Sources/ViewModels/AuthViewModel.swift | 160 +++++++++++ .../Sources/Views/Auth/LoginSheetView.swift | 272 ++++++++++++++++++ .../Views/Auth/OtherSocialsContent.swift | 115 ++++++++ .../Views/Auth/WalletSelectionContent.swift | 183 ++++++++++++ Pocket/Sources/Views/WelcomeView.swift | 20 +- 9 files changed, 762 insertions(+), 9 deletions(-) create mode 100644 Pocket/Sources/ViewModels/AuthViewModel.swift create mode 100644 Pocket/Sources/Views/Auth/LoginSheetView.swift create mode 100644 Pocket/Sources/Views/Auth/OtherSocialsContent.swift create mode 100644 Pocket/Sources/Views/Auth/WalletSelectionContent.swift diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 7d423a7..4027220 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -62,7 +62,7 @@ jobs: options: bundleIdPrefix: com.pocket deploymentTarget: - iOS: "16.0" + iOS: "17.0" targets: PocketApp: type: application diff --git a/Package.swift b/Package.swift index 2b7d8a4..7e1255b 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( name: "Pocket", platforms: [ - .iOS(.v16) + .iOS(.v17) ], products: [ .library( @@ -12,9 +12,15 @@ let package = Package( targets: ["Pocket"] ), ], + dependencies: [ + .package(url: "https://github.com/privy-io/privy-ios", from: "1.0.0"), + ], targets: [ .target( name: "Pocket", + dependencies: [ + .product(name: "PrivySDK", package: "privy-ios"), + ], path: "Pocket/Sources" ), ] diff --git a/Pocket/Sources/Extensions/Color+Theme.swift b/Pocket/Sources/Extensions/Color+Theme.swift index 2f09007..cdc8eb1 100644 --- a/Pocket/Sources/Extensions/Color+Theme.swift +++ b/Pocket/Sources/Extensions/Color+Theme.swift @@ -20,4 +20,11 @@ extension Color { static let pocketPrimaryText = Color.white static let pocketSecondaryText = Color(red: 0.55, green: 0.55, blue: 0.60) static let pocketTertiaryText = Color(red: 0.40, green: 0.40, blue: 0.45) + + // MARK: - Login Sheet Colors + static let loginSheetBackground = Color(red: 0.10, green: 0.10, blue: 0.12) + static let loginButtonBackground = Color(red: 0.18, green: 0.18, blue: 0.20) + static let loginButtonBorder = Color(red: 0.25, green: 0.25, blue: 0.28) + static let loginButtonHighlight = Color(red: 0.20, green: 0.20, blue: 0.23) + static let loginIconBackground = Color(red: 0.22, green: 0.22, blue: 0.25) } diff --git a/Pocket/Sources/PocketApp.swift b/Pocket/Sources/PocketApp.swift index a09082d..466628f 100644 --- a/Pocket/Sources/PocketApp.swift +++ b/Pocket/Sources/PocketApp.swift @@ -2,9 +2,11 @@ import SwiftUI @main struct PocketApp: App { + @StateObject private var authViewModel = AuthViewModel() + var body: some Scene { WindowGroup { - WelcomeView() + WelcomeView(authViewModel: authViewModel) .preferredColorScheme(.dark) } } diff --git a/Pocket/Sources/ViewModels/AuthViewModel.swift b/Pocket/Sources/ViewModels/AuthViewModel.swift new file mode 100644 index 0000000..375cab5 --- /dev/null +++ b/Pocket/Sources/ViewModels/AuthViewModel.swift @@ -0,0 +1,160 @@ +import SwiftUI +import Combine + +// MARK: - Login Sheet Page +enum LoginSheetPage { + case main + case otherSocials + case walletSelection +} + +// MARK: - Auth State +enum AuthState { + case unauthenticated + case authenticating + case authenticated +} + +// MARK: - Wallet Option +struct WalletOption: Identifiable { + let id = UUID() + let name: String + let iconName: String + let chains: [ChainType] + + enum ChainType { + case ethereum + case solana + case multichain + } +} + +class AuthViewModel: ObservableObject { + // MARK: - Published Properties + @Published var showLoginSheet = false + @Published var currentPage: LoginSheetPage = .main + @Published var authState: AuthState = .unauthenticated + @Published var emailInput: String = "" + @Published var isEmailValid: Bool = false + @Published var isLoading: Bool = false + @Published var errorMessage: String? + + // MARK: - Wallet Options + let walletOptions: [WalletOption] = [ + WalletOption(name: "MetaMask", iconName: "metamask", chains: [.ethereum]), + WalletOption(name: "Coinbase Wallet", iconName: "coinbase", chains: [.ethereum]), + WalletOption(name: "Rainbow", iconName: "rainbow", chains: [.ethereum]), + WalletOption(name: "Base", iconName: "base", chains: [.ethereum]), + WalletOption(name: "1inch Wallet", iconName: "1inch", chains: [.ethereum, .solana]) + ] + + // MARK: - Privy Configuration + // Configure via environment or Secrets.xcconfig + private let privyAppId: String = { + // Load from Info.plist or environment + Bundle.main.object(forInfoDictionaryKey: "PRIVY_APP_ID") as? String ?? "" + }() + + // MARK: - Actions + func showLogin() { + currentPage = .main + showLoginSheet = true + } + + func dismissLogin() { + showLoginSheet = false + currentPage = .main + emailInput = "" + errorMessage = nil + } + + func navigateToOtherSocials() { + withAnimation(.easeInOut(duration: 0.3)) { + currentPage = .otherSocials + } + } + + func navigateToWalletSelection() { + withAnimation(.easeInOut(duration: 0.3)) { + currentPage = .walletSelection + } + } + + func navigateBack() { + withAnimation(.easeInOut(duration: 0.3)) { + currentPage = .main + } + } + + func validateEmail() { + let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" + let predicate = NSPredicate(format: "SELF MATCHES %@", pattern) + isEmailValid = predicate.evaluate(with: emailInput) + } + + // MARK: - Auth Methods (Privy SDK integration points) + + func loginWithMetaMask() { + isLoading = true + // TODO: Integrate with Privy SDK + // privy.externalWallet.connect(provider: .metamask) + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func loginWithEmail() { + guard isEmailValid else { return } + isLoading = true + // TODO: Integrate with Privy SDK + // try await privy.email.sendCode(to: emailInput) + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func loginWithGoogle() { + isLoading = true + // TODO: Integrate with Privy SDK + // try await privy.google.login() + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func loginWithTwitter() { + isLoading = true + // TODO: Integrate with Privy SDK + // try await privy.twitter.login() + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func loginWithDiscord() { + isLoading = true + // TODO: Integrate with Privy SDK + // try await privy.discord.login() + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func loginWithTelegram() { + isLoading = true + // TODO: Integrate with Privy SDK + // try await privy.telegram.login() + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } + + func connectWallet(_ wallet: WalletOption) { + isLoading = true + // TODO: Integrate with Privy SDK + // privy.externalWallet.connect(provider: wallet) + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [weak self] in + self?.isLoading = false + } + } +} diff --git a/Pocket/Sources/Views/Auth/LoginSheetView.swift b/Pocket/Sources/Views/Auth/LoginSheetView.swift new file mode 100644 index 0000000..b522392 --- /dev/null +++ b/Pocket/Sources/Views/Auth/LoginSheetView.swift @@ -0,0 +1,272 @@ +import SwiftUI + +struct LoginSheetView: View { + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + ZStack { + Color.black.opacity(0.001) + .ignoresSafeArea() + .onTapGesture { + authViewModel.dismissLogin() + } + + VStack(spacing: 0) { + Spacer() + + VStack(spacing: 0) { + switch authViewModel.currentPage { + case .main: + MainLoginContent(authViewModel: authViewModel) + .transition(.asymmetric( + insertion: .move(edge: .leading).combined(with: .opacity), + removal: .move(edge: .leading).combined(with: .opacity) + )) + case .otherSocials: + OtherSocialsContent(authViewModel: authViewModel) + .transition(.asymmetric( + insertion: .move(edge: .trailing).combined(with: .opacity), + removal: .move(edge: .trailing).combined(with: .opacity) + )) + case .walletSelection: + WalletSelectionContent(authViewModel: authViewModel) + .transition(.asymmetric( + insertion: .move(edge: .trailing).combined(with: .opacity), + removal: .move(edge: .trailing).combined(with: .opacity) + )) + } + + // Footer + LoginFooterView() + } + .background( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .fill(Color.loginSheetBackground) + ) + .padding(.horizontal, 0) + } + .ignoresSafeArea(edges: .bottom) + } + } +} + +// MARK: - Main Login Content +struct MainLoginContent: View { + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + VStack(spacing: 16) { + // Close button + HStack { + Spacer() + Button(action: { authViewModel.dismissLogin() }, label: { + Image(systemName: "xmark") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginButtonBackground)) + }) + } + .padding(.horizontal, 20) + .padding(.top, 16) + + // Logo + Text("POCKET") + .font(.system(size: 32, weight: .bold, design: .rounded)) + .foregroundColor(.white) + .tracking(2) + + // Title + Text("Log in or sign up") + .font(.system(size: 18, weight: .medium)) + .foregroundColor(.white) + .padding(.bottom, 8) + + // Login Options + VStack(spacing: 12) { + // MetaMask + LoginOptionButton( + iconName: "metamask_icon", + systemIcon: "globe", + title: "MetaMask", + showLastUsed: true, + showChainIcon: true, + action: { authViewModel.loginWithMetaMask() } + ) + + // Email Input + EmailInputRow(authViewModel: authViewModel) + + // Google + LoginOptionButton( + iconName: "google_icon", + systemIcon: "g.circle.fill", + title: "Google", + isHighlighted: true, + action: { authViewModel.loginWithGoogle() } + ) + + // Other socials + LoginOptionButton( + iconName: "socials_icon", + systemIcon: "person.circle", + title: "Other socials", + action: { authViewModel.navigateToOtherSocials() } + ) + + // Continue with a wallet + LoginOptionButton( + iconName: "wallet_icon", + systemIcon: "wallet.pass", + title: "Continue with a wallet", + action: { authViewModel.navigateToWalletSelection() } + ) + } + .padding(.horizontal, 20) + .padding(.bottom, 16) + } + } +} + +// MARK: - Email Input Row +struct EmailInputRow: View { + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + HStack(spacing: 12) { + Image(systemName: "envelope") + .font(.system(size: 18)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 36, height: 36) + .background(Circle().fill(Color.loginIconBackground)) + + TextField("your@email.com", text: $authViewModel.emailInput) + .font(.system(size: 16)) + .foregroundColor(.white) + .keyboardType(.emailAddress) + .textContentType(.emailAddress) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: authViewModel.emailInput) { _ in + authViewModel.validateEmail() + } + + Button(action: { authViewModel.loginWithEmail() }, label: { + Text("Submit") + .font(.system(size: 14, weight: .medium)) + .foregroundColor( + authViewModel.isEmailValid + ? .white + : .pocketTertiaryText + ) + }) + .disabled(!authViewModel.isEmailValid) + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(Color.loginButtonBorder, lineWidth: 1) + ) + } +} + +// MARK: - Login Option Button +struct LoginOptionButton: View { + let iconName: String + var systemIcon: String = "circle" + let title: String + var showLastUsed: Bool = false + var showChainIcon: Bool = false + var isHighlighted: Bool = false + let action: () -> Void + + var body: some View { + Button(action: action) { + HStack(spacing: 12) { + Image(systemName: systemIcon) + .font(.system(size: 18)) + .foregroundColor(.white) + .frame(width: 36, height: 36) + .background(Circle().fill(Color.loginIconBackground)) + + Text(title) + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.white) + + Spacer() + + if showLastUsed { + Text("Last used") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .padding(.horizontal, 10) + .padding(.vertical, 4) + .background( + Capsule() + .fill(Color.loginButtonBackground) + ) + } + + if showChainIcon { + Image(systemName: "diamond.fill") + .font(.system(size: 14)) + .foregroundColor(.blue) + } + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .fill(isHighlighted ? Color.loginButtonHighlight : Color.clear) + ) + .overlay( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(Color.loginButtonBorder, lineWidth: 1) + ) + } + } +} + +// MARK: - Footer +struct LoginFooterView: View { + var body: some View { + VStack(spacing: 12) { + HStack(spacing: 4) { + Text("By logging in I agree to the") + .font(.system(size: 12)) + .foregroundColor(.pocketSecondaryText) + + Button(action: { + // Open Privacy Policy + }, label: { + Text("Privacy Policy") + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.white) + }) + } + + HStack(spacing: 6) { + Text("Protected by") + .font(.system(size: 12)) + .foregroundColor(.pocketTertiaryText) + + Circle() + .fill(Color.green) + .frame(width: 6, height: 6) + + Text("privy") + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.pocketSecondaryText) + } + } + .padding(.vertical, 20) + } +} + +#Preview { + ZStack { + Color.black.ignoresSafeArea() + LoginSheetView(authViewModel: AuthViewModel()) + } +} diff --git a/Pocket/Sources/Views/Auth/OtherSocialsContent.swift b/Pocket/Sources/Views/Auth/OtherSocialsContent.swift new file mode 100644 index 0000000..09d6737 --- /dev/null +++ b/Pocket/Sources/Views/Auth/OtherSocialsContent.swift @@ -0,0 +1,115 @@ +import SwiftUI + +struct OtherSocialsContent: View { + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + VStack(spacing: 16) { + // Navigation bar + HStack { + Button(action: { authViewModel.navigateBack() }, label: { + Image(systemName: "arrow.left") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginButtonBackground)) + }) + + Spacer() + + Button(action: { authViewModel.dismissLogin() }, label: { + Image(systemName: "xmark") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginButtonBackground)) + }) + } + .padding(.horizontal, 20) + .padding(.top, 16) + + // Title + Text("Log in or sign up") + .font(.system(size: 18, weight: .medium)) + .foregroundColor(.white) + .padding(.top, 8) + .padding(.bottom, 8) + + // Social Options + VStack(spacing: 12) { + // Twitter / X + SocialLoginButton( + systemIcon: "xmark", + title: "Twitter", + iconBackground: Color.white, + iconForeground: Color.black, + action: { authViewModel.loginWithTwitter() } + ) + + // Discord + SocialLoginButton( + systemIcon: "message.fill", + title: "Discord", + iconBackground: Color(red: 0.34, green: 0.40, blue: 0.95), + iconForeground: .white, + action: { authViewModel.loginWithDiscord() } + ) + + // Telegram + SocialLoginButton( + systemIcon: "paperplane.fill", + title: "Telegram", + iconBackground: Color(red: 0.40, green: 0.67, blue: 0.88), + iconForeground: .white, + action: { authViewModel.loginWithTelegram() } + ) + } + .padding(.horizontal, 20) + .padding(.bottom, 16) + } + } +} + +// MARK: - Social Login Button +struct SocialLoginButton: View { + let systemIcon: String + let title: String + var iconBackground: Color = .loginIconBackground + var iconForeground: Color = .white + let action: () -> Void + + var body: some View { + Button(action: action) { + HStack(spacing: 12) { + Image(systemName: systemIcon) + .font(.system(size: 16, weight: .bold)) + .foregroundColor(iconForeground) + .frame(width: 36, height: 36) + .background(Circle().fill(iconBackground)) + + Text(title) + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.white) + + Spacer() + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .overlay( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(Color.loginButtonBorder, lineWidth: 1) + ) + } + } +} + +#Preview { + ZStack { + Color.black.ignoresSafeArea() + VStack { + Spacer() + OtherSocialsContent(authViewModel: AuthViewModel()) + .background(Color.loginSheetBackground) + } + } +} diff --git a/Pocket/Sources/Views/Auth/WalletSelectionContent.swift b/Pocket/Sources/Views/Auth/WalletSelectionContent.swift new file mode 100644 index 0000000..86339f8 --- /dev/null +++ b/Pocket/Sources/Views/Auth/WalletSelectionContent.swift @@ -0,0 +1,183 @@ +import SwiftUI + +struct WalletSelectionContent: View { + @ObservedObject var authViewModel: AuthViewModel + @State private var searchText: String = "" + + private var filteredWallets: [WalletOption] { + if searchText.isEmpty { + return authViewModel.walletOptions + } + return authViewModel.walletOptions.filter { + $0.name.localizedCaseInsensitiveContains(searchText) + } + } + + var body: some View { + VStack(spacing: 16) { + // Navigation bar + HStack { + Button(action: { authViewModel.navigateBack() }, label: { + Image(systemName: "arrow.left") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginButtonBackground)) + }) + + Spacer() + + Button(action: { authViewModel.dismissLogin() }, label: { + Image(systemName: "xmark") + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginButtonBackground)) + }) + } + .padding(.horizontal, 20) + .padding(.top, 16) + + // Wallet icon + Image(systemName: "wallet.pass") + .font(.system(size: 28)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 56, height: 56) + .background(Circle().fill(Color.loginButtonBackground)) + + // Title + Text("Select your wallet") + .font(.system(size: 18, weight: .medium)) + .foregroundColor(.white) + .padding(.bottom, 4) + + // Search field + HStack(spacing: 10) { + Image(systemName: "magnifyingglass") + .font(.system(size: 16)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 32, height: 32) + .background(Circle().fill(Color.loginIconBackground)) + + TextField( + "Search through \(authViewModel.walletOptions.count) wallets", + text: $searchText + ) + .font(.system(size: 15)) + .foregroundColor(.white) + .autocapitalization(.none) + .disableAutocorrection(true) + } + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .fill(Color.loginButtonHighlight) + ) + .padding(.horizontal, 20) + + // Wallet list + ScrollView { + VStack(spacing: 10) { + ForEach(filteredWallets) { wallet in + WalletRowButton(wallet: wallet) { + authViewModel.connectWallet(wallet) + } + } + } + .padding(.horizontal, 20) + } + .frame(maxHeight: 320) + .padding(.bottom, 16) + } + } +} + +// MARK: - Wallet Row Button +struct WalletRowButton: View { + let wallet: WalletOption + let action: () -> Void + + var body: some View { + Button(action: action) { + HStack(spacing: 12) { + walletIcon + + Text(wallet.name) + .font(.system(size: 16, weight: .medium)) + .foregroundColor(.white) + + Spacer() + + chainIcons + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .overlay( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(Color.loginButtonBorder, lineWidth: 1) + ) + } + } + + @ViewBuilder + private var walletIcon: some View { + ZStack { + RoundedRectangle(cornerRadius: 8, style: .continuous) + .fill(walletIconColor) + .frame(width: 36, height: 36) + + Text(String(wallet.name.prefix(1))) + .font(.system(size: 16, weight: .bold)) + .foregroundColor(.white) + } + } + + private var walletIconColor: Color { + switch wallet.name { + case "MetaMask": + return Color(red: 0.88, green: 0.56, blue: 0.20) + case "Coinbase Wallet": + return Color(red: 0.20, green: 0.40, blue: 0.95) + case "Rainbow": + return Color(red: 0.95, green: 0.50, blue: 0.20) + case "Base": + return Color(red: 0.20, green: 0.33, blue: 1.0) + default: + return Color.loginIconBackground + } + } + + @ViewBuilder + private var chainIcons: some View { + HStack(spacing: 4) { + ForEach(wallet.chains.indices, id: \.self) { index in + switch wallet.chains[index] { + case .ethereum: + Image(systemName: "diamond.fill") + .font(.system(size: 12)) + .foregroundColor(.blue) + case .solana: + Image(systemName: "circle.hexagongrid.fill") + .font(.system(size: 12)) + .foregroundColor(.purple) + case .multichain: + Image(systemName: "circle.grid.2x2.fill") + .font(.system(size: 12)) + .foregroundColor(.green) + } + } + } + } +} + +#Preview { + ZStack { + Color.black.ignoresSafeArea() + VStack { + Spacer() + WalletSelectionContent(authViewModel: AuthViewModel()) + .background(Color.loginSheetBackground) + } + } +} diff --git a/Pocket/Sources/Views/WelcomeView.swift b/Pocket/Sources/Views/WelcomeView.swift index 7a4c045..3166692 100644 --- a/Pocket/Sources/Views/WelcomeView.swift +++ b/Pocket/Sources/Views/WelcomeView.swift @@ -2,6 +2,7 @@ import SwiftUI struct WelcomeView: View { @StateObject private var viewModel = WelcomeViewModel() + @ObservedObject var authViewModel: AuthViewModel @State private var showContent = false var body: some View { @@ -35,8 +36,8 @@ struct WelcomeView: View { VStack(spacing: 16) { // Get Started Button Button(action: { - // Handle get started action - }) { + authViewModel.showLogin() + }, label: { Text("Get started") .font(.system(size: 18, weight: .semibold)) .foregroundColor(.black) @@ -46,7 +47,7 @@ struct WelcomeView: View { Capsule() .fill(Color.pocketCyan) ) - } + }) .padding(.horizontal, 40) .opacity(showContent ? 1 : 0) .offset(y: showContent ? 0 : 20) @@ -60,12 +61,12 @@ struct WelcomeView: View { Button(action: { // Handle terms action - }) { + }, label: { Text("Terms & Conditions") .font(.system(size: 12, weight: .medium)) .foregroundColor(.pocketCyan) .underline() - } + }) } .opacity(showContent ? 1 : 0) .animation(.easeOut(duration: 0.6).delay(0.8), value: showContent) @@ -76,9 +77,16 @@ struct WelcomeView: View { .onAppear { showContent = true } + .overlay { + if authViewModel.showLoginSheet { + LoginSheetView(authViewModel: authViewModel) + .transition(.move(edge: .bottom).combined(with: .opacity)) + .animation(.spring(response: 0.4, dampingFraction: 0.85), value: authViewModel.showLoginSheet) + } + } } } #Preview { - WelcomeView() + WelcomeView(authViewModel: AuthViewModel()) } From 40883fefe90ea0de83c64228dd0447d957a83d8d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 01:58:15 +0000 Subject: [PATCH 3/4] feat: Add Phase 2 - Main app screens (Home, Chat, Market, Settings) - Add MainTabView with custom tab bar navigation - Add HomeView with portfolio balance, agents, and assets sections - Add ChatView with AI agent chat and message input - Add MarketView with token list, search, and timeframe selector - Add SettingsView with profile, wallets, preferences, and about sections - Add PortfolioViewModel, ChatViewModel, MarketViewModel - Extend Models with Asset, WalletInfo, AgentDetail, MarketItem, AppTab - Add auth flow: Welcome -> Login -> MainTab based on AuthState - Add mockLogin() for development testing - Add logout() to AuthViewModel - Fix onChange deprecation for iOS 17 Co-Authored-By: DAR --- Pocket/Sources/Models/Models.swift | 197 ++++++++++ Pocket/Sources/PocketApp.swift | 12 +- Pocket/Sources/ViewModels/AuthViewModel.swift | 19 + Pocket/Sources/ViewModels/ChatViewModel.swift | 63 ++++ .../Sources/ViewModels/MarketViewModel.swift | 43 +++ .../ViewModels/PortfolioViewModel.swift | 42 +++ .../Sources/Views/Auth/LoginSheetView.swift | 6 +- Pocket/Sources/Views/Main/ChatView.swift | 208 +++++++++++ Pocket/Sources/Views/Main/HomeView.swift | 349 ++++++++++++++++++ Pocket/Sources/Views/Main/MainTabView.swift | 76 ++++ Pocket/Sources/Views/Main/MarketView.swift | 192 ++++++++++ Pocket/Sources/Views/Main/SettingsView.swift | 265 +++++++++++++ 12 files changed, 1467 insertions(+), 5 deletions(-) create mode 100644 Pocket/Sources/ViewModels/ChatViewModel.swift create mode 100644 Pocket/Sources/ViewModels/MarketViewModel.swift create mode 100644 Pocket/Sources/ViewModels/PortfolioViewModel.swift create mode 100644 Pocket/Sources/Views/Main/ChatView.swift create mode 100644 Pocket/Sources/Views/Main/HomeView.swift create mode 100644 Pocket/Sources/Views/Main/MainTabView.swift create mode 100644 Pocket/Sources/Views/Main/MarketView.swift create mode 100644 Pocket/Sources/Views/Main/SettingsView.swift diff --git a/Pocket/Sources/Models/Models.swift b/Pocket/Sources/Models/Models.swift index 4e5c02e..ce9a67b 100644 --- a/Pocket/Sources/Models/Models.swift +++ b/Pocket/Sources/Models/Models.swift @@ -87,3 +87,200 @@ struct PortfolioData { isDown: true ) } + +// MARK: - Tab Definition +enum AppTab: Int, CaseIterable { + case home = 0 + case chat = 1 + case market = 2 + case settings = 3 + + var title: String { + switch self { + case .home: return "Home" + case .chat: return "Chat" + case .market: return "Market" + case .settings: return "Settings" + } + } + + var icon: String { + switch self { + case .home: return "house.fill" + case .chat: return "bubble.left.and.bubble.right.fill" + case .market: return "chart.line.uptrend.xyaxis" + case .settings: return "gearshape.fill" + } + } +} + +// MARK: - Asset Model +struct Asset: Identifiable { + let id = UUID() + let name: String + let symbol: String + let iconName: String + let balance: Double + let value: Double + let changePercent: Double + let isUp: Bool + let chainType: AssetChainType + + enum AssetChainType { + case ethereum + case solana + } + + static let samples: [Asset] = [ + Asset( + name: "Ethereum", + symbol: "ETH", + iconName: "ethereum", + balance: 0.0185, + value: 48.62, + changePercent: 2.3, + isUp: true, + chainType: .ethereum + ), + Asset( + name: "Solana", + symbol: "SOL", + iconName: "solana", + balance: 0.082, + value: 13.56, + changePercent: 5.7, + isUp: false, + chainType: .solana + ) + ] +} + +// MARK: - Wallet Info +struct WalletInfo: Identifiable { + let id = UUID() + let address: String + let chainType: WalletChainType + let isEmbedded: Bool + + enum WalletChainType: String { + case ethereum = "Ethereum" + case solana = "Solana" + } + + var shortAddress: String { + guard address.count > 10 else { return address } + return "\(address.prefix(6))...\(address.suffix(4))" + } + + static let samples: [WalletInfo] = [ + WalletInfo( + address: "0x1234...abcd", + chainType: .ethereum, + isEmbedded: true + ), + WalletInfo( + address: "5FHn...9xKz", + chainType: .solana, + isEmbedded: true + ) + ] +} + +// MARK: - Agent Status +enum AgentStatus: String { + case running = "Running" + case paused = "Paused" + case stopped = "Stopped" + + var color: Color { + switch self { + case .running: return .pocketGreen + case .paused: return .agentStocks + case .stopped: return .pocketRed + } + } +} + +// MARK: - Agent Detail +struct AgentDetail: Identifiable { + let id = UUID() + let agent: Agent + let status: AgentStatus + let description: String + let profitLoss: Double + + static let samples: [AgentDetail] = [ + AgentDetail( + agent: Agent.samples[0], + status: .running, + description: "Analyzing stock markets and executing trades", + profitLoss: 12.5 + ), + AgentDetail( + agent: Agent.samples[1], + status: .running, + description: "Predicting market trends with AI models", + profitLoss: -3.2 + ), + AgentDetail( + agent: Agent.samples[2], + status: .paused, + description: "Managing DeFi positions and yield farming", + profitLoss: 8.7 + ) + ] +} + +// MARK: - Market Item +struct MarketItem: Identifiable { + let id = UUID() + let name: String + let symbol: String + let price: Double + let changePercent: Double + let isUp: Bool + let chartPoints: [CGFloat] + + static let samples: [MarketItem] = [ + MarketItem( + name: "Bitcoin", + symbol: "BTC", + price: 67_432.50, + changePercent: 1.8, + isUp: true, + chartPoints: [0.4, 0.42, 0.45, 0.43, 0.48, 0.50, 0.52, 0.55, 0.53, 0.58] + ), + MarketItem( + name: "Ethereum", + symbol: "ETH", + price: 2_628.30, + changePercent: 2.3, + isUp: true, + chartPoints: [0.5, 0.48, 0.52, 0.55, 0.53, 0.58, 0.60, 0.57, 0.62, 0.65] + ), + MarketItem( + name: "Solana", + symbol: "SOL", + price: 165.42, + changePercent: 5.7, + isUp: false, + chartPoints: [0.7, 0.68, 0.65, 0.63, 0.60, 0.58, 0.55, 0.52, 0.50, 0.48] + ), + MarketItem( + name: "Chainlink", + symbol: "LINK", + price: 14.85, + changePercent: 3.1, + isUp: true, + chartPoints: [0.3, 0.35, 0.38, 0.40, 0.42, 0.45, 0.48, 0.50, 0.52, 0.55] + ), + MarketItem( + name: "Uniswap", + symbol: "UNI", + price: 7.23, + changePercent: 1.2, + isUp: false, + chartPoints: [0.6, 0.58, 0.55, 0.57, 0.54, 0.52, 0.50, 0.48, 0.50, 0.47] + ) + ] +} diff --git a/Pocket/Sources/PocketApp.swift b/Pocket/Sources/PocketApp.swift index 466628f..513858b 100644 --- a/Pocket/Sources/PocketApp.swift +++ b/Pocket/Sources/PocketApp.swift @@ -6,8 +6,16 @@ struct PocketApp: App { var body: some Scene { WindowGroup { - WelcomeView(authViewModel: authViewModel) - .preferredColorScheme(.dark) + Group { + switch authViewModel.authState { + case .unauthenticated, .authenticating: + WelcomeView(authViewModel: authViewModel) + case .authenticated: + MainTabView(authViewModel: authViewModel) + } + } + .animation(.easeInOut(duration: 0.4), value: authViewModel.authState == .authenticated) + .preferredColorScheme(.dark) } } } diff --git a/Pocket/Sources/ViewModels/AuthViewModel.swift b/Pocket/Sources/ViewModels/AuthViewModel.swift index 375cab5..543f6de 100644 --- a/Pocket/Sources/ViewModels/AuthViewModel.swift +++ b/Pocket/Sources/ViewModels/AuthViewModel.swift @@ -157,4 +157,23 @@ class AuthViewModel: ObservableObject { self?.isLoading = false } } + + // MARK: - Mock Login (for development) + func mockLogin() { + isLoading = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) { [weak self] in + guard let self = self else { return } + self.isLoading = false + self.showLoginSheet = false + self.authState = .authenticated + } + } + + func logout() { + // TODO: Integrate with Privy SDK + // try await privy.logout() + authState = .unauthenticated + emailInput = "" + errorMessage = nil + } } diff --git a/Pocket/Sources/ViewModels/ChatViewModel.swift b/Pocket/Sources/ViewModels/ChatViewModel.swift new file mode 100644 index 0000000..b320e66 --- /dev/null +++ b/Pocket/Sources/ViewModels/ChatViewModel.swift @@ -0,0 +1,63 @@ +import SwiftUI +import Combine + +class ChatViewModel: ObservableObject { + // MARK: - Published Properties + @Published var messages: [ChatMessage] = [] + @Published var inputText: String = "" + @Published var selectedAgent: Agent = Agent.samples[0] + @Published var isSending: Bool = false + + init() { + loadSampleMessages() + } + + // MARK: - Actions + func sendMessage() { + guard !inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { return } + let userMessage = ChatMessage( + sender: .user, + text: inputText, + time: currentTimeString() + ) + messages.append(userMessage) + let sentText = inputText + inputText = "" + isSending = true + + // TODO: Integrate with AI agent backend + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in + guard let self = self else { return } + let agentResponse = ChatMessage( + sender: .agent(self.selectedAgent.name), + text: "I'm analyzing your request: \"\(sentText)\". Let me check the markets.", + time: self.currentTimeString() + ) + self.messages.append(agentResponse) + self.isSending = false + } + } + + func selectAgent(_ agent: Agent) { + selectedAgent = agent + messages.removeAll() + loadSampleMessages() + } + + // MARK: - Private + private func loadSampleMessages() { + messages = [ + ChatMessage( + sender: .agent(selectedAgent.name), + text: "Hello! I'm your \(selectedAgent.name) agent. How can I help you today?", + time: "9:00 am" + ) + ] + } + + private func currentTimeString() -> String { + let formatter = DateFormatter() + formatter.dateFormat = "h:mm a" + return formatter.string(from: Date()) + } +} diff --git a/Pocket/Sources/ViewModels/MarketViewModel.swift b/Pocket/Sources/ViewModels/MarketViewModel.swift new file mode 100644 index 0000000..6d751a9 --- /dev/null +++ b/Pocket/Sources/ViewModels/MarketViewModel.swift @@ -0,0 +1,43 @@ +import SwiftUI +import Combine + +class MarketViewModel: ObservableObject { + // MARK: - Published Properties + @Published var marketItems: [MarketItem] = MarketItem.samples + @Published var searchText: String = "" + @Published var isLoading: Bool = false + @Published var selectedTimeframe: MarketTimeframe = .day + + enum MarketTimeframe: String, CaseIterable { + case hour = "1H" + case day = "1D" + case week = "1W" + case month = "1M" + case year = "1Y" + } + + // MARK: - Computed Properties + var filteredItems: [MarketItem] { + if searchText.isEmpty { + return marketItems + } + return marketItems.filter { + $0.name.localizedCaseInsensitiveContains(searchText) || + $0.symbol.localizedCaseInsensitiveContains(searchText) + } + } + + // MARK: - Actions + func refreshMarket() { + isLoading = true + // TODO: Fetch real market data from API + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in + self?.isLoading = false + } + } + + func selectTimeframe(_ timeframe: MarketTimeframe) { + selectedTimeframe = timeframe + refreshMarket() + } +} diff --git a/Pocket/Sources/ViewModels/PortfolioViewModel.swift b/Pocket/Sources/ViewModels/PortfolioViewModel.swift new file mode 100644 index 0000000..52d378d --- /dev/null +++ b/Pocket/Sources/ViewModels/PortfolioViewModel.swift @@ -0,0 +1,42 @@ +import SwiftUI +import Combine + +class PortfolioViewModel: ObservableObject { + // MARK: - Published Properties + @Published var portfolio: PortfolioData = .sample + @Published var assets: [Asset] = Asset.samples + @Published var wallets: [WalletInfo] = WalletInfo.samples + @Published var agentDetails: [AgentDetail] = AgentDetail.samples + @Published var isRefreshing: Bool = false + + // MARK: - Computed Properties + var totalBalance: Double { + assets.reduce(0) { $0 + $1.value } + } + + var activeAgentsCount: Int { + agentDetails.filter { $0.status == .running }.count + } + + // MARK: - Actions + func refreshPortfolio() { + isRefreshing = true + // TODO: Integrate with Privy SDK to fetch real wallet balances + // privy.embeddedWallet.getBalance() + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in + self?.isRefreshing = false + } + } + + func toggleAgent(_ agentDetail: AgentDetail) { + guard let index = agentDetails.firstIndex(where: { $0.id == agentDetail.id }) else { return } + let current = agentDetails[index] + let newStatus: AgentStatus = current.status == .running ? .paused : .running + agentDetails[index] = AgentDetail( + agent: current.agent, + status: newStatus, + description: current.description, + profitLoss: current.profitLoss + ) + } +} diff --git a/Pocket/Sources/Views/Auth/LoginSheetView.swift b/Pocket/Sources/Views/Auth/LoginSheetView.swift index b522392..65939c3 100644 --- a/Pocket/Sources/Views/Auth/LoginSheetView.swift +++ b/Pocket/Sources/Views/Auth/LoginSheetView.swift @@ -91,7 +91,7 @@ struct MainLoginContent: View { title: "MetaMask", showLastUsed: true, showChainIcon: true, - action: { authViewModel.loginWithMetaMask() } + action: { authViewModel.mockLogin() } ) // Email Input @@ -103,7 +103,7 @@ struct MainLoginContent: View { systemIcon: "g.circle.fill", title: "Google", isHighlighted: true, - action: { authViewModel.loginWithGoogle() } + action: { authViewModel.mockLogin() } ) // Other socials @@ -147,7 +147,7 @@ struct EmailInputRow: View { .textContentType(.emailAddress) .autocapitalization(.none) .disableAutocorrection(true) - .onChange(of: authViewModel.emailInput) { _ in + .onChange(of: authViewModel.emailInput) { authViewModel.validateEmail() } diff --git a/Pocket/Sources/Views/Main/ChatView.swift b/Pocket/Sources/Views/Main/ChatView.swift new file mode 100644 index 0000000..9d8ae51 --- /dev/null +++ b/Pocket/Sources/Views/Main/ChatView.swift @@ -0,0 +1,208 @@ +import SwiftUI + +struct ChatView: View { + @ObservedObject var chatViewModel: ChatViewModel + + var body: some View { + VStack(spacing: 0) { + // Header + ChatHeaderView( + selectedAgent: chatViewModel.selectedAgent, + onSelectAgent: { agent in chatViewModel.selectAgent(agent) } + ) + + // Messages + ScrollViewReader { proxy in + ScrollView { + LazyVStack(spacing: 16) { + ForEach(chatViewModel.messages) { message in + ChatBubbleView(message: message) + .id(message.id) + } + + if chatViewModel.isSending { + TypingIndicatorView(agentName: chatViewModel.selectedAgent.name) + } + } + .padding(.horizontal, 20) + .padding(.vertical, 16) + } + .onChange(of: chatViewModel.messages.count) { + if let lastMessage = chatViewModel.messages.last { + withAnimation { + proxy.scrollTo(lastMessage.id, anchor: .bottom) + } + } + } + } + + // Input Bar + ChatInputBar( + inputText: $chatViewModel.inputText, + isSending: chatViewModel.isSending, + onSend: { chatViewModel.sendMessage() } + ) + + // Spacer for tab bar + Spacer().frame(height: 60) + } + .background(Color.pocketBackground.ignoresSafeArea()) + } +} + +// MARK: - Chat Header +struct ChatHeaderView: View { + let selectedAgent: Agent + let onSelectAgent: (Agent) -> Void + + var body: some View { + VStack(spacing: 12) { + // Title + HStack { + Text("Chat") + .font(.system(size: 24, weight: .bold)) + .foregroundColor(.white) + + Spacer() + } + .padding(.horizontal, 20) + .padding(.top, 16) + + // Agent Selector + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 12) { + ForEach(Agent.samples) { agent in + AgentChipView( + agent: agent, + isSelected: agent.name == selectedAgent.name, + onTap: { onSelectAgent(agent) } + ) + } + } + .padding(.horizontal, 20) + } + } + .padding(.bottom, 8) + .background(Color.pocketBackground) + } +} + +struct AgentChipView: View { + let agent: Agent + let isSelected: Bool + let onTap: () -> Void + + var body: some View { + Button(action: onTap, label: { + HStack(spacing: 8) { + Circle() + .fill(agent.color) + .frame(width: 24, height: 24) + .overlay( + Image(systemName: agent.icon) + .font(.system(size: 10)) + .foregroundColor(.white) + ) + + Text(agent.name) + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(isSelected ? .white : .pocketSecondaryText) + } + .padding(.horizontal, 14) + .padding(.vertical, 8) + .background( + Capsule() + .fill(isSelected ? agent.color.opacity(0.25) : Color.pocketCardBackground) + .overlay( + Capsule() + .stroke(isSelected ? agent.color : Color.pocketCardBorder, lineWidth: 1) + ) + ) + }) + } +} + +// MARK: - Typing Indicator +struct TypingIndicatorView: View { + let agentName: String + @State private var dotCount = 0 + + var body: some View { + HStack(alignment: .top, spacing: 10) { + Circle() + .fill(Color.agentStocks) + .frame(width: 32, height: 32) + + VStack(alignment: .leading, spacing: 4) { + Text(agentName) + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.white) + + HStack(spacing: 4) { + ForEach(0..<3, id: \.self) { index in + Circle() + .fill(Color.pocketSecondaryText) + .frame(width: 6, height: 6) + .opacity(dotCount > index ? 1 : 0.3) + } + } + } + + Spacer() + } + .onAppear { + Timer.scheduledTimer(withTimeInterval: 0.4, repeats: true) { _ in + withAnimation { + dotCount = (dotCount + 1) % 4 + } + } + } + } +} + +// MARK: - Chat Input Bar +struct ChatInputBar: View { + @Binding var inputText: String + let isSending: Bool + let onSend: () -> Void + + var body: some View { + HStack(spacing: 12) { + TextField("Message your agent...", text: $inputText) + .font(.system(size: 15)) + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background( + RoundedRectangle(cornerRadius: 24, style: .continuous) + .fill(Color.pocketCardBackground) + .overlay( + RoundedRectangle(cornerRadius: 24, style: .continuous) + .stroke(Color.pocketCardBorder, lineWidth: 1) + ) + ) + .onSubmit { + onSend() + } + + Button(action: onSend, label: { + Image(systemName: "arrow.up.circle.fill") + .font(.system(size: 32)) + .foregroundColor( + inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || isSending + ? .pocketSecondaryText + : .pocketCyan + ) + }) + .disabled(inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || isSending) + } + .padding(.horizontal, 20) + .padding(.vertical, 10) + .background(Color.pocketBackground) + } +} + +#Preview { + ChatView(chatViewModel: ChatViewModel()) + .preferredColorScheme(.dark) +} diff --git a/Pocket/Sources/Views/Main/HomeView.swift b/Pocket/Sources/Views/Main/HomeView.swift new file mode 100644 index 0000000..ab08b9f --- /dev/null +++ b/Pocket/Sources/Views/Main/HomeView.swift @@ -0,0 +1,349 @@ +import SwiftUI + +struct HomeView: View { + @ObservedObject var portfolioViewModel: PortfolioViewModel + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + ScrollView { + VStack(spacing: 24) { + // Header + HomeHeaderView() + + // Balance Card + BalanceCardView(portfolio: portfolioViewModel.portfolio) + + // Quick Actions + QuickActionsView() + + // Agents Section + AgentsSectionView(agentDetails: portfolioViewModel.agentDetails) { agent in + portfolioViewModel.toggleAgent(agent) + } + + // Assets Section + AssetsSectionView(assets: portfolioViewModel.assets) + + // Spacer for tab bar + Spacer().frame(height: 80) + } + .padding(.horizontal, 20) + } + .background(Color.pocketBackground.ignoresSafeArea()) + .refreshable { + portfolioViewModel.refreshPortfolio() + } + } +} + +// MARK: - Home Header +struct HomeHeaderView: View { + var body: some View { + HStack { + VStack(alignment: .leading, spacing: 4) { + Text("POCKET") + .font(.system(size: 24, weight: .black, design: .rounded)) + .foregroundColor(.white) + .tracking(1) + + Text("Your Crypto AI Assistant") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + + Spacer() + + // Notification Bell + Button(action: { + // TODO: Show notifications + }, label: { + Image(systemName: "bell.fill") + .font(.system(size: 18)) + .foregroundColor(.pocketSecondaryText) + .frame(width: 40, height: 40) + .background(Circle().fill(Color.pocketCardBackground)) + }) + } + .padding(.top, 16) + } +} + +// MARK: - Balance Card +struct BalanceCardView: View { + let portfolio: PortfolioData + + var body: some View { + VStack(spacing: 12) { + Text("Total Balance") + .font(.system(size: 14, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + + Text("$\(String(format: "%.2f", portfolio.balance))") + .font(.system(size: 42, weight: .bold, design: .rounded)) + .foregroundColor(.white) + + HStack(spacing: 6) { + Image(systemName: portfolio.isDown ? "arrow.down.right" : "arrow.up.right") + .font(.system(size: 12, weight: .semibold)) + .foregroundColor(portfolio.isDown ? .pocketRed : .pocketGreen) + + Text("\(String(format: "%.1f", portfolio.changePercent))%") + .font(.system(size: 14, weight: .bold)) + .foregroundColor(portfolio.isDown ? .pocketRed : .pocketGreen) + + Text("today") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + } + .frame(maxWidth: .infinity) + .padding(.vertical, 28) + .background( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .fill(Color.pocketCardBackground) + .overlay( + RoundedRectangle(cornerRadius: 20, style: .continuous) + .stroke(Color.pocketCardBorder, lineWidth: 1) + ) + ) + } +} + +// MARK: - Quick Actions +struct QuickActionsView: View { + var body: some View { + HStack(spacing: 12) { + QuickActionButton(icon: "arrow.down", title: "Receive") + QuickActionButton(icon: "arrow.up", title: "Send") + QuickActionButton(icon: "arrow.left.arrow.right", title: "Swap") + QuickActionButton(icon: "plus", title: "Buy") + } + } +} + +struct QuickActionButton: View { + let icon: String + let title: String + + var body: some View { + Button(action: { + // TODO: Implement action + }, label: { + VStack(spacing: 8) { + Image(systemName: icon) + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.pocketCyan) + .frame(width: 44, height: 44) + .background( + Circle() + .fill(Color.pocketCyan.opacity(0.12)) + ) + + Text(title) + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + .frame(maxWidth: .infinity) + }) + } +} + +// MARK: - Agents Section +struct AgentsSectionView: View { + let agentDetails: [AgentDetail] + let onToggle: (AgentDetail) -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + HStack { + Text("AI Agents") + .font(.system(size: 18, weight: .semibold)) + .foregroundColor(.white) + + Spacer() + + Text("See all") + .font(.system(size: 14, weight: .medium)) + .foregroundColor(.pocketCyan) + } + + ForEach(agentDetails) { detail in + AgentRowView(agentDetail: detail, onToggle: { onToggle(detail) }) + } + } + } +} + +struct AgentRowView: View { + let agentDetail: AgentDetail + let onToggle: () -> Void + + var body: some View { + HStack(spacing: 12) { + // Agent Color Circle + Circle() + .fill(agentDetail.agent.color) + .frame(width: 40, height: 40) + .overlay( + Image(systemName: agentDetail.agent.icon) + .font(.system(size: 16)) + .foregroundColor(.white) + ) + + VStack(alignment: .leading, spacing: 4) { + HStack(spacing: 8) { + Text(agentDetail.agent.name) + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + + HStack(spacing: 4) { + Circle() + .fill(agentDetail.status.color) + .frame(width: 6, height: 6) + + Text(agentDetail.status.rawValue) + .font(.system(size: 12, weight: .medium)) + .foregroundColor(agentDetail.status.color) + } + } + + Text(agentDetail.description) + .font(.system(size: 13, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + .lineLimit(1) + } + + Spacer() + + // P/L + VStack(alignment: .trailing, spacing: 2) { + Text(agentDetail.profitLoss >= 0 ? "+\(String(format: "%.1f", agentDetail.profitLoss))%" : "\(String(format: "%.1f", agentDetail.profitLoss))%") + .font(.system(size: 14, weight: .bold)) + .foregroundColor(agentDetail.profitLoss >= 0 ? .pocketGreen : .pocketRed) + + Button(action: onToggle, label: { + Text(agentDetail.status == .running ? "Pause" : "Start") + .font(.system(size: 11, weight: .semibold)) + .foregroundColor(.pocketCyan) + }) + } + } + .padding(14) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + } +} + +// MARK: - Assets Section +struct AssetsSectionView: View { + let assets: [Asset] + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + HStack { + Text("Assets") + .font(.system(size: 18, weight: .semibold)) + .foregroundColor(.white) + + Spacer() + + Text("See all") + .font(.system(size: 14, weight: .medium)) + .foregroundColor(.pocketCyan) + } + + if assets.isEmpty { + EmptyAssetsView() + } else { + ForEach(assets) { asset in + AssetRowView(asset: asset) + } + } + } + } +} + +struct AssetRowView: View { + let asset: Asset + + var body: some View { + HStack(spacing: 12) { + // Token Icon + Circle() + .fill(asset.chainType == .ethereum ? Color.agentPredictions : Color.agentDefi) + .frame(width: 40, height: 40) + .overlay( + Text(String(asset.symbol.prefix(1))) + .font(.system(size: 16, weight: .bold)) + .foregroundColor(.white) + ) + + VStack(alignment: .leading, spacing: 4) { + Text(asset.name) + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + + Text("\(String(format: "%.4f", asset.balance)) \(asset.symbol)") + .font(.system(size: 13, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + } + + Spacer() + + VStack(alignment: .trailing, spacing: 4) { + Text("$\(String(format: "%.2f", asset.value))") + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + + HStack(spacing: 3) { + Image(systemName: asset.isUp ? "arrow.up.right" : "arrow.down.right") + .font(.system(size: 10, weight: .semibold)) + + Text("\(String(format: "%.1f", asset.changePercent))%") + .font(.system(size: 12, weight: .medium)) + } + .foregroundColor(asset.isUp ? .pocketGreen : .pocketRed) + } + } + .padding(14) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + } +} + +struct EmptyAssetsView: View { + var body: some View { + VStack(spacing: 12) { + Image(systemName: "wallet.pass") + .font(.system(size: 32)) + .foregroundColor(.pocketSecondaryText) + + Text("No assets yet") + .font(.system(size: 15, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + + Text("Your crypto assets will appear here\nonce you receive or buy tokens.") + .font(.system(size: 13, weight: .regular)) + .foregroundColor(.pocketTertiaryText) + .multilineTextAlignment(.center) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 32) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + } +} + +#Preview { + HomeView( + portfolioViewModel: PortfolioViewModel(), + authViewModel: AuthViewModel() + ) + .preferredColorScheme(.dark) +} diff --git a/Pocket/Sources/Views/Main/MainTabView.swift b/Pocket/Sources/Views/Main/MainTabView.swift new file mode 100644 index 0000000..71a5bae --- /dev/null +++ b/Pocket/Sources/Views/Main/MainTabView.swift @@ -0,0 +1,76 @@ +import SwiftUI + +struct MainTabView: View { + @ObservedObject var authViewModel: AuthViewModel + @StateObject private var portfolioViewModel = PortfolioViewModel() + @StateObject private var chatViewModel = ChatViewModel() + @StateObject private var marketViewModel = MarketViewModel() + @State private var selectedTab: AppTab = .home + + var body: some View { + ZStack(alignment: .bottom) { + // Tab Content + Group { + switch selectedTab { + case .home: + HomeView( + portfolioViewModel: portfolioViewModel, + authViewModel: authViewModel + ) + case .chat: + ChatView(chatViewModel: chatViewModel) + case .market: + MarketView(marketViewModel: marketViewModel) + case .settings: + SettingsView(authViewModel: authViewModel) + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + + // Custom Tab Bar + CustomTabBar(selectedTab: $selectedTab) + } + .ignoresSafeArea(.keyboard) + } +} + +// MARK: - Custom Tab Bar +struct CustomTabBar: View { + @Binding var selectedTab: AppTab + + var body: some View { + HStack(spacing: 0) { + ForEach(AppTab.allCases, id: \.rawValue) { tab in + Button(action: { + withAnimation(.easeInOut(duration: 0.2)) { + selectedTab = tab + } + }, label: { + VStack(spacing: 4) { + Image(systemName: tab.icon) + .font(.system(size: 20)) + .foregroundColor(selectedTab == tab ? .pocketCyan : .pocketSecondaryText) + + Text(tab.title) + .font(.system(size: 11, weight: .medium)) + .foregroundColor(selectedTab == tab ? .pocketCyan : .pocketSecondaryText) + } + .frame(maxWidth: .infinity) + .padding(.top, 10) + .padding(.bottom, 6) + }) + } + } + .background( + Rectangle() + .fill(Color.pocketCardBackground) + .shadow(color: .black.opacity(0.3), radius: 8, x: 0, y: -4) + .ignoresSafeArea(edges: .bottom) + ) + } +} + +#Preview { + MainTabView(authViewModel: AuthViewModel()) + .preferredColorScheme(.dark) +} diff --git a/Pocket/Sources/Views/Main/MarketView.swift b/Pocket/Sources/Views/Main/MarketView.swift new file mode 100644 index 0000000..2df0487 --- /dev/null +++ b/Pocket/Sources/Views/Main/MarketView.swift @@ -0,0 +1,192 @@ +import SwiftUI + +struct MarketView: View { + @ObservedObject var marketViewModel: MarketViewModel + + var body: some View { + VStack(spacing: 0) { + // Header + MarketHeaderView(searchText: $marketViewModel.searchText) + + // Timeframe Selector + TimeframeSelectorView( + selectedTimeframe: marketViewModel.selectedTimeframe, + onSelect: { marketViewModel.selectTimeframe($0) } + ) + + // Market List + ScrollView { + LazyVStack(spacing: 12) { + ForEach(marketViewModel.filteredItems) { item in + MarketRowView(item: item) + } + } + .padding(.horizontal, 20) + .padding(.top, 12) + .padding(.bottom, 80) + } + } + .background(Color.pocketBackground.ignoresSafeArea()) + } +} + +// MARK: - Market Header +struct MarketHeaderView: View { + @Binding var searchText: String + + var body: some View { + VStack(spacing: 12) { + HStack { + Text("Market") + .font(.system(size: 24, weight: .bold)) + .foregroundColor(.white) + + Spacer() + } + .padding(.horizontal, 20) + .padding(.top, 16) + + // Search Bar + HStack(spacing: 10) { + Image(systemName: "magnifyingglass") + .font(.system(size: 15)) + .foregroundColor(.pocketSecondaryText) + + TextField("Search tokens...", text: $searchText) + .font(.system(size: 15)) + .foregroundColor(.white) + + if !searchText.isEmpty { + Button(action: { searchText = "" }, label: { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 15)) + .foregroundColor(.pocketSecondaryText) + }) + } + } + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .fill(Color.pocketCardBackground) + .overlay( + RoundedRectangle(cornerRadius: 12, style: .continuous) + .stroke(Color.pocketCardBorder, lineWidth: 1) + ) + ) + .padding(.horizontal, 20) + } + } +} + +// MARK: - Timeframe Selector +struct TimeframeSelectorView: View { + let selectedTimeframe: MarketViewModel.MarketTimeframe + let onSelect: (MarketViewModel.MarketTimeframe) -> Void + + var body: some View { + HStack(spacing: 6) { + ForEach(MarketViewModel.MarketTimeframe.allCases, id: \.self) { timeframe in + Button(action: { onSelect(timeframe) }, label: { + Text(timeframe.rawValue) + .font(.system(size: 13, weight: .semibold)) + .foregroundColor(selectedTimeframe == timeframe ? .white : .pocketSecondaryText) + .padding(.horizontal, 14) + .padding(.vertical, 6) + .background( + Capsule() + .fill(selectedTimeframe == timeframe ? Color.pocketCyan.opacity(0.2) : Color.clear) + ) + }) + } + } + .padding(.horizontal, 20) + .padding(.vertical, 8) + } +} + +// MARK: - Market Row +struct MarketRowView: View { + let item: MarketItem + + var body: some View { + HStack(spacing: 12) { + // Token Icon + Circle() + .fill(tokenColor(for: item.symbol)) + .frame(width: 40, height: 40) + .overlay( + Text(String(item.symbol.prefix(1))) + .font(.system(size: 16, weight: .bold)) + .foregroundColor(.white) + ) + + // Name & Symbol + VStack(alignment: .leading, spacing: 4) { + Text(item.name) + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + + Text(item.symbol) + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + + Spacer() + + // Mini Chart + MiniChartView( + dataPoints: item.chartPoints, + lineColor: item.isUp ? .pocketGreen : .pocketRed, + animated: false + ) + .frame(width: 60, height: 30) + + // Price & Change + VStack(alignment: .trailing, spacing: 4) { + Text(formatPrice(item.price)) + .font(.system(size: 15, weight: .semibold)) + .foregroundColor(.white) + + HStack(spacing: 3) { + Image(systemName: item.isUp ? "arrow.up.right" : "arrow.down.right") + .font(.system(size: 10, weight: .semibold)) + + Text("\(String(format: "%.1f", item.changePercent))%") + .font(.system(size: 12, weight: .medium)) + } + .foregroundColor(item.isUp ? .pocketGreen : .pocketRed) + } + } + .padding(14) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + } + + private func tokenColor(for symbol: String) -> Color { + switch symbol { + case "BTC": return Color(red: 0.96, green: 0.62, blue: 0.13) + case "ETH": return Color.agentPredictions + case "SOL": return Color.agentDefi + case "LINK": return Color(red: 0.22, green: 0.42, blue: 0.92) + default: return Color.pocketSecondaryText + } + } + + private func formatPrice(_ price: Double) -> String { + if price >= 1000 { + return "$\(String(format: "%.0f", price))" + } else if price >= 1 { + return "$\(String(format: "%.2f", price))" + } else { + return "$\(String(format: "%.4f", price))" + } + } +} + +#Preview { + MarketView(marketViewModel: MarketViewModel()) + .preferredColorScheme(.dark) +} diff --git a/Pocket/Sources/Views/Main/SettingsView.swift b/Pocket/Sources/Views/Main/SettingsView.swift new file mode 100644 index 0000000..48d3445 --- /dev/null +++ b/Pocket/Sources/Views/Main/SettingsView.swift @@ -0,0 +1,265 @@ +import SwiftUI + +struct SettingsView: View { + @ObservedObject var authViewModel: AuthViewModel + + var body: some View { + ScrollView { + VStack(spacing: 24) { + // Header + HStack { + Text("Settings") + .font(.system(size: 24, weight: .bold)) + .foregroundColor(.white) + + Spacer() + } + .padding(.top, 16) + + // Profile Section + ProfileSectionView() + + // Wallets Section + WalletsSectionView() + + // Preferences Section + PreferencesSectionView() + + // About Section + AboutSectionView() + + // Logout Button + Button(action: { + authViewModel.logout() + }, label: { + HStack { + Image(systemName: "rectangle.portrait.and.arrow.right") + .font(.system(size: 16)) + Text("Log Out") + .font(.system(size: 16, weight: .semibold)) + } + .foregroundColor(.pocketRed) + .frame(maxWidth: .infinity) + .frame(height: 50) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketRed.opacity(0.1)) + .overlay( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .stroke(Color.pocketRed.opacity(0.3), lineWidth: 1) + ) + ) + }) + + Spacer().frame(height: 80) + } + .padding(.horizontal, 20) + } + .background(Color.pocketBackground.ignoresSafeArea()) + } +} + +// MARK: - Profile Section +struct ProfileSectionView: View { + var body: some View { + VStack(spacing: 0) { + SettingsGroupHeader(title: "Profile") + + HStack(spacing: 14) { + Circle() + .fill(Color.pocketCyan.opacity(0.2)) + .frame(width: 50, height: 50) + .overlay( + Image(systemName: "person.fill") + .font(.system(size: 20)) + .foregroundColor(.pocketCyan) + ) + + VStack(alignment: .leading, spacing: 4) { + Text("Pocket User") + .font(.system(size: 16, weight: .semibold)) + .foregroundColor(.white) + + Text("Connected via Privy") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + + Spacer() + + Image(systemName: "chevron.right") + .font(.system(size: 14, weight: .medium)) + .foregroundColor(.pocketSecondaryText) + } + .padding(16) + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + } + } +} + +// MARK: - Wallets Section +struct WalletsSectionView: View { + var body: some View { + VStack(spacing: 0) { + SettingsGroupHeader(title: "Wallets") + + VStack(spacing: 1) { + SettingsRowView( + icon: "wallet.pass.fill", + iconColor: .pocketCyan, + title: "Embedded Wallets", + subtitle: "EVM + Solana" + ) + SettingsRowView( + icon: "link", + iconColor: .agentStocks, + title: "Connected Wallets", + subtitle: "None" + ) + SettingsRowView( + icon: "key.fill", + iconColor: .agentDefi, + title: "Export Private Key", + subtitle: nil + ) + } + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + } +} + +// MARK: - Preferences Section +struct PreferencesSectionView: View { + var body: some View { + VStack(spacing: 0) { + SettingsGroupHeader(title: "Preferences") + + VStack(spacing: 1) { + SettingsRowView( + icon: "bell.fill", + iconColor: .agentPredictions, + title: "Notifications", + subtitle: "Enabled" + ) + SettingsRowView( + icon: "globe", + iconColor: .pocketCyan, + title: "Network", + subtitle: "Mainnet" + ) + SettingsRowView( + icon: "dollarsign.circle.fill", + iconColor: .pocketGreen, + title: "Currency", + subtitle: "USD" + ) + } + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + } +} + +// MARK: - About Section +struct AboutSectionView: View { + var body: some View { + VStack(spacing: 0) { + SettingsGroupHeader(title: "About") + + VStack(spacing: 1) { + SettingsRowView( + icon: "doc.text.fill", + iconColor: .pocketSecondaryText, + title: "Privacy Policy", + subtitle: nil + ) + SettingsRowView( + icon: "doc.plaintext.fill", + iconColor: .pocketSecondaryText, + title: "Terms of Service", + subtitle: nil + ) + SettingsRowView( + icon: "info.circle.fill", + iconColor: .pocketSecondaryText, + title: "Version", + subtitle: "1.0.0" + ) + } + .background( + RoundedRectangle(cornerRadius: 14, style: .continuous) + .fill(Color.pocketCardBackground) + ) + .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + } +} + +// MARK: - Reusable Components +struct SettingsGroupHeader: View { + let title: String + + var body: some View { + HStack { + Text(title) + .font(.system(size: 14, weight: .semibold)) + .foregroundColor(.pocketSecondaryText) + .textCase(.uppercase) + Spacer() + } + .padding(.bottom, 8) + } +} + +struct SettingsRowView: View { + let icon: String + let iconColor: Color + let title: String + let subtitle: String? + + var body: some View { + HStack(spacing: 12) { + Image(systemName: icon) + .font(.system(size: 16)) + .foregroundColor(iconColor) + .frame(width: 32, height: 32) + .background( + RoundedRectangle(cornerRadius: 8, style: .continuous) + .fill(iconColor.opacity(0.12)) + ) + + Text(title) + .font(.system(size: 15, weight: .medium)) + .foregroundColor(.white) + + Spacer() + + if let subtitle = subtitle { + Text(subtitle) + .font(.system(size: 14, weight: .regular)) + .foregroundColor(.pocketSecondaryText) + } + + Image(systemName: "chevron.right") + .font(.system(size: 13, weight: .medium)) + .foregroundColor(.pocketTertiaryText) + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + } +} + +#Preview { + SettingsView(authViewModel: AuthViewModel()) + .preferredColorScheme(.dark) +} From 1737694997e16b2ba391e18ddd8b6edd77e81753 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 02:56:23 +0000 Subject: [PATCH 4/4] feat: Add PWA (Progressive Web App) with same UI as iOS PocketApp - React + TypeScript + Vite + Tailwind CSS - Welcome screen with carousel (Portfolio, Chat, Stock Chart cards) - Login sheet with MetaMask, Email, Google, Other Socials, Wallet selection - MainTabView with custom tab bar (Home, Chat, Market, Settings) - HomeView with portfolio balance, AI agents, assets list - ChatView with AI agent conversations and trade badges - MarketView with search, timeframe selector, mini charts - SettingsView with profile, wallets, preferences - PWA manifest for installability - Dark theme matching iOS design (Pocket Cyan #00D9F2) Co-Authored-By: DAR --- pocket-pwa/components.json | 21 ++ pocket-pwa/index.html | 20 ++ pocket-pwa/package.json | 42 ++++ pocket-pwa/postcss.config.js | 6 + pocket-pwa/public/manifest.json | 22 ++ pocket-pwa/public/vite.svg | 1 + pocket-pwa/src/App.css | 40 ++++ pocket-pwa/src/App.tsx | 37 +++ pocket-pwa/src/assets/react.svg | 1 + pocket-pwa/src/components/WelcomeView.tsx | 185 +++++++++++++++ pocket-pwa/src/components/auth/LoginSheet.tsx | 214 ++++++++++++++++++ .../src/components/common/MiniChart.tsx | 53 +++++ .../src/components/common/PocketLogo.tsx | 12 + pocket-pwa/src/components/main/ChatView.tsx | 119 ++++++++++ pocket-pwa/src/components/main/HomeView.tsx | 156 +++++++++++++ .../src/components/main/MainTabView.tsx | 49 ++++ pocket-pwa/src/components/main/MarketView.tsx | 85 +++++++ .../src/components/main/SettingsView.tsx | 92 ++++++++ pocket-pwa/src/data/sampleData.ts | 74 ++++++ pocket-pwa/src/hooks/useAuth.ts | 54 +++++ pocket-pwa/src/hooks/useChat.ts | 40 ++++ pocket-pwa/src/hooks/useMarket.ts | 25 ++ pocket-pwa/src/hooks/usePortfolio.ts | 26 +++ pocket-pwa/src/index.css | 9 + pocket-pwa/src/lib/utils.ts | 6 + pocket-pwa/src/main.tsx | 10 + pocket-pwa/src/types/index.ts | 113 +++++++++ pocket-pwa/src/vite-env.d.ts | 1 + pocket-pwa/tailwind.config.js | 17 ++ pocket-pwa/tsconfig.app.json | 33 +++ pocket-pwa/tsconfig.json | 18 ++ pocket-pwa/tsconfig.node.json | 24 ++ pocket-pwa/vite.config.ts | 13 ++ 33 files changed, 1618 insertions(+) create mode 100644 pocket-pwa/components.json create mode 100644 pocket-pwa/index.html create mode 100644 pocket-pwa/package.json create mode 100644 pocket-pwa/postcss.config.js create mode 100644 pocket-pwa/public/manifest.json create mode 100644 pocket-pwa/public/vite.svg create mode 100644 pocket-pwa/src/App.css create mode 100644 pocket-pwa/src/App.tsx create mode 100644 pocket-pwa/src/assets/react.svg create mode 100644 pocket-pwa/src/components/WelcomeView.tsx create mode 100644 pocket-pwa/src/components/auth/LoginSheet.tsx create mode 100644 pocket-pwa/src/components/common/MiniChart.tsx create mode 100644 pocket-pwa/src/components/common/PocketLogo.tsx create mode 100644 pocket-pwa/src/components/main/ChatView.tsx create mode 100644 pocket-pwa/src/components/main/HomeView.tsx create mode 100644 pocket-pwa/src/components/main/MainTabView.tsx create mode 100644 pocket-pwa/src/components/main/MarketView.tsx create mode 100644 pocket-pwa/src/components/main/SettingsView.tsx create mode 100644 pocket-pwa/src/data/sampleData.ts create mode 100644 pocket-pwa/src/hooks/useAuth.ts create mode 100644 pocket-pwa/src/hooks/useChat.ts create mode 100644 pocket-pwa/src/hooks/useMarket.ts create mode 100644 pocket-pwa/src/hooks/usePortfolio.ts create mode 100644 pocket-pwa/src/index.css create mode 100644 pocket-pwa/src/lib/utils.ts create mode 100644 pocket-pwa/src/main.tsx create mode 100644 pocket-pwa/src/types/index.ts create mode 100644 pocket-pwa/src/vite-env.d.ts create mode 100644 pocket-pwa/tailwind.config.js create mode 100644 pocket-pwa/tsconfig.app.json create mode 100644 pocket-pwa/tsconfig.json create mode 100644 pocket-pwa/tsconfig.node.json create mode 100644 pocket-pwa/vite.config.ts diff --git a/pocket-pwa/components.json b/pocket-pwa/components.json new file mode 100644 index 0000000..78cd18f --- /dev/null +++ b/pocket-pwa/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": false, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/pocket-pwa/index.html b/pocket-pwa/index.html new file mode 100644 index 0000000..662db8c --- /dev/null +++ b/pocket-pwa/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + Pocket - Your Crypto AI Assistant + + + +

+ + + diff --git a/pocket-pwa/package.json b/pocket-pwa/package.json new file mode 100644 index 0000000..0861b0f --- /dev/null +++ b/pocket-pwa/package.json @@ -0,0 +1,42 @@ +{ + "name": "pocket-pwa", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@privy-io/react-auth": "^3.17.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.364.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "recharts": "^2.12.4", + "tailwind-merge": "^3.5.0", + "tailwindcss-animate": "^1.0.7", + "vite-plugin-pwa": "^1.2.0", + "workbox-window": "^7.4.0" + }, + "devDependencies": { + "@eslint/js": "^9.15.0", + "@types/node": "^25.5.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "eslint": "^9.15.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.12.0", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.16", + "typescript": "~5.6.2", + "typescript-eslint": "^8.15.0", + "vite": "^6.0.1" + } +} diff --git a/pocket-pwa/postcss.config.js b/pocket-pwa/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/pocket-pwa/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/pocket-pwa/public/manifest.json b/pocket-pwa/public/manifest.json new file mode 100644 index 0000000..035e6c7 --- /dev/null +++ b/pocket-pwa/public/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "Pocket - Your Crypto AI Assistant", + "short_name": "Pocket", + "description": "Your Crypto AI Assistant with embedded wallets and AI agents", + "start_url": "/", + "display": "standalone", + "background_color": "#000000", + "theme_color": "#000000", + "orientation": "portrait", + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/pocket-pwa/public/vite.svg b/pocket-pwa/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/pocket-pwa/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocket-pwa/src/App.css b/pocket-pwa/src/App.css new file mode 100644 index 0000000..2ae0672 --- /dev/null +++ b/pocket-pwa/src/App.css @@ -0,0 +1,40 @@ +#root { + max-width: none; + width: 100%; + margin: 0; + padding: 0; + text-align: left; +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes slideUp { + from { transform: translateY(100%); } + to { transform: translateY(0); } +} + +@keyframes pulse { + 0%, 100% { opacity: 0.3; } + 50% { opacity: 1; } +} + +.animate-fade-in { animation: fadeIn 0.6s ease-out forwards; } +.animate-fade-in-delay-1 { animation: fadeIn 0.6s ease-out 0.2s forwards; opacity: 0; } +.animate-fade-in-delay-2 { animation: fadeIn 0.6s ease-out 0.4s forwards; opacity: 0; } +.animate-fade-in-delay-3 { animation: fadeIn 0.6s ease-out 0.6s forwards; opacity: 0; } +.animate-slide-up { animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards; } + +.dot-pulse-1 { animation: pulse 1.2s ease-in-out infinite 0s; } +.dot-pulse-2 { animation: pulse 1.2s ease-in-out infinite 0.4s; } +.dot-pulse-3 { animation: pulse 1.2s ease-in-out infinite 0.8s; } + +.no-scrollbar::-webkit-scrollbar { display: none; } +.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; } + +html, body { + overscroll-behavior: none; + -webkit-tap-highlight-color: transparent; +} diff --git a/pocket-pwa/src/App.tsx b/pocket-pwa/src/App.tsx new file mode 100644 index 0000000..2af4590 --- /dev/null +++ b/pocket-pwa/src/App.tsx @@ -0,0 +1,37 @@ +import './App.css'; +import { useAuth } from './hooks/useAuth'; +import { WelcomeView } from './components/WelcomeView'; +import { LoginSheet } from './components/auth/LoginSheet'; +import { MainTabView } from './components/main/MainTabView'; + +function App() { + const auth = useAuth(); + + if (auth.authState === 'authenticated') { + return ; + } + + return ( + <> + + {auth.showLoginSheet && ( + { + auth.setEmailInput(email); + auth.validateEmail(email); + }} + onDismiss={auth.dismissLogin} + onMockLogin={auth.mockLogin} + onNavigateToOtherSocials={auth.navigateToOtherSocials} + onNavigateToWalletSelection={auth.navigateToWalletSelection} + onNavigateBack={auth.navigateBack} + /> + )} + + ); +} + +export default App; diff --git a/pocket-pwa/src/assets/react.svg b/pocket-pwa/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/pocket-pwa/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pocket-pwa/src/components/WelcomeView.tsx b/pocket-pwa/src/components/WelcomeView.tsx new file mode 100644 index 0000000..536c7e3 --- /dev/null +++ b/pocket-pwa/src/components/WelcomeView.tsx @@ -0,0 +1,185 @@ +import { useState, useEffect, useCallback } from 'react'; +import { PocketLogo } from './common/PocketLogo'; +import { MiniChart } from './common/MiniChart'; +import { SAMPLE_STOCK, AGENTS } from '../data/sampleData'; +import type { CarouselCardType } from '../types'; + +const CARD_TYPES: CarouselCardType[] = ['portfolio', 'chat', 'stockChart']; + +interface WelcomeViewProps { + onGetStarted: () => void; +} + +export function WelcomeView({ onGetStarted }: WelcomeViewProps) { + const [currentCard, setCurrentCard] = useState(0); + const [showContent, setShowContent] = useState(false); + + useEffect(() => { setShowContent(true); }, []); + + useEffect(() => { + const timer = setInterval(() => { + setCurrentCard(prev => (prev + 1) % CARD_TYPES.length); + }, 4000); + return () => clearInterval(timer); + }, []); + + return ( +
+
+ {/* Logo */} +
+ +
+ +
+ + {/* Carousel */} +
+ + {/* Page Dots */} +
+ {CARD_TYPES.map((_, i) => ( +
+
+ +
+ + {/* Get Started Button */} +
+ +
+ + {/* Terms */} +
+

By continuing you agree to our

+ +
+
+
+ ); +} + +function CarouselCards({ currentCard }: { currentCard: number }) { + const renderCard = useCallback((type: CarouselCardType) => { + switch (type) { + case 'portfolio': return ; + case 'chat': return ; + case 'stockChart': return ; + } + }, []); + + return ( +
+ {CARD_TYPES.map((type, i) => ( +
+ {renderCard(type)} +
+ ))} +
+ ); +} + +function PortfolioCard() { + return ( +
+

Total Balance

+

$62.18

+
+ + 6.1% + + today +
+
+ {AGENTS.map(agent => ( +
+
+ {agent.name[0]} +
+ {agent.name} +
+
+ Running +
+
+ ))} +
+
+ ); +} + +function ChatCard() { + return ( +
+
+
+
+

Stocks Trader

+

3:42 pm

+
+
+

+ TSLA hit my entry range. Looking at a good setup here. +

+
+

Nice. What did you do?

+
+
+
+
+

Stocks Trader

+

3:45 pm

+
+
+

Executed a buy at the support level.

+
+
+ T +
+ Bought 24.3 TSLA +
+
+ ); +} + +function StockChartCard() { + return ( +
+
+
+ T +
+ {SAMPLE_STOCK.ticker} +
+

${SAMPLE_STOCK.price}

+
+ +
+
+
+ Stocks Agent Running +
+
+ ); +} diff --git a/pocket-pwa/src/components/auth/LoginSheet.tsx b/pocket-pwa/src/components/auth/LoginSheet.tsx new file mode 100644 index 0000000..813df0d --- /dev/null +++ b/pocket-pwa/src/components/auth/LoginSheet.tsx @@ -0,0 +1,214 @@ +import { useState } from 'react'; +import { X, ArrowLeft, Search, Mail, Globe, MessageSquare, Send, Wallet, Diamond, Hexagon, LayoutGrid } from 'lucide-react'; +import type { LoginPage, WalletOption } from '../../types'; +import { WALLET_OPTIONS, WALLET_ICON_COLORS } from '../../data/sampleData'; + +interface LoginSheetProps { + currentPage: LoginPage; + emailInput: string; + isEmailValid: boolean; + onEmailChange: (email: string) => void; + onDismiss: () => void; + onMockLogin: () => void; + onNavigateToOtherSocials: () => void; + onNavigateToWalletSelection: () => void; + onNavigateBack: () => void; +} + +export function LoginSheet({ + currentPage, emailInput, isEmailValid, + onEmailChange, onDismiss, onMockLogin, + onNavigateToOtherSocials, onNavigateToWalletSelection, onNavigateBack, +}: LoginSheetProps) { + return ( +
+
+
+
+ {currentPage === 'main' && ( + + )} + {currentPage === 'otherSocials' && ( + + )} + {currentPage === 'walletSelection' && ( + + )} + +
+
+
+ ); +} + +interface MainLoginContentProps { + emailInput: string; + isEmailValid: boolean; + onEmailChange: (email: string) => void; + onDismiss: () => void; + onMockLogin: () => void; + onNavigateToOtherSocials: () => void; + onNavigateToWalletSelection: () => void; +} + +function MainLoginContent({ + emailInput, isEmailValid, onEmailChange, + onDismiss, onMockLogin, onNavigateToOtherSocials, onNavigateToWalletSelection, +}: MainLoginContentProps) { + return ( +
+
+ +
+
+

POCKET

+

Log in or sign up

+
+
+ } iconBg="#E08F33" title="MetaMask" showLastUsed showChainIcon onClick={onMockLogin} /> +
+
+ +
+ onEmailChange(e.target.value)} + className="flex-1 bg-transparent text-white text-base outline-none placeholder-gray-500" /> + {isEmailValid && ( + + )} +
+ G} iconBg="#383A3F" title="Google" isHighlighted onClick={onMockLogin} /> + } iconBg="#383A3F" title="Other socials" onClick={onNavigateToOtherSocials} /> + } iconBg="#383A3F" title="Continue with a wallet" onClick={onNavigateToWalletSelection} /> +
+
+ ); +} + +function OtherSocialsContent({ onDismiss, onBack, onLogin }: { onDismiss: () => void; onBack: () => void; onLogin: () => void }) { + return ( +
+
+ + +
+

Log in or sign up

+
+ } iconBg="#FFFFFF" title="Twitter" onClick={onLogin} /> + } iconBg="#5766F2" title="Discord" onClick={onLogin} /> + } iconBg="#66ABE0" title="Telegram" onClick={onLogin} /> +
+
+ ); +} + +function WalletSelectionContent({ onDismiss, onBack, onSelectWallet }: { onDismiss: () => void; onBack: () => void; onSelectWallet: () => void }) { + const [searchText, setSearchText] = useState(''); + const filtered = searchText ? WALLET_OPTIONS.filter(w => w.name.toLowerCase().includes(searchText.toLowerCase())) : WALLET_OPTIONS; + + return ( +
+
+ + +
+
+
+ +
+
+

Select your wallet

+
+
+ +
+ setSearchText(e.target.value)} + className="flex-1 bg-transparent text-white text-sm outline-none placeholder-gray-500" /> +
+
+
+ {filtered.map(wallet => ())} +
+
+
+ ); +} + +function LoginOptionButton({ icon, iconBg, title, showLastUsed, showChainIcon, isHighlighted, onClick }: { + icon: React.ReactNode; iconBg: string; title: string; showLastUsed?: boolean; showChainIcon?: boolean; isHighlighted?: boolean; onClick: () => void; +}) { + return ( + + ); +} + +function SocialButton({ icon, iconBg, title, onClick }: { icon: React.ReactNode; iconBg: string; title: string; onClick: () => void }) { + return ( + + ); +} + +function WalletRow({ wallet, onClick }: { wallet: WalletOption; onClick: () => void }) { + const color = WALLET_ICON_COLORS[wallet.name] || '#383A3F'; + return ( + + ); +} + +function LoginFooter() { + return ( +
+

+ By continuing, you agree to Pocket's{' '} + Terms of Service + {' '}and{' '} + Privacy Policy +

+
+ ); +} diff --git a/pocket-pwa/src/components/common/MiniChart.tsx b/pocket-pwa/src/components/common/MiniChart.tsx new file mode 100644 index 0000000..d7c02ca --- /dev/null +++ b/pocket-pwa/src/components/common/MiniChart.tsx @@ -0,0 +1,53 @@ +import { useRef, useEffect } from 'react'; + +interface MiniChartProps { + dataPoints: number[]; + lineColor: string; + width?: number; + height?: number; +} + +export function MiniChart({ dataPoints, lineColor, width = 60, height = 30 }: MiniChartProps) { + const canvasRef = useRef(null); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas || dataPoints.length < 2) return; + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + const dpr = window.devicePixelRatio || 1; + canvas.width = width * dpr; + canvas.height = height * dpr; + ctx.scale(dpr, dpr); + ctx.clearRect(0, 0, width, height); + + const min = Math.min(...dataPoints); + const max = Math.max(...dataPoints); + const range = max - min || 1; + + ctx.beginPath(); + ctx.strokeStyle = lineColor; + ctx.lineWidth = 2; + ctx.lineJoin = 'round'; + ctx.lineCap = 'round'; + + dataPoints.forEach((point, i) => { + const x = (width / (dataPoints.length - 1)) * i; + const y = height * (1 - (point - min) / range); + if (i === 0) ctx.moveTo(x, y); + else ctx.lineTo(x, y); + }); + ctx.stroke(); + + // End dot + const lastX = width; + const lastY = height * (1 - (dataPoints[dataPoints.length - 1] - min) / range); + ctx.beginPath(); + ctx.fillStyle = lineColor; + ctx.arc(lastX - 1, lastY, 3, 0, Math.PI * 2); + ctx.fill(); + }, [dataPoints, lineColor, width, height]); + + return ; +} diff --git a/pocket-pwa/src/components/common/PocketLogo.tsx b/pocket-pwa/src/components/common/PocketLogo.tsx new file mode 100644 index 0000000..e46fabb --- /dev/null +++ b/pocket-pwa/src/components/common/PocketLogo.tsx @@ -0,0 +1,12 @@ +export function PocketLogo() { + return ( +
+

+ POCKET +

+

+ Your Crypto AI assistant +

+
+ ); +} diff --git a/pocket-pwa/src/components/main/ChatView.tsx b/pocket-pwa/src/components/main/ChatView.tsx new file mode 100644 index 0000000..d41e009 --- /dev/null +++ b/pocket-pwa/src/components/main/ChatView.tsx @@ -0,0 +1,119 @@ +import { useRef, useEffect } from 'react'; +import { ArrowUpCircle } from 'lucide-react'; +import type { ChatMessage, Agent } from '../../types'; +import { AGENTS } from '../../data/sampleData'; +import { useChat } from '../../hooks/useChat'; + +export function ChatView() { + const { messages, inputText, setInputText, selectedAgent, isSending, sendMessage, selectAgent } = useChat(); + const messagesEndRef = useRef(null); + + useEffect(() => { + messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); + }, [messages.length]); + + return ( +
+ {/* Header */} +
+

Chat

+
+ {AGENTS.map(agent => ( + selectAgent(agent)} /> + ))} +
+
+ + {/* Messages */} +
+
+ {messages.map(msg => ())} + {isSending && } +
+
+
+ + {/* Input */} +
+
+ setInputText(e.target.value)} + onKeyDown={e => { if (e.key === 'Enter') sendMessage(); }} + className="flex-1 bg-transparent text-white text-sm outline-none placeholder-gray-500" /> +
+ +
+
+ ); +} + +function AgentChip({ agent, isSelected, onTap }: { agent: Agent; isSelected: boolean; onTap: () => void }) { + return ( + + ); +} + +function ChatBubble({ message }: { message: ChatMessage }) { + if (message.sender.type === 'user') { + return ( +
+
+

{message.text}

+
+
+ ); + } + + const agentName = message.sender.name; + return ( +
+
+
+
+
+ {agentName} + {message.time} +
+

{message.text}

+
+
+ {message.tradeBadge && ( +
+
+ T +
+ + {message.tradeBadge.action} {message.tradeBadge.amount} {message.tradeBadge.ticker} + +
+ )} +
+ ); +} + +function TypingIndicator({ agentName }: { agentName: string }) { + return ( +
+
+
+ {agentName} +
+
+
+
+
+
+
+ ); +} diff --git a/pocket-pwa/src/components/main/HomeView.tsx b/pocket-pwa/src/components/main/HomeView.tsx new file mode 100644 index 0000000..cc70402 --- /dev/null +++ b/pocket-pwa/src/components/main/HomeView.tsx @@ -0,0 +1,156 @@ +import { ArrowDownRight, ArrowUpRight, ArrowDown, ArrowUp, ArrowLeftRight, Plus, Bell } from 'lucide-react'; +import type { AgentDetail, Asset } from '../../types'; +import { AGENT_STATUS_COLORS } from '../../data/sampleData'; +import { usePortfolio } from '../../hooks/usePortfolio'; + +export function HomeView() { + const { portfolio, assets, agentDetails, toggleAgent } = usePortfolio(); + + return ( +
+
+ {/* Header */} +
+
+

POCKET

+

Your Crypto AI Assistant

+
+ +
+ + {/* Balance Card */} +
+

Total Balance

+

${portfolio.balance.toFixed(2)}

+
+ {portfolio.isDown + ? + : } + + {portfolio.changePercent.toFixed(1)}% + + today +
+
+ + {/* Quick Actions */} +
+ {[ + { icon: ArrowDown, title: 'Receive' }, + { icon: ArrowUp, title: 'Send' }, + { icon: ArrowLeftRight, title: 'Swap' }, + { icon: Plus, title: 'Buy' }, + ].map(action => ( + + ))} +
+ + {/* AI Agents */} +
+
+

AI Agents

+ +
+
+ {agentDetails.map(detail => ( + toggleAgent(detail.id)} /> + ))} +
+
+ + {/* Assets */} +
+
+

Assets

+ +
+ {assets.length === 0 ? ( + + ) : ( +
+ {assets.map(asset => ())} +
+ )} +
+
+
+ ); +} + +function AgentRow({ detail, onToggle }: { detail: AgentDetail; onToggle: () => void }) { + const statusColor = AGENT_STATUS_COLORS[detail.status] || '#8C8C99'; + return ( +
+
+ {detail.agent.name[0]} +
+
+
+ {detail.agent.name} +
+
+ {detail.status} +
+
+

{detail.description}

+
+
+ = 0 ? '#33CC66' : '#E63333' }}> + {detail.profitLoss >= 0 ? '+' : ''}{detail.profitLoss.toFixed(1)}% + + +
+
+ ); +} + +function AssetRow({ asset }: { asset: Asset }) { + const iconColor = asset.chainType === 'ethereum' ? '#4073E6' : '#9973CC'; + return ( +
+
+ {asset.symbol[0]} +
+
+

{asset.name}

+

{asset.balance.toFixed(4)} {asset.symbol}

+
+
+ ${asset.value.toFixed(2)} +
+ {asset.isUp ? : } + {asset.changePercent.toFixed(1)}% +
+
+
+ ); +} + +function EmptyAssets() { + return ( +
+ +

No assets yet

+

+ Your crypto assets will appear here
once you receive or buy tokens. +

+
+ ); +} + +function Wallet({ size, style }: { size: number; style: React.CSSProperties }) { + return ( + + + + ); +} diff --git a/pocket-pwa/src/components/main/MainTabView.tsx b/pocket-pwa/src/components/main/MainTabView.tsx new file mode 100644 index 0000000..86f178d --- /dev/null +++ b/pocket-pwa/src/components/main/MainTabView.tsx @@ -0,0 +1,49 @@ +import { useState } from 'react'; +import { Home, MessageSquare, TrendingUp, Settings, type LucideIcon } from 'lucide-react'; +import type { AppTab } from '../../types'; +import { HomeView } from './HomeView'; +import { ChatView } from './ChatView'; +import { MarketView } from './MarketView'; +import { SettingsView } from './SettingsView'; + +interface MainTabViewProps { + onLogout: () => void; +} + +const TABS: { key: AppTab; title: string; icon: LucideIcon }[] = [ + { key: 'home', title: 'Home', icon: Home }, + { key: 'chat', title: 'Chat', icon: MessageSquare }, + { key: 'market', title: 'Market', icon: TrendingUp }, + { key: 'settings', title: 'Settings', icon: Settings }, +]; + +export function MainTabView({ onLogout }: MainTabViewProps) { + const [selectedTab, setSelectedTab] = useState('home'); + + return ( +
+ {/* Tab Content */} +
+ {selectedTab === 'home' && } + {selectedTab === 'chat' && } + {selectedTab === 'market' && } + {selectedTab === 'settings' && } +
+ + {/* Custom Tab Bar */} +
+ {TABS.map(tab => ( + + ))} + {/* Safe area padding for mobile */} +
+
+
+ ); +} diff --git a/pocket-pwa/src/components/main/MarketView.tsx b/pocket-pwa/src/components/main/MarketView.tsx new file mode 100644 index 0000000..30a7405 --- /dev/null +++ b/pocket-pwa/src/components/main/MarketView.tsx @@ -0,0 +1,85 @@ +import { Search, X, ArrowUpRight, ArrowDownRight } from 'lucide-react'; +import type { MarketItem, MarketTimeframe } from '../../types'; +import { MiniChart } from '../common/MiniChart'; +import { TOKEN_COLORS } from '../../data/sampleData'; +import { useMarket } from '../../hooks/useMarket'; + +const TIMEFRAMES: MarketTimeframe[] = ['1H', '1D', '1W', '1M', '1Y']; + +export function MarketView() { + const { filteredItems, searchText, setSearchText, selectedTimeframe, selectTimeframe } = useMarket(); + + return ( +
+ {/* Header */} +
+

Market

+ {/* Search */} +
+ + setSearchText(e.target.value)} + className="flex-1 bg-transparent text-white text-sm outline-none placeholder-gray-500" /> + {searchText && ( + + )} +
+
+ + {/* Timeframe Selector */} +
+ {TIMEFRAMES.map(tf => ( + + ))} +
+ + {/* Market List */} +
+
+ {filteredItems.map(item => ())} +
+
+
+ ); +} + +function MarketRow({ item }: { item: MarketItem }) { + const tokenColor = TOKEN_COLORS[item.symbol] || '#8C8C99'; + + const formatPrice = (price: number) => { + if (price >= 1000) return `$${price.toFixed(0)}`; + if (price >= 1) return `$${price.toFixed(2)}`; + return `$${price.toFixed(4)}`; + }; + + return ( +
+
+ {item.symbol[0]} +
+
+

{item.name}

+

{item.symbol}

+
+
+ +
+
+ {formatPrice(item.price)} +
+ {item.isUp ? : } + {item.changePercent.toFixed(1)}% +
+
+
+ ); +} diff --git a/pocket-pwa/src/components/main/SettingsView.tsx b/pocket-pwa/src/components/main/SettingsView.tsx new file mode 100644 index 0000000..845fd3f --- /dev/null +++ b/pocket-pwa/src/components/main/SettingsView.tsx @@ -0,0 +1,92 @@ +import { ChevronRight, User, Wallet, Link, Key, Bell, Globe, DollarSign, FileText, Info, LogOut, type LucideIcon } from 'lucide-react'; + +interface SettingsViewProps { + onLogout: () => void; +} + +export function SettingsView({ onLogout }: SettingsViewProps) { + return ( +
+
+ {/* Header */} +
+

Settings

+
+ + {/* Profile */} + +
+
+ +
+
+

Pocket User

+

Connected via Privy

+
+ +
+
+ + {/* Wallets */} + +
+ + + +
+
+ + {/* Preferences */} + +
+ + + +
+
+ + {/* About */} + +
+ + + +
+
+ + {/* Logout */} + +
+
+ ); +} + +function SettingsSection({ title, children }: { title: string; children: React.ReactNode }) { + return ( +
+

{title}

+ {children} +
+ ); +} + +function SettingsRow({ icon: Icon, iconColor, title, subtitle }: { + icon: LucideIcon; + iconColor: string; title: string; subtitle?: string; +}) { + return ( +
+
+ +
+ {title} + {subtitle && {subtitle}} + +
+ ); +} diff --git a/pocket-pwa/src/data/sampleData.ts b/pocket-pwa/src/data/sampleData.ts new file mode 100644 index 0000000..7e38594 --- /dev/null +++ b/pocket-pwa/src/data/sampleData.ts @@ -0,0 +1,74 @@ +import type { Agent, Asset, AgentDetail, MarketItem, WalletOption, ChatMessage, PortfolioData, StockData } from '../types'; + +export const AGENTS: Agent[] = [ + { id: '1', name: 'Stocks', color: '#C7A64D', icon: 'TrendingUp' }, + { id: '2', name: 'Predictions', color: '#4073E6', icon: 'Brain' }, + { id: '3', name: 'Defi', color: '#9973CC', icon: 'Coins' }, +]; + +export const SAMPLE_PORTFOLIO: PortfolioData = { + balance: 62.18, + changePercent: 6.1, + isDown: true, +}; + +export const SAMPLE_ASSETS: Asset[] = [ + { id: '1', name: 'Ethereum', symbol: 'ETH', balance: 0.0185, value: 48.62, changePercent: 2.3, isUp: true, chainType: 'ethereum' }, + { id: '2', name: 'Solana', symbol: 'SOL', balance: 0.082, value: 13.56, changePercent: 5.7, isUp: false, chainType: 'solana' }, +]; + +export const SAMPLE_AGENT_DETAILS: AgentDetail[] = [ + { id: '1', agent: AGENTS[0], status: 'Running', description: 'Analyzing stock markets and executing trades', profitLoss: 12.5 }, + { id: '2', agent: AGENTS[1], status: 'Running', description: 'Predicting market trends with AI models', profitLoss: -3.2 }, + { id: '3', agent: AGENTS[2], status: 'Paused', description: 'Managing DeFi positions and yield farming', profitLoss: 8.7 }, +]; + +export const SAMPLE_MARKET_ITEMS: MarketItem[] = [ + { id: '1', name: 'Bitcoin', symbol: 'BTC', price: 67432.50, changePercent: 1.8, isUp: true, chartPoints: [0.4, 0.42, 0.45, 0.43, 0.48, 0.50, 0.52, 0.55, 0.53, 0.58] }, + { id: '2', name: 'Ethereum', symbol: 'ETH', price: 2628.30, changePercent: 2.3, isUp: true, chartPoints: [0.5, 0.48, 0.52, 0.55, 0.53, 0.58, 0.60, 0.57, 0.62, 0.65] }, + { id: '3', name: 'Solana', symbol: 'SOL', price: 165.42, changePercent: 5.7, isUp: false, chartPoints: [0.7, 0.68, 0.65, 0.63, 0.60, 0.58, 0.55, 0.52, 0.50, 0.48] }, + { id: '4', name: 'Chainlink', symbol: 'LINK', price: 14.85, changePercent: 3.1, isUp: true, chartPoints: [0.3, 0.35, 0.38, 0.40, 0.42, 0.45, 0.48, 0.50, 0.52, 0.55] }, + { id: '5', name: 'Uniswap', symbol: 'UNI', price: 7.23, changePercent: 1.2, isUp: false, chartPoints: [0.6, 0.58, 0.55, 0.57, 0.54, 0.52, 0.50, 0.48, 0.50, 0.47] }, +]; + +export const WALLET_OPTIONS: WalletOption[] = [ + { id: '1', name: 'MetaMask', chains: ['ethereum', 'multichain'] }, + { id: '2', name: 'Coinbase Wallet', chains: ['ethereum', 'solana'] }, + { id: '3', name: 'Rainbow', chains: ['ethereum'] }, + { id: '4', name: 'Base', chains: ['ethereum'] }, + { id: '5', name: '1inch', chains: ['ethereum', 'multichain'] }, +]; + +export const SAMPLE_MESSAGES: ChatMessage[] = [ + { id: '1', sender: { type: 'agent', name: 'Stocks Trader' }, text: 'TSLA hit my entry range. Looking at a good setup here.', time: '3:42 pm' }, + { id: '2', sender: { type: 'user' }, text: 'Nice. What did you do?', time: '3:43 pm' }, + { id: '3', sender: { type: 'agent', name: 'Stocks Trader' }, text: 'Executed a buy at the support level.', time: '3:45 pm', tradeBadge: { id: '1', action: 'Bought', amount: 24.3, ticker: 'TSLA' } }, +]; + +export const SAMPLE_STOCK: StockData = { + id: '1', + ticker: 'TSLA', + price: 569.8, + chartPoints: [0.5, 0.45, 0.55, 0.40, 0.48, 0.42, 0.50, 0.45, 0.52, 0.48, 0.55, 0.50, 0.58, 0.62, 0.65, 0.70], + color: '#E63333', +}; + +export const AGENT_STATUS_COLORS: Record = { + Running: '#33CC66', + Paused: '#C7A64D', + Stopped: '#E63333', +}; + +export const TOKEN_COLORS: Record = { + BTC: '#F59E0B', + ETH: '#4073E6', + SOL: '#9973CC', + LINK: '#375DEB', +}; + +export const WALLET_ICON_COLORS: Record = { + MetaMask: '#E08F33', + 'Coinbase Wallet': '#3366F2', + Rainbow: '#F28033', + Base: '#3355FF', +}; diff --git a/pocket-pwa/src/hooks/useAuth.ts b/pocket-pwa/src/hooks/useAuth.ts new file mode 100644 index 0000000..ab616d0 --- /dev/null +++ b/pocket-pwa/src/hooks/useAuth.ts @@ -0,0 +1,54 @@ +import { useState, useCallback } from 'react'; +import type { AuthState, LoginPage } from '../types'; + +export function useAuth() { + const [authState, setAuthState] = useState('unauthenticated'); + const [showLoginSheet, setShowLoginSheet] = useState(false); + const [currentPage, setCurrentPage] = useState('main'); + const [emailInput, setEmailInput] = useState(''); + const [isEmailValid, setIsEmailValid] = useState(false); + const [isLoading, setIsLoading] = useState(false); + + const validateEmail = useCallback((email: string) => { + const regex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/; + setIsEmailValid(regex.test(email)); + }, []); + + const showLogin = useCallback(() => { + setShowLoginSheet(true); + setCurrentPage('main'); + }, []); + + const dismissLogin = useCallback(() => { + setShowLoginSheet(false); + setCurrentPage('main'); + setEmailInput(''); + setIsEmailValid(false); + }, []); + + const navigateToOtherSocials = useCallback(() => setCurrentPage('otherSocials'), []); + const navigateToWalletSelection = useCallback(() => setCurrentPage('walletSelection'), []); + const navigateBack = useCallback(() => setCurrentPage('main'), []); + + const mockLogin = useCallback(() => { + setIsLoading(true); + setTimeout(() => { + setIsLoading(false); + setShowLoginSheet(false); + setAuthState('authenticated'); + }, 800); + }, []); + + const logout = useCallback(() => { + setAuthState('unauthenticated'); + setEmailInput(''); + setIsEmailValid(false); + }, []); + + return { + authState, showLoginSheet, currentPage, emailInput, isEmailValid, isLoading, + setEmailInput, validateEmail, showLogin, dismissLogin, + navigateToOtherSocials, navigateToWalletSelection, navigateBack, + mockLogin, logout, + }; +} diff --git a/pocket-pwa/src/hooks/useChat.ts b/pocket-pwa/src/hooks/useChat.ts new file mode 100644 index 0000000..c2fe728 --- /dev/null +++ b/pocket-pwa/src/hooks/useChat.ts @@ -0,0 +1,40 @@ +import { useState, useCallback } from 'react'; +import type { ChatMessage, Agent } from '../types'; +import { AGENTS, SAMPLE_MESSAGES } from '../data/sampleData'; + +export function useChat() { + const [messages, setMessages] = useState(SAMPLE_MESSAGES); + const [inputText, setInputText] = useState(''); + const [selectedAgent, setSelectedAgent] = useState(AGENTS[0]); + const [isSending, setIsSending] = useState(false); + + const sendMessage = useCallback(() => { + const trimmed = inputText.trim(); + if (!trimmed || isSending) return; + + const userMsg: ChatMessage = { + id: Date.now().toString(), + sender: { type: 'user' }, + text: trimmed, + time: new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }), + }; + setMessages(prev => [...prev, userMsg]); + setInputText(''); + setIsSending(true); + + setTimeout(() => { + const agentMsg: ChatMessage = { + id: (Date.now() + 1).toString(), + sender: { type: 'agent', name: selectedAgent.name }, + text: `I'm analyzing your request about "${trimmed}". Let me check the latest data...`, + time: new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }), + }; + setMessages(prev => [...prev, agentMsg]); + setIsSending(false); + }, 1500); + }, [inputText, isSending, selectedAgent]); + + const selectAgent = useCallback((agent: Agent) => setSelectedAgent(agent), []); + + return { messages, inputText, setInputText, selectedAgent, isSending, sendMessage, selectAgent }; +} diff --git a/pocket-pwa/src/hooks/useMarket.ts b/pocket-pwa/src/hooks/useMarket.ts new file mode 100644 index 0000000..ce9d922 --- /dev/null +++ b/pocket-pwa/src/hooks/useMarket.ts @@ -0,0 +1,25 @@ +import { useState, useCallback, useMemo } from 'react'; +import type { MarketItem, MarketTimeframe } from '../types'; +import { SAMPLE_MARKET_ITEMS } from '../data/sampleData'; + +export function useMarket() { + const [marketItems] = useState(SAMPLE_MARKET_ITEMS); + const [searchText, setSearchText] = useState(''); + const [selectedTimeframe, setSelectedTimeframe] = useState('1D'); + const [isLoading, setIsLoading] = useState(false); + + const filteredItems = useMemo(() => { + if (!searchText.trim()) return marketItems; + const lower = searchText.toLowerCase(); + return marketItems.filter(i => i.name.toLowerCase().includes(lower) || i.symbol.toLowerCase().includes(lower)); + }, [marketItems, searchText]); + + const refreshMarket = useCallback(() => { + setIsLoading(true); + setTimeout(() => setIsLoading(false), 1500); + }, []); + + const selectTimeframe = useCallback((tf: MarketTimeframe) => setSelectedTimeframe(tf), []); + + return { marketItems, filteredItems, searchText, setSearchText, selectedTimeframe, isLoading, refreshMarket, selectTimeframe }; +} diff --git a/pocket-pwa/src/hooks/usePortfolio.ts b/pocket-pwa/src/hooks/usePortfolio.ts new file mode 100644 index 0000000..0d3859c --- /dev/null +++ b/pocket-pwa/src/hooks/usePortfolio.ts @@ -0,0 +1,26 @@ +import { useState, useCallback } from 'react'; +import type { Asset, AgentDetail } from '../types'; +import { SAMPLE_PORTFOLIO, SAMPLE_ASSETS, SAMPLE_AGENT_DETAILS } from '../data/sampleData'; + +export function usePortfolio() { + const [portfolio] = useState(SAMPLE_PORTFOLIO); + const [assets] = useState(SAMPLE_ASSETS); + const [agentDetails, setAgentDetails] = useState(SAMPLE_AGENT_DETAILS); + const [isRefreshing, setIsRefreshing] = useState(false); + + const totalBalance = assets.reduce((sum, a) => sum + a.value, 0); + const activeAgentsCount = agentDetails.filter(d => d.status === 'Running').length; + + const refreshPortfolio = useCallback(() => { + setIsRefreshing(true); + setTimeout(() => setIsRefreshing(false), 1500); + }, []); + + const toggleAgent = useCallback((id: string) => { + setAgentDetails(prev => prev.map(d => + d.id === id ? { ...d, status: d.status === 'Running' ? 'Paused' as const : 'Running' as const } : d + )); + }, []); + + return { portfolio, assets, agentDetails, isRefreshing, totalBalance, activeAgentsCount, refreshPortfolio, toggleAgent }; +} diff --git a/pocket-pwa/src/index.css b/pocket-pwa/src/index.css new file mode 100644 index 0000000..aac4d1d --- /dev/null +++ b/pocket-pwa/src/index.css @@ -0,0 +1,9 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +@layer base { + :root { + --radius: 0.5rem + } +} + diff --git a/pocket-pwa/src/lib/utils.ts b/pocket-pwa/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/pocket-pwa/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/pocket-pwa/src/main.tsx b/pocket-pwa/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/pocket-pwa/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/pocket-pwa/src/types/index.ts b/pocket-pwa/src/types/index.ts new file mode 100644 index 0000000..294d4d2 --- /dev/null +++ b/pocket-pwa/src/types/index.ts @@ -0,0 +1,113 @@ +// Agent Model +export interface Agent { + id: string; + name: string; + color: string; + icon: string; +} + +// Chat Message +export interface ChatMessage { + id: string; + sender: MessageSender; + text: string; + time: string; + tradeBadge?: TradeBadge; +} + +export type MessageSender = { type: 'agent'; name: string } | { type: 'user' }; + +// Trade Badge +export interface TradeBadge { + id: string; + action: 'Bought' | 'Sold'; + amount: number; + ticker: string; +} + +// Stock Data +export interface StockData { + id: string; + ticker: string; + price: number; + chartPoints: number[]; + color: string; +} + +// Portfolio Data +export interface PortfolioData { + balance: number; + changePercent: number; + isDown: boolean; +} + +// Tab Definition +export type AppTab = 'home' | 'chat' | 'market' | 'settings'; + +export const APP_TABS: { key: AppTab; title: string; icon: string }[] = [ + { key: 'home', title: 'Home', icon: 'Home' }, + { key: 'chat', title: 'Chat', icon: 'MessageSquare' }, + { key: 'market', title: 'Market', icon: 'TrendingUp' }, + { key: 'settings', title: 'Settings', icon: 'Settings' }, +]; + +// Asset Model +export interface Asset { + id: string; + name: string; + symbol: string; + balance: number; + value: number; + changePercent: number; + isUp: boolean; + chainType: 'ethereum' | 'solana'; +} + +// Wallet Info +export interface WalletInfo { + id: string; + address: string; + chainType: 'Ethereum' | 'Solana'; + isEmbedded: boolean; +} + +// Agent Status +export type AgentStatus = 'Running' | 'Paused' | 'Stopped'; + +export interface AgentDetail { + id: string; + agent: Agent; + status: AgentStatus; + description: string; + profitLoss: number; +} + +// Market Item +export interface MarketItem { + id: string; + name: string; + symbol: string; + price: number; + changePercent: number; + isUp: boolean; + chartPoints: number[]; +} + +// Wallet Option +export interface WalletOption { + id: string; + name: string; + chains: ('ethereum' | 'solana' | 'multichain')[]; +} + +// Login Page +export type LoginPage = 'main' | 'otherSocials' | 'walletSelection'; + +// Auth State +export type AuthState = 'unauthenticated' | 'authenticating' | 'authenticated'; + +// Market Timeframe +export type MarketTimeframe = '1H' | '1D' | '1W' | '1M' | '1Y'; + +// Carousel Card Type +export type CarouselCardType = 'portfolio' | 'chat' | 'stockChart'; diff --git a/pocket-pwa/src/vite-env.d.ts b/pocket-pwa/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/pocket-pwa/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/pocket-pwa/tailwind.config.js b/pocket-pwa/tailwind.config.js new file mode 100644 index 0000000..f1038ab --- /dev/null +++ b/pocket-pwa/tailwind.config.js @@ -0,0 +1,17 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["class"], + content: ["./index.html", "./src/**/*.{ts,tsx,js,jsx}"], + theme: { + extend: { + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: {} + } + }, + plugins: [import("tailwindcss-animate")], +} + diff --git a/pocket-pwa/tsconfig.app.json b/pocket-pwa/tsconfig.app.json new file mode 100644 index 0000000..92418e2 --- /dev/null +++ b/pocket-pwa/tsconfig.app.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Tailwind stuff */ + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} + diff --git a/pocket-pwa/tsconfig.json b/pocket-pwa/tsconfig.json new file mode 100644 index 0000000..0302a04 --- /dev/null +++ b/pocket-pwa/tsconfig.json @@ -0,0 +1,18 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} + diff --git a/pocket-pwa/tsconfig.node.json b/pocket-pwa/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/pocket-pwa/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/pocket-pwa/vite.config.ts b/pocket-pwa/vite.config.ts new file mode 100644 index 0000000..d1b8436 --- /dev/null +++ b/pocket-pwa/vite.config.ts @@ -0,0 +1,13 @@ +import path from "path" +import react from "@vitejs/plugin-react" +import { defineConfig } from "vite" + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}) +