A lightweight and customizable countdown widget built using the Scriptable app, powered by Google Sheets. It helps you track upcoming events like birthdays, anniversaries, or deadlines—right from your iOS home screen.
Mention: Minimal design widget https://jvscholz.com/blog/countdown.html if the links dosent work look in the backup foolder
The widget fetches events from a Google Sheets Web App link and automatically displays the nearest upcoming event(s). Depending on widget size and provided parameters, it can show:
col
parameter)Create a sheet like this:
name | date | icon | color |
---|---|---|---|
Mom | 2003-09-25 | 🎂 | #2980b9 |
Dad | 1975-07-01 | 🎂 | #F79F39 |
Ensure dates are formatted as
YYYY-MM-DD
.
function doGet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
const events = [];
for (let i = 1; i < data.length; i++) {
const [name, date, icon = "🗓️", color = ""] = data[i];
if (!name || !date) continue;
let formattedDate = date instanceof Date
? Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy-MM-dd")
: date;
let event = { name, date: formattedDate, icon };
if (color) event.color = color;
events.push(event);
}
return ContentService.createTextOutput(JSON.stringify(events))
.setMimeType(ContentService.MimeType.JSON);
}
In your countdown.js
file, update:
const SHEET_API_URL = "https://script.google.com/macros/s/YOUR_ID/exec";
Then save the script in Scriptable.
If you see a ❗ warning or square character instead of the repeat icon, it’s likely because the required icon font isn’t available. To fix this:
repeat.png
icon from the repository’s assets
folder (or use your own).iCloud Drive > Scriptable > .assets
folder.repeat.png
🔧 Tip: You can replace
repeat.png
with any custom icon (e.g., circular arrows) — just make sure it’s 60x60 px and in PNG format.
Option A – Upload Method
CountdownWidget.js
script from this repository.Scriptable
folder in your iCloud Drive (this folder is created automatically after installing the Scriptable app).Option B – Manual Method
Countdown Widget
).Use the following options when editing the widget:
Option | Defaults | Change to |
---|---|---|
Script | Choose | Widget Name (e.g., Countdown Widget) |
While Interacting (optional) | Open App | Run Script |
Parameters | Text |
|
Here’s a Screenshot of widget’s config panal
[!NOTE]
col
parameter works only for Medium and Large widgets.
- Medium widget shows top 4 events.
- Large widget shows top 10 events.
If no
col
is used, widget defaults to list view:
- Medium: top 3 events.
- Large: top 7 events.
In small widgets:
Type any name from your Google Sheet (e.g.,
mom
,dad
) to show that person’s event.
- If the emoji is 🎂, it will automatically append
's Birthday
.- If it’s 🥂, it appends
's Anniversary
.- It only supports these two emojis, but you can always add more to your liking by updating the
titleSuffixes
array.- You can also use numeric indexes (e.g.,
1
,2
) to select an upcoming event by position.- Default is the most upcoming event.
Using
age
shows the years passed since the event date — useful for birthdays or anniversaries.- If today is the event date, countdown is hidden and only age is shown.
- Pagination (
pg
):
Use
pg1
,pg2
,pg3
, etc., to display multiple pages of events.
- In list view (default):
- Medium widget: each page displays 3 events.
- Large widget: each page displays 7 events.
In grid view (
col
):
- Medium widget: each page displays 4 events.
- Large widget: each page displays 10 events.
Example:
pg2
: shows the second page of events.col,pg3
: shows the third page of events in grid view.Offline Fallback & Regular Sync:
- Events are automatically cached locally in the
.cache
folder.- Widget gracefully falls back to cached data when offline.
- Data automatically updates daily at 2:00 AM.
Small Widgets
Medium Widgets
| |
|
|:–:|:–:|
Large Widgets
| |
|
|:–:|:–:|
Have feature ideas or issues? DM me on Instagram or email me at rushiofficial1205@gmail.com.
Widgets shouldn’t be limited to timers—I’d love to build tools that help you passively learn, reflect, or stay organized. If you have a unique concept in mind, I’d love to collaborate.
This project is licensed under the MIT License.
Feel free to fork, build upon, and remix with attribution.
##
Enjoy using this widget ~ RP