2025-12-03 16:22:25 +07:00
2025-12-03 16:22:25 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00
2025-12-01 10:04:01 +07:00
2025-11-28 16:59:57 +07:00
2025-12-03 16:22:25 +07:00
2025-11-28 16:59:57 +07:00
2025-11-28 16:59:57 +07:00

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project Overview

SeaGateway-App-Owner is a React Native maritime/fishing industry mobile application built with Expo framework and TypeScript. The app is designed for fishing vessel owners and provides GPS tracking, trip management, sensor monitoring, fish species tracking, and emergency alert systems for maritime operations.

Technology Stack

  • Framework: Expo ~54.0.20 (managed workflow) with React Native 0.81.5 (New Architecture enabled)
  • Navigation: Expo Router ~6.0.13 (file-based routing)
  • Styling: NativeWind ^4.2.1 (TailwindCSS for React Native) with comprehensive design system
  • State Management: Zustand ^5.0.8
  • API Client: Axios ^1.13.1 with interceptors and 401 handling
  • Internationalization: i18n-js ^4.5.1 (English & Vietnamese support)
  • Maps: React Native Maps ^1.20.1
  • Forms: React Hook Form ^7.66.0 with resolvers
  • Animations: React Native Reanimated ~4.1.0, @legendapp/motion ^2.5.3

Development Commands

Core Commands

# Start development server
npm start
# or npx expo start

# Platform-specific builds
npm run android    # Build for Android
npm run ios        # Build for iOS
npm run web        # Build for web

# Code quality
npm run lint       # Run ESLint

# Reset to blank template
npm run reset-project

Build and Deployment

The app is configured for EAS (Expo Application Services) with auto-increment versioning for production builds. Add eas.json to root for EAS configuration.

Architecture & File Structure

Directory Layout

SeaGateway-App-Owner/
├── app/                    # File-based routing (Expo Router)
│   ├── _layout.tsx        # Root layout with providers stack
│   ├── (tabs)/            # Main tab navigation screens
│   │   ├── index.tsx      # Home/Monitor screen
│   │   ├── tripInfo.tsx   # Trip information
│   │   ├── diary.tsx      # Diary/journal
│   │   ├── sensor.tsx     # Sensor data
│   │   └── setting.tsx    # Settings
│   ├── auth/login.tsx     # Authentication
│   └── modal.tsx          # Modal screens
├── components/            # Reusable UI components
│   ├── ui/                # Base UI components
│   ├── themed-*.tsx       # Themed components
│   └── [various components] # Feature-specific components
├── controller/            # Business logic layer (MVC pattern)
│   ├── AuthController.ts  # Authentication logic
│   ├── DeviceController.ts # Device management
│   ├── FishController.ts  # Fish-related operations
│   ├── MapController.ts   # Map functionality
│   └── TripController.ts  # Trip management
├── services/              # External service integrations
│   ├── map_service.ts     # Map services
│   ├── device_events.ts   # Device event handling
│   └── toast_service.tsx  # Toast notifications
├── state/                 # Zustand state stores
│   ├── use-trip.ts        # Trip state management
│   ├── use-banzones.ts    # Ban zone state
│   └── use-fish.ts        # Fish data state
├── hooks/                 # Custom React hooks
│   ├── use-i18n.ts        # Internationalization hook
│   ├── use-theme-context.tsx # Theme management
│   └── use-app-theme.ts   # Theme utilities (recommended)
├── config/                # Configuration files
│   ├── axios.ts           # API client with interceptors
│   ├── auth.ts            # Authentication configuration
│   └── localization/      # i18n setup
├── constants/             # App constants and API endpoints
├── utils/                 # Utility functions
├── locales/               # Translation files (en.json, vi.json)
└── assets/                # Static assets (images, fonts)

Key Architecture Patterns

MVC Structure: Controllers handle business logic, state is managed separately, and components focus on UI.

Service Layer: External API integrations (maps, device events, notifications) are abstracted into services.

File-based Routing: Uses Expo Router's file system for automatic route generation.

Theme System: Sophisticated theme management with light/dark/system modes and comprehensive design tokens.

Theme System

The app features an advanced theme system with 3 modes: Light, Dark, and System (automatic). Theme preferences are persisted in AsyncStorage and synchronized with system changes.

Theme Hooks (Usage Priority)

  1. useAppTheme() (Recommended) - Full theme utilities with pre-built styles
  2. useThemeContext() - Full control (themeMode, setThemeMode, colors)
  3. useColorScheme() - Quick light/dark detection
  4. useThemeColor() - Color overrides

Themed Components

Use ThemedView and ThemedText for automatic theme application:

import { ThemedText } from "@/components/themed-text";
import { ThemedView } from "@/components/themed-view";

