Sennable

Portfolio / Websites

Acharya Life

An astrology platform whose daily content wrote, committed, and shipped itself — 137 days of readings across five and a half months, on a fifty-cent daily budget.

Built and run by Joel Wickremasinghe

paused — system intact

137

days of unattended daily generation — 4,850 sign readings committed by the cron, Feb 11 – Jul 16 2026

measured · data archive + git history

Problem

What needed to exist

A daily horoscope site is a treadmill: 36 readings a day (Western, Vedic, and Chinese systems × 12 signs), every day, forever. Miss one morning and the product is visibly broken.

The economics had to hold too — daily LLM generation only works if cost is capped in code, not in good intentions.

What we built

The system

A GitHub Actions cron fires at midnight IST and runs the generator: 36 sign readings via DeepSeek V3 on OpenRouter, under a hard $0.50/day cost ceiling coded into the script. Output is committed to git — the repo is the database — the static site rebuilds, and a Slack webhook reports success or failure. It ran this way, hands-free, for roughly five and a half months.

The site itself is Next.js 16 on Vercel, with its planetary mathematics — including the kundli and sidereal modules — running in-process on astronomy-engine. The companion astrology engine, a sibling project, carries a Swiss Ephemeris (pyswisseph) cloud function computing tropical and Lahiri-sidereal positions for eight bodies.

A social engine renders carousels from HTML templates via headless Puppeteer (1080×1350), cuts Ken Burns reels with ffmpeg, and publishes through the Instagram Graph API's container → publish flow, logging platform-issued media IDs as read-back proof. n8n posting workflows were authored but never deployed — and this page says so, because that's the point of it.

Live surface

The thing itself, running

The live Acharya Life homepage: 'Three Paths, One Destiny' over constellation artwork, offering daily horoscopes across Western, Vedic and Chinese astrology.captured 1 August 2026

live website

acharyalife.com

The live site — still serving, though the content pipeline is paused

Open site

live channel

@Acharya-Life

The YouTube channel — 8 videos published

Open channel

Links checked 1 August 2026. Screenshots are static captures — the live site is the source of truth.

Architecture

Acharya Life daily pipeline — as implemented

Acharya Life daily pipeline — as implementedCOMMITREBUILDGH ACTIONScron 00:00 ISTGENERATORdeepseek v3 · $0.50 capGIT ARCHIVE36 readings/dayACHARYALIFE.COMnext.js · vercelSLACK NOTIFYsuccess / failureSOCIAL ENGINEpuppeteer · ffmpegIG GRAPH APImedia-id readback

Stack

Built with

  • Next.js 16 · Vercel
  • GitHub Actions cron
  • OpenRouter · DeepSeek V3
  • astronomy-engine
  • Swiss Ephemeris (pyswisseph)
  • Puppeteer
  • ffmpeg
  • Instagram Graph API
  • Ollama + ComfyUI + LTX-Video (long-form line)
  • edge-tts

Outcome

Numbers, with provenance

137

dated days of generated readings on disk (Feb 11 – Jul 16 2026)

measured · archive folder count

4,850

per-sign reading files generated and committed

measured · filesystem count

134

autonomous bot commits titled 'daily horoscope generation'

measured · git log

$0.50

hard daily cost ceiling, enforced in the generator code

measured · generate-daily.ts

2

Instagram posts verified by platform-issued media IDs (plus 5 YouTube uploads with video IDs)

measured · posted_log.jsonl read-back

[needs: site traffic + social audience]

no analytics exports exist on disk for this pillar

Every figure above is read from the system of record it describes. Gaps are marked, not filled in.

Also in this system

Supporting detail

Swiss Ephemeris, where it actually lives

The daily readings are LLM-written; the precision layer is separate and real: a pyswisseph cloud function in the companion astrology engine computes tropical and Lahiri-sidereal positions for eight bodies, and the in-app kundli math runs on astronomy-engine. We describe each layer as what it is.

The system logged its own failure

When the Instagram token expired, the poster didn't fail silently — 27 consecutive runs recorded BLOCKED with the exact OAuth error, until posting was deliberately switched off on 2026-07-16. Honest telemetry is a feature; this paused pillar is the proof.

Paused, not abandoned

The pillar is paused while other systems earn priority. The pipeline, the data, and the site are intact — a pause with the engine still warm is a scheduling decision, not a failure, and we'd rather show it than hide it.

Want a website that feeds itself?

This platform generated and shipped 137 days of its own content on a fifty-cent daily budget. We build sites with the pipeline included — content, cost caps, and failure alarms designed in from day one.