{"slug": "i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for", "title": "I Was Spending Hours on Bluesky Engagement, So I Built a Serverless AI Bot for Free", "summary": "A developer built a serverless AI bot for Bluesky that runs entirely on free services, using GitHub Actions to schedule posts generated by Google's Gemini API. The bot posts four times daily based on a configurable topic list, and the project is open-sourced on GitHub for others to fork.", "body_md": "A few months ago, I noticed something interesting about Bluesky.\n\nThe people who were growing weren't necessarily posting the most brilliant content. They were simply consistent. They showed up every day, joined conversations, experimented with ideas, and stayed visible.\n\nI wanted to do the same.\n\nThe problem was that I also had code to write, bugs to fix, blog posts to publish, and projects to maintain. Opening Bluesky every couple of hours just to post something or reply to notifications quickly became another distraction.\n\nI knew I needed automation.\n\nNot because I wanted to spam the platform, but because I wanted consistency without sacrificing my development time.\n\nThe obvious solution would have been renting a VPS or deploying another cloud service.\n\nBut honestly, I didn't want another monthly bill.\n\nI started asking myself a different question:\n\nCould I build a Bluesky AI bot that runs entirely on free services?\n\nThat question eventually led me to GitHub Actions.\n\nMost automation tutorials immediately recommend a VPS, Docker container, or cloud function.\n\nThose work well.\n\nBut for a personal automation project, they felt like overkill.\n\nGitHub Actions already gives developers something incredibly useful:\n\nInstead of paying for infrastructure, I could let GitHub execute my script several times a day.\n\nNo servers.\n\nNo maintenance.\n\nNo SSH.\n\nNo uptime monitoring.\n\nJust commit the code and let GitHub handle the rest.\n\nThe entire workflow is surprisingly small.\n\n```\nGitHub Actions (Cron Schedule)\n            │\n            ▼\n      Python Script\n            │\n     Generates Prompt\n            │\n            ▼\n       Gemini API\n            │\n     Returns AI Post\n            │\n            ▼\n      Bluesky API\n            │\n            ▼\n      Publish Content\n```\n\nEvery scheduled run follows the same sequence.\n\nGitHub wakes up the workflow.\n\nThe Python script builds a prompt.\n\nGemini generates a post.\n\nThe script authenticates using a Bluesky App Password.\n\nThe post gets published automatically.\n\nAfter that, GitHub shuts everything down until the next scheduled run.\n\nBecause every run starts fresh, there is no server sitting online waiting for requests.\n\nThe first version wasn't complicated.\n\nI only needed three credentials.\n\nInstead of using my account password, I created an App Password.\n\nThat keeps the account safer because the script never stores the real login credentials.\n\nRather than writing every post manually, I wanted AI to generate ideas from a configurable topic list.\n\nGemini turned out to be a good fit because the API is easy to integrate and generous enough for personal projects.\n\nHardcoding credentials inside Python files is never a good idea.\n\nEverything lives inside GitHub Secrets instead.\n\n```\nGEMINI_API_KEY\nBSKY_HANDLE\nBSKY_PASSWORD\n```\n\nThe workflow loads those variables automatically whenever it runs.\n\nThat means I can share the repository without exposing my credentials.\n\nOne thing I dislike about automation projects is editing Python every time I want to change behavior.\n\nInstead, I moved almost everything into a configuration file.\n\nThe bot's personality.\n\nIts topics.\n\nThe writing instructions.\n\nThe posting frequency.\n\nEverything became configurable.\n\nChanging from a developer account to a cybersecurity account now only takes a few edits inside the configuration file.\n\nNo code changes required.\n\nGitHub Actions uses cron expressions.\n\nMine started with four runs each day.\n\n```\n0 7 * * *\n30 10 * * *\n0 14 * * *\n0 18 * * *\n```\n\nThe nice thing is that nothing is hardcoded.\n\nWant hourly posts?\n\nChange one line.\n\nWant one post every evening?\n\nChange another line.\n\nCommit.\n\nDone.\n\nOnce everything was working reliably, I cleaned up the project and published it on GitHub.\n\nI figured other developers probably had the same problem I did.\n\nInstead of explaining every setup step repeatedly, I made the repository forkable so anyone could clone it, add their secrets, and start experimenting.\n\nIt also became much easier to improve because contributors could submit fixes and new ideas.\n\nThat's one of the reasons I enjoy open source.\n\nSomeone else almost always finds a better solution than you originally built.\n\nHere's where things became interesting.\n\nTechnically...\n\nThe bot worked perfectly.\n\nPosts were being published.\n\nThe workflow never crashed.\n\nGitHub Actions did exactly what it was supposed to do.\n\nBut my profile still felt...\n\nrobotic.\n\nThe bot could publish.\n\nIt couldn't participate.\n\nIt never replied to interesting conversations.\n\nIt never reacted to trending topics.\n\nIt never generated images.\n\nIt never searched for people discussing subjects I cared about.\n\nEvery post happened on a fixed schedule.\n\nIt looked automated because it was automated.\n\nThat realization changed how I thought about social automation.\n\nConsistency alone isn't enough.\n\nReal growth comes from interaction.\n\nInstead of patching more and more features into the original script, I decided to redesign the project from scratch.\n\nThe goal wasn't just scheduling posts anymore.\n\nIt was building something that behaved more like a real content assistant.\n\nThat project eventually became **SkyPulse AI**.\n\nInstead of solving only one problem, it combines several systems into one workflow.\n\n| Basic GitHub Bot | SkyPulse AI |\n|---|---|\n| Scheduled posts | Scheduled posts + intelligent timing |\n| Gemini content | Multi-model content generation |\n| Text only | AI-generated images |\n| Stateless workflow | Context-aware conversations |\n| Manual topic management | Dynamic topic discovery |\n| No engagement | Replies, likes, reposts and follows |\n| Fixed schedule | Human-like delays and activity |\n\nRather than generating a single post every few hours, the system can monitor conversations, respond naturally, discover new content opportunities, and generate visuals automatically.\n\nIt feels much closer to having an AI assistant than running a scheduled script.\n\nThis project taught me several things.\n\nThe first is that free developer tools are much more capable than many people realize.\n\nGitHub Actions isn't only for CI/CD.\n\nIt can power surprisingly useful automation projects.\n\nThe second lesson is that configuration matters.\n\nSeparating prompts and behavior from code makes experimentation much faster.\n\nFinally, automation should remove repetitive work—not authenticity.\n\nThe goal isn't replacing yourself.\n\nThe goal is spending less time repeating simple tasks so you have more time to create things that actually matter.\n\nIf you're curious about the implementation, I've published the complete project along with the [📖 full setup guide](https://www.procwire.com/2026/05/bluesky-automation-bot.html).\n\nIt walks through creating the Bluesky App Password, generating a Gemini API key, configuring GitHub Secrets, editing the workflow schedule, and customizing the bot for your own niche.\n\nIf you'd rather skip building the advanced automation layer yourself, I also customize and deploy the more capable SkyPulse AI framework for creators and businesses who want a hands-off solution.\n\nEither way, I hope this project gives you ideas for your own automations.\n\nSometimes the best side projects don't start with a brilliant idea.\n\nThey start with one annoying problem you get tired of solving manually.\n\nMine just happened to be posting on Bluesky.", "url": "https://wpnews.pro/news/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for", "canonical_source": "https://dev.to/procwire/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for-free-19g2", "published_at": "2026-07-18 06:24:23+00:00", "updated_at": "2026-07-18 06:58:03.692343+00:00", "lang": "en", "topics": ["artificial-intelligence", "generative-ai", "developer-tools", "ai-agents"], "entities": ["Bluesky", "GitHub Actions", "Gemini API", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for", "markdown": "https://wpnews.pro/news/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for.md", "text": "https://wpnews.pro/news/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for.txt", "jsonld": "https://wpnews.pro/news/i-was-spending-hours-on-bluesky-engagement-so-i-built-a-serverless-ai-bot-for.jsonld"}}