Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Some things to bear in mind: it does not handle all the requirements one would imagine for a FOIA request system. It is not "designed". In fact, it is laid out (and screengrabbed below) for a mobile phone, so that we can focus on interactions rather than aesthetics and filling space. It also doesn't "work", in the sense that no requests are emailed or otherwise transmitted out of the system (though they are saved).
Functionally, the below is a Jekyll site, using the code in this repository, 18f/foia-hub, and at request-time, talks to a Django API in 18/foia-core. It uses contact data in 18f/foia from an associated Python scraper for FOIA.gov. Our other repo, a Node app at 18f/foia-search, is not used here.
The home page...
...is pretty bare and nothing works! The search box doesn't point to anything, and the blog post snippets are just ripped from OIP's FOIA blog.
Clicking the "Request" tab at the top brings you to an agency selection screen. It is blunt, just an agency name selection, using Twitter's typeahead.js library. It defaults to showing all agencies:
But supports autocomplete:
Only GSA and OSTP work.
There's obviously a lot more to be done there, like matching on keywords, descriptions, and even FOIA response metadata and documents, to get people routed to the right place. Also, these are populated by the ~99 top-level "agencies" as listed on FOIA.gov, and it probably makes sense to put some lower-level "offices" with their own strong identity and independent line of work (like the FBI) alongside top-level agencies.
Selecting an agency brings you to a landing page for them, with a basic description of their agency, and some common FOIA requests. This description is taken from existing data, but should really be better optimized for FOIA. The "common requests" section was written by me.
Some basic contact information - name and email, no phone number or address requested. Optionally, we added a couple date fields to help scope the request in a structured way.
The date field pops out a pretty spiffy date picker, using pickadate.js.
We also have a couple of GSA-specific fields on the GSA form, as adapted from their current online form.
Finally, we have a couple form fields around fees. We tried to collapse a somewhat complicated question (can we proceed with any fee-incurring work? if so, how much will you bear?) into one input field. The fee input field syncs with the bolded number automatically.
If the waiver box is checked, a text field appears to fill out.
When a request is submitted, a success message is shown, with a simple auto-incremented (and zero-prefixed) tracking number assigned, along with the agency's contact info. This doesn't actually initiate any emails right now, though the request data is stored in a database.
Some things we're working on next: