{"id":51841290,"url":"https://github.com/bcorfman/hosi-dashboard","last_synced_at":"2026-07-23T05:31:01.898Z","repository":{"id":368969761,"uuid":"1287658699","full_name":"bcorfman/hosi-dashboard","owner":"bcorfman","description":"An open-source dashboard that measures household stress, opportunity, and real-world economic capacity better than unemployment alone.","archived":false,"fork":false,"pushed_at":"2026-07-03T03:14:51.000Z","size":401,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T03:18:07.851Z","etag":null,"topics":["cost-of-living","data-visualization","economic-dashboard","economic-indicators","economic-mobility","fastapi","household-finance","labor-market","react"],"latest_commit_sha":null,"homepage":"https://bcorfman.github.io/hosi-dashboard/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bcorfman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-02T22:30:03.000Z","updated_at":"2026-07-03T03:14:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bcorfman/hosi-dashboard","commit_stats":null,"previous_names":["bcorfman/hosi-dashboard"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bcorfman/hosi-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcorfman%2Fhosi-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcorfman%2Fhosi-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcorfman%2Fhosi-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcorfman%2Fhosi-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bcorfman","download_url":"https://codeload.github.com/bcorfman/hosi-dashboard/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bcorfman%2Fhosi-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35791261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cost-of-living","data-visualization","economic-dashboard","economic-indicators","economic-mobility","fastapi","household-finance","labor-market","react"],"created_at":"2026-07-23T05:31:01.314Z","updated_at":"2026-07-23T05:31:01.892Z","avatar_url":"https://github.com/bcorfman.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HOSI Dashboard\n\n**The economy can look fine on paper while feeling broken in real life.**\n\nHOSI, the **Household Opportunity \u0026 Stress Index**, is an open-source dashboard built around a simple idea:\n\n**Headline unemployment tells you who kept a job. HOSI tries to tell you whether ordinary people can stay afloat, move up, and access the services the economy claims to provide.**\n\nTwo economies can post the same unemployment rate and still feel completely different.\n\nIn one, teenagers can get summer jobs, graduates can find paid internships, families can absorb a surprise bill, and businesses are actually staffed.\n\nIn the other, older workers keep their jobs, young adults can't break in, internships are unpaid, families are stretched thin, and businesses run permanently understaffed.\n\nTraditional topline statistics often blur that distinction.\n\nHOSI is built to make it visible.\n\n## What HOSI Measures\n\nHOSI starts from a `2019 average = 100` baseline.\n\n- Above `100` means conditions are more stressed than pre-pandemic normal.\n- Below `100` means conditions are less stressed than that baseline.\n\nThe current index combines four pillars:\n\n### 1. Financial Resilience\nCan a household actually absorb pressure?\n\n- personal saving rate\n- housing-payment burden proxy\n- credit-card delinquency\n- real median weekly earnings\n\n### 2. Opportunity\nCan people actually get in, move up, and switch jobs?\n\n- hires rate\n- quits rate\n- youth unemployment\n- U-6 unemployment\n\n### 3. Household Strain\nAre people patching together stability the hard way?\n\n- multiple jobholding\n\n### 4. Service Capacity\nIs the real economy staffed enough to deliver what it advertises?\n\n- leisure and hospitality employment\n- job openings pressure\n\nThis is still version one. The long-term vision is broader:\n\n- entry-level job access\n- paid vs unpaid internships\n- applicant pressure for first jobs\n- service availability signals\n- behavioral confidence measures like delayed household decisions\n\n## Why This Exists\n\nMost people do not experience the economy as a spreadsheet.\n\nThey experience it as questions:\n\n- Can my kid get a summer job?\n- Can a recent graduate find a real first step?\n- Can I switch jobs without falling backward?\n- Can a family handle rent, insurance, food, and debt at the same time?\n- Are businesses actually open at the capacity they advertise?\n\nHOSI is an attempt to measure that lived economic ecosystem better than unemployment alone.\n\n## What You Get\n\n- A React + TypeScript frontend deployable to GitHub Pages\n- A FastAPI backend deployable to Railway\n- DuckDB + Parquet data artifacts for reproducible snapshots\n- Monthly ETL against official public data\n- Clear source notes and methodology endpoints\n- A test stack with unit tests, Storybook tests, and Playwright smoke coverage\n\n## Current Data Sources\n\nCurrent automated inputs come from official public releases, mainly through stable FRED series access:\n\n- `PSAVERT` personal saving rate\n- `MDSP` mortgage debt service payments ratio\n- `DRCCLACBS` credit-card delinquency rate\n- `LEU0252881600Q` real median weekly earnings\n- `JTSHIR` hires rate\n- `JTSQUR` quits rate\n- `LNS14024887` youth unemployment rate, ages 16-24\n- `U6RATE` broad underemployment / labor underutilization\n- `LNS12026620` multiple jobholders as a share of employed\n- `USLAH` leisure and hospitality employment\n- `JTUJOR` job openings rate\n\n## Important Caveats\n\n- HOSI is experimental. It is not an official government statistic.\n- Higher values mean more stress, not “better performance.”\n- Service-capacity pressure currently uses labor-market proxies, not direct operational wait-time or availability data.\n- Housing affordability currently uses the official `MDSP` proxy because the FRED-hosted NAR fixed HAI history is too short for a reproducible automated `2019 = 100` workflow.\n- Quarterly series are carried into monthly output so the dashboard can present a unified monthly view.\n\n## Local Setup\n\n### Backend\n\n```bash\ncd backend\nuv venv\n. .venv/bin/activate\nuv pip install -e .[dev]\npython -m etl.build_hosi\nuvicorn app.main:app --reload\n```\n\n### Frontend\n\n```bash\ncd frontend\nnpm install\nVITE_API_BASE=http://127.0.0.1:8000 npm run dev\n```\n\n## Test Commands\n\n### Backend\n\n```bash\ncd backend\n. .venv/bin/activate\npytest\n```\n\n### Frontend\n\n```bash\ncd frontend\nnpm run test:unit\nnpm run test:stories\nnpm run test:e2e:smoke\n```\n\n## API\n\n- `GET /api/hosi/latest`\n- `GET /api/hosi/timeseries`\n- `GET /api/components`\n- `GET /api/sources`\n- `GET /api/methodology`\n\n## Deployment\n\n### Railway Backend\n\nConfigure a Railway service with:\n\n- source repo: `bcorfman/hosi-dashboard`\n- branch: `main`\n- root directory: `/backend`\n- config file: [backend/railway.toml](/home/bcorfman/dev/hosi-dashboard/backend/railway.toml)\n- public networking port: `8000`\n- wait for CI: enabled\n\nOnce deployed, verify:\n\n- `/health`\n- `/api/hosi/latest`\n\n### GitHub Pages Frontend\n\nSet the repository variable `VITE_API_BASE` to the Railway backend URL, then deploy the Pages workflow from `main`.\n\nThe Pages job is intentionally skipped until `VITE_API_BASE` exists so the site does not publish with a dead API target.\n\n## Extend It\n\nThe current registry is in [backend/app/services/methodology.py](/home/bcorfman/dev/hosi-dashboard/backend/app/services/methodology.py).\n\nThat makes HOSI easy to extend with future indicators like:\n\n- internship pay\n- entry-level hiring friction\n- time-to-first-job\n- customer wait times\n- service availability\n- household confidence behaviors\n\nIf unemployment mostly measures retention, HOSI is an attempt to measure **mobility, resilience, strain, and real-world economic capacity**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcorfman%2Fhosi-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbcorfman%2Fhosi-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbcorfman%2Fhosi-dashboard/lists"}