One useful workflow
Both tools search for grant opportunities, deduplicate results, write new rows to the Google Sheet the team already uses, and read human feedback before the next run.

An in-progress shared engine for nonprofit grant discovery, with ParaCliffHangers and the New York City Climbing Collective as named implementations. The technical goal is reusable search logic with controls that keep each nonprofit's data, credentials, prompts, Sheets, decisions, feedback, and logs separate.
What It Does
The project uses AI where it helps: finding and summarizing possible opportunities. The rest of the system is deliberately ordinary software: configuration, scheduling, deduplication, validation, Sheets writes, and logs.
Both tools search for grant opportunities, deduplicate results, write new rows to the Google Sheet the team already uses, and read human feedback before the next run.
ParaCliffHangers is grounded in adaptive climbing and disability-led outdoor recreation. NY3C is grounded in climbing equity, youth development, gear access, and NYC-metro funders.
The technical direction is a shared grant-search engine with organization-specific profiles, prompts, credentials, Sheets, feedback, run history, and logs kept separate.
Workflow
This is the key safety and product lesson. Reuse should reduce maintenance cost without creating a path for one organization's search profile or decisions to leak into another's.
Each nonprofit has its own mission profile, program list, geography, preferred funder language, named-funder list, and negative filters. PCH and NY3C are named because the context matters.
The engine uses the same repeatable mechanics: scheduled Python, Claude CLI, Google Sheets integration, deduplication, and output validation.
The prompt context for one nonprofit does not include another nonprofit's profile, feedback, Sheet contents, or decisions. Reuse belongs in the engine, not in the organization's data.
New grant rows land in the Sheet assigned to that nonprofit. The team reviews them in familiar columns such as Decision and Notes instead of learning a new app.
Apply, Pass, Researching, and free-text notes become search feedback for that nonprofit only. This is the practical loop that makes the tool better without taking the decision away from the team.
Runs, prompts, output validation, duplicate decisions, errors, and write results should be recoverable so the engine is maintainable and explainable.
Controls
The control model is part of the product, not an implementation footnote: separate credentials, separate Sheets, separate prompts, scoped feedback, scoped logs, and no cross-organization prompt context.
Each nonprofit should have separate service-account access, Sheet identifiers, environment values, and write targets. A PCH run should not be able to write to NY3C's Sheet.
Profiles, keywords, feedback, decisions, notes, and prior results stay scoped to the active nonprofit. The model gets only the context needed for that organization's search.
The engine should use narrow permissions, separate configs, scoped logs, duplicate checks by organization, and validation before writing anything the team will review.
Technology
These pages are not replacing the private repositories. They summarize what a reviewer would see there: the architecture choices, evidence surfaces, tests, and boundaries behind the build.
Repository Signals
For now, the repositories stay private while the public site explains the work. These notes summarize the files, routes, docs, checks, and review artifacts without exposing private configuration, credentials, or organization-specific data.