From 558a346ea7784e135747cf96f2d8316f770d9aab Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 28 Aug 2025 08:41:15 -0400 Subject: [PATCH 1/2] Add blog post about using Claude Code for PBIF grant application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New article describing how we used AI to build the PolicyEngine Atlas grant application - Focuses on innovative methodology: treating writing as software development - Highlights real-time iteration, perfect consistency, and interactive demos - Includes placeholder image for blog post thumbnail - Also includes social post trigger workflow from previous commit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .github/workflows/trigger-social-post.yml | 44 +++++++++++ .../images/posts/policyengine-atlas-demo.png | Bin 0 -> 26059 bytes .../articles/policyengine-atlas-pbif-grant.md | 69 ++++++++++++++++++ src/posts/posts.json | 9 +++ 4 files changed, 122 insertions(+) create mode 100644 .github/workflows/trigger-social-post.yml create mode 100644 public/images/posts/policyengine-atlas-demo.png create mode 100644 src/posts/articles/policyengine-atlas-pbif-grant.md diff --git a/.github/workflows/trigger-social-post.yml b/.github/workflows/trigger-social-post.yml new file mode 100644 index 000000000..5db75c542 --- /dev/null +++ b/.github/workflows/trigger-social-post.yml @@ -0,0 +1,44 @@ +name: Trigger Social Post Creation + +on: + push: + branches: [master] + paths: + - 'src/posts/articles/*.md' + - 'src/posts/posts.json' + +jobs: + trigger-social: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 # Need previous commit to detect new posts + + - name: Check for new blog posts + id: check + run: | + # Get changed files + CHANGED_FILES=$(git diff --name-only HEAD^ HEAD) + + # Check if posts.json was modified + if echo "$CHANGED_FILES" | grep -q "src/posts/posts.json"; then + # Extract the most recent post (first in array) + SLUG=$(python3 -c "import json; posts = json.load(open('src/posts/posts.json')); print(posts[0]['filename'].replace('.md', ''))") + TITLE=$(python3 -c "import json; posts = json.load(open('src/posts/posts.json')); print(posts[0]['title'])") + + echo "new_post=true" >> $GITHUB_OUTPUT + echo "slug=$SLUG" >> $GITHUB_OUTPUT + echo "title=$TITLE" >> $GITHUB_OUTPUT + else + echo "new_post=false" >> $GITHUB_OUTPUT + fi + + - name: Trigger social post creation + if: steps.check.outputs.new_post == 'true' + uses: peter-evans/repository-dispatch@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: PolicyEngine/policyengine-social + event-type: new_blog_post + client-payload: '{"slug": "${{ steps.check.outputs.slug }}", "title": "${{ steps.check.outputs.title }}"}' \ No newline at end of file diff --git a/public/images/posts/policyengine-atlas-demo.png b/public/images/posts/policyengine-atlas-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..7242c86c675c7959bc83ed9b48bbc024350a659b GIT binary patch literal 26059 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 literal 0 HcmV?d00001 diff --git a/src/posts/articles/policyengine-atlas-pbif-grant.md b/src/posts/articles/policyengine-atlas-pbif-grant.md new file mode 100644 index 000000000..51d149862 --- /dev/null +++ b/src/posts/articles/policyengine-atlas-pbif-grant.md @@ -0,0 +1,69 @@ +We just completed a $700,000 grant application to USDA's Public Benefit Innovation Fund using an entirely new approach: treating the entire process as a software development project powered by Claude Code. We built not just a grant application but a complete system—50+ pages of content, an interactive demonstration site, and secured partner commitments. Here's how AI transformed grant writing from a document management challenge into a dynamic development process. + +## The challenge: 15 complex questions, 250 words each + +The PBIF application demanded extreme precision: 15 questions about technical architecture, equity considerations, stakeholder engagement, and sustainability—each limited to exactly 250 words. Traditional grant writing would involve weeks of drafting, editing, and word-counting. Instead, we treated the entire application as a software development project. + +## Building with Claude Code: Everything as code + +Rather than using Word documents and email chains, we structured everything in Git: + +``` +atlas/ +├── docs/pbif/responses/ # 15 markdown files, one per question +├── scripts/ # Python scripts to compile and validate +├── src/components/ # React components for the demo site +└── public/ # Interactive demonstration +``` + +Every response lived in version-controlled markdown. When reviewers suggested changes, Claude Code would: +- Update the specific response file +- Regenerate the compiled application +- Ensure word counts stayed within limits +- Propagate terminology changes across all documents +- Update the interactive demo to match + +## Real-time iteration with stakeholders + +The most powerful moment came during a stakeholder call. As they asked questions like "How would a caseworker actually find documents?", I could say "Let me show you" and have Claude Code generate a working prototype in minutes. The live demo site evolved during the conversation, incorporating feedback immediately. + +When someone suggested emphasizing our North Carolina pilot with the Atlanta Fed, Claude Code instantly: +- Found every mention across 50+ files +- Updated the language consistently +- Adjusted the demo site's examples +- Regenerated all compiled documents + +## Managing complexity through AI memory + +The application grew to include: +- 15 response documents (3,750 words exactly) +- Partner letters from MyFriendBen, Benefit Navigator, Georgia Center for Opportunity +- Budget breakdowns across multiple worksheets +- Technical architecture diagrams +- An interactive demonstration with three major sections + +Claude Code maintained perfect consistency across everything. When we changed "policy library" to "PolicyEngine Atlas", it updated 47 locations automatically. When we adjusted budget allocations, it recalculated totals and updated narrative descriptions simultaneously. + +## The revelation: "Everything can be software" + +Marc Andreessen's famous "software is eating the world" quote took on new meaning. Grant applications—traditionally the most document-heavy, bureaucratic processes—became fluid, living code. Changes that would trigger days of review became Git commits. Version control replaced email chains. Pull requests replaced track changes. + +Most remarkably, treating documentation as code improved quality. The 250-word limit forced clarity. Git's version control captured every iteration. The interactive demo let reviewers experience our vision rather than reading about it. + +## Lessons for grant writers and developers + +1. **Structure beats process**: Organizing content as discrete, version-controlled files enables parallel work and atomic updates. + +2. **Interactive demos convince**: Building a working prototype during the application process demonstrates capability better than any narrative. + +3. **AI excels at consistency**: Humans miss inconsistencies across large documents. AI doesn't. + +4. **Constraints improve clarity**: The 250-word limit, enforced programmatically, eliminated fluff and forced precise communication. + +5. **Everything really can be code**: Even the most traditional documents benefit from version control, automated building, and systematic updates. + +## What this means for the future + +If AI can transform grant writing—arguably one of the most traditional, document-heavy processes—what else can it revolutionize? We're entering an era where the boundary between "technical" and "non-technical" work dissolves. Writers become developers. Documents become applications. Static PDFs become interactive experiences. + +The PolicyEngine Atlas application wasn't just about getting funding. It was a proof of concept that AI-powered development can transform any information-heavy process. When everything becomes software, everything becomes possible. \ No newline at end of file diff --git a/src/posts/posts.json b/src/posts/posts.json index b22d342e2..0bd9df22c 100644 --- a/src/posts/posts.json +++ b/src/posts/posts.json @@ -1,4 +1,13 @@ [ + { + "title": "How we used Claude Code to apply for the Public Benefit Innovation Fund", + "description": "Treating writing as software development, we built an entire grant application with interactive demos, perfect consistency, and real-time stakeholder iteration—proving everything can be code.", + "date": "2025-08-28", + "tags": ["us", "org", "featured"], + "filename": "policyengine-atlas-pbif-grant.md", + "image": "policyengine-atlas-demo.png", + "authors": ["max-ghenis"] + }, { "title": "National Science Foundation awards PolicyEngine $300,000 grant", "description": "NSF's Pathways to Enable Open-Source Ecosystems program will support PolicyEngine's work to expand access to policy analysis tools.", From c7176a1959ab326117c3d3b4f32f45ba072d50db Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Thu, 28 Aug 2025 08:43:27 -0400 Subject: [PATCH 2/2] Fix formatting with Prettier --- .github/workflows/trigger-social-post.yml | 14 +++++++------- .../articles/policyengine-atlas-pbif-grant.md | 5 ++++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/trigger-social-post.yml b/.github/workflows/trigger-social-post.yml index 5db75c542..beff80b3c 100644 --- a/.github/workflows/trigger-social-post.yml +++ b/.github/workflows/trigger-social-post.yml @@ -4,8 +4,8 @@ on: push: branches: [master] paths: - - 'src/posts/articles/*.md' - - 'src/posts/posts.json' + - "src/posts/articles/*.md" + - "src/posts/posts.json" jobs: trigger-social: @@ -13,14 +13,14 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 2 # Need previous commit to detect new posts - + fetch-depth: 2 # Need previous commit to detect new posts + - name: Check for new blog posts id: check run: | # Get changed files CHANGED_FILES=$(git diff --name-only HEAD^ HEAD) - + # Check if posts.json was modified if echo "$CHANGED_FILES" | grep -q "src/posts/posts.json"; then # Extract the most recent post (first in array) @@ -33,7 +33,7 @@ jobs: else echo "new_post=false" >> $GITHUB_OUTPUT fi - + - name: Trigger social post creation if: steps.check.outputs.new_post == 'true' uses: peter-evans/repository-dispatch@v2 @@ -41,4 +41,4 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} repository: PolicyEngine/policyengine-social event-type: new_blog_post - client-payload: '{"slug": "${{ steps.check.outputs.slug }}", "title": "${{ steps.check.outputs.title }}"}' \ No newline at end of file + client-payload: '{"slug": "${{ steps.check.outputs.slug }}", "title": "${{ steps.check.outputs.title }}"}' diff --git a/src/posts/articles/policyengine-atlas-pbif-grant.md b/src/posts/articles/policyengine-atlas-pbif-grant.md index 51d149862..ecbf308b7 100644 --- a/src/posts/articles/policyengine-atlas-pbif-grant.md +++ b/src/posts/articles/policyengine-atlas-pbif-grant.md @@ -17,6 +17,7 @@ atlas/ ``` Every response lived in version-controlled markdown. When reviewers suggested changes, Claude Code would: + - Update the specific response file - Regenerate the compiled application - Ensure word counts stayed within limits @@ -28,6 +29,7 @@ Every response lived in version-controlled markdown. When reviewers suggested ch The most powerful moment came during a stakeholder call. As they asked questions like "How would a caseworker actually find documents?", I could say "Let me show you" and have Claude Code generate a working prototype in minutes. The live demo site evolved during the conversation, incorporating feedback immediately. When someone suggested emphasizing our North Carolina pilot with the Atlanta Fed, Claude Code instantly: + - Found every mention across 50+ files - Updated the language consistently - Adjusted the demo site's examples @@ -36,6 +38,7 @@ When someone suggested emphasizing our North Carolina pilot with the Atlanta Fed ## Managing complexity through AI memory The application grew to include: + - 15 response documents (3,750 words exactly) - Partner letters from MyFriendBen, Benefit Navigator, Georgia Center for Opportunity - Budget breakdowns across multiple worksheets @@ -66,4 +69,4 @@ Most remarkably, treating documentation as code improved quality. The 250-word l If AI can transform grant writing—arguably one of the most traditional, document-heavy processes—what else can it revolutionize? We're entering an era where the boundary between "technical" and "non-technical" work dissolves. Writers become developers. Documents become applications. Static PDFs become interactive experiences. -The PolicyEngine Atlas application wasn't just about getting funding. It was a proof of concept that AI-powered development can transform any information-heavy process. When everything becomes software, everything becomes possible. \ No newline at end of file +The PolicyEngine Atlas application wasn't just about getting funding. It was a proof of concept that AI-powered development can transform any information-heavy process. When everything becomes software, everything becomes possible.