Every morning was the same scene in our kitchen: everyone pulling out phones to check the weather, looking up bus times, double-checking the family calendar. Phones getting sticky while cooking, getting lost in breakfast chaos, running out of battery at the worst times. Then I looked at the old iPad mini 2 sitting in my drawer – too old for modern apps, but with a perfectly good screen.
Spoiler alert: Now when this display occasionally goes black, my family gets completely disoriented.
The Setup
Here’s what I used:
- iPad mini 2 (any old tablet would work)
- Basic aluminum tablet stand ($12)
- Regular charging cable
- Power outlet near the fruit basket
- Kiosk app from the App Store (keeps the screen on and shows the dashboard full-screen)
For the backend:
- WordPress installation on a Linode server (managed via SpinupWP)
- Custom plugin for TfL bus times
- Custom plugin for Google Calendar integration
- Public WordPress weather plugin
- Some basic theme modifications
Getting WordPress Ready
[Technical details about WordPress setup via SpinupWP, optimal cache configuration, etc.]
Building the TfL Integration
Transport for London “Stop Point” API:
https://api.tfl.gov.uk/swagger/ui/index.html?url=/swagger/docs/v1#!/StopPoint/StopPoint_Get
$url = 'https://api.tfl.gov.uk/StopPoint/{nnnnnnnnnW}/Arrivals';
$response = wp_remote_get($url);
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body );
usort($data, function($a, $b) {
return strtotime($a->expectedArrival) - strtotime($b->expectedArrival);
});
Adding Google Calendar
use ICal\ICal;
function get_todays_events($url){
$ical = new ICal($url);
$today = date('Y-m-d');
$events = $ical->eventsFromRange($today . ' 00:00:00', $today . ' 23:59:59');
return $events;
}
Configuring the Display
The key to making this work was keeping it simple. The display shows exactly five things:
- Current time (digital, because my kids complained about analog)
- Today’s date
- Current weather and forecast
- Next few buses from our local stop
- Family calendar for today/tomorrow
That’s it. No fancy widgets, no complex dashboards, no smart home controls. Just the stuff we check twenty times a day anyway.
The Theme Setup
[Details about theme modifications for full-screen display, dark mode, etc.]
Making It Reliable
[Configuration details about caching, error handling, automatic recovery]
Stuff That Might Trip You Up
If you’re setting this up yourself, watch out for these gotchas:
- iPad will try to be helpful and dim the screen – that’s why we use a kiosk app
- WordPress default caching can make bus times stale – here’s how to fix that
- Google Calendar API has rate limits – here’s how to handle them
- Browser will try to reload at midnight – here’s the fix
All The Things I Worried About (That Didn’t Matter)
Before I started, I had all these concerns. Here’s how I worked through them:
“Won’t keeping it plugged in 24/7 kill the battery?”
Look, it’s an old iPad that was sitting in a drawer. If being plugged in eventually kills the battery… so what? Best case: it keeps working for years. Worst case: it dies and I can finally recycle it with a clear conscience. (Though I might keep the screen for another project…)
“What about screen burn-in?”
Modern LCD screens are pretty resistant to burn-in. But even if it happens – again, so what? This is a dedicated display now. It’s not like I’m going to go back to using it as a regular tablet.
“How do you keep it from going to sleep?”
This one’s actually simple: I used a kiosk app from the App Store. It keeps the screen on and displays the dashboard full-screen. No need to fight with iOS settings or worry about overnight restarts.
“Isn’t this overkill just for showing basic info?”
Ask my family when the display occasionally goes black. The collective disorientation suggests not. Sometimes the “proper” solution isn’t the simplest one, but it’s the one that actually works for you.
“What about security?”
It’s just displaying a webpage. No sensitive data stored on the device, no banking apps, no personal photos. If someone really wants to hack my shopping list and see that we need oat milk, they can have at it.
“What if X breaks?”
Then it breaks. The whole setup cost me a $12 stand and some time. The iPad was just gathering dust anyway. This is about making something useful, not precious.
The Real Test
You know something’s actually useful when it breaks. Every now and then the dashboard goes black for whatever reason, and suddenly:
- “When’s the next bus?”
- “Do we need jackets today?”
- “What time is it?”
- “Is there anything on the calendar?”
Somehow this old iPad became mission-critical kitchen infrastructure. Not bad for something that was gathering dust a few months ago.
The Code
All the code mentioned above is available on GitHub: https://github.com/dashpadd/
The setup isn’t exactly simple – you need to be comfortable with WordPress development and API integration. But if you’ve got an old tablet lying around and some dev skills, you might be surprised how useful it can become.
Got questions or suggestions? Drop them in the comments below or find me on Twitter.