return

SMS Scheduler

Built after a hackathon — I had unused Twilio credit and, while hanging out with my brother, decided to finally use it. I prototyped a lightweight JS app that runs from a GitHub Actions cron job. This was intentionally a learning experiment: I explored how Actions cron schedules and self-tests work, learned to handle GitHub Secrets safely, and implemented a simple Twilio delivery flow. The project helped turn curiosity into practical automation and informed future improvements (external schedule sources, monitoring, templating).

Node.jsLuxonTwilioGitHub ActionsJSON configLiveNode.jsLuxonTwilioGitHub ActionsJSON configLiveNode.jsLuxonTwilioGitHub ActionsJSON configLiveNode.jsLuxonTwilioGitHub ActionsJSON configLive

The challenge

Send students a concise SMS with the next day's schedule using a simple, cron-driven runner. The goal was to create a lightweight, reliable automation that could run entirely from GitHub Actions while keeping configuration simple and auditable. I focused on clear formatting, timezone-safe scheduling, and safe handling of secrets so the system could be operated with minimal maintenance and clear observability.

The process

  • How GitHub Actions cron works and how to self-test scheduled runs
  • Handling GitHub Secrets safely in workflows
  • Integrating Twilio for reliable SMS delivery
  • Designing a small, testable resolver for parity/overrides and timezone handling

Stack

Node.jsLuxonTwilioGitHub ActionsJSON config

Future ideas

  • Serve schedule from an external API instead of committing JSON
  • Improve templating and localization for messages
  • Add retries/backoff, monitoring and delivery metrics

Other projects