Final capstone write-up and video

On Monday June 13, I defended my capstone project in a meeting with the advisory committee and today, June 16, I submitted the final write-up for sign-off by the Graduate School.

Here’s the final capstone project document in PDF format.

I also created a 10 minute video that walks through the project:

Capstone project overview

(A correction to the video narration: the Bloomfield Information Project was founded in 2020, not 2022.)

Finally, here are the software repositories mentioned in the write-up and video:

I’m of course very excited to be at this milestone. I offer my thanks and appreciation to everyone who contributed to or supported this project in some way, and to my advisory committee for their guidance and feedback.

I’ll plan to leave this site up for the near future, and have preserved a static HTML version of it for the future in the event that I take down the live version.

Status update for May 2

Following up on previous updates (April 1, Feb 28), here’s another summary of what’s been unfolding with my capstone project work:

Progress

 Plans

  • Per the original project timeline, I’ll be shifting in to compiling and writing up summaries, analysis, project reviews and related discussion, as well as creating a video walkthrough or presentation, as a part of the final project deliverables.
  • As needed, I’ll make myself available to Simon and team for continued refinements or questions about the tool as they increase their usage of it in the daily news harvest workflow.

Problems

  • Carried over from last month, the Bloomfield team has had some challenges locating and contacting additional stakeholders for me to interview (at least one representative reader of the Daily Bulletin, and one person who has provided financial support to the project). Still hoping and expecting to be able to complete these conversations soon.

Testing feedback and refinements

Since delivering the tool I’ve built to Simon and his team for testing, we’ve spent the last few weeks collecting feedback, discussing details and implications of that feedback, making refinements to the tool, and moving toward the point where it is ready for daily use. This post is a walk through of that process.

The first round of feedback that came in was a mix of big picture refresh questions about the data model, smaller aesthetic suggestions, and enhancements/requests around the content curation view:

Initial testing feedback from Simon

(You can continue to view the full feedback spreadsheet here.)

Some of those items were easily addressed through minor refinements, but others were more substantial, so on April 20th, Simon and I did a phone call to talk through them. Here are my rough notes from that conversation:

  • In general we’re going in the right direction, excited to get the “design quirks” ironed out
  • The responsive and mobile-friendly nature of the tool is good
  • Possibility of bringing in a collaborator/consultant Simon has worked with for additional UI feedback later on
  • Conversation about terminology, re-clarifying differences and relationships between Sources and Feeds, and how those will ultimately be managed as the tool expands.
  • Filtering options for the Content Curation view could expand forever, so need to focus on making sure the default view is as helpful as possible to the daily workflow of the news producer
  • Need to switch from notion of “starred” Feeds to a more general way to tag Sources, including a tag like “Top” or “Favorite” that might be selected by default.
  • Would be helpful to be able to quick-add sources from the feed edit screen

Following the call and the subsequent updates to the feedback spreadsheet to reflect our conversation, the plan was for me to deliver the refined version of the tool back to Simon and team by the end of that same week (so, April 22nd) so they could continue their testing.

You can see the ongoing work on the Laravel News Harvester package based on this feedback and other requests by viewing the commit history on GitHub. Again, this package and tool is now available for any other organization to use, benefit from and contribute to.

Continue reading Testing feedback and refinements

Changelog

While working on the software code I’ve been keeping a list of changes over time, using the software tracking tool git. I thought I’d share that “changelog” here for posterity, as I won’t include it in the initial “release” of the software package for public consumption.

These entries may not be entirely clear as they’re usually shorthand summaries of the work that’s just been done. Sometimes they represent just a line or two of code changes, and sometimes they represent many new functions and features coming in all at once. But here they are (in reverse chronological order as of today) in case they’re useful:

2022-04-09
  • Add but don’t use a welcome widget, need to work out width issues
  • News item trend chart
  • Latest news dashboard widget and starred feed activity count
  • Remove default account widget
  • Initial setup for dashboard stat widgets
  • Reorder sidebar for daily workflow
  • Enable dark mode and collapsible sidebar on desktop
  • Add Filament config to our package’s published configs for simplicity
  • Don’t show activity section in create feed form
  • Disable manual creation of news items
  • Specify feed check freq when importing, better docs for import/export
  • Default to only last 7 days of news, show more records per page
  • Make news items globally searchable with useful result formatting
  • Create artisan command, job and schedule for checking bulk feeds
  • Make it look better on smaller devices
  • Align image center within container
  • WIP: news item media display in curation view
  • Support different title generation methods, move fetch history timeframe to config
  • Allow for apparently ridiculously long article URLs
  • Include parent methods in configuring and booted so Filament can load Livewire
2022-04-08
  • Refactor base class structure for better reusability of last check/update functions
  • Docs
  • Docs and clarifications
2022-04-07
  • Icon update for FB items until we can get a real one in there
  • Include feed names in curation view
  • Basic FB post fetching is working
  • WIP: adding bulk feed handling
2022-04-06
  • Start adding some better documentation in README and config
  • Set up package command scheduling
  • Add console command to refresh Crowdtangle feeds
2022-04-04
  • Action to refresh/create feeds from Facebook Pages and Groups
  • Basic setup for Crowdtangle API access
