Spaces:
Running
Running
Publish grant workbench demo with real grant data
Browse files- README.md +51 -5
- all_grants_database.csv +0 -0
- all_grants_database.html +0 -0
- data/federal_grants_gov_opportunities.csv +0 -0
- data/grant_universe.csv +0 -0
- data/grant_universe.jsonl +0 -0
- data/grant_universe_summary.json +39 -0
- data/source_gaps.csv +11 -0
- data/source_receipts_public.csv +0 -0
- data/state_grant_source_registry.csv +52 -0
- data/state_grant_sources.csv +0 -0
- demo_manifest.json +73 -0
- index.html +919 -17
README.md
CHANGED
|
@@ -1,10 +1,56 @@
|
|
| 1 |
---
|
| 2 |
-
title: Grant Workbench Demo
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
colorTo: gray
|
| 6 |
sdk: static
|
|
|
|
|
|
|
| 7 |
pinned: false
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Cedar Ridge Heritage Museum Grant Workbench Demo
|
| 3 |
+
colorFrom: green
|
| 4 |
+
colorTo: blue
|
|
|
|
| 5 |
sdk: static
|
| 6 |
+
app_file: index.html
|
| 7 |
+
fullWidth: true
|
| 8 |
pinned: false
|
| 9 |
+
tags:
|
| 10 |
+
- grants
|
| 11 |
+
- museums
|
| 12 |
+
- nonprofits
|
| 13 |
+
- civic-data
|
| 14 |
+
- static-html
|
| 15 |
---
|
| 16 |
|
| 17 |
+
# Cedar Ridge Heritage Museum Grant Workbench Demo
|
| 18 |
+
|
| 19 |
+
Demo profile. Not submitted. Not legal/financial advice. Built as a showcase for how I help small museums/nonprofits move from organization facts to missing questions, draft-safe packet fields, and human signoff.
|
| 20 |
+
|
| 21 |
+
Output: a grant shortlist, fit notes, missing-question checklist, draft-safe answer bank, and source links.
|
| 22 |
+
|
| 23 |
+
The primary page is `index.html`. The supporting grant database is copied into this Space as `all_grants_database.html` and `all_grants_database.csv`.
|
| 24 |
+
|
| 25 |
+
The `data/` folder includes the real source snapshot behind the demo:
|
| 26 |
+
|
| 27 |
+
- `data/grant_universe.csv`
|
| 28 |
+
- `data/grant_universe.jsonl`
|
| 29 |
+
- `data/federal_grants_gov_opportunities.csv`
|
| 30 |
+
- `data/state_grant_sources.csv`
|
| 31 |
+
- `data/state_grant_source_registry.csv`
|
| 32 |
+
- `data/source_gaps.csv`
|
| 33 |
+
- `data/source_receipts_public.csv` with local cache paths removed
|
| 34 |
+
- `data/grant_universe_summary.json`
|
| 35 |
+
|
| 36 |
+
## Included Grant Database
|
| 37 |
+
|
| 38 |
+
- Total rows: 1,912
|
| 39 |
+
- Grants.gov federal opportunities: 1,234
|
| 40 |
+
- State official grant/funding source rows: 627
|
| 41 |
+
- State directory rows: 51
|
| 42 |
+
- Rows with due dates: 769
|
| 43 |
+
|
| 44 |
+
## Caveats
|
| 45 |
+
|
| 46 |
+
Federal rows are Grants.gov opportunities. State rows include official grant/funding source pages and portals; they are not a perfect parse of every individual state opportunity. Always verify all funder details before using any deadline, eligibility, amount, or application instruction.
|
| 47 |
+
|
| 48 |
+
The static Space does not run real public lookup, IRS lookup, SAM lookup, scraping, API calls, or user-entered organization processing. The machine may draft, gather, map, prefill, and flag; a human must certify, approve, and submit.
|
| 49 |
+
|
| 50 |
+
## Source Notes
|
| 51 |
+
|
| 52 |
+
- Federal search documentation: https://grants.gov/api/common/search2
|
| 53 |
+
- Federal search endpoint used by the source snapshot: https://api.grants.gov/v1/api/search2
|
| 54 |
+
- State government directory seed: https://www.usa.gov/state-governments
|
| 55 |
+
|
| 56 |
+
Generated UTC: 2026-05-14T16:15:14+00:00
|
all_grants_database.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
all_grants_database.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/federal_grants_gov_opportunities.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/grant_universe.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/grant_universe.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/grant_universe_summary.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": "grant_universe_v0_1",
|
| 3 |
+
"generated_utc": "2026-05-14T14:03:13+00:00",
|
| 4 |
+
"summary": {
|
| 5 |
+
"row_count": 1912,
|
| 6 |
+
"federal_opportunity_count": 1234,
|
| 7 |
+
"federal_reported_hit_count": 1234,
|
| 8 |
+
"federal_detail_fetched_count": 300,
|
| 9 |
+
"state_directory_count": 51,
|
| 10 |
+
"state_source_count": 627,
|
| 11 |
+
"states_with_sources": 51,
|
| 12 |
+
"state_batches_completed": 51,
|
| 13 |
+
"state_workers": 12,
|
| 14 |
+
"due_date_count": 769,
|
| 15 |
+
"source_receipt_count": 691,
|
| 16 |
+
"source_gap_count": 10,
|
| 17 |
+
"runtime_awareness_artifacts_present": 1
|
| 18 |
+
},
|
| 19 |
+
"coverage": {
|
| 20 |
+
"federal": "Broad Grants.gov search2 collection for configured statuses and funding instruments; no applicant-fit screening.",
|
| 21 |
+
"state": "All 50 states plus DC are represented as USA.gov source-directory seeds. Batched state discovery crawls official state pages in parallel and adds grant/funding source pages when found; state opportunity harvesting is still source-dependent."
|
| 22 |
+
},
|
| 23 |
+
"config": {
|
| 24 |
+
"include_federal": true,
|
| 25 |
+
"include_state_directory": true,
|
| 26 |
+
"include_state_source_discovery": true,
|
| 27 |
+
"state_codes": [],
|
| 28 |
+
"state_workers": 12,
|
| 29 |
+
"state_max_pages_per_state": 7,
|
| 30 |
+
"state_max_links_per_state": 40,
|
| 31 |
+
"keyword": "",
|
| 32 |
+
"opp_statuses": "forecasted|posted",
|
| 33 |
+
"funding_instruments": "G",
|
| 34 |
+
"rows_per_page": 100,
|
| 35 |
+
"max_federal_records": 0,
|
| 36 |
+
"max_federal_details": 300
|
| 37 |
+
},
|
| 38 |
+
"report_hash": "a26614b9b3e687b1a93e95e7c594b788ed2d21633dbd4be74c56430b0597ac9a"
|
| 39 |
+
}
|
data/source_gaps.csv
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gap_id,gap_type,severity,url,reason,context,gap_hash
|
| 2 |
+
gap_7cc442863b5f9ca5,federal_detail_fetch_cap,coverage,https://api.grants.gov/v1/api/fetchOpportunity,Grants.gov search returned 1234 opportunity ids; detail fetch was capped at 300. Search-level rows remain included in the database.,"{""detail_limit"": 300, ""included_search_rows"": 1234}",4f4802d5fef7692579a191e246de6b1e64eb15d124671d4931eca28dbf9e4d04
|
| 3 |
+
gap_b47a37627770bc7d,state_candidate_fetch_failed,source,https://www.alabama.gov/,URLError:,"{""state"": ""AL""}",ac964d0e6ce067c03bc06e482c18ef70a6644e094f829821b6843a54096c81db
|
| 4 |
+
gap_490ea8269188d297,state_candidate_fetch_failed,source,https://www.alabama.gov/grants,URLError:,"{""state"": ""AL""}",ceee8e13acc246b6e97453c0e7905bb95c071405c8a517984716133fe64b6754
|
| 5 |
+
gap_2b2110c326fa5b45,state_candidate_fetch_failed,source,https://www.alabama.gov/grant,URLError:,"{""state"": ""AL""}",10e76da4fd4cddaf2e7b5f636045cbe2fdfacd796ea774991dc40ab86965d118
|
| 6 |
+
gap_1df08694d0f0b9ae,state_candidate_fetch_failed,source,https://www.alabama.gov/grants-and-funding,URLError:,"{""state"": ""AL""}",60770851571fea2d071ccc88c713f2f8d5be86c650ef5bfb56bd2b848ca5db1b
|
| 7 |
+
gap_45932313aca014b2,state_candidate_fetch_failed,source,https://www.alabama.gov/funding,URLError:,"{""state"": ""AL""}",9db40ed0b6fc1a05140e1f88d364a7c2f7fb21c354129d1eb77293c237155245
|
| 8 |
+
gap_d0a269cc2df287f0,state_candidate_fetch_failed,source,https://www.alabama.gov/funding-opportunities,URLError:,"{""state"": ""AL""}",9074e6cb80fa604efcfb22b68e8d6a0c412924c29df7325bbaab4db61c6859f5
|
| 9 |
+
gap_31add535bca7fe13,state_candidate_fetch_failed,source,https://www.tn.gov/generalservices/procurement/central-procurement-office--cpo-/library-/grant-funding-information.html,URLError:,"{""state"": ""TN""}",10b41b6ce9730a7ac3953fe8b4bbdc26d885d53b335fb726639551a87f3c4189
|
| 10 |
+
gap_a57aa83ccd821555,state_candidate_fetch_failed,source,https://www.tn.gov/,URLError:,"{""state"": ""TN""}",5a88a28958fbb60ea2839bda300452d165bc0029b420fbcd43b3487a114c8b12
|
| 11 |
+
gap_e2313f4ca71c39a1,state_grant_collectors_pending,coverage,https://www.usa.gov/state-governments,"State directory rows are source seeds, not complete state grant opportunity rows. Batched source discovery adds official state grant pages when found.","{""state_directory_rows"": 51}",7f584174c8b5cfb28045b4ac947f33a2290a905c6e296d1e5e8b599ea6569bec
|
data/source_receipts_public.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/state_grant_source_registry.csv
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
universe_id,source_type,source_system,scope,state,state_name,title,funder,agency,agency_code,opportunity_id,opportunity_number,status,document_type,posted_date,due_date,due_date_note,date_confidence,funding_instruments,funding_categories,eligible_applicants,aln,award_floor,award_ceiling,estimated_total_funding,expected_awards,cost_sharing,description,detail_fetched,coverage_status,collector_note,source_url,api_url,source_query,first_seen_utc,last_checked_utc,amount_summary,source_hash
|
| 2 |
+
state_directory_al,state_directory,USA.gov State Governments Directory,state,AL,Alabama,Alabama state grant source intake,Alabama state government,Alabama state government,AL,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/alabama,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,0d7783c4bc94d3b8f6b38afbf9ecf7bf5285245764bb6bf59433c7034017eaa6
|
| 3 |
+
state_directory_ak,state_directory,USA.gov State Governments Directory,state,AK,Alaska,Alaska state grant source intake,Alaska state government,Alaska state government,AK,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/alaska,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,fc0d46d79a709e49a537f112bacce458e2192830c928f253ef5d68f63ffddbc5
|
| 4 |
+
state_directory_az,state_directory,USA.gov State Governments Directory,state,AZ,Arizona,Arizona state grant source intake,Arizona state government,Arizona state government,AZ,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/arizona,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,70bb015ceb485551ac2925a39c8eae001d952c3afcdcb6265e598fb64010d9e4
|
| 5 |
+
state_directory_ar,state_directory,USA.gov State Governments Directory,state,AR,Arkansas,Arkansas state grant source intake,Arkansas state government,Arkansas state government,AR,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/arkansas,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,eb8ed06bb28e1d742ea6f2b74b39b371abed6bb97eb0ed3a813c8c49b5e89ce1
|
| 6 |
+
state_directory_ca,state_directory,USA.gov State Governments Directory,state,CA,California,California state grant source intake,California state government,California state government,CA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/california,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,8abba7899e3581f5fb308ad6adfe3140e0f669ff48708803217bb22b2c1a1900
|
| 7 |
+
state_directory_co,state_directory,USA.gov State Governments Directory,state,CO,Colorado,Colorado state grant source intake,Colorado state government,Colorado state government,CO,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/colorado,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,d11dd8aa8a774f2f553973834f794ff15e058402e9a1bedf0ce8091c1522d292
|
| 8 |
+
state_directory_ct,state_directory,USA.gov State Governments Directory,state,CT,Connecticut,Connecticut state grant source intake,Connecticut state government,Connecticut state government,CT,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/connecticut,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,86ef0f85403b32d5898428a6f501b9ab69e85ca74bbf01957dbdde2f08125d67
|
| 9 |
+
state_directory_de,state_directory,USA.gov State Governments Directory,state,DE,Delaware,Delaware state grant source intake,Delaware state government,Delaware state government,DE,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/delaware,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,f715875c9ae9d90dac10c3d4159f59abd314bc8a71a38d7d2259512b279bab2a
|
| 10 |
+
state_directory_dc,state_directory,USA.gov State Governments Directory,state,DC,District of Columbia,District of Columbia state grant source intake,District of Columbia state government,District of Columbia state government,DC,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/district-of-columbia,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,274a7b4a4e7bb057a19b84bc116129e65e077fd1b1d224a994cd9b33212a71ba
|
| 11 |
+
state_directory_fl,state_directory,USA.gov State Governments Directory,state,FL,Florida,Florida state grant source intake,Florida state government,Florida state government,FL,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/florida,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,d19dd71b8e49a5541dbfe675aeaddaa5d3539cc2883e3d526c49b05b2d916335
|
| 12 |
+
state_directory_ga,state_directory,USA.gov State Governments Directory,state,GA,Georgia,Georgia state grant source intake,Georgia state government,Georgia state government,GA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/georgia,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,30268ef34c57bbdcf05e4d5b508668d5127d7aef246d1aa63d04d53a7174396a
|
| 13 |
+
state_directory_hi,state_directory,USA.gov State Governments Directory,state,HI,Hawaii,Hawaii state grant source intake,Hawaii state government,Hawaii state government,HI,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/hawaii,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,6b577961ad6ee4f2205133f8c13ffc192242e20f481b96a78d46f8194b6359ac
|
| 14 |
+
state_directory_id,state_directory,USA.gov State Governments Directory,state,ID,Idaho,Idaho state grant source intake,Idaho state government,Idaho state government,ID,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/idaho,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,f45dd878858508e017aaf2f49fcffc90dc09eeaa83bd2ed3a73d5a7ab7272db6
|
| 15 |
+
state_directory_il,state_directory,USA.gov State Governments Directory,state,IL,Illinois,Illinois state grant source intake,Illinois state government,Illinois state government,IL,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/illinois,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,8e9e80e353eab9c26af3ee086dc9cc4a5aad2191e9872ef04834924e6c3e93d3
|
| 16 |
+
state_directory_in,state_directory,USA.gov State Governments Directory,state,IN,Indiana,Indiana state grant source intake,Indiana state government,Indiana state government,IN,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/indiana,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,5b2664e93e3a13123574014e5f5aa51c2b00b064e0645a57737173a5bd2fb057
|
| 17 |
+
state_directory_ia,state_directory,USA.gov State Governments Directory,state,IA,Iowa,Iowa state grant source intake,Iowa state government,Iowa state government,IA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/iowa,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,b12f904713f01317deee01e7a3639ec4d07ac7e0e5fdc132efde99f70987951f
|
| 18 |
+
state_directory_ks,state_directory,USA.gov State Governments Directory,state,KS,Kansas,Kansas state grant source intake,Kansas state government,Kansas state government,KS,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/kansas,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,849132a88745412fe69fd958138e4e08278b19e1cc74784ce58894eddca715d3
|
| 19 |
+
state_directory_ky,state_directory,USA.gov State Governments Directory,state,KY,Kentucky,Kentucky state grant source intake,Kentucky state government,Kentucky state government,KY,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/kentucky,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,83cd1c3cbde543bae6e3da2f092c045526a33e2410c11b870bed4366e0d894fd
|
| 20 |
+
state_directory_la,state_directory,USA.gov State Governments Directory,state,LA,Louisiana,Louisiana state grant source intake,Louisiana state government,Louisiana state government,LA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/louisiana,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,262566480667f510fea87d840ea12d6eb1b2ed4cc3ab5a767b24d0817efe11fe
|
| 21 |
+
state_directory_me,state_directory,USA.gov State Governments Directory,state,ME,Maine,Maine state grant source intake,Maine state government,Maine state government,ME,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/maine,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,00c0991b740b0ea4eeadc50e134c3855f588e4d8d4dd54e596c117e871a71ef7
|
| 22 |
+
state_directory_md,state_directory,USA.gov State Governments Directory,state,MD,Maryland,Maryland state grant source intake,Maryland state government,Maryland state government,MD,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/maryland,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,7041fa51d2f6064a1c7652a98d3a9693168379c1752fb62d8da302cdea49faaa
|
| 23 |
+
state_directory_ma,state_directory,USA.gov State Governments Directory,state,MA,Massachusetts,Massachusetts state grant source intake,Massachusetts state government,Massachusetts state government,MA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/massachusetts,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,ebab7e6bda4b45c265c7df28f3bdd1081b45c965e4f75922b12f9502436da8cc
|
| 24 |
+
state_directory_mi,state_directory,USA.gov State Governments Directory,state,MI,Michigan,Michigan state grant source intake,Michigan state government,Michigan state government,MI,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/michigan,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,b34770ac3fc11dd3b5b921108a38dceb28282fb4be5a0cfe6f444df2dd2bc73d
|
| 25 |
+
state_directory_mn,state_directory,USA.gov State Governments Directory,state,MN,Minnesota,Minnesota state grant source intake,Minnesota state government,Minnesota state government,MN,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/minnesota,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,37ccad6a190135c7867bea5dd94062dacf772d3401986e7898643ff6465877bc
|
| 26 |
+
state_directory_ms,state_directory,USA.gov State Governments Directory,state,MS,Mississippi,Mississippi state grant source intake,Mississippi state government,Mississippi state government,MS,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/mississippi,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,a9ea613329a92971c7c6abf0435473ba2a434dffcfa36e0e607b109c1531d210
|
| 27 |
+
state_directory_mo,state_directory,USA.gov State Governments Directory,state,MO,Missouri,Missouri state grant source intake,Missouri state government,Missouri state government,MO,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/missouri,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,a4d1e300f1bc601e1ac2fe8cd584670d3b97209a87943780d498abf294f76b20
|
| 28 |
+
state_directory_mt,state_directory,USA.gov State Governments Directory,state,MT,Montana,Montana state grant source intake,Montana state government,Montana state government,MT,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/montana,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,24eb65bfe189546fb1765176ab04b635c926835ef0f8f294d603d7e1c90987e1
|
| 29 |
+
state_directory_ne,state_directory,USA.gov State Governments Directory,state,NE,Nebraska,Nebraska state grant source intake,Nebraska state government,Nebraska state government,NE,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/nebraska,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,654ffa662a56a62ec2f8b7f6a60a67a2e3ed854ae6289f7e098a94b212a2999c
|
| 30 |
+
state_directory_nv,state_directory,USA.gov State Governments Directory,state,NV,Nevada,Nevada state grant source intake,Nevada state government,Nevada state government,NV,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/nevada,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,b9ee708e4cb93ea912636f160e9afd6e9c012d23b8829f2182b2361297b1292f
|
| 31 |
+
state_directory_nh,state_directory,USA.gov State Governments Directory,state,NH,New Hampshire,New Hampshire state grant source intake,New Hampshire state government,New Hampshire state government,NH,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/new-hampshire,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,86690687f2b9d866a1c6c63dbae043341622b4cf7cf5e6757d226c5a2a90814a
|
| 32 |
+
state_directory_nj,state_directory,USA.gov State Governments Directory,state,NJ,New Jersey,New Jersey state grant source intake,New Jersey state government,New Jersey state government,NJ,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/new-jersey,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,b08ca7bdcd55451f578e3d39bb849fa0bd67f60f674cf0cf7b23b41814ed94bf
|
| 33 |
+
state_directory_nm,state_directory,USA.gov State Governments Directory,state,NM,New Mexico,New Mexico state grant source intake,New Mexico state government,New Mexico state government,NM,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/new-mexico,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,dde71476f39e6f71639015d0bfab561b297c0956e2faff12e2daa9d656c848c8
|
| 34 |
+
state_directory_ny,state_directory,USA.gov State Governments Directory,state,NY,New York,New York state grant source intake,New York state government,New York state government,NY,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/new-york,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,ebdfa25ba19a91059bb7bb2ae46df2074a9114cbdf9b1fc5be4d9be09c4108ab
|
| 35 |
+
state_directory_nc,state_directory,USA.gov State Governments Directory,state,NC,North Carolina,North Carolina state grant source intake,North Carolina state government,North Carolina state government,NC,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/north-carolina,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,45dd481d2d85afc880bd1a2518b65deafaee821936b6bf96d6bca010f20ffb3f
|
| 36 |
+
state_directory_nd,state_directory,USA.gov State Governments Directory,state,ND,North Dakota,North Dakota state grant source intake,North Dakota state government,North Dakota state government,ND,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/north-dakota,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,5d2a24828697ec492a5da44612db0d3eda5055320271548096b4277c5609ce44
|
| 37 |
+
state_directory_oh,state_directory,USA.gov State Governments Directory,state,OH,Ohio,Ohio state grant source intake,Ohio state government,Ohio state government,OH,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/ohio,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,ceeffb79a9f72e209fc89821ca533f7cfef28abc554abc57e862ed0e8a57cfc9
|
| 38 |
+
state_directory_ok,state_directory,USA.gov State Governments Directory,state,OK,Oklahoma,Oklahoma state grant source intake,Oklahoma state government,Oklahoma state government,OK,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/oklahoma,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,3679b236e459cc5795f1c899cf20ed2f7041c082b301f093edb2668da660e82b
|
| 39 |
+
state_directory_or,state_directory,USA.gov State Governments Directory,state,OR,Oregon,Oregon state grant source intake,Oregon state government,Oregon state government,OR,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/oregon,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,a2120b47044ae66df016ec341934ac947c8c23e2b8e56c1b603b43d81091b328
|
| 40 |
+
state_directory_pa,state_directory,USA.gov State Governments Directory,state,PA,Pennsylvania,Pennsylvania state grant source intake,Pennsylvania state government,Pennsylvania state government,PA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/pennsylvania,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,6e5ff6d3f3ba66cd0c1e260b4d377c9532c5da00f57894e2230b175560dbc387
|
| 41 |
+
state_directory_ri,state_directory,USA.gov State Governments Directory,state,RI,Rhode Island,Rhode Island state grant source intake,Rhode Island state government,Rhode Island state government,RI,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/rhode-island,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,10d8ba17464b826feb4098de4d8340d858d1562b5a3f581f7a7166b1802be340
|
| 42 |
+
state_directory_sc,state_directory,USA.gov State Governments Directory,state,SC,South Carolina,South Carolina state grant source intake,South Carolina state government,South Carolina state government,SC,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/south-carolina,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,4721d1052b184c19652edf5e0ec239c682cf22bbe46e91487f5d8cce9e2e58e5
|
| 43 |
+
state_directory_sd,state_directory,USA.gov State Governments Directory,state,SD,South Dakota,South Dakota state grant source intake,South Dakota state government,South Dakota state government,SD,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/south-dakota,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,5407c6ddd3a25a9e8688834b3cf946aea003d2a376734802408a7a5a513ff184
|
| 44 |
+
state_directory_tn,state_directory,USA.gov State Governments Directory,state,TN,Tennessee,Tennessee state grant source intake,Tennessee state government,Tennessee state government,TN,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/tennessee,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,9eb6f0d3a56b124d76cff9cd4a9177978bef506d7797273007e0814a4a217411
|
| 45 |
+
state_directory_tx,state_directory,USA.gov State Governments Directory,state,TX,Texas,Texas state grant source intake,Texas state government,Texas state government,TX,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/texas,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,76e48074a15f8630edc7e584969d3b7c82dc4b2cb9ecac7685d09f37b3bbce00
|
| 46 |
+
state_directory_ut,state_directory,USA.gov State Governments Directory,state,UT,Utah,Utah state grant source intake,Utah state government,Utah state government,UT,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/utah,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,fa3e21e57e22f6969f006797cda9bddcbb0c1a046a73a57659036c816995f748
|
| 47 |
+
state_directory_vt,state_directory,USA.gov State Governments Directory,state,VT,Vermont,Vermont state grant source intake,Vermont state government,Vermont state government,VT,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/vermont,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,5f026f706d91dfae6e85f36ef5a7c394c0fa911ed4f65e4bb581e2c8a3cc4bd5
|
| 48 |
+
state_directory_va,state_directory,USA.gov State Governments Directory,state,VA,Virginia,Virginia state grant source intake,Virginia state government,Virginia state government,VA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/virginia,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,1818ce11322bdee50bb1f8c0ae1959b4e04815ae04f5b7246210dfaae7e85e0a
|
| 49 |
+
state_directory_wa,state_directory,USA.gov State Governments Directory,state,WA,Washington,Washington state grant source intake,Washington state government,Washington state government,WA,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/washington,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,e5e678c041736f30b04b8820f24f0f80d71187c51e1e617c428bcee4821473a4
|
| 50 |
+
state_directory_wv,state_directory,USA.gov State Governments Directory,state,WV,West Virginia,West Virginia state grant source intake,West Virginia state government,West Virginia state government,WV,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/west-virginia,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,10116dbc7eca5fc21a690866e863fed9440f38698fe7eafe1da16be0d60468d1
|
| 51 |
+
state_directory_wi,state_directory,USA.gov State Governments Directory,state,WI,Wisconsin,Wisconsin state grant source intake,Wisconsin state government,Wisconsin state government,WI,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/wisconsin,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,f04782001056ecd0e699f93db5b78717668cfa6ae75173c8525b6d62dd7e5f69
|
| 52 |
+
state_directory_wy,state_directory,USA.gov State Governments Directory,state,WY,Wyoming,Wyoming state grant source intake,Wyoming state government,Wyoming state government,WY,,,source_registry,state_directory_seed,,,state-specific collector needed,not_a_grant_row,,,,,,,,,,State grant opportunities are not centralized in one official API; this row reserves the state source slot for state-specific collection.,not_applicable,source_registry_only,Directory seed only. Add a state-specific collector or state grant import before treating this as grant coverage.,https://www.usa.gov/states/wyoming,https://www.usa.gov/state-governments,usa_gov_state_directory,2026-05-14T14:03:13+00:00,2026-05-14T14:03:13+00:00,,546673049de9470b955d721a82c04ae1ffe49f15f063df5aad7004f807670bf2
|
data/state_grant_sources.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
demo_manifest.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": "grant_workbench_showcase_space_v0_1",
|
| 3 |
+
"generated_utc": "2026-05-14T16:15:14+00:00",
|
| 4 |
+
"demo_profile": true,
|
| 5 |
+
"org_first_flow": true,
|
| 6 |
+
"demo_profile_lookup_only": true,
|
| 7 |
+
"human_only_certification": true,
|
| 8 |
+
"public_status": "ready_for_hf_space_upload",
|
| 9 |
+
"organization": "Cedar Ridge Heritage Museum",
|
| 10 |
+
"organization_status": "made_up_small_heritage_museum",
|
| 11 |
+
"field_status_counts": {
|
| 12 |
+
"green": 3,
|
| 13 |
+
"yellow": 3,
|
| 14 |
+
"red": 3,
|
| 15 |
+
"black_lock": 2
|
| 16 |
+
},
|
| 17 |
+
"source_grant_universe_run_name": "grant_universe_all_federal_all_states_parallel_20260514T",
|
| 18 |
+
"source_grant_universe_generated_utc": "2026-05-14T14:03:13+00:00",
|
| 19 |
+
"included_files": [
|
| 20 |
+
"README.md",
|
| 21 |
+
"index.html",
|
| 22 |
+
"demo_manifest.json",
|
| 23 |
+
"all_grants_database.html",
|
| 24 |
+
"all_grants_database.csv",
|
| 25 |
+
"data/grant_universe.csv",
|
| 26 |
+
"data/grant_universe.jsonl",
|
| 27 |
+
"data/federal_grants_gov_opportunities.csv",
|
| 28 |
+
"data/state_grant_sources.csv",
|
| 29 |
+
"data/state_grant_source_registry.csv",
|
| 30 |
+
"data/source_gaps.csv",
|
| 31 |
+
"data/source_receipts_public.csv",
|
| 32 |
+
"data/grant_universe_summary.json"
|
| 33 |
+
],
|
| 34 |
+
"grant_database_counts": {
|
| 35 |
+
"row_count": 1912,
|
| 36 |
+
"federal_opportunity_count": 1234,
|
| 37 |
+
"state_source_count": 627,
|
| 38 |
+
"state_directory_count": 51,
|
| 39 |
+
"due_date_count": 769,
|
| 40 |
+
"states_with_sources": 51
|
| 41 |
+
},
|
| 42 |
+
"copied_file_sha256": {
|
| 43 |
+
"README.md": "4d0682d6b21ab289623625db5bb24496b9d88c98e5c10eb43378eb52c7a44a97",
|
| 44 |
+
"index.html": "cd2f07dfe044b44e5c028c8bb440a020e222f4fcc9a55bfbcbe52cec8e0f03a4",
|
| 45 |
+
"demo_manifest.json": "57297ea0c2c88f337170a330ab2f9fdeec4f0f9bf205d27093ab88efe1357acb",
|
| 46 |
+
"all_grants_database.html": "79150694daa02eac8598d884603da633dfe833381bf4bbed1c4ec65a9aeeb76c",
|
| 47 |
+
"all_grants_database.csv": "68caf3e4e54addef0800464f62ecdab4ccee9b97688b41e4a2ee7da9247f9cd4",
|
| 48 |
+
"data/grant_universe.csv": "68caf3e4e54addef0800464f62ecdab4ccee9b97688b41e4a2ee7da9247f9cd4",
|
| 49 |
+
"data/grant_universe.jsonl": "1567c79a781046bfd63a438b164e44c9b6f6c932efa258d33f84c11d580642e2",
|
| 50 |
+
"data/federal_grants_gov_opportunities.csv": "5cf3390117e130e728eea0aca66750e210f325770461da0a43a51fd84a1a8dc1",
|
| 51 |
+
"data/state_grant_sources.csv": "1a49f81096279045517b23ff906129451c462ae0acbc839e35a1d083c47a348b",
|
| 52 |
+
"data/state_grant_source_registry.csv": "8ae86a1b00daa135d2789e55a55a24b05d0c404dca7f5c627731d17d24fad3fe",
|
| 53 |
+
"data/source_gaps.csv": "5890aec2d1831ed6c09e787daaa1b2987bcd2218861ec448a638c6f2aa117e66",
|
| 54 |
+
"data/source_receipts_public.csv": "3bbed8675138c2a4a981185fee9533fbe3300ab9d26500b910f6bb27e2908e9e",
|
| 55 |
+
"data/grant_universe_summary.json": "f794b4ae9a8f84f7ceebbbee208a957640cfcdecc3d0ba77fe5fc22088eedf4d"
|
| 56 |
+
},
|
| 57 |
+
"caveats": [
|
| 58 |
+
"The workbench organization, staff, project, budget, deadlines, PDF decisions, and tracker rows use a sample demo profile.",
|
| 59 |
+
"The grant database files are copied from the latest selected official-source grant-universe snapshot.",
|
| 60 |
+
"Federal rows are Grants.gov opportunities.",
|
| 61 |
+
"State rows include official grant/funding source pages and portals, not a perfect parse of every individual opportunity for every state.",
|
| 62 |
+
"This is not submitted, not legal/financial advice, and all funder details must be verified before use."
|
| 63 |
+
],
|
| 64 |
+
"ui_updated_utc": "2026-05-19T16:29:13+00:00",
|
| 65 |
+
"ui_update_note": "Interface layer updated for clearer complex-data review; CSV data rows unchanged.",
|
| 66 |
+
"ui_file_sha256": {
|
| 67 |
+
"index.html": "ed3eeebf0235e03472ee62f50b702cd6830b2920a5d305eea3f320d6c4df0e37",
|
| 68 |
+
"all_grants_database.html": "79150694daa02eac8598d884603da633dfe833381bf4bbed1c4ec65a9aeeb76c"
|
| 69 |
+
},
|
| 70 |
+
"output_promise": "grant shortlist, fit notes, missing-question checklist, draft-safe answer bank, and source links",
|
| 71 |
+
"data_public_receipts_note": "source_receipts_public.csv removes local cache path fields from the internal receipt export.",
|
| 72 |
+
"manifest_hash": "f4759346be0d2d251ad3327041075ca4722e448cf5b588b571b5ca75727494e9"
|
| 73 |
+
}
|
index.html
CHANGED
|
@@ -1,19 +1,921 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<title>Cedar Ridge Heritage Museum Grant Workbench Demo</title>
|
| 7 |
+
<style>
|
| 8 |
+
:root {
|
| 9 |
+
--ink: #1b2426;
|
| 10 |
+
--muted: #5a666a;
|
| 11 |
+
--line: #d8dfdd;
|
| 12 |
+
--paper: #fbfbf7;
|
| 13 |
+
--panel: #ffffff;
|
| 14 |
+
--green: #256f5d;
|
| 15 |
+
--green-soft: #e8f4ef;
|
| 16 |
+
--yellow: #a96f16;
|
| 17 |
+
--yellow-soft: #fff4db;
|
| 18 |
+
--red: #9a3535;
|
| 19 |
+
--red-soft: #fdeceb;
|
| 20 |
+
--black: #17191a;
|
| 21 |
+
--blue: #2f5f89;
|
| 22 |
+
--blue-soft: #e9f1f8;
|
| 23 |
+
--steel: #425667;
|
| 24 |
+
--steel-soft: #edf2f5;
|
| 25 |
+
--violet: #66527a;
|
| 26 |
+
--violet-soft: #f2eef7;
|
| 27 |
+
}
|
| 28 |
+
* { box-sizing: border-box; }
|
| 29 |
+
body {
|
| 30 |
+
margin: 0;
|
| 31 |
+
background: var(--paper);
|
| 32 |
+
color: var(--ink);
|
| 33 |
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
| 34 |
+
line-height: 1.45;
|
| 35 |
+
}
|
| 36 |
+
a { color: #174f47; font-weight: 800; }
|
| 37 |
+
header {
|
| 38 |
+
background: #edf3f0;
|
| 39 |
+
border-bottom: 1px solid var(--line);
|
| 40 |
+
}
|
| 41 |
+
.wrap {
|
| 42 |
+
width: min(1180px, calc(100vw - 32px));
|
| 43 |
+
margin: 0 auto;
|
| 44 |
+
}
|
| 45 |
+
.hero {
|
| 46 |
+
min-height: 520px;
|
| 47 |
+
display: grid;
|
| 48 |
+
grid-template-columns: minmax(0, 1.08fr) minmax(360px, 0.92fr);
|
| 49 |
+
gap: 30px;
|
| 50 |
+
align-items: center;
|
| 51 |
+
padding: 44px 0 38px;
|
| 52 |
+
}
|
| 53 |
+
.eyebrow {
|
| 54 |
+
color: #174f47;
|
| 55 |
+
font-size: 0.82rem;
|
| 56 |
+
font-weight: 850;
|
| 57 |
+
letter-spacing: 0;
|
| 58 |
+
text-transform: uppercase;
|
| 59 |
+
}
|
| 60 |
+
h1 {
|
| 61 |
+
margin: 10px 0 16px;
|
| 62 |
+
font-size: clamp(2.4rem, 5vw, 4.9rem);
|
| 63 |
+
line-height: 0.96;
|
| 64 |
+
letter-spacing: 0;
|
| 65 |
+
max-width: 860px;
|
| 66 |
+
}
|
| 67 |
+
h2 { margin: 0 0 14px; font-size: 1.48rem; letter-spacing: 0; }
|
| 68 |
+
h3 { margin: 0 0 8px; font-size: 1rem; letter-spacing: 0; }
|
| 69 |
+
p { margin: 0 0 14px; color: var(--muted); }
|
| 70 |
+
.lead { font-size: 1.08rem; max-width: 760px; color: #344044; }
|
| 71 |
+
.decision-strip {
|
| 72 |
+
display: grid;
|
| 73 |
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
| 74 |
+
gap: 10px;
|
| 75 |
+
margin: 24px 0 4px;
|
| 76 |
+
}
|
| 77 |
+
.decision-item {
|
| 78 |
+
min-height: 96px;
|
| 79 |
+
border: 1px solid var(--line);
|
| 80 |
+
border-radius: 8px;
|
| 81 |
+
background: rgba(255, 255, 255, 0.76);
|
| 82 |
+
padding: 12px;
|
| 83 |
+
}
|
| 84 |
+
.decision-item span {
|
| 85 |
+
display: block;
|
| 86 |
+
color: var(--muted);
|
| 87 |
+
font-size: 0.76rem;
|
| 88 |
+
font-weight: 850;
|
| 89 |
+
text-transform: uppercase;
|
| 90 |
+
}
|
| 91 |
+
.decision-item strong {
|
| 92 |
+
display: block;
|
| 93 |
+
margin-top: 6px;
|
| 94 |
+
font-size: 1.08rem;
|
| 95 |
+
line-height: 1.12;
|
| 96 |
+
}
|
| 97 |
+
.notice {
|
| 98 |
+
display: grid;
|
| 99 |
+
gap: 8px;
|
| 100 |
+
background: #fff8e8;
|
| 101 |
+
border: 1px solid #ead5ad;
|
| 102 |
+
border-left: 6px solid var(--yellow);
|
| 103 |
+
padding: 16px 18px;
|
| 104 |
+
border-radius: 8px;
|
| 105 |
+
margin-top: 22px;
|
| 106 |
+
color: #3b3428;
|
| 107 |
+
}
|
| 108 |
+
.demo-explainer {
|
| 109 |
+
background: #ffffff;
|
| 110 |
+
border: 1px solid var(--line);
|
| 111 |
+
border-left: 6px solid var(--green);
|
| 112 |
+
border-radius: 8px;
|
| 113 |
+
padding: 20px;
|
| 114 |
+
}
|
| 115 |
+
.demo-explainer .demo-copy {
|
| 116 |
+
display: grid;
|
| 117 |
+
grid-template-columns: minmax(0, 1fr) minmax(280px, 0.68fr);
|
| 118 |
+
gap: 18px;
|
| 119 |
+
align-items: start;
|
| 120 |
+
}
|
| 121 |
+
.demo-explainer strong { color: var(--ink); }
|
| 122 |
+
.demo-explainer ul {
|
| 123 |
+
margin: 0;
|
| 124 |
+
padding-left: 20px;
|
| 125 |
+
color: var(--muted);
|
| 126 |
+
}
|
| 127 |
+
.demo-explainer li { margin: 0 0 8px; }
|
| 128 |
+
.panel {
|
| 129 |
+
background: var(--panel);
|
| 130 |
+
border: 1px solid var(--line);
|
| 131 |
+
border-radius: 8px;
|
| 132 |
+
padding: 18px;
|
| 133 |
+
}
|
| 134 |
+
.context-panel {
|
| 135 |
+
align-self: stretch;
|
| 136 |
+
display: grid;
|
| 137 |
+
align-content: center;
|
| 138 |
+
gap: 16px;
|
| 139 |
+
}
|
| 140 |
+
.org-form {
|
| 141 |
+
display: grid;
|
| 142 |
+
gap: 12px;
|
| 143 |
+
}
|
| 144 |
+
label {
|
| 145 |
+
display: grid;
|
| 146 |
+
gap: 5px;
|
| 147 |
+
color: #293437;
|
| 148 |
+
font-size: 0.84rem;
|
| 149 |
+
font-weight: 800;
|
| 150 |
+
}
|
| 151 |
+
input, select, textarea, button, .button {
|
| 152 |
+
min-height: 42px;
|
| 153 |
+
border: 1px solid var(--line);
|
| 154 |
+
border-radius: 8px;
|
| 155 |
+
padding: 9px 12px;
|
| 156 |
+
font: inherit;
|
| 157 |
+
background: #fff;
|
| 158 |
+
color: var(--ink);
|
| 159 |
+
}
|
| 160 |
+
textarea { min-height: 82px; resize: vertical; }
|
| 161 |
+
button, .button {
|
| 162 |
+
cursor: pointer;
|
| 163 |
+
background: #277466;
|
| 164 |
+
color: #fff;
|
| 165 |
+
border-color: #277466;
|
| 166 |
+
font-weight: 850;
|
| 167 |
+
text-decoration: none;
|
| 168 |
+
display: inline-flex;
|
| 169 |
+
align-items: center;
|
| 170 |
+
justify-content: center;
|
| 171 |
+
gap: 8px;
|
| 172 |
+
}
|
| 173 |
+
.secondary, .button.secondary {
|
| 174 |
+
background: #fff;
|
| 175 |
+
color: #174f47;
|
| 176 |
+
border-color: #b8cbc6;
|
| 177 |
+
}
|
| 178 |
+
.dark {
|
| 179 |
+
background: var(--black);
|
| 180 |
+
border-color: var(--black);
|
| 181 |
+
color: #fff;
|
| 182 |
+
}
|
| 183 |
+
nav {
|
| 184 |
+
position: sticky;
|
| 185 |
+
top: 0;
|
| 186 |
+
z-index: 5;
|
| 187 |
+
background: rgba(251, 251, 247, 0.96);
|
| 188 |
+
border-bottom: 1px solid var(--line);
|
| 189 |
+
backdrop-filter: blur(8px);
|
| 190 |
+
}
|
| 191 |
+
nav .wrap {
|
| 192 |
+
display: flex;
|
| 193 |
+
gap: 8px;
|
| 194 |
+
align-items: center;
|
| 195 |
+
padding: 10px 0;
|
| 196 |
+
overflow-x: auto;
|
| 197 |
+
}
|
| 198 |
+
nav a {
|
| 199 |
+
text-decoration: none;
|
| 200 |
+
color: var(--ink);
|
| 201 |
+
border: 1px solid var(--line);
|
| 202 |
+
background: #fff;
|
| 203 |
+
border-radius: 999px;
|
| 204 |
+
padding: 8px 12px;
|
| 205 |
+
white-space: nowrap;
|
| 206 |
+
font-size: 0.88rem;
|
| 207 |
+
}
|
| 208 |
+
nav a:hover, nav a:focus-visible { border-color: #8eb3aa; outline: none; }
|
| 209 |
+
main { padding: 28px 0 54px; }
|
| 210 |
+
.section {
|
| 211 |
+
padding: 26px 0;
|
| 212 |
+
border-bottom: 1px solid var(--line);
|
| 213 |
+
}
|
| 214 |
+
.section-head {
|
| 215 |
+
display: grid;
|
| 216 |
+
grid-template-columns: minmax(0, 0.72fr) minmax(280px, 0.28fr);
|
| 217 |
+
gap: 20px;
|
| 218 |
+
align-items: end;
|
| 219 |
+
margin-bottom: 14px;
|
| 220 |
+
}
|
| 221 |
+
.section-head p { margin-bottom: 0; }
|
| 222 |
+
.section-kicker {
|
| 223 |
+
color: #174f47;
|
| 224 |
+
font-size: 0.76rem;
|
| 225 |
+
font-weight: 850;
|
| 226 |
+
text-transform: uppercase;
|
| 227 |
+
}
|
| 228 |
+
.grid-4 {
|
| 229 |
+
display: grid;
|
| 230 |
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
| 231 |
+
gap: 12px;
|
| 232 |
+
}
|
| 233 |
+
.grid-3 {
|
| 234 |
+
display: grid;
|
| 235 |
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
| 236 |
+
gap: 16px;
|
| 237 |
+
}
|
| 238 |
+
.grid-2 {
|
| 239 |
+
display: grid;
|
| 240 |
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
| 241 |
+
gap: 16px;
|
| 242 |
+
}
|
| 243 |
+
.card {
|
| 244 |
+
background: var(--panel);
|
| 245 |
+
border: 1px solid var(--line);
|
| 246 |
+
border-radius: 8px;
|
| 247 |
+
padding: 16px;
|
| 248 |
+
}
|
| 249 |
+
.step {
|
| 250 |
+
border-left: 5px solid #b8cbc6;
|
| 251 |
+
min-height: 128px;
|
| 252 |
+
}
|
| 253 |
+
.step.active { border-left-color: #277466; }
|
| 254 |
+
.step.done { border-left-color: var(--green); background: #fbfffd; }
|
| 255 |
+
.status-row {
|
| 256 |
+
display: flex;
|
| 257 |
+
flex-wrap: wrap;
|
| 258 |
+
gap: 8px;
|
| 259 |
+
margin-top: 10px;
|
| 260 |
+
}
|
| 261 |
+
.pill {
|
| 262 |
+
border: 1px solid var(--line);
|
| 263 |
+
border-radius: 999px;
|
| 264 |
+
background: #f8faf9;
|
| 265 |
+
color: #344044;
|
| 266 |
+
padding: 5px 9px;
|
| 267 |
+
font-size: 0.78rem;
|
| 268 |
+
font-weight: 800;
|
| 269 |
+
white-space: nowrap;
|
| 270 |
+
}
|
| 271 |
+
.legend {
|
| 272 |
+
display: grid;
|
| 273 |
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
| 274 |
+
gap: 10px;
|
| 275 |
+
margin-top: 14px;
|
| 276 |
+
}
|
| 277 |
+
.legend .pill { border-radius: 8px; padding: 10px; white-space: normal; }
|
| 278 |
+
.green { background: var(--green-soft); border-color: #a7d1c4; color: #174f47; }
|
| 279 |
+
.yellow { background: var(--yellow-soft); border-color: #e6ca8c; color: #6b4611; }
|
| 280 |
+
.red { background: var(--red-soft); border-color: #e5b9b7; color: #793131; }
|
| 281 |
+
.lock { background: #eceeef; border-color: #b7bcbe; color: var(--black); }
|
| 282 |
+
.blue { background: var(--blue-soft); border-color: #bfd3e4; color: #214966; }
|
| 283 |
+
.steel { background: var(--steel-soft); border-color: #c8d2d9; color: #2f3f4c; }
|
| 284 |
+
.violet { background: var(--violet-soft); border-color: #d8cce5; color: #51415f; }
|
| 285 |
+
.source-grid, .question-grid, .packet-grid, .lock-grid {
|
| 286 |
+
display: grid;
|
| 287 |
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
| 288 |
+
gap: 12px;
|
| 289 |
+
margin-top: 14px;
|
| 290 |
+
}
|
| 291 |
+
.source-card {
|
| 292 |
+
border: 1px solid var(--line);
|
| 293 |
+
border-radius: 8px;
|
| 294 |
+
background: #fff;
|
| 295 |
+
padding: 13px;
|
| 296 |
+
}
|
| 297 |
+
.source-card strong { display: block; margin-bottom: 4px; }
|
| 298 |
+
.field-value { color: var(--ink); font-weight: 750; }
|
| 299 |
+
.field-source { color: var(--muted); font-size: 0.84rem; }
|
| 300 |
+
.toolbar {
|
| 301 |
+
display: flex;
|
| 302 |
+
flex-wrap: wrap;
|
| 303 |
+
gap: 10px;
|
| 304 |
+
align-items: center;
|
| 305 |
+
margin-top: 14px;
|
| 306 |
+
}
|
| 307 |
+
.quality-grid {
|
| 308 |
+
display: grid;
|
| 309 |
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
| 310 |
+
gap: 10px;
|
| 311 |
+
margin-top: 14px;
|
| 312 |
+
}
|
| 313 |
+
.quality-item {
|
| 314 |
+
border: 1px solid var(--line);
|
| 315 |
+
border-radius: 8px;
|
| 316 |
+
background: #fff;
|
| 317 |
+
padding: 12px;
|
| 318 |
+
min-height: 92px;
|
| 319 |
+
}
|
| 320 |
+
.quality-item span {
|
| 321 |
+
display: block;
|
| 322 |
+
color: var(--muted);
|
| 323 |
+
font-size: 0.76rem;
|
| 324 |
+
font-weight: 850;
|
| 325 |
+
text-transform: uppercase;
|
| 326 |
+
}
|
| 327 |
+
.quality-item strong {
|
| 328 |
+
display: block;
|
| 329 |
+
margin-top: 6px;
|
| 330 |
+
line-height: 1.2;
|
| 331 |
+
}
|
| 332 |
+
.metrics {
|
| 333 |
+
display: grid;
|
| 334 |
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
| 335 |
+
gap: 10px;
|
| 336 |
+
}
|
| 337 |
+
.metric {
|
| 338 |
+
border: 1px solid var(--line);
|
| 339 |
+
border-radius: 8px;
|
| 340 |
+
background: #f7faf8;
|
| 341 |
+
padding: 12px;
|
| 342 |
+
min-height: 86px;
|
| 343 |
+
}
|
| 344 |
+
.metric span {
|
| 345 |
+
display: block;
|
| 346 |
+
color: var(--muted);
|
| 347 |
+
font-size: 0.78rem;
|
| 348 |
+
font-weight: 800;
|
| 349 |
+
}
|
| 350 |
+
.metric strong {
|
| 351 |
+
display: block;
|
| 352 |
+
font-size: 1.55rem;
|
| 353 |
+
margin-top: 4px;
|
| 354 |
+
}
|
| 355 |
+
.grant-board {
|
| 356 |
+
display: grid;
|
| 357 |
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
| 358 |
+
gap: 12px;
|
| 359 |
+
margin-top: 14px;
|
| 360 |
+
}
|
| 361 |
+
.grant-card {
|
| 362 |
+
display: grid;
|
| 363 |
+
gap: 10px;
|
| 364 |
+
border: 1px solid var(--line);
|
| 365 |
+
border-radius: 8px;
|
| 366 |
+
background: #fff;
|
| 367 |
+
padding: 14px;
|
| 368 |
+
min-height: 264px;
|
| 369 |
+
}
|
| 370 |
+
.grant-meta {
|
| 371 |
+
display: grid;
|
| 372 |
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
| 373 |
+
gap: 8px;
|
| 374 |
+
}
|
| 375 |
+
.grant-meta span {
|
| 376 |
+
border: 1px solid var(--line);
|
| 377 |
+
border-radius: 8px;
|
| 378 |
+
background: #f8faf9;
|
| 379 |
+
padding: 8px;
|
| 380 |
+
color: var(--muted);
|
| 381 |
+
font-size: 0.78rem;
|
| 382 |
+
font-weight: 800;
|
| 383 |
+
}
|
| 384 |
+
.grant-meta strong {
|
| 385 |
+
display: block;
|
| 386 |
+
color: var(--ink);
|
| 387 |
+
font-size: 0.92rem;
|
| 388 |
+
margin-top: 2px;
|
| 389 |
+
}
|
| 390 |
+
.grant-next {
|
| 391 |
+
border-top: 1px solid var(--line);
|
| 392 |
+
padding-top: 10px;
|
| 393 |
+
margin-top: auto;
|
| 394 |
+
}
|
| 395 |
+
.status-line {
|
| 396 |
+
display: flex;
|
| 397 |
+
flex-wrap: wrap;
|
| 398 |
+
gap: 8px;
|
| 399 |
+
align-items: center;
|
| 400 |
+
margin-top: 6px;
|
| 401 |
+
}
|
| 402 |
+
table {
|
| 403 |
+
width: 100%;
|
| 404 |
+
border-collapse: collapse;
|
| 405 |
+
background: #fff;
|
| 406 |
+
border: 1px solid var(--line);
|
| 407 |
+
border-radius: 8px;
|
| 408 |
+
overflow: hidden;
|
| 409 |
+
}
|
| 410 |
+
th, td {
|
| 411 |
+
text-align: left;
|
| 412 |
+
vertical-align: top;
|
| 413 |
+
border-bottom: 1px solid var(--line);
|
| 414 |
+
padding: 11px 12px;
|
| 415 |
+
font-size: 0.91rem;
|
| 416 |
+
}
|
| 417 |
+
th {
|
| 418 |
+
background: #eef5f1;
|
| 419 |
+
color: #1f3935;
|
| 420 |
+
font-size: 0.78rem;
|
| 421 |
+
text-transform: uppercase;
|
| 422 |
+
letter-spacing: 0;
|
| 423 |
+
}
|
| 424 |
+
tbody tr:last-child td { border-bottom: 0; }
|
| 425 |
+
.caveat {
|
| 426 |
+
background: #f4f0fb;
|
| 427 |
+
border: 1px solid #d9cfee;
|
| 428 |
+
border-left: 6px solid var(--blue);
|
| 429 |
+
border-radius: 8px;
|
| 430 |
+
padding: 16px;
|
| 431 |
+
color: #313a46;
|
| 432 |
+
}
|
| 433 |
+
.data-note {
|
| 434 |
+
border-left: 5px solid var(--steel);
|
| 435 |
+
background: #fff;
|
| 436 |
+
border-top: 1px solid var(--line);
|
| 437 |
+
border-right: 1px solid var(--line);
|
| 438 |
+
border-bottom: 1px solid var(--line);
|
| 439 |
+
border-radius: 8px;
|
| 440 |
+
padding: 14px 16px;
|
| 441 |
+
}
|
| 442 |
+
.hidden { display: none; }
|
| 443 |
+
footer {
|
| 444 |
+
padding: 26px 0 40px;
|
| 445 |
+
color: var(--muted);
|
| 446 |
+
font-size: 0.88rem;
|
| 447 |
+
}
|
| 448 |
+
@media (max-width: 920px) {
|
| 449 |
+
.hero { grid-template-columns: 1fr; min-height: auto; }
|
| 450 |
+
.grid-4, .grid-3, .grid-2, .source-grid, .question-grid, .packet-grid, .lock-grid, .decision-strip, .section-head, .quality-grid, .grant-board, .demo-explainer .demo-copy { grid-template-columns: 1fr; }
|
| 451 |
+
.legend { grid-template-columns: 1fr 1fr; }
|
| 452 |
+
}
|
| 453 |
+
@media (max-width: 540px) {
|
| 454 |
+
.wrap { width: min(calc(100vw - 22px), 1180px); }
|
| 455 |
+
h1 { font-size: 2.35rem; }
|
| 456 |
+
.metrics, .legend { grid-template-columns: 1fr; }
|
| 457 |
+
.card, .source-card, .grant-card, .quality-item, .decision-item { min-width: 0; overflow-wrap: anywhere; }
|
| 458 |
+
.card .pill, .source-card .pill, .grant-card .pill, .legend .pill { white-space: normal; }
|
| 459 |
+
.toolbar button, .toolbar .button { width: 100%; }
|
| 460 |
+
}
|
| 461 |
+
</style>
|
| 462 |
+
</head>
|
| 463 |
+
<body>
|
| 464 |
+
<header>
|
| 465 |
+
<div class="wrap hero">
|
| 466 |
+
<div>
|
| 467 |
+
<div class="eyebrow">Grant workbench demo</div>
|
| 468 |
+
<h1>Cedar Ridge Grant Workbench</h1>
|
| 469 |
+
<p class="lead">A compact path from organization facts to grant-fit review, missing human answers, draft packet fields, and locked final approvals.</p>
|
| 470 |
+
<p class="lead"><strong>Output:</strong> a grant shortlist, fit notes, missing-question checklist, draft-safe answer bank, and source links.</p>
|
| 471 |
+
<div class="decision-strip" aria-label="Demo state summary">
|
| 472 |
+
<div class="decision-item"><span>Organization</span><strong>Cedar Ridge Heritage Museum</strong></div>
|
| 473 |
+
<div class="decision-item"><span>Grant universe</span><strong>1,912 rows, official-source links preserved</strong></div>
|
| 474 |
+
<div class="decision-item"><span>Human input</span><strong>4 missing/private facts stay explicit</strong></div>
|
| 475 |
+
<div class="decision-item"><span>Final authority</span><strong>Certification and submission remain locked</strong></div>
|
| 476 |
+
</div>
|
| 477 |
+
<div class="notice" role="note">
|
| 478 |
+
<strong>Demo profile. Not submitted. Not legal/financial advice.</strong>
|
| 479 |
+
<span>Verify all funder details before acting. Built as a showcase for how I help small museums/nonprofits. This static Space does not run real public lookup, IRS lookup, SAM lookup, scraping, API calls, or user-entered organization processing.</span>
|
| 480 |
+
</div>
|
| 481 |
+
<div class="legend" aria-label="Field status legend">
|
| 482 |
+
<span class="pill green">Green = found from reliable source</span>
|
| 483 |
+
<span class="pill yellow">Yellow = inferred draft, confirm it</span>
|
| 484 |
+
<span class="pill red">Red = missing/private fact</span>
|
| 485 |
+
<span class="pill lock">Black lock = human-only certification/signature/submission</span>
|
| 486 |
+
</div>
|
| 487 |
+
</div>
|
| 488 |
+
<aside class="panel context-panel" aria-label="Start organization form">
|
| 489 |
+
<h2>Start with an organization</h2>
|
| 490 |
+
<p id="nextActionText">Next recommended action: build the demo profile, then review grant fit before preparing a packet.</p>
|
| 491 |
+
<div class="org-form">
|
| 492 |
+
<label>Organization name
|
| 493 |
+
<input id="orgName" value="Cedar Ridge Heritage Museum">
|
| 494 |
+
</label>
|
| 495 |
+
<label>Website
|
| 496 |
+
<input id="orgWebsite" value="https://cedar-ridge-heritage.example">
|
| 497 |
+
</label>
|
| 498 |
+
<label>State
|
| 499 |
+
<select id="orgState">
|
| 500 |
+
<option value="OR" selected>OR</option>
|
| 501 |
+
<option value="CA">CA</option>
|
| 502 |
+
<option value="MA">MA</option>
|
| 503 |
+
<option value="NY">NY</option>
|
| 504 |
+
<option value="VT">VT</option>
|
| 505 |
+
</select>
|
| 506 |
+
</label>
|
| 507 |
+
<button id="buildProfileBtn" type="button">Build demo profile</button>
|
| 508 |
+
</div>
|
| 509 |
+
</aside>
|
| 510 |
+
</div>
|
| 511 |
+
</header>
|
| 512 |
+
<nav aria-label="Page sections">
|
| 513 |
+
<div class="wrap">
|
| 514 |
+
<a href="#what-this-demo-is">Demo vs Full Stack</a>
|
| 515 |
+
<a href="#flow">Flow</a>
|
| 516 |
+
<a href="#profile">Profile</a>
|
| 517 |
+
<a href="#missing">Missing Questions</a>
|
| 518 |
+
<a href="#fit-review">Fit Review</a>
|
| 519 |
+
<a href="#packet">Packet Preview</a>
|
| 520 |
+
<a href="#all-grants">Search All Grants</a>
|
| 521 |
+
</div>
|
| 522 |
+
</nav>
|
| 523 |
+
<main class="wrap">
|
| 524 |
+
<section id="what-this-demo-is" class="section">
|
| 525 |
+
<article class="demo-explainer">
|
| 526 |
+
<h2>This Is A Demo, Not The Full Workbench</h2>
|
| 527 |
+
<div class="demo-copy">
|
| 528 |
+
<div>
|
| 529 |
+
<p><strong>This posted page is only a demo of the grant workbench.</strong> The grant listings and source links attached here are real, but this public page mostly shows the discovery and workflow preview layer.</p>
|
| 530 |
+
<p>The full grant workbench is meant to take an organization's basic information, project details, budget notes, documents, past application language, and grant instructions, then turn that material into a guided application plan.</p>
|
| 531 |
+
<p>In the full stack, the workbench can find likely-fit grants, break down what each application asks for, show what is missing, draft reusable answer blocks, prepare safe form fields where possible, and keep a checklist of what still needs human review.</p>
|
| 532 |
+
</div>
|
| 533 |
+
<div>
|
| 534 |
+
<ul>
|
| 535 |
+
<li><strong>Why it saves time:</strong> nonprofits do not have to start from a blank page, hunt through PDFs, or retype the same organization details over and over.</li>
|
| 536 |
+
<li><strong>What this demo cannot do:</strong> it does not submit grants, certify anything, guarantee eligibility, or replace official grant instructions.</li>
|
| 537 |
+
<li><strong>Important limitation:</strong> the public version is incomplete without the rest of the private stack behind it, so treat it as a preview, not the finished application system.</li>
|
| 538 |
+
<li><strong>Need this for your nonprofit?</strong> I can build a grant-fit packet using your real organization details and public grant sources.</li>
|
| 539 |
+
</ul>
|
| 540 |
+
</div>
|
| 541 |
+
</div>
|
| 542 |
+
</article>
|
| 543 |
+
</section>
|
| 544 |
+
<section id="flow" class="section">
|
| 545 |
+
<div class="section-head">
|
| 546 |
+
<div>
|
| 547 |
+
<div class="section-kicker">Progressive disclosure</div>
|
| 548 |
+
<h2>Guided Review Flow</h2>
|
| 549 |
+
</div>
|
| 550 |
+
<p>Each step separates sourced facts, draft assumptions, missing facts, and approvals so the dense grant workflow stays legible.</p>
|
| 551 |
+
</div>
|
| 552 |
+
<div class="grid-3">
|
| 553 |
+
<article id="stepProfile" class="card step active">
|
| 554 |
+
<h3>1. Build org profile</h3>
|
| 555 |
+
<p>Simulate public-source facts and mark confidence by field.</p>
|
| 556 |
+
<span class="pill blue">Waiting for demo profile</span>
|
| 557 |
+
</article>
|
| 558 |
+
<article id="stepQuestions" class="card step">
|
| 559 |
+
<h3>2. Ask only missing facts</h3>
|
| 560 |
+
<p>Collect private or certifiable facts the machine should not invent.</p>
|
| 561 |
+
<span id="questionReadiness" class="pill red">4 missing questions</span>
|
| 562 |
+
</article>
|
| 563 |
+
<article id="stepPacket" class="card step">
|
| 564 |
+
<h3>3. Draft packet, lock signoff</h3>
|
| 565 |
+
<p>Prepare draft answers, attachments, and human-only approvals.</p>
|
| 566 |
+
<span id="packetReadiness" class="pill lock">Human certification locked</span>
|
| 567 |
+
</article>
|
| 568 |
+
</div>
|
| 569 |
+
</section>
|
| 570 |
+
<section id="profile" class="section">
|
| 571 |
+
<div class="section-head">
|
| 572 |
+
<div>
|
| 573 |
+
<div class="section-kicker">Evidence layer</div>
|
| 574 |
+
<h2>Simulated Public Profile</h2>
|
| 575 |
+
</div>
|
| 576 |
+
<p>The public Space uses a sample Cedar Ridge demo profile only. A future private/local version can do real source gathering outside this static demo.</p>
|
| 577 |
+
</div>
|
| 578 |
+
<div id="sourceCards" class="source-grid hidden"></div>
|
| 579 |
+
</section>
|
| 580 |
+
<section id="missing" class="section">
|
| 581 |
+
<div class="section-head">
|
| 582 |
+
<div>
|
| 583 |
+
<div class="section-kicker">Human-only facts</div>
|
| 584 |
+
<h2>Missing Questions</h2>
|
| 585 |
+
</div>
|
| 586 |
+
<p id="missingIntro">Once the demo profile is built, the system asks only for missing/private facts it cannot certify.</p>
|
| 587 |
+
</div>
|
| 588 |
+
<div id="questionCards" class="question-grid hidden"></div>
|
| 589 |
+
<div class="toolbar">
|
| 590 |
+
<button id="answerQuestionsBtn" type="button" class="secondary">Answer missing questions</button>
|
| 591 |
+
<button id="preparePacketBtn" type="button">Prepare packet</button>
|
| 592 |
+
</div>
|
| 593 |
+
</section>
|
| 594 |
+
<section id="fit-review" class="section">
|
| 595 |
+
<div class="section-head">
|
| 596 |
+
<div>
|
| 597 |
+
<div class="section-kicker">Rank before drafting</div>
|
| 598 |
+
<h2>Grant Fit Review</h2>
|
| 599 |
+
</div>
|
| 600 |
+
<p>The sample matches keep money, deadline, readiness, intended use, and next action together so review can happen without flattening the underlying grant data.</p>
|
| 601 |
+
</div>
|
| 602 |
+
<div class="quality-grid" aria-label="Grant fit signals">
|
| 603 |
+
<div class="quality-item"><span>Best immediate fit</span><strong>Community history microgrant</strong></div>
|
| 604 |
+
<div class="quality-item"><span>Main constraint</span><strong>Budget and match facts need human confirmation</strong></div>
|
| 605 |
+
<div class="quality-item"><span>Data boundary</span><strong>Fit examples use sample profile data; full database remains separate</strong></div>
|
| 606 |
+
</div>
|
| 607 |
+
<div id="grantBoard" class="grant-board" aria-live="polite"></div>
|
| 608 |
+
</section>
|
| 609 |
+
<section id="packet" class="section">
|
| 610 |
+
<div class="section-head">
|
| 611 |
+
<div>
|
| 612 |
+
<div class="section-kicker">Draft surface</div>
|
| 613 |
+
<h2>Application Packet Preview</h2>
|
| 614 |
+
</div>
|
| 615 |
+
<p>Draft-safe fields can be gathered, mapped, and filled. Certification, signatures, and submission stay with a human.</p>
|
| 616 |
+
</div>
|
| 617 |
+
<div id="packetPanel" class="hidden">
|
| 618 |
+
<div id="packetRows" class="packet-grid"></div>
|
| 619 |
+
<h3>Human signoff checklist</h3>
|
| 620 |
+
<div id="lockRows" class="lock-grid"></div>
|
| 621 |
+
<div class="toolbar">
|
| 622 |
+
<button id="exportPacketBtn" type="button" class="secondary">Export demo packet JSON</button>
|
| 623 |
+
<button id="printPacketBtn" type="button" class="dark">Print / Save PDF</button>
|
| 624 |
+
</div>
|
| 625 |
+
</div>
|
| 626 |
+
</section>
|
| 627 |
+
<section id="all-grants" class="section">
|
| 628 |
+
<div class="section-head">
|
| 629 |
+
<div>
|
| 630 |
+
<div class="section-kicker">Underlying database</div>
|
| 631 |
+
<h2>Search All Grants</h2>
|
| 632 |
+
</div>
|
| 633 |
+
<p>Use the attached database when you need breadth. Use the fit review above when you need a decision-ready shortlist.</p>
|
| 634 |
+
</div>
|
| 635 |
+
<div class="grid-2">
|
| 636 |
+
<article class="panel">
|
| 637 |
+
<h3>Attached Grant DB</h3>
|
| 638 |
+
<div class="metrics">
|
| 639 |
+
<div class="metric"><span>Total rows</span><strong>1,912</strong></div>
|
| 640 |
+
<div class="metric"><span>Federal rows</span><strong>1,234</strong></div>
|
| 641 |
+
<div class="metric"><span>State sources</span><strong>627</strong></div>
|
| 642 |
+
<div class="metric"><span>Due dates</span><strong>769</strong></div>
|
| 643 |
+
</div>
|
| 644 |
+
<div class="toolbar">
|
| 645 |
+
<a id="grantDatabaseHtmlLink" class="button" href="all_grants_database.html">Open all_grants_database.html</a>
|
| 646 |
+
<a id="grantDatabaseCsvLink" class="button secondary" href="all_grants_database.csv" download>Download all_grants_database.csv</a>
|
| 647 |
+
</div>
|
| 648 |
+
</article>
|
| 649 |
+
<article class="data-note">
|
| 650 |
+
<h3>Database caveat</h3>
|
| 651 |
+
<p>Federal rows are Grants.gov opportunities. State rows include official grant/funding source pages and portals, not a perfect parse of every individual opportunity for every state.</p>
|
| 652 |
+
<div class="status-line">
|
| 653 |
+
<span class="pill blue">Official links retained</span>
|
| 654 |
+
<span class="pill yellow">State rows vary by source</span>
|
| 655 |
+
<span class="pill red">Verify before acting</span>
|
| 656 |
+
</div>
|
| 657 |
+
</article>
|
| 658 |
+
</div>
|
| 659 |
+
<article class="card" style="margin-top:16px">
|
| 660 |
+
<h3>Included real grant data</h3>
|
| 661 |
+
<p>The Space includes the real source snapshot behind the demo: the full grant universe, Grants.gov federal rows, state grant source rows, state directory rows, source gaps, summary, and public source receipts with local cache paths removed.</p>
|
| 662 |
+
<div class="toolbar">
|
| 663 |
+
<a class="button secondary" href="data/grant_universe.csv" download>Full CSV</a>
|
| 664 |
+
<a class="button secondary" href="data/grant_universe.jsonl" download>Full JSONL</a>
|
| 665 |
+
<a class="button secondary" href="data/federal_grants_gov_opportunities.csv" download>Federal rows</a>
|
| 666 |
+
<a class="button secondary" href="data/state_grant_sources.csv" download>State sources</a>
|
| 667 |
+
<a class="button secondary" href="data/source_receipts_public.csv" download>Public receipts</a>
|
| 668 |
+
</div>
|
| 669 |
+
</article>
|
| 670 |
+
</section>
|
| 671 |
+
<section id="caveats" class="section">
|
| 672 |
+
<h2>Public Demo Boundaries</h2>
|
| 673 |
+
<div class="grid-2">
|
| 674 |
+
<article class="card">
|
| 675 |
+
<h3>What the demo does</h3>
|
| 676 |
+
<p>Shows the target interface: org profile, missing questions, grant ranking, draft field map, attachments, export, and human signoff.</p>
|
| 677 |
+
</article>
|
| 678 |
+
<article class="card">
|
| 679 |
+
<h3>What the demo does not do</h3>
|
| 680 |
+
<p>No real organization lookup, no IRS/SAM verification, no real form submission, and no auto-certification.</p>
|
| 681 |
+
</article>
|
| 682 |
+
</div>
|
| 683 |
+
</section>
|
| 684 |
+
</main>
|
| 685 |
+
<footer class="wrap">
|
| 686 |
+
Generated UTC: 2026-05-14T16:15:14+00:00. Grant DB source snapshot UTC: 2026-05-14T14:03:13+00:00.
|
| 687 |
+
</footer>
|
| 688 |
+
<script>
|
| 689 |
+
const profileFields = [{"label": "Organization name", "value": "Cedar Ridge Heritage Museum", "status": "green", "meaning": "Found from reliable demo source", "source": "Demo profile website profile"}, {"label": "Mission", "value": "Preserve and share Cedar Ridge mill-town history through collections, oral histories, and school programs.", "status": "green", "meaning": "Found from reliable demo source", "source": "Demo profile about page"}, {"label": "Project fit", "value": "Mill Town Memory Lab: oral histories, collections care, free tours, and light gallery stabilization.", "status": "yellow", "meaning": "Inferred draft, confirm before use", "source": "Synthesized from demo project notes"}, {"label": "EIN", "value": "Not shown in public demo", "status": "red", "meaning": "Missing/private fact required from human", "source": "Human must provide or verify privately"}, {"label": "UEI/SAM status", "value": "Not shown in public demo", "status": "red", "meaning": "Missing/private fact required from human", "source": "Human must provide or verify privately"}, {"label": "Certification and signature", "value": "Human-only", "status": "lock", "meaning": "Black lock: certification/signature/submission", "source": "Authorized representative only"}];
|
| 690 |
+
const missingQuestions = [{"id": "project_scope", "question": "Which one project should this packet prepare first?", "hint": "Use one bounded project, not the whole wish list."}, {"id": "budget_confirmed", "question": "What budget total and match amount can leadership certify?", "hint": "Budget documents stay human-confirmed in the public demo."}, {"id": "sam_status", "question": "Is the organization registered in SAM.gov or only planning state/private grants?", "hint": "No SAM lookup runs in this static Space."}, {"id": "board_approval", "question": "Who is authorized to approve and submit the final application?", "hint": "Submission authority is always locked for human signoff."}];
|
| 691 |
+
const packetRows = [{"field": "Applicant name", "draft": "Cedar Ridge Heritage Museum", "status": "green", "note": "Safe to draft from the demo public profile."}, {"field": "Project title", "draft": "Mill Town Memory Lab", "status": "yellow", "note": "Drafted from demo notes; human should confirm final title."}, {"field": "Project summary", "draft": "A draft-safe summary for oral histories, collections care, free school access, and light stabilization.", "status": "yellow", "note": "Useful starting language, not a certified final narrative."}, {"field": "Budget total", "draft": "Needs human-confirmed budget document", "status": "red", "note": "The machine can map numbers, but a person must certify them."}, {"field": "Signature and certifications", "draft": "Locked for authorized representative", "status": "lock", "note": "Never auto-filled or submitted by the public demo."}];
|
| 692 |
+
const certificationLocks = [{"item": "Legal applicant certification", "owner": "Authorized representative", "status": "Black lock"}, {"item": "Budget approval", "owner": "Treasurer or board reviewer", "status": "Black lock"}, {"item": "SAM/UEI attestation if federal", "owner": "Authorized representative", "status": "Black lock"}, {"item": "Final submission", "owner": "Human submitter", "status": "Black lock"}];
|
| 693 |
+
const demoGrants = [{"name": "Cedar Ridge Community History Microgrant", "funder": "Cedar Ridge Community Foundation", "due": "2026-06-12", "status": "Drafting", "amount": "$7,500", "use": "Weekend oral-history recording booth and volunteer transcription stipends.", "next": "Tighten the one-page project summary and attach a board support note."}, {"name": "North Valley Collections Care Fund", "funder": "North Valley Heritage Trust", "due": "2026-07-01", "status": "Ready to verify", "amount": "$18,000", "use": "Archival shelving, rehousing supplies, and a part-time collections technician.", "next": "Confirm current eligibility language and quote expiration dates."}, {"name": "Riverbend Arts Access Program", "funder": "Riverbend Cultural Council", "due": "2026-08-15", "status": "Watchlist", "amount": "$12,000", "use": "Free family history days, bilingual exhibit labels, and school tour materials.", "next": "Decide whether the access budget belongs in this cycle or next cycle."}, {"name": "Old Mill Heritage Capital Match", "funder": "Old Mill Preservation League", "due": "2026-10-30", "status": "Needs match", "amount": "$35,000", "use": "Exterior drainage fixes and visitor entry stabilization for a sample mill gallery.", "next": "Build a match plan and choose which capital items are phase-one only."}];
|
| 694 |
+
const answered = new Set();
|
| 695 |
+
|
| 696 |
+
const sourceCards = document.querySelector("#sourceCards");
|
| 697 |
+
const questionCards = document.querySelector("#questionCards");
|
| 698 |
+
const packetPanel = document.querySelector("#packetPanel");
|
| 699 |
+
const packetMount = document.querySelector("#packetRows");
|
| 700 |
+
const lockMount = document.querySelector("#lockRows");
|
| 701 |
+
const grantBoard = document.querySelector("#grantBoard");
|
| 702 |
+
const questionReadiness = document.querySelector("#questionReadiness");
|
| 703 |
+
const packetReadiness = document.querySelector("#packetReadiness");
|
| 704 |
+
const nextActionText = document.querySelector("#nextActionText");
|
| 705 |
+
|
| 706 |
+
function statusClass(status) {
|
| 707 |
+
if (status === "green") return "green";
|
| 708 |
+
if (status === "yellow") return "yellow";
|
| 709 |
+
if (status === "red") return "red";
|
| 710 |
+
if (status === "lock") return "lock";
|
| 711 |
+
return "blue";
|
| 712 |
+
}
|
| 713 |
+
|
| 714 |
+
function statusText(status) {
|
| 715 |
+
if (status === "green") return "Green: found from reliable source";
|
| 716 |
+
if (status === "yellow") return "Yellow: inferred draft, needs confirmation";
|
| 717 |
+
if (status === "red") return "Red: missing/private fact required";
|
| 718 |
+
if (status === "lock") return "Black lock: human-only certification/signature/submission";
|
| 719 |
+
return status;
|
| 720 |
+
}
|
| 721 |
+
|
| 722 |
+
function makeCard(className, title, body, pill, footer) {
|
| 723 |
+
const card = document.createElement("article");
|
| 724 |
+
card.className = className;
|
| 725 |
+
const h = document.createElement("h3");
|
| 726 |
+
h.textContent = title;
|
| 727 |
+
const p = document.createElement("p");
|
| 728 |
+
p.textContent = body;
|
| 729 |
+
const tag = document.createElement("span");
|
| 730 |
+
tag.className = "pill " + pill.className;
|
| 731 |
+
tag.textContent = pill.text;
|
| 732 |
+
card.appendChild(h);
|
| 733 |
+
card.appendChild(p);
|
| 734 |
+
card.appendChild(tag);
|
| 735 |
+
if (footer) {
|
| 736 |
+
const small = document.createElement("p");
|
| 737 |
+
small.className = "field-source";
|
| 738 |
+
small.textContent = footer;
|
| 739 |
+
card.appendChild(small);
|
| 740 |
+
}
|
| 741 |
+
return card;
|
| 742 |
+
}
|
| 743 |
+
|
| 744 |
+
function fitStatusClass(status) {
|
| 745 |
+
if (status === "Drafting") return "green";
|
| 746 |
+
if (status === "Ready to verify") return "blue";
|
| 747 |
+
if (status === "Watchlist") return "steel";
|
| 748 |
+
if (status === "Needs match") return "yellow";
|
| 749 |
+
return "violet";
|
| 750 |
+
}
|
| 751 |
+
|
| 752 |
+
function renderGrantBoard() {
|
| 753 |
+
grantBoard.innerHTML = "";
|
| 754 |
+
demoGrants.forEach((grant) => {
|
| 755 |
+
const card = document.createElement("article");
|
| 756 |
+
card.className = "grant-card";
|
| 757 |
+
|
| 758 |
+
const h = document.createElement("h3");
|
| 759 |
+
h.textContent = grant.name;
|
| 760 |
+
|
| 761 |
+
const funder = document.createElement("p");
|
| 762 |
+
funder.textContent = grant.funder;
|
| 763 |
+
|
| 764 |
+
const tag = document.createElement("span");
|
| 765 |
+
tag.className = "pill " + fitStatusClass(grant.status);
|
| 766 |
+
tag.textContent = grant.status;
|
| 767 |
+
|
| 768 |
+
const meta = document.createElement("div");
|
| 769 |
+
meta.className = "grant-meta";
|
| 770 |
+
meta.innerHTML = "<span>Amount<strong>" + grant.amount + "</strong></span>" +
|
| 771 |
+
"<span>Due<strong>" + grant.due + "</strong></span>";
|
| 772 |
+
|
| 773 |
+
const use = document.createElement("p");
|
| 774 |
+
use.textContent = grant.use;
|
| 775 |
+
|
| 776 |
+
const next = document.createElement("p");
|
| 777 |
+
next.className = "grant-next";
|
| 778 |
+
next.textContent = "Next action: " + grant.next;
|
| 779 |
+
|
| 780 |
+
card.appendChild(h);
|
| 781 |
+
card.appendChild(funder);
|
| 782 |
+
card.appendChild(tag);
|
| 783 |
+
card.appendChild(meta);
|
| 784 |
+
card.appendChild(use);
|
| 785 |
+
card.appendChild(next);
|
| 786 |
+
grantBoard.appendChild(card);
|
| 787 |
+
});
|
| 788 |
+
}
|
| 789 |
+
|
| 790 |
+
function buildProfile() {
|
| 791 |
+
sourceCards.innerHTML = "";
|
| 792 |
+
profileFields.forEach((field) => {
|
| 793 |
+
sourceCards.appendChild(makeCard(
|
| 794 |
+
"source-card",
|
| 795 |
+
field.label,
|
| 796 |
+
field.value,
|
| 797 |
+
{className: statusClass(field.status), text: statusText(field.status)},
|
| 798 |
+
field.source
|
| 799 |
+
));
|
| 800 |
+
});
|
| 801 |
+
sourceCards.classList.remove("hidden");
|
| 802 |
+
document.querySelector("#stepProfile").classList.add("done");
|
| 803 |
+
document.querySelector("#stepQuestions").classList.add("active");
|
| 804 |
+
nextActionText.textContent = "Next recommended action: answer the missing facts, then check whether the grant shortlist is ready for packet drafting.";
|
| 805 |
+
renderQuestions();
|
| 806 |
+
document.querySelector("#profile").scrollIntoView({behavior: "smooth", block: "start"});
|
| 807 |
+
}
|
| 808 |
+
|
| 809 |
+
function renderQuestions() {
|
| 810 |
+
questionCards.innerHTML = "";
|
| 811 |
+
missingQuestions.forEach((item) => {
|
| 812 |
+
const card = document.createElement("article");
|
| 813 |
+
card.className = "card";
|
| 814 |
+
const h = document.createElement("h3");
|
| 815 |
+
h.textContent = item.question;
|
| 816 |
+
const hint = document.createElement("p");
|
| 817 |
+
hint.textContent = item.hint;
|
| 818 |
+
const textarea = document.createElement("textarea");
|
| 819 |
+
textarea.id = "answer_" + item.id;
|
| 820 |
+
textarea.placeholder = "Demo answer";
|
| 821 |
+
textarea.addEventListener("input", () => {
|
| 822 |
+
if (textarea.value.trim()) answered.add(item.id);
|
| 823 |
+
else answered.delete(item.id);
|
| 824 |
+
updateReadiness();
|
| 825 |
+
});
|
| 826 |
+
card.appendChild(h);
|
| 827 |
+
card.appendChild(hint);
|
| 828 |
+
card.appendChild(textarea);
|
| 829 |
+
questionCards.appendChild(card);
|
| 830 |
+
});
|
| 831 |
+
questionCards.classList.remove("hidden");
|
| 832 |
+
updateReadiness();
|
| 833 |
+
}
|
| 834 |
+
|
| 835 |
+
function updateReadiness() {
|
| 836 |
+
const missing = missingQuestions.length - answered.size;
|
| 837 |
+
questionReadiness.textContent = missing === 0 ? "Ready for draft packet" : `${missing} missing/private questions`;
|
| 838 |
+
questionReadiness.className = "pill " + (missing === 0 ? "green" : answered.size ? "yellow" : "red");
|
| 839 |
+
}
|
| 840 |
+
|
| 841 |
+
function answerQuestions() {
|
| 842 |
+
missingQuestions.forEach((item, index) => {
|
| 843 |
+
const box = document.querySelector("#answer_" + item.id);
|
| 844 |
+
if (box && !box.value.trim()) {
|
| 845 |
+
box.value = index === 0 ? "Prepare the Mill Town Memory Lab first." : "Demo response for human review.";
|
| 846 |
+
answered.add(item.id);
|
| 847 |
+
}
|
| 848 |
+
});
|
| 849 |
+
document.querySelector("#stepQuestions").classList.add("done");
|
| 850 |
+
updateReadiness();
|
| 851 |
+
nextActionText.textContent = "Next recommended action: prepare the packet and keep final certification locked for a human.";
|
| 852 |
+
}
|
| 853 |
+
|
| 854 |
+
function preparePacket() {
|
| 855 |
+
if (sourceCards.classList.contains("hidden")) buildProfile();
|
| 856 |
+
packetMount.innerHTML = "";
|
| 857 |
+
packetRows.forEach((row) => {
|
| 858 |
+
packetMount.appendChild(makeCard(
|
| 859 |
+
"source-card",
|
| 860 |
+
row.field,
|
| 861 |
+
row.draft,
|
| 862 |
+
{className: statusClass(row.status), text: statusText(row.status)},
|
| 863 |
+
row.note
|
| 864 |
+
));
|
| 865 |
+
});
|
| 866 |
+
lockMount.innerHTML = "";
|
| 867 |
+
certificationLocks.forEach((row) => {
|
| 868 |
+
lockMount.appendChild(makeCard(
|
| 869 |
+
"source-card",
|
| 870 |
+
row.item,
|
| 871 |
+
row.owner,
|
| 872 |
+
{className: "lock", text: row.status},
|
| 873 |
+
"Human approval required"
|
| 874 |
+
));
|
| 875 |
+
});
|
| 876 |
+
packetPanel.classList.remove("hidden");
|
| 877 |
+
document.querySelector("#stepPacket").classList.add("active", "done");
|
| 878 |
+
packetReadiness.textContent = "Draft packet prepared, certification locked";
|
| 879 |
+
packetReadiness.className = "pill lock";
|
| 880 |
+
nextActionText.textContent = "Next recommended action: review exported draft fields against funder instructions before any real-world use.";
|
| 881 |
+
document.querySelector("#packet").scrollIntoView({behavior: "smooth", block: "start"});
|
| 882 |
+
}
|
| 883 |
+
|
| 884 |
+
function exportPacket() {
|
| 885 |
+
const answers = {};
|
| 886 |
+
missingQuestions.forEach((item) => {
|
| 887 |
+
const box = document.querySelector("#answer_" + item.id);
|
| 888 |
+
answers[item.id] = box ? box.value.trim() : "";
|
| 889 |
+
});
|
| 890 |
+
const packet = {
|
| 891 |
+
exported_utc: new Date().toISOString(),
|
| 892 |
+
demo_profile: true,
|
| 893 |
+
org_first_flow: true,
|
| 894 |
+
no_real_lookup_in_space: true,
|
| 895 |
+
organization: document.querySelector("#orgName").value,
|
| 896 |
+
website: document.querySelector("#orgWebsite").value,
|
| 897 |
+
state: document.querySelector("#orgState").value,
|
| 898 |
+
simulated_profile: profileFields,
|
| 899 |
+
missing_question_answers: answers,
|
| 900 |
+
ranked_demo_grants: demoGrants,
|
| 901 |
+
draft_packet_fields: packetRows,
|
| 902 |
+
human_only_certification: certificationLocks
|
| 903 |
+
};
|
| 904 |
+
const blob = new Blob([JSON.stringify(packet, null, 2)], {type: "application/json"});
|
| 905 |
+
const url = URL.createObjectURL(blob);
|
| 906 |
+
const link = document.createElement("a");
|
| 907 |
+
link.href = url;
|
| 908 |
+
link.download = "cedar_ridge_org_first_demo_packet.json";
|
| 909 |
+
link.click();
|
| 910 |
+
URL.revokeObjectURL(url);
|
| 911 |
+
}
|
| 912 |
+
|
| 913 |
+
document.querySelector("#buildProfileBtn").addEventListener("click", buildProfile);
|
| 914 |
+
document.querySelector("#answerQuestionsBtn").addEventListener("click", answerQuestions);
|
| 915 |
+
document.querySelector("#preparePacketBtn").addEventListener("click", preparePacket);
|
| 916 |
+
document.querySelector("#exportPacketBtn").addEventListener("click", exportPacket);
|
| 917 |
+
document.querySelector("#printPacketBtn").addEventListener("click", () => window.print());
|
| 918 |
+
renderGrantBoard();
|
| 919 |
+
</script>
|
| 920 |
+
</body>
|
| 921 |
</html>
|