Skip to content

dmuth/IsSeptaFcked

Repository files navigation

What is this?

This is the code repository for the IsSEPTAFcked.com Or, if you are a regular commuter on SEPTA: IsSEPTAFucked.com

Screenshot: Screenshot

Why the profanity?

This, and many more questions are answered in the FAQ: http://www.isseptafucked.com/faq

How does it work?

Once every minute, it makes an API request for SEPTA's Regional Rail trains.
It then esitmates "fuckedness" as follows:

  • All trains < 10 minutes late: Not Fucked
  • 1 or more trains >= 10 minutes late and < 30 minutes late: A Little Fucked
  • 1 or more trains >= 30 minutes late: Fucked

If you have any questions, feel free to reach out to me. I can be reached here on GitHub or through the many social networks I am on: http://www.dmuth.org/contact

Media Coverage

Awards

Never thought I would win an award for profanity, Yet here we are. IsSeptaFucked won the "Best Side Prject" award in the NET/WORK Philly 2017 awards.

Architecture Overview

For fellow nerds out there, here's a brief rundown on how the various node.js modules are laid out:

  • views/ - Jade templates for public facing pages.
  • public/ - CSS and the site's robots.txt
  • node_modules/ - Modules installed with npm.
  • lib/logger.mjs - Handles custom logging in Express. Heroku uses proxies, and I would like to log the IP that incoming requests are forwarded for.
    • lib/septa/rr/api.mjs - Module that actually connects to SEPTA's Regional Rail API, and translates their data into something we can actually use.
    • lib/septa/rr/main.mjs - The main function in here is called at Express boot time, and it is responsible for calling SEPTA's API once a minute. It is also responsible for determing the level of "fuckedness" of Regional Rail.
    • lib/septa/rr/text.mjs - Create messages based on the lateness data.
    • lib/septa/bus/api.mjs - Module that actually connects to SEPTA's bus API, and translates their data into something we can actually use.
    • lib/septa/bus/main.mjs - The main function in here is called at Express boot time, and it is responsible for calling SEPTA's bus API once every 5 minutes. It is also responsible for determing the level of "fuckedness" of Regional Rail.
    • lib/septa/bus/text.mjs - Create messages based on the lateness data.
  • lib/sfw.mjs - Makes the determination if we are running under the SFW domain, and does filtering of strings.
  • routes/ - Each file in here corresponds to the same named URI, and handles requests to that URI.

Development

In Docker Compose

In Docker

./bin/docker-build 

Now, go to http://localhost:5000/

The reason this script exists is to wrap some of the underlying complexity with the build process.

In bash in Docker

./bin/docker-build bash

The Manual Way

Testing

At some point I'd like to have unit testing, but because the functionality of the website is relatively limited, at the current time it's quicker to uncomment sections of the code that have the string // Debug in order to change behavior of the site for texting purposes. Debug code can be found in these files:

  • lib/septa/rr/main.js
  • lib/septa/rr/api.js
  • lib/septa/rr/text.js
  • lib/septa/bus/main.js
  • lib/septa/bus/api.js
  • lib/septa/bus/text.js

Deployment in Fly.io

  • flyctl deploy - Deploy the app
  • ./bin/fly-deploy - Deploy the app. This will set the Git SHA1 and Build Time variables
  • flyctl status - Check the status of the app
  • flyctl log - Watch the app log in real-time
  • flyctl apps open - Open the website in the browser
  • flyctl ips list - List IPs

Additional troubleshhoting can be found at https://fly.io/docs/getting-started/troubleshooting/.

TODO

  • Express 4
  • Proper testing

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Contributors 3

  •  
  •  
  •