← Back to selected work

Case study · Funding Findr

One designer-builder, a three-sided SaaS, shipped end to end on Next.js.

Funding Findr is a programmatic grant intelligence platform I design and build solo on Next.js. One stack serves three customer types (nonprofits, funders, agencies) across marketing site, user app, admin portal, and an agentic ingestion pipeline.

Funding Findr marketing landing page with headline 'Built for the nonprofit development cycle, in the order you work it' in a light serif on a cream background, sub-copy about starting with your objective and finding funders who fund orgs like yours, Sign up CTA, and three trust marks (Preview free, No dead links, Cancel anytime).
Marketing site home. Luxury-minimal editorial, built on the thesis that trust and clarity sell a $16-per-month subscription better than a feature grid.
Project
Funding Findr (fundingfindr.co), side project, solo founder
Role
Product Design and Engineering
Duration
Summer 2025 to present, ongoing
Audiences
Nonprofits, funders, and agencies serving nonprofits
Surfaces
Marketing site, user app, admin portal, enterprise and agency surfaces, agentic ingestion pipeline
Scope
Product strategy, research, UX, UI, design system, full-stack build, agentic AI pipeline, SEO, pricing, email, analytics, observability
Pricing
$24/mo individual, $199/yr individual ($16/mo effective), $9 Sprint day-pass, Enterprise for funders and agencies
Outcome
Live product shipping multiple times a week on Vercel. Three-sided business model. 70+ background tasks running the ingestion pipeline.

01 · Situation

Grant discovery, broken on three sides.

The unknowns

The risk

02 · Task

Design and ship the whole thing on one stack.

Marketing site, user app, admin portal, enterprise surfaces, and agentic pipeline on one data model and one design system, priced for a one-person dev shop and built so one person can run it.

03 · Action

The strategic blueprint.

Pillar A

De-risking via proxy data and ongoing research.

External proxies as discipline: competitive teardown, JTBD interviews with real dev directors from week one, and public IRS data as the trust-earning signal.

What we neededPrecedent I studiedWhat I kept
Mission-first discoveryIRS Form 990 Schedule I (recipient grants)Map a nonprofit's mission to funders whose giving history shows they fund work like it.
Trust at low priceStripe, Aesop, SquarespaceEditorial clarity, no stock imagery, a single accent, a dead-link guarantee.
Competitive positioningCandid, Instrumentl, GrantWatch, GrantStation, Hello AliceSix dedicated comparison pages, honest trade-offs, "built for the dev director without staff."
Multi-model ingestionOpenRouter, Anthropic batch inferenceOne AI gateway with model-per-task routing; the right model for the right job without lock-in.
Three-sided SaaSShopify Partners, HubSpot Solutions PartnersIndividual plan, enterprise for funders and agencies, grantee-seat model, inquiry gating for enterprise.
Pillar B

UX and AI system architecture.

One Next.js stack, four properties

Marketing site, user app, admin portal, and enterprise surface in one Next.js codebase with shared design system, data model, and pipeline.

Next.js (App Router) Supabase Trigger.dev OpenRouter Strapi Resend Stripe PostHog Sentry Buffer Vercel Tailwind v4 Claude Code

Marketing site: twenty-plus pages built to convert

Home shipped against an 11-beat B2B sales arc, pricing rebuilt after a HeyCatch audit, six audience and comparison pages, enterprise contact form with pre-filled audience hints, Strapi-powered blog. SEO per route with structured data.

Pricing page with Monthly and Annual toggle, a $24 per month individual card, a $199 per year annual card showing the $16-per-month effective rate, and FAQ below. Luxury-minimal serif plus geometric sans typography on a cream background.
Pricing. Rebuilt after a HeyCatch audit found visitors looking for the price hit a dead end.
Enterprise page with headline 'Roll out to your whole team' in a serif italic, sub-copy about grantees as a capacity-building benefit, program officer seats, and multi-user agency access, followed by a contact form with Name, Email, Organization, and What are you looking for fields.
Enterprise. One contact form, pre-filled audience hints from the referring surface (funder grantee seats, funder enterprise, agency).

User app: mission-first discovery for three audiences

