Skip to content
Tiger edited this page Nov 15, 2025 · 2 revisions

Nimble Survey App Wiki

Welcome to the Nimble Survey App documentation! This wiki provides comprehensive information about the project architecture, setup, development, and deployment.

Overview

Nimble Survey App is a cross-platform mobile application built with Flutter that integrates with Nimble's API to provide a seamless survey experience. The app supports OAuth authentication, survey browsing with caching, and a complete survey-taking workflow.

Key Features

  • Authentication

    • OAuth 2.0 authentication
    • Secure login and password reset
    • Token management with secure storage
  • Survey Management

    • Survey list with local caching
    • Pagination support
    • Dynamic survey data population
    • Multiple question types (NPS, Rating, Checkbox, Dropdown, Text, etc.)
  • Cross-Platform Support

    • Android (API 21+)
    • iOS (iOS 12+)
    • Push notifications on iOS
  • CI/CD Pipeline

    • Automated builds for Android and iOS
    • Firebase App Distribution
    • Multi-environment support (dev, staging, prod)

Quick Links

Tech Stack

Framework & Language

  • Flutter - Cross-platform UI framework
  • Dart - Programming language

State Management

  • Riverpod 3.0 - Reactive state management
  • riverpod_annotation - Code generation for providers

Networking

  • Dio - HTTP client
  • Retrofit - Type-safe REST client
  • pretty_dio_logger - Network request logging

Local Storage

  • Drift - SQLite database wrapper
  • flutter_secure_storage - Encrypted key-value storage
  • flutter_cache_manager - Image caching

Navigation

  • go_router - Declarative routing

Code Generation

  • build_runner - Code generation tool
  • freezed - Code generation for data classes
  • json_serializable - JSON serialization

UI Components

  • cached_network_image - Optimized image loading
  • shimmer_animation - Loading placeholders
  • lottie - Animation support
  • smooth_page_indicator - Page indicators

Development Tools

  • flutter_lints - Linting rules
  • custom_lint - Custom linting
  • mocktail - Testing mocks

Project Structure

lib/
├── core/                      # Core functionality
│   ├── constants/            # App constants
│   ├── local/               # Local storage (Drift)
│   ├── model/               # Data models
│   ├── network/             # API services
│   ├── provider/            # Riverpod providers
│   ├── repository/          # Repository implementations
│   ├── ui/                  # Shared UI components
│   └── utils/               # Utility functions
├── features/                 # Feature modules
│   ├── auth/               # Authentication
│   ├── home/               # Home screen with survey list
│   ├── splash/             # Splash screen
│   └── surveydetails/      # Survey details and questions
├── l10n/                    # Localization
├── main/                    # App initialization
└── main.dart               # Entry point

Getting Started

  1. Setup your development environment
  2. Clone and configure the project
  3. Run the app
  4. Explore the architecture

Environment Support

The app supports three environments:

  • Dev - Development environment
  • Staging - Staging environment
  • Prod - Production environment

Each environment has its own configuration file (.env.dev, .env.staging, .env.prod) with environment-specific API endpoints and credentials.

License

This project is proprietary software developed for Nimble.

Clone this wiki locally