Project Eelytics is developed to ease the intensive manual labor of sizing and grading live eels. This application acts as the primary operator control center and data visualization portal, ensuring strict alignment and compliance with the Bureau of Fisheries and Aquatic Resources (BFAR) Fisheries Administrative Order (FAO) No. 242 regulations governing juvenile eel trade and exportation.
By interfacing directly with an integrated computer vision backend powered by a Mask R-CNN model, the system tracks real-time size metrics, handles batch states, and optimizes automated sorting mechanisms seamlessly.
eelytics-app-v2/
├── .expo/ # Expo development build cache
├── android/ # Native Android build configurations
├── assets/ # Local static images, graphics, and system icons
├── components/ # Reusable UI widgets and sub-modules
├── pages/ # Flat modular top-level screen views
├── App.js # Main application entry point & root state provider
├── app.json # Expo configuration file (metadata, splash screens)
├── eas.json # Expo Application Services build profiles
├── index.js # Native registry entry point
├── package.json # Project dependencies, scripts, and versions
└── README.md # Project documentation (this file)
The application enforces strict design reuse across its interfaces. Below is the technical API and description of each reusable component within src/components/.
A visual-feedback wrapper component that uses the native animation driver to provide a spring-loaded micro-interaction when a navigation element or screen focus changes.
- How it works: It utilizes
Animated.springto smoothly shift the target child element upwards along the Y-axis by-3pixels when active. - Props Matrix:
Prop Name Type Description focusedBooleanControls the target spring state ( trueto lift up,falseto reset).childrenReactNodeThe icon or image asset layout getting wrapped by the spring view.
A standardized modal window featuring a semi-transparent dark overlay background (rgba(30,30,30,0.5)) and a signature neon blue border accent (#007AFF).
- How it works: Provides flexible layout injection used primarily to anchor large administrative panels such as the legal requirements list or system information cards dynamically over the viewport.
- Props Matrix:
Prop Name Type Description stateBooleanVisibility toggler passing directly into the native Modalcomponent.childrenReactNodeThe custom internal views or text nodes rendered within the card frame. onCloseFunctionCallback trigger when the user requests an explicit exit dismiss action. height/widthString | NumberCustom sizing bounds to adapt to differing data page presentation shapes.
The consistent header shell tracking across all major platform views, establishing global branding identity.
- How it works: Renders the application logo asset alongside the contextual page name, exposing an effortless interface connection to standard menu toggles.
- Props Matrix:
Prop Name Type Description titleStringText content rendered inside the header area (e.g., "Dashboard", "Logs"). seeMenuFunctionCallback hooked into a trailing MaterialCommunityIconsmenu button to slide open parameters.
Form fields designed for credential intake with uniform styles, flat-shaded dark backgrounds, and neon highlight boundaries.
- How it works: Both expose full
TextInputmappings.PasswordFieldappends a specialized visibility eye icon switcher utilizing a boolean layout tracker. - Key Parameter Targets:
- Auto-capitalization is explicitly disabled (
none) alongside auto-correct flags (false) to ensure standard authentication tokens are captured predictably. - Inputs are bound to custom callback modifiers via
onChangeText.
- Auto-capitalization is explicitly disabled (
A critical system status feedback portal used to catch operational errors, validation confirmations, or display inline machine states.
- How it works: It maps a status string parameter directly to custom state styles, assets, and colors:
- 🟢
success(#4CAF50): Confirms successful batch entries or state commits. - 🔴
error(#FF5252): Signals network issues or hardware misalignments. - 🟡
warning(#FFC107): Signals threshold alerts. - 🔵
loading(#007AFF): Shows an inlineActivityIndicatorspinner during async operations.
- 🟢
The primary administration panel that houses hardware diagnostics, manual overrides, and references. It coordinates both nested internal sub-modals and status hooks.
- Key Integrated Systems:
- Test Gates Overrides: Direct manual trigger configurations supporting live sizing groups under FAO No. 242 protocols:
ELVERGate Check (#00D4FF)TABLEGate Check (#FF3131)KUROKOGate Check (#00FF41)
- System Diagnostics Core Links: Integrated trigger buttons targeting edge nodes:
Model Server(Mask R-CNN machine status query)Raspberry Pi(Central processing bridge)Gate ESP32/Tank ESP32(Actuator and sensor microcontroller checks)
- Operational Controls: Handlers built to bind direct system feedback email sequences via
Linkingalongside transactional logout routines via navigation wrappers (navigation.replace('Login')).
- Test Gates Overrides: Direct manual trigger configurations supporting live sizing groups under FAO No. 242 protocols:
The application layer contains the high-level views that orchestrate UI updates, poll data streams from the edge nodes, and handle hardware overrides.
Acts as the foundational layout shell and tab navigator manager. It wraps the core system views with structural safety areas, consistent brand identity, and smooth animation hooks.
- Core Mechanics:
- Uses a
@react-navigation/material-top-tabsnavigator rendered along the screen bottom to swap active child windows. - Listens dynamically to route modifications via
screenListenersto supply the parentHeadertitle with contextual updates. - Leverages your modular
<AnimateIcon>wrapper to apply micro-animations to active navigation icons.
- Uses a
- Navigation Tree Routes:
Route Target Rendered Page component Route Strategy / Route Parameters DashboardDashboard.jsReceives global network mappings ( baseUrl,firstName).TankTank.jsReceives API control parameter mappings ( baseUrl).LiveLive.jsConnects directly to the system video streams ( baseUrl).LogLog.jsInterfaces with remote databasing queries ( baseUrl).
Serves as the mission control panel. It polls real-time metrics across distinct edge APIs, updating the state every 100ms to keep operators up to date with sorting operations.
- Core Operational Modules:
- Greeting Matrix: Analyzes localized temporal values via
getHours()to establish contextual time bounds (Morning, Noon, Afternoon, Evening) and switch background banners accordingly. - Average Sizing Feed: Long-polls data from
${baseUrl}/api/eelsdb/get_datato render average dimensional scales (in inches) broken down by legal classifications (ELVER, KUROKO, TABLE). - Video Integration: Hosts an optimization-configured
WebViewtargeting${baseUrl}/cam/to present the physical sorting environment directly on the main desk view. - Animated Volumetric Gauge: Linearly interpolates digital level feedback derived from the tank server into direct layout height transformations (
0cmto15cmmapped smoothly across0%to100%).
- Greeting Matrix: Analyzes localized temporal values via
The dedicated primary workspace for processing sessions, tracking immediate classification results, and committing batches to the compliance database.
- Core Functional Systems:
- Dual Stream Toggle: Allows swapping the
WebViewsource between the raw field-of-view data stream (/cam/) and the real-time segmented image output (/processed/) via an endpoint switch. - Injected JavaScript Optimization: Automatically injects an optimization routine into the webpage viewport to hide native browser playback overlays and guarantee continuous loop autoplay.
- Volatile Logging Array: Captures unique dimension observations directly into local lists while instantly filtering out identical sequential duplicates.
- Transactional Commits: Packages batch events safely inside JSON arrays to issue remote
POSTupdates over${baseUrl}/api/eelsdb/save_batch.
- Dual Stream Toggle: Allows swapping the
The manual override configuration module designed to align physical water properties and communicate with automated solenoid actuators.
-
Key Implementations:
-
Dynamic Chromatic Status: Formats state colors dynamically according to system metrics: water level deviations exceeding a
$\pm 0.2\text{ cm}$ threshold turn red (#FF3131), while stable states shine green (#00FF41). -
Solenoid Actuator Interlocking: Sends automated network updates targeting the device controllers (
AUTO,MANUAL, orNONE) to track live mechanical shifts (e.g.,FILLINGorDRAINING). -
Calibration Interface: Uses a nested modal menu built on top of your
<GeneralModal>container to pass input configuration changes securely to the API backend.
-
Dynamic Chromatic Status: Formats state colors dynamically according to system metrics: water level deviations exceeding a
The protection gate that establishes operational contexts before instantiating active dashboards.
- Key Implementations:
- Dynamic Avatar Generation:
SignupScr.jsfeatures a hashing sequence that maps username strings to a predictable background color palette, creating customized visual profiles instantly. - String Validation Matrices: Enforces strict formatting profiles before accepting updates (requiring an uppercase character, special symbols, and a minimum configuration of 8 characters).
- Network Topology Selector: Includes a dedicated debug modifier toggle to easily switch environment target paths between cloud production targets (
https://dabloat.tech) and internal laboratory networks (http://192.168.1.220).
- Dynamic Avatar Generation:
The data retrieval panel responsible for historical analytics lookup and compliance verification.
- Key Implementations:
- Paginated Records Retrieval: Pulls data from
${baseUrl}/api/eelsdb/get_logsutilizing specific parameter constraints (pageboundaries and alimit=50restriction). - Asynchronous Loading Inversion: Controls an inline native
ActivityIndicatorcomponent that manages state shifts transparently, providing explicit UI feedback while files await download.
- Paginated Records Retrieval: Pulls data from
Follow these steps to set up a local development environment, install project dependencies, and launch the mobile application interface.
Before setting up the repository, make sure your machine has the following dependencies installed globally:
- Node.js: version
16.xor higher recommended. - Package Manager:
npm(bundled with Node.js) oryarn. - Expo Go Application: Download the Expo Go mobile app on your physical testing device (available via Google Play Store or Apple App Store).
Clone the project folder from the remote server and navigate straight into the project root directory:
git clone https://github.com/DaBloat/eelytics-app-v2.git
cd eelytics-app-v2Run the dependency alignment command inside the root folder. This pulls all matching configuration blocks listed in package.json into a localized node_modules/ folder:
npm installThe mobile application acts as a client that interfaces with multiple edge nodes (including your Mask R-CNN processing engine, database servers, and physical microcontrollers).
To toggle between environment endpoints during development:
- Launch the app and head to the Login Portal.
- Locate the network modifier toggle near the bottom of the interface.
- Switch between API Mode (pointing to your cloud domain) and Local Mode (directing requests to your laboratory IP environment).
Start your local Metro Bundler server via Expo:
npx expo startProject Eelytics was created as a final requirement for the Computer Engineering program at the Technological Institute of the Philippines, Quezon City to modernize local aquaculture through automation and machine learning.
© 2026 Eelytics. All Rights Reserved.
Sizing Made Simple. Baseline compliance automation for BFAR FAO No. 242.











