A full-stack garden management application with a React Native/Expo mobile app and a NestJS backend.
A cross-platform mobile application built with Expo, React Native, and NativeWind.
- Expo Router for file-based routing
- Internationalization with Lingui.js and AI-powered translation via
po-missing - Type-safe API with OpenAPI client generation
- UI Components from
@rn-primitiveslibrary - State Management with TanStack Query
- Form Handling with React Hook Form + Zod validation
- Styling with NativeWind (Tailwind CSS for React Native)
- Node.js 18+ and pnpm
- Expo CLI (
npm install -g expo-cli) - iOS: Xcode 15+ (for iOS development)
- Android: Android Studio (for Android development)
- Required External Tool:
po-missingfor AI-powered translation management
The mobile app's i18n workflow depends on the Rust tool po-missing from the repository elcoosp/po-missing. You must install it using Cargo.
Prerequisites: Ensure you have Rust and Cargo installed on your system.
Installation:
git clone https://github.com/elcoosp/po-missing
cd po-missing
cargo install --path .# Development
pnpm dev # Start Expo development server
pnpm android # Android emulator
pnpm ios # iOS simulator
pnpm web # Web version
# TypeScript
pnpm type-check # Type check without emitting
# API
pnpm openapi:gen # Generate TypeScript types from OpenAPI spec
# Internationalization
pnpm i18n:extract # Extract messages from source code
pnpm i18n:compile # Compile translation catalogs
pnpm i18n # Full i18n workflow (extract + AI translate + compile)
# Maintenance
pnpm clean # Clean node_modules and .expoThe project uses an AI-powered translation pipeline:
- Extract: Pull translatable strings from source code
- AI Translate: Uses
po-missingwith Qwen3-Coder model to generate translations - Compile: Convert
.pofiles to runtime-optimized format
A NestJS REST API with SQLite database, JWT authentication, and OpenAPI documentation.
- NestJS Framework with TypeScript
- SQLite Database with TypeORM
- JWT Authentication with Passport
- OpenAPI/Swagger documentation
- Ollama Integration for AI features
- Validation with class-validator
# Development
pnpm start:dev # Development mode with watch
pnpm start:debug # Debug mode
# Building
pnpm build # Compile TypeScript
pnpm start:prod # Run production build
# Testing
pnpm test # Run unit tests
pnpm test:e2e # Run end-to-end tests
pnpm test:cov # Test coverage
# Code Quality
pnpm lint # ESLint with auto-fix
pnpm format # Prettier formattinggarden-manager/
├── apps/
│ ├── mobile/ # Expo React Native app
│ │ ├── app/ # Expo Router pages
│ │ ├── components/ # React components
│ │ ├── lib/ # Utilities, API client, i18n
│ │ └── locales/ # Translation files
│ └── backend/ # NestJS API
│ ├── src/ # Source code
│ ├── test/ # Tests
│ └── swagger/ # OpenAPI specification
├── packages/ # Shared packages (if any)
├── package.json # Root package.json
└── README.md # This file
git clone <repository-url>
cd garden-manager
pnpm installcd apps/mobile
# Install external i18n tool
pip install po-missing
# Start development
pnpm devcd apps/backend
# Start database and API
pnpm start:devCreate necessary .env files in each app directory. See .env.example files for required variables.
- Expo 54 with React Native 0.81
- NativeWind 4 for Tailwind CSS styling
- @rn-primitives for unstyled UI primitives
- Lingui.js 5 for internationalization
- TanStack Query 5 for data fetching
- NestJS 11 with Express
- TypeORM 0.3 with SQLite
- Ollama 0.6 for local AI models
- Passport JWT for authentication
- TypeScript strict mode enabled
- ESLint and Prettier configured
- Husky git hooks (if configured)
The backend uses SQLite for simplicity. Migrations are handled by TypeORM synchronize in development (configure for production).
- Mobile: Uses
po-missingwith Qwen3-Coder model for translations - Backend: Integrates with Ollama for garden management AI features
UNLICENSED - Proprietary software