cjc0013 commited on
Commit
045994b
·
verified ·
1 Parent(s): 5e68375

Publish grant workbench demo with real grant data

Browse files
README.md CHANGED
@@ -1,10 +1,56 @@
1
  ---
2
- title: Grant Workbench Demo
3
- emoji: 📊
4
- colorFrom: red
5
- colorTo: gray
6
  sdk: static
 
 
7
  pinned: false
 
 
 
 
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>