Skip to the content
PCBKitNew board
4 layersKicad schema, the printed circuit board in 3D

Real-time skydiver monitoring for instructors and jump teams. The system combines a BLE wearable, an offline-first Expo mobile app, Supabase persistence, and a responsive Next.js dashboard with safety analytics.

Copper layers
4
Thickness
1.6 mm
Parts
21
Nets
63
Pads
137
Tracks, vias
203, 0
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
22 Apr 2026
Updated
30 Oct 2026

Overview

Kicad schema is an open-source printed circuit board by RobuGabrie, from the RobuGabrie/skydiver repository on GitHub. It is a 4-layer board with 21 parts on 63 nets, routed with 203 tracks and 0 vias.

It is built around the ESP32-C3, MAX30102 and AP2112K-3.3, with the DS3231MZ+ and MPU-6050 among its other parts. Its parts include 7 ICs, 5 resistors, 3 capacitors and 1 connector. It belongs with the ESP32 and RISC-V boards of this library.

Main components

5

README

README.md

Skydiver Monitor

Real-time skydiver monitoring for instructors and jump teams. The system combines a BLE wearable, an offline-first Expo mobile app, Supabase persistence, and a responsive Next.js dashboard with safety analytics.

Project status: active prototype / pilot software. Do not use the current deployment as the sole source of safety-critical decisions. Validate the wearable, alert thresholds, connectivity behavior, and operational procedures before production or field use.

What it does

  • Streams wearable telemetry over Bluetooth Low Energy.
  • Collects phone GPS and derives altitude and vertical speed.
  • Stores telemetry locally in SQLite and retries synchronization when connectivity returns.
  • Persists sessions, telemetry, and alerts in Supabase.
  • Shows live skydiver status, vitals, location, jump phase, and alert history in the web dashboard.
  • Provides local AI safety analysis with optional Gemini comparison.
  • Supports mock data mode for demos and UI testing.

Architecture

text
BLE wearable
    │ FAST / SLOW packets
    ▼
Expo mobile app ── SQLite queue ── Supabase
    │ GPS                         │ Realtime
    └─────────────────────────────▼
                              Next.js dashboard
AreaDirectoryResponsibility
Web dashboardweb/Live monitoring, maps, alerts, analytics, and AI route
Mobile appmobile/BLE connection, GPS, recording, offline queue, sync
Shared contractspackages/shared/Types and database DTOs shared by web and mobile
Databasesupabase/migrations/Schema, views, functions, RLS, and Realtime
Build orchestrationscripts/build-all.shWeb and Android/EAS builds
Hardware designKicad-schema/KiCad schematic and PCB files

The wearable firmware is not included in this repository. The mobile BLE protocol expects the service and characteristic UUIDs documented in DOCUMENTATIE_RO.md.

Prerequisites

  • Node.js 20 or newer
  • npm
  • A Supabase project
  • For mobile development: Expo tooling, a device or emulator, and the platform SDK
  • For local Android release builds: Android SDK and Gradle-compatible Java
  • For EAS builds: eas-cli and an authenticated Expo account

Quick start

Clone the repository and install dependencies for each runnable application:

bash
git clone https://github.com/RobuGabrie/skydiver.git
cd skydiver

npm install --prefix web
npm install --prefix mobile

Configure Supabase before starting either app.

Web environment

Create web/.env.local:

dotenv
NEXT_PUBLIC_SUPABASE_URL=https://YOUR_PROJECT.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-public-anon-key

# Optional: enables Gemini comparison in /api/ai/gemini
GEMINI_API_KEY=your-server-side-gemini-key
# Optional; the route has a default model
GEMINI_MODEL=your-model-name

Only the NEXT_PUBLIC_* values are exposed to the browser. Never put a service-role key or other secret in a NEXT_PUBLIC_* variable.

Start the dashboard:

bash
cd web
npm run dev

Open http://localhost:3000.

Mobile configuration

The mobile app reads Supabase credentials from expo.extra in mobile/app.json:

