tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#three-sites-one-app')" >Three sites, one app
LST had grown into three sites: lawschooltransparency.com, LST Reports and the PreLaw Platform. I merged them into one Laravel app, with redirects so every old link kept working, then cut the features nobody used.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#every-school-laid-bare')" >Every school, laid bare
Every ABA school gets a profile: jobs, admissions, salaries, bar passage, costs, environment and part-time programs, each charted over a decade. Trisha redesigned the profiles, overview cards and schools landing; I built the controllers and data model underneath. Students compare up to four schools side by side, or browse by state.
A report built around you
Students enter their LSAT, GPA, where they want to work, how much debt they'll take on and what matters to them, and get a personal list of schools: admission chances on a five-step scale, a job score, and what the degree will really cost. I built the original report and the admission-chance model; Trisha redesigned the onboarding and the budget and debt views.
A new year of data, every year
Each December the ABA's new numbers come out. I imported them and rebuilt every derived table (scores, comparisons, reports, states) from SQL views with one command, which CI runs too. Trisha added a salaries page from College Scorecard data.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#trends')" >Trends
National data on enrollment, tuition, debt and legal jobs going back to 1985. I brought it in from the old data site; Trisha made its sections configurable and moved its charts to Vue. Later I moved it onto LawHub, where it's still live today, still served by our app.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#signing-in-with-lsac')" >Signing in with LSAC
I built the sign-in, sign-up and sign-out flows on LSAC's single sign-on, then a LawHub-branded theme with its header and footer from Contentful, routed through LawHub's own front end.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#podcasts-with-an-ai-producer')" >Podcasts with an AI producer
LSAC's podcasts, I Am the Law, Women in the Law and Keeping Up to Data, run on our app. Episodes are imported from RSS, GPT picks each episode's guest, playlists and tags, and there's an embeddable player. It's still live at LawHub.
tapped = false, 1500); navigator.clipboard?.writeText(location.href.split('#')[0] + '#built-to-keep-shipping')" >Built to keep shipping
Upgrades to Laravel 9 and 10
Trisha's move from Bootstrap and jQuery to Tailwind and Vue 3
Pest tests and Playwright end-to-end tests in CI
Paid career assessments, with Stripe and Avalara
Dark mode