- XCode

Xcode served as the integrated development environment (IDE) for the iOS client, offering a suite of editors and simulators that streamline Swift code writing, interface design, and performance profiling.
- Android Studio

For the Android client, Android Studio was the IDE of choice, providing advanced Kotlin support, real-time layout previews, and built‑in tools for code linting and APK packaging.
- Git

To manage source code, coordinate team contributions, and maintain a clear history of changes, we used Git in conjunction with a remote hosting service. Git enabled distributed version control, branch management, and pull‑request workflows, ensuring reproducible builds and simplified integration.
- Docker

Docker was utilised to containerise the backend services, encapsulating runtime dependencies and configurations into portable images that could be consistently deployed on development machines and the VPS server without environmental discrepancies.
- Frontend
The frontend comprises two native mobile applications: an iOS client written in Swift and an Android client written in Kotlin. On iOS, we used SwiftUI for declarative UI layouts, URLSession for asynchronous network calls, and SwiftImage for initial image handling and preprocessing. On Android, the app leverages declarative XML files for seamless UI composition, Retrofit for HTTP communication, and Coil for image loading and caching. Both codebases implement a repository pattern to abstract data sources, enabling consistent request formatting, response parsing, and local caching of recent analysis results.
- Backend
The backend is implemented in Python, using a lightweight web framework to define RESTful endpoints that correspond to app actions (e.g., scan food, fetch report, chat). Each endpoint validates incoming JSON payloads, forwards the relevant data to the GPT API, and applies minimal business logic before returning the API’s response. To ensure environmental consistency and simplify deployment, the backend code and its dependencies are packaged into a Docker container, which is then deployed to a Virtual Private Server (VPS). This containerized approach eliminates configuration drift between local development and production environments.
- Database
For offline support and to minimize network calls, the application uses each platform’s native local persistence layer. On iOS, Swift Data provides an object graph and persistence framework that stores user profiles, meal logs, and cached nutrient analyses in a SQLite store under the hood. On Android, we employ Room, which offers a type-safe abstraction over SQLite, enabling compile-time verification of SQL queries and seamless mapping between entities and database tables. Both solutions support migrations and encrypted storage to protect sensitive user data.
- Authorization
User identity and access control are handled via Firebase Authentication, which offers secure, managed sign-up and sign-in flows. We configured Firebase to support Google Sign-In, which enabled users to authenticate using their existing Google accounts. Firebase handles token issuance, refresh, and revocation, and the mobile clients attach the issued ID tokens to each backend request, ensuring that only authenticated sessions can access user-specific endpoints.