{\rtf1\ansi\ansicpg1252\cocoartf2822 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\froman\fcharset0 Times-Bold;\f1\froman\fcharset0 Times-Roman;\f2\fmodern\fcharset0 Courier; \f3\froman\fcharset0 TimesNewRomanPSMT;\f4\fnil\fcharset0 AppleColorEmoji;\f5\froman\fcharset0 Times-Italic; \f6\fnil\fcharset0 Menlo-Regular;\f7\fnil\fcharset0 HelveticaNeue;} {\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red0\green0\blue233;\red109\green109\blue109; \red109\green109\blue109;\red0\green0\blue0;} {\*\expandedcolortbl;;\cssrgb\c0\c0\c0;\cssrgb\c0\c0\c93333;\cssrgb\c50196\c50196\c50196; \cssrgb\c50196\c50196\c50196;\cssrgb\c0\c0\c0\c84706;} {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1} {\list\listtemplateid2\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}}{\leveltext\leveltemplateid101\'01\'00;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{circle\}}{\leveltext\leveltemplateid102\'01\uc0\u9702 ;}{\levelnumbers;}\fi-360\li1440\lin1440 }{\listname ;}\listid2} {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid3} {\list\listtemplateid4\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}}{\leveltext\leveltemplateid301\'01\'00;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{circle\}}{\leveltext\leveltemplateid302\'01\uc0\u9702 ;}{\levelnumbers;}\fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{square\}}{\leveltext\leveltemplateid303\'01\uc0\u9642 ;}{\levelnumbers;}\fi-360\li2160\lin2160 }{\listname ;}\listid4} {\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid5} {\list\listtemplateid6\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}}{\leveltext\leveltemplateid501\'01\'00;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listname ;}\listid6}} {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}} \margl1440\margr1440\vieww31340\viewh19300\viewkind0 \deftab720 \pard\pardeftab720\sa298\partightenfactor0 \f0\b\fs36 \cf0 \expnd0\expndtw0\kerning0 Best practices & features to include\ \pard\pardeftab720\sa240\partightenfactor0 \f1\b0\fs24 \cf0 From the literature + what you\'92ve built already, here are features that improve quality & usability. {\field{\*\fldinst{HYPERLINK "https://www.funraise.org/blog/grant-management-software-for-nonprofits?utm_source=chatgpt.com"}}{\fldrslt \cf3 \ul \ulc3 NetSuite+3Funraise+3Fluxx+3}}\ \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrt\brdrnil \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\qc\partightenfactor0 \f0\b \cf0 Feature\cell \pard\intbl\itap1\pardeftab720\qc\partightenfactor0 \cf0 Why it matters\cell \pard\intbl\itap1\pardeftab720\qc\partightenfactor0 \cf0 How to implement / what to watch out for\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Opportunity filters \f1\b0 (keywords, geography, type, capacity-building etc.)\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Helps users narrow to what matters, reduces overload.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 You have keyword filters already. Also include date, state, amount range, \'93open vs closed\'94 status.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Deadline alerts / reminders \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Prevents missing grants because deadlines slip.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Track \f2\fs26 deadline \f1\fs24 (if parsed), then show upcoming ones. Allow export to calendar or reminders.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Document / PDF fetching + parsing \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Many state sources have PDFs, RFPs etc. Users want details, not just summary.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Use PDF adapter + follow-links. Flag PDFs clearly in UI.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Staleness / expiration detection \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Projects with expired deadlines clutter feeds.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Tag items with \'93deadline passed\'94 or \'93pending\'94 etc. Maybe auto-hide old ones after some time.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 User feedback / manual review / save items \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Users can flag false positives, save promising ones.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Add \'93bookmark / save\'94 or \'93dismiss\'94 features. Could feed into machine learning or heuristics over time.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Dashboard / Analytics \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Helps see grant volume by type, deadlines, states, etc.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Simple charts like # grants by month, # capacity-building grants vs total, etc.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Good defaults / simple UI \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Avoid cognitive overload \'97 show only essentials, allow advanced filtering if needed.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 E.g. show title, deadline, source, eligibility; hide long descriptions by default.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Mobile-friendly / responsive \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Many will check on phones or tablets.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 If web UI, ensure collapsible fields, simple menus.\cell \row \itap1\trowd \taflags0 \trgaph108\trleft-108 \trbrdrl\brdrnil \trbrdrt\brdrnil \trbrdrr\brdrnil \clvertalc \clshdrawnil \clwWidth4256\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx2880 \clvertalc \clshdrawnil \clwWidth5037\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx5760 \clvertalc \clshdrawnil \clwWidth6106\clftsWidth3 \clmart10 \clmarl10 \clmarb10 \clmarr10 \clbrdrt\brdrnil \clbrdrl\brdrnil \clbrdrb\brdrnil \clbrdrr\brdrnil \clpadt20 \clpadl20 \clpadb20 \clpadr20 \gaph\cellx8640 \pard\intbl\itap1\pardeftab720\partightenfactor0 \f0\b \cf0 Integrations \f1\b0 \cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 E.g. calendar, Slack/email alerts.\cell \pard\intbl\itap1\pardeftab720\partightenfactor0 \cf0 Helps push notifications rather than only manual checking.\cell \lastrow\row \pard\pardeftab720\partightenfactor0 \cf4 \ \pard\pardeftab720\sa298\partightenfactor0 \f0\b\fs36 \cf0 What to avoid / limit to keep usability\ \pard\pardeftab720\sa240\partightenfactor0 \f1\b0\fs24 \cf0 These things often add data/noise or complexity, so either avoid or gate them behind \'93advanced\'94 toggles.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls1\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Over-broad scraping \f1\b0 : pulling every \'93policy\'94, \'93program info\'94, \'93newsletter\'94, etc. just because capacity keywords appear once.\ \ls1\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Too much automation without oversight \f1\b0 : e.g. hidden deadlines if PDF text parsing fails.\ \ls1\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Overwhelming metadata fields \f1\b0 : stuff like \'93agency budget history\'94, \'93application score weights\'94 etc unless users request them.\ \ls1\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Frequent UI changes or too many fields \f1\b0 \'97 keep interface consistent.\ \ls1\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Large batch of false positives \f1\b0 \'97 this ruins trust quickly.\ \pard\pardeftab720\partightenfactor0 \cf4 \ \pard\pardeftab720\sa298\partightenfactor0 \f0\b\fs36 \cf0 What to build next in your tool\ \pard\pardeftab720\sa240\partightenfactor0 \f1\b0\fs24 \cf0 Here are prioritized improvements/next features for your tool to make it more powerful while preserving clarity:\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 1 }\expnd0\expndtw0\kerning0 Deadline extraction / detection \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 From Grants.gov API: likely available.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 From scraped state pages / PDFs: attempt to parse \'93deadline\'94, \'93closing date\'94. If missing, mark as \'93TBD\'94.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 UI: highlight upcoming deadlines (\'93Due in next 30 days\'94).\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 2 }\expnd0\expndtw0\kerning0 \'93Open / Active\'94 flag \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 If RFPs are active or you can detect \'93application now open\'94 in text.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 If not, mark as \'93reference / program\'94 so users know it\'92s structural info, not a live call.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 3 }\expnd0\expndtw0\kerning0 Bookmark / dismiss / feedback \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Users should be able to mark \'93this is useful\'94 or \'93not relevant\'94 to train future filtering.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Possibly store local tags (e.g. \'93my state\'94, \'93my priority\'94).\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 4 }\expnd0\expndtw0\kerning0 Improved link / PDF following \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 As suggested earlier.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Make sure link selectors are fine-tuned for each state source.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 5 }\expnd0\expndtw0\kerning0 Expired / historical items archive \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Hide automatically unless explicitly requested. Keeps main view clean.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 6 }\expnd0\expndtw0\kerning0 Search + sort + filter UI in front end \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Filters: State, source type (federal/state), capacity vs other, keyword.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Sort by deadline, date posted, amount (if available).\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 7 }\expnd0\expndtw0\kerning0 Notifications / reminders \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Let users get alerts (email / Slack / calendar) for items that match their saved filters and have upcoming deadlines.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 8 }\expnd0\expndtw0\kerning0 Confidence score or matching hint \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 For scraped items, display \'93match strength\'94 (how many capacity keywords matched, whether in title vs body). Helps users see which items are likely relevant.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 9 }\expnd0\expndtw0\kerning0 Performance / scheduling \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Check feeds regularly, avoid stale caches.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Maybe incremental ingest (only new items) rather than full crawl all the time.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls2\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext 10 }\expnd0\expndtw0\kerning0 Testing & feedback \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls2\ilvl1\cf0 \kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Ask actual users (your team) to test beta versions and tell you what\'92s too much / too little.\ \ls2\ilvl1\kerning1\expnd0\expndtw0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 Adjust based on real use.\ \pard\pardeftab720\partightenfactor0 \cf4 \ \pard\pardeftab720\sa298\partightenfactor0 \f0\b\fs36 \cf0 Your roadmap can look like this\ \pard\pardeftab720\sa240\partightenfactor0 \f1\b0\fs24 \cf0 Here\'92s a potential plan for the next few sprints:\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls3\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Sprint 1 \f1\b0 (now): Add deadline extraction + \'93active\'94 flag + improved link following for state sources.\ \ls3\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Sprint 2 \f1\b0 : Bookmark/dismiss features + advanced filtering UI + sort by deadline.\ \ls3\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Sprint 3 \f1\b0 : Notifications/reminders + mobile UI polish + confidence scoring.\ \ls3\ilvl0 \f0\b \kerning1\expnd0\expndtw0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 Sprint 4 \f1\b0 : Incorporate JS-rendered sources (Playwright) + archive/historical mode.\ \pard\tx720\pardeftab720\sa240\partightenfactor0 \cf0 \ \pard\pardeftab720\sa240\partightenfactor0 \cf0 \outl0\strokewidth0 \strokec2 Yes\'97exactly. We can treat the roadmap I outlined earlier as \f0\b four sprints \f1\b0 .\uc0\u8232 Here\'92s a clear \f0\b Sprint 1 plan \f1\b0 (2\'963 weeks is typical) so we can start delivering value quickly while keeping the other sprints in view.\ \pard\pardeftab720\partightenfactor0 \cf5 \strokec5 \ \pard\pardeftab720\sa298\partightenfactor0 \f4\fs36 \cf0 \strokec2 \uc0\u55356 \u57281 \f0\b Sprint 1 \'96 \'93Actionable Deadlines & Better State Data\'94\ \pard\pardeftab720\sa240\partightenfactor0 \fs24 \cf0 Goal: \f1\b0 Surface \f5\i current \f1\i0 and \f5\i timely \f1\i0 grant opportunities\'97especially from PA & MD\'97without flooding users.\ \pard\pardeftab720\sa280\partightenfactor0 \f0\b\fs28 \cf0 Deliverables\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls4\ilvl0 \fs24 \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Deadline Extraction & \'93Active\'94 Flag \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Parse \f2\fs26 deadline \f1\fs24 / \f2\fs26 closing date \f1\fs24 text from Grants.gov (API gives it directly).\ \ls4\ilvl1\kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Add a lightweight NLP/regex extractor for state HTML/PDFs (\'93Deadline\'94, \'93Applications due\'94, etc.).\ \ls4\ilvl1\kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 In the index, add fields: \f2\fs26 deadline_date \f1\fs24 , \f2\fs26 is_active \f1\fs24 (true if deadline >= today or marked open/TBD).\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls4\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 2 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 UI Updates in the Dashboard \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Show deadlines and days-to-close (already in the mock).\ \ls4\ilvl1\kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Add a small \f0\b \'93Active Only\'94 \f1\b0 toggle to hide expired or guideline-only records.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls4\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 3 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Link-Following Enhancements \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Update YAML for \f0\b MD DHCD Press \f1\b0 , \f0\b MTA \f1\b0 , \f0\b PennDOT \f1\b0 , etc. to:\ \pard\tx1660\tx2160\pardeftab720\li2160\fi-2160\sa240\partightenfactor0 \ls4\ilvl2 \f2\fs26 \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f6 \uc0\u9642 \f2 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 parse.follow_links: true \f1\fs24 \ \ls4\ilvl2 \f2\fs26 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f6 \uc0\u9642 \f2 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 crawl.max_depth: 1 \f1\fs24 \ \ls4\ilvl2 \f2\fs26 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f6 \uc0\u9642 \f2 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 link_selectors \f1\fs24 for PDFs / NOFO pages\ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Ensure adapter fetches and normalizes these linked pages.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls4\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 4 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Improved Capacity Filter \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Add a few transportation-related capacity phrases (\'93service capacity\'94, \'93provider capacity\'94) to capture more relevant 5310-type opportunities.\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls4\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 5 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Basic Quality Checks \f1\b0 \ \pard\tx940\tx1440\pardeftab720\li1440\fi-1440\sa240\partightenfactor0 \ls4\ilvl1\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Logging: show counts of items skipped due to expired deadlines or missing text.\ \ls4\ilvl1\kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \f3 \uc0\u9702 \f1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Quick manual review with your team to confirm that the new records are genuinely grant opportunities.\ \pard\pardeftab720\partightenfactor0 \cf5 \strokec5 \ \pard\pardeftab720\sa298\partightenfactor0 \f4\fs36 \cf0 \strokec2 \uc0\u55357 \u56621 \f0\b Sprint 2\'964 Preview\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls5\ilvl0 \fs24 \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Sprint 2: \f1\b0 Bookmarks & Dismiss, Advanced Filtering UI, Sorting by deadline/confidence.\ \ls5\ilvl0 \f0\b \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Sprint 3: \f1\b0 Notifications (email/Slack/ICS calendar) + mobile UI polish + confidence scoring display.\ \ls5\ilvl0 \f0\b \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext \uc0\u8226 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Sprint 4: \f1\b0 Full \f0\b JS-rendered \f1\b0 source support (Playwright for MD OneStop etc.) and historical archive mode.\ \pard\pardeftab720\partightenfactor0 \cf5 \strokec5 \ \pard\pardeftab720\sa298\partightenfactor0 \f0\b\fs36 \cf0 \strokec2 Next Steps to Kick Off Sprint 1\ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls6\ilvl0 \fs24 \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 1 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Confirm dev environment \f1\b0 \'96 you already have \f2\fs26 grants-rag \f1\fs24 running locally.\ \ls6\ilvl0 \f0\b \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 2 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Create a new branch \f1\b0 :\uc0\u8232 \f2\fs26 \uc0\u8232 \u8232 \u8232 git checkout -b sprint1-deadline-active-flag\ \pard\tx220\tx720\pardeftab720\li720\fi-720\partightenfactor0 \ls6\ilvl0\cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 3 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 \uc0\u8232 \u8232 \f1\fs24 \ \pard\tx220\tx720\pardeftab720\li720\fi-720\sa240\partightenfactor0 \ls6\ilvl0 \f0\b \cf0 \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 4 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 Add extraction utilities \f1\b0 \uc0\u8232 \f5\i Regex for state HTML/PDFs \f1\i0 and update \f2\fs26 _normalize_web_record \f1\fs24 to accept \f2\fs26 deadline_date \f1\fs24 and \f2\fs26 is_active \f1\fs24 .\ \ls6\ilvl0 \f0\b \kerning1\expnd0\expndtw0 \outl0\strokewidth0 {\listtext 5 }\expnd0\expndtw0\kerning0 \outl0\strokewidth0 \strokec2 UI \f1\b0 : enable the \f0\b Active Only \f1\b0 toggle (mock is already designed for it).\ \pard\pardeftab720\partightenfactor0 \cf5 \strokec5 \ \pard\pardeftab720\sa240\partightenfactor0 \f0\b \cf0 \strokec2 Timeline suggestion: \f1\b0 2 weeks dev + 1 week QA / user feedback.\uc0\u8232 Once Sprint 1 is merged, we\'92ll have a tool that surfaces only \f5\i active \f1\i0 capacity-building grants with clear deadlines\'97exactly the balance of \'93rich data without overload\'94 we\'92re after.\ \pard\pardeftab720\partightenfactor0 \cf0 \ \ \ \ \ \ \ \pard\pardeftab720\sa240\partightenfactor0 \cf0 \ \pard\pardeftab720\partightenfactor0 \cf0 \ \pard\pardeftab720\qc\partightenfactor0 \f7\fs22 \cf6 \strokec6 \ \pard\pardeftab720\partightenfactor0 \f1\fs24 \cf0 \strokec2 ChatGPT can make mistakes. Check important info.\ \pard\tx720\pardeftab720\sa240\partightenfactor0 \cf0 \outl0\strokewidth0 \ }