Dashboard lands on mission-matched grants, with Browse (Funders, Funding, Nonprofits), My Radar, and Peer Intelligence sharing one component library. Agency Clients, Funder Grantees, and Funder Contacts (CRM-lite) ride the same shell.

User dashboard titled 'Your dashboard' with a 'What is new this week' header, Your Funding Landscape panel showing 1 grant match worth $125K and 22 funders have funded orgs like yours, an In Your World news card for Bezos Academy, and a Browse strip for Grants, Funders, and Nonprofits above the matched grants table.
User dashboard. Mission-matched grants ranked above everything else. Funding Landscape and world-news in your sector up top.

Browse without noise

Browse Funders, Browse Funding, Browse Nonprofits all share one table pattern, one filter language, and one card style, so switching surfaces costs no learning.

Browse Funders page with filter chips at the top (focus area, geography, giving range, affiliation), a results table of foundations with annual giving, award counts, and recent recipient summaries.
Browse Funders. Filter language shared across all three browse surfaces.
Browse Funding page showing a table of grant opportunities with deadline, amount, sector tags, and geographic focus columns, and the same filter chip language as Browse Funders.
Browse Funding. Same filter language, grant-shaped.

The 990 is the thesis

Each funder surfaces typical award, award count, annual giving, focus areas, and recent recipients. The 990-driven view is what makes "mission-first" real.

Funder detail page for En-Yong Foundation showing Milpitas California location and EIN, Typical Award ($10,000 median with $1,000 to $37,277 middle range), Award Count (59 grants on record), Annual Giving ($77,749 tax year 2024), tabs for Can I apply / What they fund / Contacts and records, Focus Areas chips (Human Services and Social Welfare, Education and Research, Health and Wellness, Youth and Family Services), and Recent Recipients list.
Funder detail. Typical Award, Award Count, Annual Giving, Focus Areas, and Recent Recipients all above the fold.

Peer funders: who's backing orgs like mine

Peer Intelligence surfaces funders backing orgs whose work overlaps with the user's, generated by generate-peer-recommendations and refreshed as new 990 data lands.

Peer Funders page with a header describing funders backing orgs like yours, filter chips, and a list of funders with the specific peer organizations they fund and overlap evidence.
Peer Funders. The "who's backing orgs like mine" answer, surfaced automatically.

Narrative angles: application strategy, generated

The system reads the org's programs, cross-references the funder landscape, and produces strategic framings with example funders and language the dev director can walk into an application with.

Narrative Angles marketing page with headline 'Telling your story to funders is a different kind of storytelling' and sub-copy explaining Narrative Angles as a positioning framework, with a sample Lupine Care report showing angle cards, strategic risks, and example funders.
Narrative angles. The positioning layer between discovery and the application draft.

Admin portal: a one-person operator surface

Review Queue, News Queue, Content Batches, Funder Enrichment, Funders, Grants, Users, and Coverage, designed so one operator supervises a seventy-task pipeline without drowning.

Admin panel overview page with 174 pending review and 110 rejected in last 7 days up top, Approved Corpus panel showing 935 future live-to-users and 1,053 past and 1,988 total, a News Queue count, and a Shortcuts grid for All Grants, Grant Review Queue, Funder Enrichment Review, News Queue, Batch Review Queue, and Users. Luxury-minimal serif plus sans typography on a cream background.
Admin panel. Pipeline health at a glance, every operator shortcut one click away, same editorial design system as the user app.

Agentic ingestion pipeline: seventy-plus Trigger.dev tasks

  • Discovery. sweep-archetypes orchestrates per-archetype sweeps. sweep-single-archetype and sweep-single-user search both the existing corpus and the open web via lib/ai/web-search.ts.
  • IRS and ProPublica enrichment. bmf-import, ingest-funders-from-bmf, irs-filing-index-ingest, parse-990-pf, parse-990-schedule-i, parse-990-schedule-i-batch, funder-propublica-enrich, nonprofit-propublica-enrich.
  • Funder enrichment from the open web. discover-funder-portal, discover-funder-portals-all, enrich-funder-from-website, enrich-funders-from-websites-all, suggest-funder-website, tag-funders-from-description, infer-funder-cycle.
  • Matching. precompute-match-scores, sweep-paying-users, sweep-user-programs, refresh-archetype-coverage. Scoring runs ahead of time so the dashboard is instant.
  • Peer recommendations. generate-peer-recommendations surfaces "funders backing orgs like yours."

