This commit is contained in:
Ty Clifford
2026-06-30 17:16:19 -04:00
parent a1d0383da9
commit c7becbf9d6
2 changed files with 162 additions and 25 deletions
+87 -25
View File
@@ -1,11 +1,13 @@
# Neon Health Tracker
# Neon Medical Tracker
A dependency-free PHP, HTML5, JavaScript, and SQLite tracker for workouts, nutrition, supplements, and body metrics.
A dependency-free PHP, HTML5, JavaScript, and SQLite web app for multi-user medical tracking, searchable medical reference data, medication catalog lookup, terminology, symptoms, conditions, NIH/NLM study links, and admin-managed profiles.
This app is a personal tracking and reference tool. It is not medical advice, diagnosis, treatment guidance, emergency guidance, or a substitute for a clinician or pharmacist.
## Run
```sh
frankenphp php-server --root public --listen 127.0.0.1:8080
/Users/tyemeclifford/frankenphp php-server --root public --listen 127.0.0.1:8080
```
Then open:
@@ -16,15 +18,21 @@ http://127.0.0.1:8080
## Public Routes
- `/` - public homepage for the service.
- `/workouts.php` - workout planning feature page.
- `/nutrition.php` - nutrition tracking feature page.
- `/recovery.php` - recovery, supplements, and health monitoring feature page.
- `/signup.php` - public profile signup.
- `/tracker.php` - the workout, nutrition, supplement, and health dashboard.
- `/admin.php` - admin user-management dashboard.
- `/` - medical reference hub with search, database totals, and links to tracker/admin tools.
- `/nutrition.php` - searchable medicine catalog.
- `/medicine.php?id=46` - dynamic medicine detail page backed by SQLite.
- `/symptoms.php` - searchable symptom reference database.
- `/symptom.php?id=24` - dynamic symptom detail page backed by SQLite.
- `/workouts.php` - searchable condition reference database.
- `/condition.php?id=2` - dynamic condition detail page backed by SQLite.
- `/medical.php` - combined search for symptoms, terminology, conditions, medicines, and study links.
- `/term.php?id=1` - dynamic medical terminology detail page backed by SQLite.
- `/recovery.php` - NIH/NLM research and study-link categories.
- `/tracker.php` - profile-scoped medical tracker dashboard.
- `/admin.php` - admin user-management dashboard and medicine-source updater.
- `/signup.php` - legacy route that redirects to `/tracker.php`; public signup has been removed.
## Storage
## Current Data
SQLite is created automatically at:
@@ -32,23 +40,77 @@ SQLite is created automatically at:
data/health_tracker.sqlite
```
The app seeds two sample profiles, built-in exercise movements, common gym supplements, starter routines, planner entries, nutrition logs, supplement logs, and body metrics.
The current SQLite snapshot includes:
- 6,002 medicine catalog records.
- 242 symptom reference records.
- 203 condition reference records.
- 23 medical terminology records.
- 9 NIH/NLM research-link categories.
The database also stores user profiles, medication logs, vitals, lab results, symptom logs, allergies, appointments, immunizations, optional legacy workout/nutrition/supplement data, theme preferences, and admin state.
## Included
- Multi-user profiles with separate routines, logs, goals, and theme preferences.
- Admin dashboard for creating, editing, activating/deactivating, and deleting user profiles.
- First user created in a database is automatically promoted to `admin`; later users default to `member`.
- Daily, weekly, and monthly workout planner views.
- Routine planning for weight lifting, cycling, running, swimming, conditioning, mobility, core, outdoor, and hybrid programs.
- Configurable exercise and supplement libraries.
- Nutrition goals scoped by day, week, or month, compared against actual logs.
- Supplement tracking for pre-workout, intra-workout, post-workout, daily, and evening use.
- Health metrics for weight, body fat, sleep, resting heart rate, mood, and notes.
- Multi-user profiles with separate medical records and theme preferences.
- First user in a database is automatically promoted to `admin`; later users default to `member`.
- Admin dashboard for creating, editing, activating/deactivating, and deleting profiles.
- Admin medicine-source updater for refreshing catalog data from RxNorm, DailyMed, and openFDA.
- Profile-scoped tracker for medication logs, vitals, lab results, symptoms, allergies, appointments, immunizations, notes, and older wellness data.
- Searchable medicine catalog by generic name, active ingredient, chemical name, common brand names, generic/alternate names, class, family, and source terms.
- Dynamic medicine pages with active ingredient, chemical name, brand names, tracking notes, RxNorm, DailyMed, PubChem, MedlinePlus, PubMed, and ClinicalTrials.gov links.
- Searchable symptom database with body-system categories, tracking notes, urgency-context notes, MedlinePlus links, and dynamic detail pages.
- Searchable condition database with category summaries, tracking notes, MedlinePlus links, and dynamic detail pages.
- Medical terminology database with plain-language definitions, clinical context, source links, and dynamic detail pages.
- Combined medical library search across symptoms, conditions, terminology, medicines, and research links.
- NIH/NLM study-link categories related to listed medicines and conditions.
- Neon dark theme by default, light mode option, and green, blue, red, pink, and orange accents.
## Photo Credits
## Medicine Catalog Updates
- `Jogging Woman in Grass` by Mike Baird, CC BY 2.0.
- `Cycling in Amsterdam (893)` by FaceMePLS, CC BY-SA 2.0.
- `A large mixed salad` by Jmabel, CC BY-SA 4.0.
The medicine catalog ships with a curated starter set and the current SQLite snapshot includes thousands of imported medicine concepts. It can be refreshed from public sources.
From the admin dashboard, use the medicine source updater and choose `All sources`, `RxNorm`, `DailyMed`, or `openFDA`.
From the command line:
```sh
/Users/tyemeclifford/frankenphp php-cli scripts/update_medicine_catalog.php 1000 all
```
For periodic maintenance, run the same command nightly or weekly. The first argument is the max rows per source, from `25` to `5000`; the second argument is `all`, `RxNorm`, `DailyMed`, or `openFDA`.
## API
Main API endpoint:
```text
public/api.php
```
Useful actions:
- `GET api.php?action=state` - tracker/admin state payload.
- `GET api.php?action=library_search&q=chest&limit=20` - combined reference search.
- `POST api.php?action=create_user` - create a user profile from admin/tracker tools.
- `POST api.php?action=update_user` - update a user profile.
- `POST api.php?action=delete_user` - delete a user profile.
- `POST api.php?action=refresh_medication_sources` - refresh the medicine catalog from configured public sources.
The old `public_signup` action has been removed.
## Reference Sources
- MedlinePlus health topics, symptoms, conditions, labs, and drug information: `https://medlineplus.gov/`
- RxNorm and RxNav from the U.S. National Library of Medicine: `https://www.nlm.nih.gov/research/umls/rxnorm/index.html`
- DailyMed label search from the U.S. National Library of Medicine: `https://dailymed.nlm.nih.gov/dailymed/`
- PubChem chemical and compound search from NCBI: `https://pubchem.ncbi.nlm.nih.gov/`
- PubMed research search: `https://pubmed.ncbi.nlm.nih.gov/`
- ClinicalTrials.gov study search: `https://clinicaltrials.gov/`
- openFDA drug label data: `https://open.fda.gov/apis/drug/label/`
## Notes
- This project intentionally avoids a public signup funnel. Profiles are managed through `/admin.php` and `/tracker.php`.
- Dynamic detail pages use shared PHP endpoints and pull records from SQLite; individual medicine, symptom, condition, and term pages do not need to exist as separate files.
- Legacy workout, nutrition, and supplement tracker data remains in the schema as wellness context, but the public app focus is now medical tracking and reference lookup.