json
{
  "expo": {
    "extra": {
      "supabaseUrl": "https://YOUR_PROJECT.supabase.co",
      "supabaseAnonKey": "your-public-anon-key"
    }
  }
}

Start Expo:

bash
cd mobile
npm start

Use a development build or a physical device for BLE testing. Browser and simulator environments do not provide equivalent BLE behavior.

Supabase setup

Apply migrations in filename order using the Supabase SQL editor. If the Supabase CLI is configured for this project, link the project and push the migrations:

bash
supabase link --project-ref YOUR_PROJECT_REF
supabase db push

If using the SQL editor, run:

text
supabase/migrations/001_schema.sql
supabase/migrations/002_fix_parachute_detection.sql
supabase/migrations/002_rls.sql
supabase/migrations/003_fix_sessions.sql

The migrations create:

  • devices, sessions, telemetry_events, and alert_events
  • skydiver_profiles and ai_jobs
  • current_skydivers for the dashboard's initial state
  • upsert_device_and_session for idempotent mobile session bootstrap
  • Row Level Security policies and Realtime publication configuration

After connecting a wearable, populate skydiver_profiles if you want stable display names and avatars in the dashboard.

Development commands

From the repository root:

bash
npm run build:web       # Production Next.js build
npm run build:mobile    # Local Android release APK
npm run build           # Web build followed by local Android build
npm run build:mobile:eas       # EAS Android preview build
npm run build:mobile:eas-prod  # EAS Android production build

Application-specific commands:

bash
cd web
npm run lint
npm run build
npm start
bash
cd mobile
npm start
npm run android
npm run ios
npm run web

The local mobile build expects mobile/android/ to exist. Generate native projects once when needed:

bash
cd mobile
npx expo prebuild

The build script writes a local release APK to dist/skydiver-mobile-release.apk. Set SKIP_INSTALL=1 when dependencies are already installed.

Data flow and reliability

  1. The wearable publishes fast motion packets and slower vitals/status packets.
  2. The mobile app decodes packets and combines them with phone location.
  3. Events are written to a SQLite queue before upload.
  4. Uploads use UUID event IDs and app-level monotonic sequences for idempotency.
  5. Failed uploads remain queued and are retried.
  6. The dashboard loads current_skydivers, then subscribes to Realtime changes.
  7. A skydiver is marked offline when updates exceed the dashboard inactivity threshold.

Alert types currently include abnormal pulse, low oxygen, high stress, low battery, uncontrolled fall, and excessive rotation. Alert cooldowns prevent repeated notifications for the same condition.

Deployment

Web on Vercel

The repository includes vercel.json configured for the web/ Next.js application. Configure the following Vercel environment variables:

  • NEXT_PUBLIC_SUPABASE_URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
  • GEMINI_API_KEY (optional)
  • GEMINI_MODEL (optional)

Build and run locally in production mode:

bash
cd web
npm run build
npm start

Mobile with EAS

bash
cd mobile
npx eas login
npx eas build --platform android --profile preview
npx eas build --platform android --profile production

The EAS profiles are defined in mobile/eas.json. Production builds use remote version management and automatic version increments.

Security and operations

The included RLS policies are designed for the current anonymous prototype flow: the public anon role can read telemetry and insert events, while the dashboard can acknowledge alerts. Before a production launch, add authenticated users, restrict rows by team/device ownership, protect profile administration, rotate exposed credentials, and review Realtime access.

For field operation, test at minimum:

  • BLE disconnect and reconnect during a jump
  • Offline recording and later synchronization
  • Duplicate event retry behavior
  • GPS permission denial and poor location accuracy
  • Stale sessions and device replacement
  • Alert acknowledgment permissions
  • Database backups, retention, and monitoring

Repository notes

  • DOCUMENTATIE_RO.md contains the detailed Romanian architecture and BLE protocol notes.
  • dist/ may contain a locally generated APK; release artifacts should be produced by CI or EAS.
  • Do not commit .env.local, private API keys, service-role keys, signing credentials, or device secrets.