2022-04-03
  • Basic news item index tests
  • Add livewire test to check Source creation through Filament
  • Ridiculous scaffolding to support authenticated users when testing Filament views
  • Load Filament and base laravel migrations so we can test Filament
  • Maybe help testbench with package discovery
  • Add example app key to phpunit for local testing
  • Include Livewire service provider so tests will pass
  • Included deleted feeds and sources for purposes of relationship fetch
  • Visually indicate that feeds are failing in the table
  • Have content curation record URLs go to the article in a new window
  • Expand length of media_url field to accomodate ridiculous image URLs
  • Add feed export command
  • Feed importing is working
  • Initial setup for feed importing

Continue reading Changelog

Side project: CrowdTangle API PHP library

One of the requirements for the tool I’m building is to integrate with the CrowdTangle API to pull the latest posts from Facebook groups and pages for consideration to be included in Bloomfield’s Daily Bulletin.

Since Facebook does not provide API access to Facebook page or group content unless you are an owner/administrator of those pages and groups, CrowdTangle is, as far as I’m aware, the one and only official tool available to journalists and researchers who want to have programmatic access to updates from a large number of Facebook groups and pages.

Here’s what the dashboard looks like on the CrowdTangle site:

CrowdTangle has some good documentation for their API but I was not able to find much in the way of tooling or libraries for interacting with their API, even though it’s used widely by journalism organizations.

Since I would need to build that kind of library for this capstone project anyway, I decided to do it in a way that could benefit other journalism organizations, and created it as an open source package that is now available on GitHub:

So now, anyone building an application in PHP that needs to integrate with CrowdTangle will have a head start that hopefully helps them get up and running much faster.

I let the Facebook/Meta/CrowdTangle folks know about it and they are currently testing it out for inclusion in their documentation. I also shared about it on my personal technology blog. And of course, I’m now making use of it in the Bloomfield web application.

Status update for April 1

Since my last update, things have continued to move forward with my capstone project work:

Progress

  • I finalized and delivered the final application wireframes for the tool I’m building as a part of the capstone.
  • I wrote in detail about one particular aspect of the tool workflow and content curation process that we were finding challenging to figure out.
  • I’m deep into building the actual application software! Here’s an early screenshot from the “create a feed” workflow:

Screenshot of the "Create a Feed" screen

Plans

  • Continue to develop the software application and work toward delivering a first version for testing by the Bloomfield folks next week.
  • Based on feedback and real-world testing, make refinements and re-deliver, repeating that cycle as needed.

Problems

  • The Bloomfield team has had some challenges locating and contacting additional stakeholders for me to interview (at least one representative reader of the Daily Bulletin, and one person who has provided financial support to the project). Still hoping and expecting to be able to complete these conversations soon.
  • Some concerns have come up in the wider tech and journalism communities about the long-term plans for CrowdTangle, a tool that the Bloomfield team uses heavily in their news harvest and that I am working on integrating into the software. There’s nothing actionable on this for the moment but it may change some aspects of how that integration ends up working.
  • Some challenges lining up schedules between the Bloomfield team’s projects/priorities/travel as well as losing some time due to some family illness on my end mean that I’m again not quite where I want to be in terms of schedule. To compensate, I’ll be spending some of April beginning my write-up and summaries (originally intended for May).

Tools for building the software

Now that I’m on my way in actually building the first version of the news harvest tool, I thought I’d say a bit about the software development process itself.

We’ve decided to build this web application using the Laravel application framework. Created in 2011, Laravel is written in the PHP programming language and used around the world for building everything from personal websites to SaaS applications to mission-critical business tools. It’s also a very stable framework with a large community of open source contributors and developers for hire, which means that finding people to add and maintain Laravel functionality is relatively easy compared to more specialized or proprietary tools. All of these things combined set it up as a good choice for the Bloomfield folks to build on in the long term.

In February, I wrote on my personal technology blog about the tools I use for Laravel-based projects, and the list remains applicable here:

To organize and track the work itself, since I’m the only developer working on the project, I’m mostly referring to the mockups, data model and then using a simple text file broken down into “DONE,” “TODO,” and “LATER” sections:

Continue reading Tools for building the software

Wireframes for initial and future project scopes

In this post I’ll share the finalized wireframes that I’ve developed for my initial capstone project work and that also illustrate the possibilities for future phases of development and software tooling. As expected, these wireframes reflect several rounds of wireframe creation, delivery, design discussions, decision-making, wireframe refinement, and then repeating that process.

Here are the wireframes for the capstone project scope:

Allow users to login

Present the user with a dashboard

Continue reading Wireframes for initial and future project scopes

Hard parts of thinking through the content curation workflow

Over the last few weeks I’ve been working with Simon to talk through and refine some wireframe mockups of how the new application/tool could work. I’ll share about those separately soon, but one interesting and important conversation that came out of this process is about how the Bloomfield team does their review of content that comes in through the existing news harvest process, and how that should be reflected in a new workflow and tool.

I made an assumption in the process of developing the mockups that it could work well to see a content item’s original headline in an administrative “curation” view and then, for purposes of rewriting the headline for the project’s Daily Bulletin, either open a new window to view the article/content in its original content, or just go straight to editing the headline in a pop-up modal within the tool.

Here’s one of the original mockups from March 1st showing the proposed feed curation view:

You can see the “Open” and “Edit” buttons for those two proposed ways of working with the content. Open would open a new browser window to the original article, and Edit would do something like this:

Continue reading Hard parts of thinking through the content curation workflow