Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
* text=auto

*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.json text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.mjs text eol=lf
*.csv text eol=lf
*.txt text eol=lf
*.html text eol=lf
*.cpp text eol=lf
*.h text eol=lf
*.ino text eol=lf
*.ini text eol=lf
*.ps1 text eol=crlf

*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.xlsx binary
*.3mf binary
*.epro binary
77 changes: 77 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: CI

on:
push:
pull_request:

permissions:
contents: read

jobs:
mobile-and-protocol:
name: Mobile and protocol
runs-on: ubuntu-latest
env:
EXPO_NO_TELEMETRY: "1"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: mobile/package-lock.json
- name: Verify BLE protocol contract
run: node scripts/verify-protocol.mjs
- name: Verify release text
run: node scripts/verify-release-text.mjs
- name: Verify documentation links
run: node scripts/verify-doc-links.mjs
- name: Verify mobile Simple-mode copy
run: node scripts/verify-mobile-simple-copy.mjs
- name: Install mobile dependencies
working-directory: mobile
run: npm ci --ignore-scripts
- name: Check Expo dependency compatibility
working-directory: mobile
run: npm run check:expo
- name: Summarize production dependency audit
working-directory: mobile
run: npm run audit:summary
- name: Test mobile validation helpers
working-directory: mobile
run: npm run test:validation
- name: Test mobile retained CSV transfer
working-directory: mobile
run: npm run test:csv-transfer
- name: Test mobile PLX oximetry parser
working-directory: mobile
run: npm run test:plx-oximetry
- name: Typecheck mobile app
working-directory: mobile
run: npm run typecheck
- name: Smoke test mobile web preview bundle
working-directory: mobile
run: npm run test:web-export
- name: Verify repository hygiene after mobile export smoke
run: node scripts/verify-repo-hygiene.mjs

firmware:
name: Firmware
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: requirements-ci.txt
- name: Install PlatformIO
run: python -m pip install --upgrade -r requirements-ci.txt
- name: Build firmware
run: python -m platformio run -d "firmware/Rev 2" -e esp32dev
- name: Build explicit bench PWM firmware
run: python -m platformio run -d "firmware/Rev 2" -e esp32dev_bench_pwm
- name: Check firmware flash budget
run: node scripts/check-firmware-size.mjs
- name: Verify repository hygiene
run: node scripts/verify-repo-hygiene.mjs
40 changes: 40 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# OS/editor
.DS_Store
Thumbs.db
.idea/
.vscode/
*.swp

# Logs and temporary output
*.log
tmp/
temp/
dist/
build/

# Firmware build output
*.bin
*.elf
*.map
*.hex
*.uf2
.pio/

# Node / React Native / Expo
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
mobile/.expo/
mobile/.expo-web-smoke/
mobile/.expo-shared/
mobile/android/
mobile/ios/
mobile/web-build/
mobile/dist/

# Local environment files
.venv/
.env
.env.*
!.env.example
44 changes: 44 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Contributing to Ozealis

Ozealis is an experimental, open-source airflow research platform. Contributions are welcome, especially when they improve safety, reproducibility, documentation, localization, testability, or accessibility.

## Safety-first contribution rules

- Do not make medical, diagnostic, screening, treatment, cure, prevention, or emergency-use claims.
- Do not present unvalidated behavior as safe, therapeutic, compliant, or production-ready.
- Prefer bounded settings, explicit units, reversible changes, and clear failure states.
- Prefer designs that can be inspected, repaired, calibrated, and documented worldwide, including low-resource settings, without proprietary lab equipment.
- Document test conditions. Include hardware revision, firmware revision, sensor configuration, power supply, and measurement tools when reporting behavior.
- Keep user-facing text clear that this is not an approved medical device and has no warranty.

## Pull request checklist

- The change has a clear purpose and narrow scope.
- Firmware changes build or include exact reasons why they could not be built locally.
- Mobile changes pass `npm run typecheck` from `mobile/`.
- BLE protocol changes update `docs/ble-protocol.md`.
- Hardware changes include revision notes and any relevant BoM/schematic updates.
- Documentation avoids claims that the project treats, diagnoses, screens for, prevents, or cures disease.

## Local mobile app workflow

The companion app uses Expo with native BLE modules, so it requires a development build.

```bash
cd mobile
npm ci --ignore-scripts
npm run typecheck
npm run android:dev-build
```

`npm run android:dev-build` generates, builds, and installs the native Android development client. iOS native builds require macOS and `npm run ios:dev-build`. Once a development client is installed, use `npm run start`, `npm run android`, or `npm run ios` to start Metro and launch that existing client.

## Reporting issues

Please include:

- Hardware revision and firmware revision.
- Mobile app version and phone OS.
- Whether the issue occurs while idle, starting, running, faulted, or updating OTA.
- Relevant serial logs, BLE logs, or exported CSV, with secrets removed.
- Photos or measurement screenshots when helpful.
Loading
Loading