License

No open-source license is currently declared. Treat the repository as proprietary unless the project owners provide written permission otherwise.

Parts

21
QtyValueFootprintReferences
310kohmResistor_SMD:R_0402_1005MetricR1, R2, R5
24.7kohmResistor_SMD:R_0402_1005MetricR3, R4
1100nFCapacitor_SMD:C_0402_1005MetricC3
1100nfCapacitor_SMD:C_0402_1005MetricC1
110ufCapacitor_SMD:C_0402_1005MetricC2
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U7
1DS3231MPackage_SO:SOIC-16W_7.5x10.3mm_P1.27mmU4
1ER_OLEDM0.91_1x-I2CDisplay:ER_OLEDM0.91_1x-I2CU3
1ESP32-C3Package_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mmU1
1INA219AxDPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1MAX30102OptoDevice:Maxim_OLGA-14_3.3x5.6mm_P0.8mmU5
1MPU-6050Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mmU2
1Thermistor_NTCResistor_SMD:R_0402_1005MetricTH1
1USB_C_Plug_USB2.0Capacitor_SMD:C_0402_1005MetricP1

The 17 most common of 21 parts.

Questions

What parts does the Kicad schema use?

21 parts, built around the ESP32-C3, MAX30102, AP2112K-3.3 and DS3231MZ+. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Kicad schema KiCad files?

From the RobuGabrie/skydiver repository on GitHub, at the commit this page was made from: the board is Kicad-schema/Kicad-schema.kicad_pcb and its schematic Kicad-schema/Kicad-schema.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Kicad schema design in my own project?

Its repository states no licence, so its author keeps all rights: ask RobuGabrie before reusing the design.

Similar boards

  • 2 layers39 × 42.8 mmWatch v3, the printed circuit board in 3D

    Watch v3

    KIIT-Robotic-Society/Dharma_RoboFest4.0

    Dharma Bot is a quadruped robotic dog featuring 12-DOF locomotion, real-time sensing, and a modular subsystem design.

    79 parts4MIT
  • 2 layers31.6 × 57.6 mmRocket.Sim, the printed circuit board in 3D

    Rocket.Sim

    BearsBearsBearsT-T/ESP32-Rocket-Sim-PCB

    An MPU and ESP32 powered PCB that tracks motion in real time.

    19 parts
  • 4 layersAstra Companion, the printed circuit board in 3D

    Astra Companion

    atireksd11/Astra-Companion

    This repo holds the carrier PCB, the voice stack on the laptop, and notes for building Astra. Week 1 was the KiCad board.

    96 parts
  • 2 layers89.5 × 97.5 mmWearablesystem, the printed circuit board in 3D

    Wearablesystem

    manushri-d/ece445

    This repo is used for our Senior Design class where we put all of our updates for the semester!

    65 parts
  • 6 layersSentinel HYDRA, the printed circuit board in 3D

    Sentinel HYDRA

    dhruv1859/CARVantaBAC

    🧬 CARVanta Next-Generation Precision Oncology & AI CAR-T Cell Platform Interactive 3D Biological Digital Twin • 3D Neural Bridge • Sentinel HYDRA Biosensor

    135 parts1Apache-2.0
  • 2 layers38.8 × 46.4 mmSmartwatch, the printed circuit board in 3D

    Smartwatch

    SydneyDith/Heartrate-monitor-Smartwatch---Electronics-Club

    Led the development of a heartrate monitor smartwatch based on the ATmega328P microcontroller with a group of 4. Utilized several sensors to send/recieve data via I2C communication protocol uising C based Arduino IDE.

    38 parts1
  • 4 layers124.7 × 64.3 mmRP2040 SOS band, the printed circuit board in 3D

    RP2040 SOS band

    abhinav937/RP2040_SOS_band

    PCB design files for RP2040 based SmartWatch. It features an accelerometer, a GPS module and a cellular module.

    107 parts3