A retro LCD-style personal dashboard designed for old iPads (iPad 2, iOS 9+) β or any browser. Displays the time, weather, and your Google Calendar events for the next 7 days, with a Casio F-91W aesthetic.
- π Real-time clock with DSEG7 LCD font (authentic 7-segment display)
- π€οΈ Live weather via Open-Meteo β no API key needed
- π Calendar β next 7 days across multiple Google Calendars
- π¨ 3 themes β Green (classic), Blue (backlight), B&W (monochrome)
- π± Works on iPad 2 / iOS 9 β no CSS variables, no modern JS
- β‘ Deploy to Vercel in 1 minute β static HTML + 2 serverless functions
- Click the button above
- Set your environment variables (see below)
- Done β your dashboard is live π
Edit index.html and update the coordinates at the top of the <script>:
var LAT = -34.6037; // your latitude
var LON = -58.3816; // your longitudeWorks with Google Calendar, iCloud, Outlook, or any .ics feed.
- In Google Calendar β Settings β [your calendar] β Integrate calendar
- Copy the "Secret address in iCal format" URL
- Set in Vercel environment variables:
CAL_NAME_1=Work
CAL_ICS_1=https://calendar.google.com/calendar/ical/you@gmail.com/private-TOKEN/basic.ics
CAL_NAME_2=Personal
CAL_ICS_2=https://...
If your events show as "BUSY" with the ICS method, use this instead:
- Go to script.google.com β New project
- Paste this code:
function doGet() {
var cal = CalendarApp.getDefaultCalendar();
var today = new Date();
var limit = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000);
var events = cal.getEvents(today, limit);
var result = events.map(function(e) {
var start = e.getStartTime();
var end = e.getEndTime();
var allDay = e.isAllDayEvent();
return {
title: e.getTitle(),
date: Utilities.formatDate(start, 'America/Argentina/Buenos_Aires', 'yyyy-MM-dd'),
dayLabel: ['DOM','LUN','MAR','MIΓ','JUE','VIE','SΓB'][start.getDay()],
dateNum: Utilities.formatDate(start, 'America/Argentina/Buenos_Aires', 'dd/MM'),
start: allDay ? null : Utilities.formatDate(start, 'America/Argentina/Buenos_Aires', 'HH:mm'),
end: allDay ? null : Utilities.formatDate(end, 'America/Argentina/Buenos_Aires', 'HH:mm'),
allDay: allDay,
calendar: 'Personal'
};
});
return ContentService
.createTextOutput(JSON.stringify({ events: result }))
.setMimeType(ContentService.MimeType.JSON);
}- Deploy β Web app β Execute as Me β Anyone can access
- Copy the URL and set:
CAL_APPS_SCRIPT_URL=https://script.google.com/macros/s/YOUR_ID/exec
β οΈ Change the timezone in the script to match yours (America/Argentina/Buenos_Airesβ your timezone)
To keep the iPad always on and locked to the dashboard:
- Open Safari β navigate to your Vercel URL
- Tap Share β Add to Home Screen
- Open from the Home Screen icon (full screen mode)
- Settings β General β Accessibility β Guided Access β Enable, set a PIN
- Triple-click Home β Start β iPad is now locked to the dashboard
Keep it plugged in so it never dies π
- Frontend: Vanilla HTML/CSS/JS (compatible with iOS 9 / Safari 9)
- Backend: 2 Vercel serverless functions (Node.js)
/api/weatherβ proxies Open-Meteo (bypasses iOS 9 TLS issues)/api/calendarβ fetches ICS / Apps Script and parses events
- Fonts: DSEG7 (LCD display font) + Share Tech Mono
- Weather: Open-Meteo (free, no API key)
MIT β do whatever you want with it.
Made with β€οΈ and a recycled iPad 2.
