The Celestial Doses Moon Cycle Bot

The Celestial Doses Moon Cycle Bot

šŸ¦‹ @celestialdoses.bsky.social
š• @celestialdoses

An astrology companion, built for Bluesky and X.

The Moon Cycle Bot shares daily updates on the Moon's sign, phase, and aspects, right in your feed. Reply with your rising sign, and the bot writes back with a short, personalized read on which house the Moon is currently transiting for you, and how that might be showing up in your mood or focus.

What it does:

  • Daily Moon posts. Every morning, the bot posts the current Moon phase and zodiac sign, calculated precisely rather than pulled from a generic label. On Bluesky this runs daily; on X it's limited to New Moon, Full Moon, since X's API is pay-per-use and every post there costs money.
  • Daily Moon aspect posts. A second daily post lists the Moon's major aspects to the other planets for the day, each marked applying (↑) or separating (↓), with retrograde planets noted (Rx). Applying means the aspect is still forming, its influence building. Separating means it's already peaked and is winding down.
  • Personalized replies. Reply to a Moon post with your rising sign (for example, "Virgo rising", or just "Virgo"), and the bot responds with a short, human-feeling interpretation of that transit specific to you, threaded correctly back to your reply.

A note on how to use this
This bot is a creative, educational tool, not a substitute for professional astrology. It can offer a quick, fun spark of insight based on your rising sign, but astrology is a deep and nuanced practice. Working with a human astrologer brings personalized context, full transit work, timing techniques, and wisdom that AI can't replicate. Think of the bot as a daily nudge to stay curious, not a stand-in for real interpretation.

[For the technically curious:]
The bot runs on Node.js, deployed to Fly.io across two regions (iad and sjc) so a regional outage doesn't take it offline, with GitHub Actions handling the schedule: daily cron jobs trigger the Moon phase and aspect posts on both platforms, and checks every five minutes watch for new replies. Reply interpretations are generated with the Vercel AI SDK using OpenAI's gpt-4o-mini, kept short and platform-safe. Moon phase itself is calculated from raw illumination and angle data rather than trusting any single API's phase label directly, which keeps high-illumination days from getting bucketed as "Full Moon" a little too early. Shared state (which replies have already been answered, X's rotating OAuth tokens) lives in a small Redis instance so both regions stay in sync, rather than each machine keeping its own separate copy.

šŸ’» https://github.com/avaldivi/moon-cycle-bot

Changelog

  • August 2026 — Added X (Twitter) posting. Same daily phase/sign updates, aspect posts, and rising-sign replies as Bluesky, cost-gated to the major phases where it makes sense given X's pay-per-use pricing.
  • August 2026 — Moved the bot to run across two Fly.io regions for resilience against regional outages, and migrated shared state (reply tracking, OAuth tokens) to Redis so both regions stay consistent instead of drifting apart.