PennAhead

How PennAhead stays free

PennAhead is a one-person side project. It has no ads, no logins, no subscription and no investors, and it doesn't sell or share data. It stays free because everything it runs on has a free tier, and PennAhead is small enough to fit inside them. Below is each service, what its free tier allows, and what PennAhead uses (measured September 30, 2026).

The server
Oracle Cloud Always Free (opens in a new tab)

PennAhead and Coolify run together on one Oracle Cloud virtual machine. Oracle's Always Free tier doesn't expire and includes:

  • 2 Arm (Ampere A1) CPU cores and 12 GB of memory in total
  • 200 GB of disk
  • 10 TB of outbound data a month

That's plenty. PennAhead is one small app. A single Node.js process fetches the data, works out the estimates and serves the site. There's no separate database server, queue or worker fleet.

The work doesn't grow with visitors. The server fetches from NJ TRANSIT every few seconds and computes the board once, and every visitor is served that same result.

The data is tiny. The database is about 5 MB after three days and grows by roughly 1 MB a day, so years of data fit in a fraction of the 200 GB.

The pages are small too. Each board refresh is roughly 20 KB compressed, so 10 TB a month covers hundreds of millions of refreshes.

Deploys
Coolify (opens in a new tab)

Coolify is an open-source, self-hostable Platform-as-a-Service (PaaS) that lets you deploy and manage websites, applications, and databases on your own servers. For PennAhead, each update is pulled from GitHub, built into a container and started in place of the old one. Coolify also keeps the app running, restarts it if it crashes, routes web traffic to it, holds its passwords and keys, and keeps the database on storage that survives every update.

Self-hosted Coolify is free. Only its hosted cloud version is paid.

Database
SQLite (opens in a new tab)

A single file on the server's disk. SQLite is public-domain software, so there's no database service to pay for.

Backups
Oracle Object Storage (opens in a new tab)

Always Free includes 20 GB of object storage. PennAhead uploads one compressed backup a day (about 1 MB today) and deletes backups after 30 days, so it uses well under 1% of the allowance.

In front of the site
Cloudflare (opens in a new tab)

Cloudflare's free plan has no bandwidth limit and covers DNS, HTTPS certificates, caching, DDoS protection, a rate-limiting rule that stops any single address from flooding the site, and email forwarding for [email protected].

Notifications
Web Push (opens in a new tab)

Train notifications use the Web Push standard built into browsers. Your browser's own push service (Apple, Google or Mozilla) delivers them for free, with no paid notification service in between.

Uptime alerts
UptimeRobot (opens in a new tab)

UptimeRobot's free plan checks up to 50 addresses every 5 minutes. PennAhead uses one, which checks that the data is fresh.

Code
GitHub (opens in a new tab)

The code lives in a private repository on GitHub's free plan, which includes private repositories and 2,000 minutes a month of automated testing.

Data source
Where the data comes from

Departures, posted tracks, train positions and advisories come from NJ TRANSIT's developer API. Developer access is free and allows 100,000 requests a day. PennAhead makes about 16,000 a day, whether one person or thousands are using it.

Tracks held by LIRR trains come from the MTA's LIRR feed, which is public and needs no key. PennAhead fetches it every 30 seconds, about 215 MB a day, and Oracle doesn't charge for incoming data.

Past track patterns come from an open historical dataset published on Hugging Face under the Open Database License (see Data sources).

Cost
What it does cost

The pennahead.com domain name ($10.46 a year) and the AI tokens used to build it, both paid out of pocket. And the time spent building and checking estimates, with 20+ years of experience designing digital products behind it.

Ads
Why no ads or donations

NJ TRANSIT's data terms don't allow commercial use of its feed. That rules out ads, sponsors, paid features and donations, and PennAhead keeps it that way.

It would be a worse app with them anyway. Ads load other companies' scripts that follow you from site to site, slow the page down, and push the departures aside, on a board you check in a hurry with a train to catch.

So there are no ad networks, no tracking cookies and no accounts. PennAhead keeps only anonymous visit counts, and your data isn't sold or shared with anyone. See Privacy.

Help
How you can help

I designed and built PennAhead for people who share the same Penn Station scramble of watching the board, waiting for a track, then rushing to the right stairs. The more people it helps, the more it does what I made it for.

So if a friend, coworker or family member rides NJ Transit into Penn Station, send them pennahead.com. Word of mouth is the only marketing PennAhead has.

And share feedback at [email protected].

Future
If that changes

If PennAhead ever outgrows the free tiers, the plan is to pay for a bigger server out of pocket, not to add ads, a subscription or a paywall. If there is any change to that plan, it will be posted on this page first.

But, that's not gonna happen.

Signature of PennAhead's maker

Last updated September 30, 2026