Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
34b3157
fix: redirect logged-out users to login when clicking Follow button
slarson Mar 25, 2026
2e2de7a
feat: lobbying explorer Phase 1 foundation
nesanders Jul 7, 2026
65e87cc
feat: lobbying bills browse page and bill card fixes
nesanders Jul 7, 2026
24d92fb
feat: add lobbying firms and clients browse/detail pages
nesanders Jul 7, 2026
03a12bd
fix: filter sentinel and empty clients from clients browse page
nesanders Jul 7, 2026
96393e5
feat: lobbying overview page with stats, chart, and attribution fix
nesanders Jul 8, 2026
d6e2977
feat: add attribution to all lobbying pages and seed stats script
nesanders Jul 9, 2026
748f507
fix: add lobbyingMeta read rule and move Lobbying after Testimony in nav
nesanders Jul 9, 2026
a918d88
feat: add pagination, subnav, sortable headers, and bill filings deta…
nesanders Jul 9, 2026
efce9f9
fix: i18n all hardcoded strings in lobbying explorer; add mobile resp…
nesanders Jul 9, 2026
6b806da
fix: add archive.py to Dockerfile — was missing from COPY, causing Mo…
nesanders Jul 15, 2026
80901b9
perf: skip already-completed years in backfill to speed up resume
nesanders Jul 16, 2026
aa24b76
feat: lobbying overview chart improvements and stats pipeline
nesanders Jul 20, 2026
9abda4a
fix: improve bill detail page in lobbying explorer
nesanders Jul 20, 2026
eaa0322
feat(lobbying): UI polish pass — position colors, sticky nav, accessi…
nesanders Jul 22, 2026
472fcc8
feat(lobbying): sortable filings column, explainer text, overview pag…
nesanders Jul 23, 2026
2e898ce
Merge upstream/main — resolve Navbar and common.json conflicts
nesanders Jul 23, 2026
f574eb8
perf(lobbying): replace per-court filings scan with pre-computed bill…
nesanders Jul 23, 2026
acc8744
feat(lobbying): rework bills index — multiselect sessions, title/clie…
nesanders Jul 23, 2026
1e037fb
Fix vote modal (#2217)
delexagon Aug 18, 2026
54f24f2
Merge branch 'main' into fix/follow-button-auth-redirect
mertbagt Aug 20, 2026
eb30981
fixage and prettier
mertbagt Aug 20, 2026
cea5e07
moar prettier
mertbagt Aug 20, 2026
76b02d1
Merge pull request #2086 from slarson/fix/follow-button-auth-redirect
mertbagt Aug 20, 2026
e373cec
update README.md
allcontributors[bot] Aug 21, 2026
2a9df5a
update .all-contributorsrc
allcontributors[bot] Aug 21, 2026
9a2a9ba
Merge pull request #2220 from codeforboston/all-contributors/add-slarson
mertbagt Aug 21, 2026
ff5d70c
Merge pull request #2182 from nesanders/lobbying-frontend
Mephistic Aug 24, 2026
7a1fad3
Merge pull request #2224 from delexagon/test-node-22
delexagon Aug 26, 2026
4e88227
Revert "Merge pull request #2224 from delexagon/test-node-22"
Mephistic Aug 31, 2026
7b5d93d
Merge pull request #2229 from codeforboston/revert-2224-test-node-22
Mephistic Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -876,6 +876,15 @@
"contributions": [
"code"
]
},
{
"login": "slarson",
"name": "Stephen Larson",
"avatar_url": "https://avatars.githubusercontent.com/u/1037756?v=4",
"profile": "http://twitter.com/slars0n",
"contributions": [
"code"
]
}
],
"commitType": "docs"
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,39 +242,40 @@ Thanks to all our contributors!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/simk209"><img src="https://avatars.githubusercontent.com/u/122063210?v=4?s=100" width="100px;" alt="Simran Kaur"/><br /><sub><b>Simran Kaur</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=simk209" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://soundarmurugan.com"><img src="https://avatars.githubusercontent.com/u/55850316?v=4?s=100" width="100px;" alt="Soundar Murugan"/><br /><sub><b>Soundar Murugan</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=soundarzozm" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Slam256"><img src="https://avatars.githubusercontent.com/u/96086935?v=4?s=100" width="100px;" alt="Stacey Ali"/><br /><sub><b>Stacey Ali</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=Slam256" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://twitter.com/slars0n"><img src="https://avatars.githubusercontent.com/u/1037756?v=4?s=100" width="100px;" alt="Stephen Larson"/><br /><sub><b>Stephen Larson</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=slarson" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://timblaisdesigns.netlify.app/"><img src="https://avatars.githubusercontent.com/u/97904016?v=4?s=100" width="100px;" alt="Tim Blais"/><br /><sub><b>Tim Blais</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=timblais" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/tommagnusson"><img src="https://avatars.githubusercontent.com/u/11342238?v=4?s=100" width="100px;" alt="Tom Magnusson"/><br /><sub><b>Tom Magnusson</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=tommagnusson" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ujwalkumar1995"><img src="https://avatars.githubusercontent.com/u/20976813?v=4?s=100" width="100px;" alt="Ujwal Kumar"/><br /><sub><b>Ujwal Kumar</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=ujwalkumar1995" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/VenkateshDevarakonda0706"><img src="https://avatars.githubusercontent.com/u/188581366?v=4?s=100" width="100px;" alt="VenkateshDevarakonda0706"/><br /><sub><b>VenkateshDevarakonda0706</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=VenkateshDevarakonda0706" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/VenkateshDevarakonda0706"><img src="https://avatars.githubusercontent.com/u/188581366?v=4?s=100" width="100px;" alt="VenkateshDevarakonda0706"/><br /><sub><b>VenkateshDevarakonda0706</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=VenkateshDevarakonda0706" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/veronicaadler"><img src="https://avatars.githubusercontent.com/u/83320256?v=4?s=100" width="100px;" alt="Veronica Adler"/><br /><sub><b>Veronica Adler</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=veronicaadler" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/YuhaoT"><img src="https://avatars.githubusercontent.com/u/30719318?v=4?s=100" width="100px;" alt="YuhaoT"/><br /><sub><b>YuhaoT</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=YuhaoT" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ananyasinghz"><img src="https://avatars.githubusercontent.com/u/143516466?v=4?s=100" width="100px;" alt="ananyasinghz"/><br /><sub><b>ananyasinghz</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=ananyasinghz" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/arutfield"><img src="https://avatars.githubusercontent.com/u/36383013?v=4?s=100" width="100px;" alt="arutfield"/><br /><sub><b>arutfield</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=arutfield" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/bancona"><img src="https://avatars.githubusercontent.com/u/5554068?v=4?s=100" width="100px;" alt="bancona"/><br /><sub><b>bancona</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=bancona" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/d-ondrich"><img src="https://avatars.githubusercontent.com/u/25425042?v=4?s=100" width="100px;" alt="d.ondrich"/><br /><sub><b>d.ondrich</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=d-ondrich" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/djtanner"><img src="https://avatars.githubusercontent.com/u/3960256?v=4?s=100" width="100px;" alt="djtanner"/><br /><sub><b>djtanner</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=djtanner" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/djtanner"><img src="https://avatars.githubusercontent.com/u/3960256?v=4?s=100" width="100px;" alt="djtanner"/><br /><sub><b>djtanner</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=djtanner" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://www.ekambains.com"><img src="https://avatars.githubusercontent.com/u/182202895?v=4?s=100" width="100px;" alt="ekambains"/><br /><sub><b>ekambains</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=ekambains" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/iWumboUWumbo2"><img src="https://avatars.githubusercontent.com/u/17531877?v=4?s=100" width="100px;" alt="iWumboUWumbo2"/><br /><sub><b>iWumboUWumbo2</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=iWumboUWumbo2" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ishana-goyal"><img src="https://avatars.githubusercontent.com/u/88641809?v=4?s=100" width="100px;" alt="ishana-goyal"/><br /><sub><b>ishana-goyal</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=ishana-goyal" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jamesvas5307"><img src="https://avatars.githubusercontent.com/u/14347149?v=4?s=100" width="100px;" alt="jamesvas5307"/><br /><sub><b>jamesvas5307</b></sub></a><br /><a href="#design-jamesvas5307" title="Design">🎨</a> <a href="#mentoring-jamesvas5307" title="Mentoring">🧑‍🏫</a> <a href="#userTesting-jamesvas5307" title="User Testing">📓</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jellyyams"><img src="https://avatars.githubusercontent.com/u/53629007?v=4?s=100" width="100px;" alt="jellyyams"/><br /><sub><b>jellyyams</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=jellyyams" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jkinzer85"><img src="https://avatars.githubusercontent.com/u/80472427?v=4?s=100" width="100px;" alt="jkinzer85"/><br /><sub><b>jkinzer85</b></sub></a><br /><a href="#userTesting-jkinzer85" title="User Testing">📓</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mertbagt"><img src="https://avatars.githubusercontent.com/u/73559781?v=4?s=100" width="100px;" alt="mertbagt"/><br /><sub><b>mertbagt</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=mertbagt" title="Code">💻</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mertbagt"><img src="https://avatars.githubusercontent.com/u/73559781?v=4?s=100" width="100px;" alt="mertbagt"/><br /><sub><b>mertbagt</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=mertbagt" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mmailloux22"><img src="https://avatars.githubusercontent.com/u/48417120?v=4?s=100" width="100px;" alt="mmailloux22"/><br /><sub><b>mmailloux22</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=mmailloux22" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/mvictor55"><img src="https://avatars.githubusercontent.com/u/71357256?v=4?s=100" width="100px;" alt="mvictor55"/><br /><sub><b>mvictor55</b></sub></a><br /><a href="#business-mvictor55" title="Business development">💼</a> <a href="#projectManagement-mvictor55" title="Project Management">📆</a> <a href="#fundingFinding-mvictor55" title="Funding Finding">🔍</a> <a href="https://github.com/codeforboston/maple/commits?author=mvictor55" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pranay8297"><img src="https://avatars.githubusercontent.com/u/47974414?v=4?s=100" width="100px;" alt="pranay"/><br /><sub><b>pranay</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=pranay8297" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ren0nie0"><img src="https://avatars.githubusercontent.com/u/32780767?v=4?s=100" width="100px;" alt="ren0nie0"/><br /><sub><b>ren0nie0</b></sub></a><br /><a href="#research-ren0nie0" title="Research">🔬</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rockyroed"><img src="https://avatars.githubusercontent.com/u/108738926?v=4?s=100" width="100px;" alt="roed"/><br /><sub><b>roed</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=rockyroed" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sammymyi"><img src="https://avatars.githubusercontent.com/u/105759252?v=4?s=100" width="100px;" alt="sammymyi"/><br /><sub><b>sammymyi</b></sub></a><br /><a href="#design-sammymyi" title="Design">🎨</a> <a href="#userTesting-sammymyi" title="User Testing">📓</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sashamaryl"><img src="https://avatars.githubusercontent.com/u/30247522?v=4?s=100" width="100px;" alt="sashamaryl"/><br /><sub><b>sashamaryl</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=sashamaryl" title="Code">💻</a> <a href="#mentoring-sashamaryl" title="Mentoring">🧑‍🏫</a> <a href="#research-sashamaryl" title="Research">🔬</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sashamaryl"><img src="https://avatars.githubusercontent.com/u/30247522?v=4?s=100" width="100px;" alt="sashamaryl"/><br /><sub><b>sashamaryl</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=sashamaryl" title="Code">💻</a> <a href="#mentoring-sashamaryl" title="Mentoring">🧑‍🏫</a> <a href="#research-sashamaryl" title="Research">🔬</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/shannonh800"><img src="https://avatars.githubusercontent.com/u/113308101?v=4?s=100" width="100px;" alt="shannonh800"/><br /><sub><b>shannonh800</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=shannonh800" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fastfadingviolets"><img src="https://avatars.githubusercontent.com/u/158512193?v=4?s=100" width="100px;" alt="violet"/><br /><sub><b>violet</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=fastfadingviolets" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/yasminekarni"><img src="https://avatars.githubusercontent.com/u/47721405?v=4?s=100" width="100px;" alt="yasminekarni"/><br /><sub><b>yasminekarni</b></sub></a><br /><a href="https://github.com/codeforboston/maple/commits?author=yasminekarni" title="Code">💻</a></td>
Expand Down
10 changes: 10 additions & 0 deletions components/Navbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
NavbarLinkAiTools,
NavbarLinkEffective,
NavbarLinkHearings,
NavbarLinkLobbying,
NavbarLinkProcess,
NavbarLinkWhyUse,
NavbarLinkEditProfile,
Expand Down Expand Up @@ -80,6 +81,9 @@ const MobileNav: React.FC<React.PropsWithChildren<unknown>> = () => {
<NavbarLinkHearings handleClick={closeNav} />
) : null}
<NavbarLinkTestimony handleClick={closeNav} />
{flags().lobbyingTable ? (
<NavbarLinkLobbying handleClick={closeNav} />
) : null}
{authenticated ? <NavbarLinkNewsfeed handleClick={closeNav} /> : <></>}
<NavDropdown className={"navLink-primary"} title={t("about")}>
<NavbarLinkGoals handleClick={closeNav} />
Expand Down Expand Up @@ -235,6 +239,12 @@ const DesktopNav: React.FC<React.PropsWithChildren<unknown>> = () => {
<NavbarLinkTestimony />
</div>

{flags().lobbyingTable ? (
<div className={`align-self-center`}>
<NavbarLinkLobbying />
</div>
) : null}

{authenticated ? (
<div className="align-self-center">
<NavbarLinkNewsfeed />
Expand Down
21 changes: 21 additions & 0 deletions components/NavbarComponents.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,27 @@ export const NavbarLinkBills: React.FC<
)
}

export const NavbarLinkLobbying: React.FC<
React.PropsWithChildren<{
handleClick?: any
other?: any
}>
> = ({ handleClick, other }) => {
const isMobile = useMediaQuery("(max-width: 768px)")
const { t } = useTranslation(["common", "auth"])
return (
<Nav.Item onClick={handleClick}>
<NavLink
className={isMobile ? "navLink-primary" : DESKTOP_NAV_ITEM_CLASS}
href="/lobbying"
{...other}
>
{t("navigation.lobbying")}
</NavLink>
</Nav.Item>
)
}

export const NavbarLinkBallotQuestions: React.FC<
React.PropsWithChildren<{
handleClick?: any
Expand Down
8 changes: 6 additions & 2 deletions components/bill/BillDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Banner } from "../shared/StyledSharedComponents"
import { BillNumber, Styled } from "./BillNumber"
import { BillTestimonies } from "./BillTestimonies"
import BillTrackerConnectedView from "./BillTracker"
import { LobbyingTable } from "./LobbyingTable"
import { LobbyingBillCard } from "components/lobbying/LobbyingBillCard"
import { Committees, Hearing, Sponsors } from "./SponsorsAndCommittees"
import { Status } from "./Status"
import { Summary } from "./Summary"
Expand Down Expand Up @@ -99,7 +99,11 @@ export const BillDetails = ({ bill }: BillProps) => {

<BillTestimonies bill={bill} className="mt-4" />
{flags.lobbyingTable && (
<LobbyingTable bill={bill} className="mt-4 pb-1" />
<LobbyingBillCard
court={bill.court}
billId={bill.id}
className="mt-4 pb-1"
/>
)}
</Col>
<Col md={4}>
Expand Down
Loading
Loading