<ThemedView>
  <ThemedText type="title">Title Text</ThemedText>
  <ThemedText type="subtitle">Subtitle</ThemedText>
  <ThemedText type="default">Regular Text</ThemedText>
  <ThemedText type="link">Link Text</ThemedText>
</ThemedView>

Pre-built Styles (from useAppTheme)

const { styles, utils } = useAppTheme();

// Containers
styles.container     // Flex 1 with theme background
styles.surface       // Surface with padding, border radius
styles.card          // Card with shadow, elevation

// Buttons
styles.primaryButton          // Primary button colors
styles.secondaryButton        // Secondary button with border
styles.primaryButtonText      // White text for primary
styles.secondaryButtonText    // Theme text for secondary

// Status containers
styles.successContainer       // Success background with border
styles.warningContainer      // Warning background with border
styles.errorContainer        // Error background with border

// Utilities
utils.isDark                 // Boolean theme check
utils.toggleTheme()          // Toggle light ↔ dark
utils.getOpacityColor("primary", 0.1) // RGBA with opacity

Internationalization (i18n)

Supports English (en) and Vietnamese (vi) with automatic device locale detection and persistent storage.

Translation Hook

import { useI18n } from "@/hooks/use-i18n";

const { t, locale, setLocale, isLoaded } = useI18n();

// Translations
t("auth.login")           // Simple key
t("auth.welcome", { name: "John" }) // With interpolation

Translation Files

Located in locales/:

  • en.json - English translations
  • vi.json - Vietnamese translations

Structure uses nested keys for organization (e.g., "auth.login.title").

API & State Management

API Configuration

Base URL: https://sgw.gms.vn

  • Automatic JWT token handling via Axios interceptors
  • 401 error handling with automatic logout
  • Comprehensive error messaging with toast notifications
  • 20-second timeout for all requests

State Management (Zustand)

// Trip state
import { useTrip } from "@/state/use-trip";

const { trip, getTrip, error, loading } = useTrip();

Key stores:

  • useTrip - Trip data and operations
  • useBanzones - Restricted area management
  • useFish - Fish species data

Authentication Flow

JWT-based with AsyncStorage persistence:

  1. Login via /api/tokens
  2. Token stored and auto-added to requests
  3. 401 responses trigger automatic logout
  4. Auth state managed through AuthController

Maritime-Specific Features

Core Functionality

  • GPS Tracking: Real-time vessel position tracking
  • Trip Management: Commercial fishing trip logging and monitoring
  • Sensor Data: Various marine sensor integration
  • Ban Zones: Restricted fishing area enforcement
  • Fish Species: Catch logging with species identification
  • SOS System: Emergency alert functionality
  • Map Integration: Maritime charts and zone visualization

API Endpoints

Key maritime APIs:

  • /api/sgw/gps - GPS tracking data
  • /api/sgw/trip - Trip management
  • /api/sgw/fishingLog - Catch logging
  • /api/sgw/banzones - Restricted zones
  • /api/sgw/sos - Emergency alerts
  • /api/sgw/fishspecies - Fish species data

Development Setup & Configuration

TypeScript Configuration

  • Strict mode enabled
  • Path aliases: @/* maps to root directory
  • Extends Expo base TypeScript config

TailwindCSS Configuration

  • Comprehensive design system with CSS variables
  • Custom color palette (primary, secondary, tertiary, error, success, warning)
  • Custom font families (Inter, Jakarta Sans, Roboto, Source Code Pro)
  • Custom shadow utilities and spacing
  • Dark mode support via class-based switching

Metro Bundler

  • Custom metro.config.js with NativeWind integration
  • Optimized for React Native with CSS-in-JS support

Development Best Practices

Component Development

  • Use themed components for consistent theming
  • Prefer useAppTheme() for UI components
  • Leverage TailwindCSS for styling with NativeWind
  • Follow file-based routing conventions

State Management

  • Use Zustand stores for complex state
  • Keep controllers for business logic
  • Use services for external integrations

API Integration

  • Use the configured Axios instance with interceptors
  • Handle errors through the existing toast system
  • Follow the established JWT authentication flow

Theme Development

  • Use the comprehensive theme system for all UI elements
  • Test all theme modes (light/dark/system)
  • Leverage pre-built styles from useAppTheme()
  • Use opacity colors for subtle backgrounds and overlays

Internationalization

  • Always use the t() function for user-facing text
  • Add translations to both en.json and vi.json
  • Follow nested key structure for organization
  • Test with both locales

Build app

  • Add eas.json file to root folder and add this:
{
  "cli": {
    "version": ">= 16.27.0",
    "appVersionSource": "remote"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "android": {
        "buildType": "apk"
      },
      "distribution": "internal"
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

Description
Ứng dụng thiết kế cho chủ tàu sử dụng cho hệ thống Seagate Way
Readme 1.6 MiB
Languages
TypeScript 96.2%
JavaScript 3%
Shell 0.8%