GutLogger is a React + Vite web application that lets you upload Bubble-Sensor log files ( .log
) and instantly visualize & compare the pressure profiles of each test cycle.
It automatically extracts the key phases in every cycle and presents them in dedicated panels:
- Full Cycle Pressure – complete pressure trace from start to finish.
- Sample Push Pressure – isolates the section between "Waiting to trigger with sample" and "Triggered!" for each file and overlays multiple tests for easy comparison.
Includes a peak-pressure line chart, per-file stats table and unit-comparison analytics. - Cleaning Cycle Pressure – shows the cleaning-only portion (Bubble Sensor Second) with the same overlay, table and analytics as the sample-push panel.
- Additional Analysis – battery stats, program starts and error summaries powered by Supabase edge functions.
- Drag-and-drop multiple
.log
files – the app parses them in-browser (no server needed for core analysis). - Interactive charts (Recharts) with tooltips, legends and hide/show toggles.
- Assign "Unit" labels to each file and view aggregated statistics across units.
- Single "Export Excel" button that generates one workbook containing:
- A Summary sheet (Sample-push & Cleaning tables).
- Individual sheets for every file (sample-push & cleaning data).
- Modern UI built with shadcn-ui + Tailwind CSS.
# 1. Clone & install
npm i
# 2. Start dev server
npm run dev
The app will be available at http://localhost:5173 (default Vite port).
If you want to enable the optional Supabase edge-function analysis, create a .env
file with your Supabase URL & anon key:
VITE_SUPABASE_URL=...
VITE_SUPABASE_ANON_KEY=...
You can deploy with any static-hosting provider (e.g. Netlify, Vercel).
Build the production bundle:
npm run build
The static files will be in dist/
.
graph TD
subgraph "Frontend – React & Vite"
UI["FileUploader / FileList\n(user selects .log files)"]
Parser["logParser.ts\n• extractSamplePushData\n• extractCleaningCycleData\n• extractEvents"]
Charts["Analysis Panels\n— Full-Cycle Pressure\n— Sample-Push Pressure\n— Cleaning-Cycle Pressure"]
Export["Excel Export (xlsx)"]
UI --> Parser
Parser --> Charts
Charts --> Export
end
subgraph "Supabase Edge Function"
Fn2["analyze-additional-logs"]
end
Charts -- "invoke" --> Fn2
Fn2 -- "stats JSON" --> Charts
Export --> XLSX["gutlogger_analysis.xlsx"]