Marketing automation: an end-to-end growth engine, no humans in the loop

Marketing on Funding Findr is not a side system. It is built into the same Trigger.dev + Resend + Buffer + PostHog stack as the product. One person can run it because it runs itself.

  • Content generation and syndication. generate-content-batches drafts posts from the latest ingested grants and news. generate-batch-copy writes the social and blog copy. render-batch-carousels and render-batch-reel produce the social assets. publish-batch-blog ships the post. publish-batch-to-buffer queues it on social.
  • News ingestion as a content source. poll-news-sources + extract-news-article pull philanthropy news. The admin News Queue approves it, then the content pipeline turns it into blog + social.
  • Lifecycle email on Resend. send-welcome-email on signup. sync-user-to-resend keeps the audience list live. scan-abandoned-signups, trial-expired-sweep, card-expiry-sweep recover revenue. newsletter-nurture-sweep + weekly-briefing-sweep keep paying users engaged with their own grant matches, personalized per org.
  • SEO as code. Six competitor and alternative pages (Candid, Instrumentl, GrantWatch, GrantStation, Hello Alice, Scholarships.com), audience pages for nonprofits and BIPOC founders, monthly deadline roundups auto-published as Trigger.dev batches, every page with structured data and JSON-LD.
  • Analytics loop. PostHog captures every signup funnel event, which routes back into which content batches get queued next. Sentry catches the exceptions before a user does.

The whole system was built so one person could run a marketing engine that would normally require a growth team.

Multi-model AI via OpenRouter

One gateway, model-per-task routing: reasoning model for matching, cheap models for classification, long-context for narrative. Swapping a provider is a config change.

Design system: Luxury Minimal

Source Serif 4 for headlines, geometric sans for UI, warm monochrome palette with a single indigo accent on the subscribe button. Tokenized in Tailwind so a new comparison page takes a day.

Ink#1A1614
Accent#4A3DC7
Surface Warm#F7F7F7
Pillar C

Managing ambiguity when there is no one else in the room.

Be every role, pick one at a time

Solo discipline is not multitasking, it is picking which role is in the chair this week. Research weeks run independent of design weeks and build weeks.

Sequence by business risk, not scope

Ingestion shipped before UI polish because discovery quality is the thesis. Comparison pages shipped before enterprise because positioning against Candid and Instrumentl is what converts.

Build guards so one person cannot forget

Every price string linted against lib/pricing.ts by a prebuild guard. Every ingested item passes a review queue before publish. Every long-running task has retries, observability, and alerting.

04 · Result

Scalable guardrails, not just screens.

Quantitative impact

4Properties on one stack (marketing, app, admin, enterprise)
3Customer segments (nonprofits, funders, agencies)
70+Trigger.dev tasks in the ingestion pipeline
100+Routes shipped (user app, admin, marketing)
6Competitor comparison and alternative pages
$16/moEffective individual price vs Candid $4,999/yr
End-to-endMarketing automation: content, email, social, SEO
24hDead-link fix SLA, in production

Scalable legacy

End-to-end AI-native build pattern. Figma to Claude Code to shipped Next.js. One designer-builder, one stack, from marketing homepage to enterprise contact form to the agentic pipeline.

Three-sided business model. Individual, enterprise for funders (grantee seats), enterprise for agencies (client management). One data model and one component library serve all three.

Agentic ingestion architecture. Named Trigger.dev tasks, multi-model routing via OpenRouter, review-queue gating before publish, cost reconciliation. The data grows itself and the operator can see every move.

End-to-end marketing automation. Content generated, carousels and reels rendered, blog and social published to Buffer, lifecycle email on Resend, analytics loop on PostHog. One person runs a growth engine that normally needs a team.

Luxury Minimal design system. Documented, tokenized, and tooled with a prebuild pricing guard so one person cannot drift the brand or the price by accident.

← Back to selected work