
It wasn't always perfect, but when I got stuck or a solution was ambiguous, I would come up with my best reasoned guess and implement forward. Most of the time, my solutins were good enough, and there were few changes. I missed the boat a couple times, but since we had something to see and react to, we could finally arrive at a better solution. At the beginning of the project, we thought that each state site (of 11) would be hosted by each state. Everything was set up with this in mind. As time went on, that changed. They were moved to one host, and I should have modularized the repeated scaffolding for each site, but I didn't until a bit later.

One of the more important things to come out of this was some documentation for the API endpoints. I followed the look and structure of some of my favorite documentation that I have used, jQuery and Stripe. Luckily, (actually by design!), the documentation is correct and thorough, because I have had to fall back on it years later when I had forgotten the information contracts between the API and client.

Once the data was normalized, I added a find and replace for the admins where they could find text within the lessons and Companion Resources and edit it directly in the administration system. This made wholesale changes, for example: updating youtube links, a breeze. Something that took several weeks of mind-numbing text swapping could be done in an afternoon.


There was no way to quickly go to different parts of the page. I added a fixed flyout that allows for navigation to any portion of the page.
The relative links did not work. I added functionality to the custom instance of the text editor to add flags into the text for a later swap by the API when calling for the lesson.
I added an autosave to the page that could be turned on or off.
I added a text editor called CKEditor to the textareas to make them more robust and allow for better formatting. Within the editor, I wrote plugins to make some specific tasks easier.