Just a simple project focusing on scrape data related with economics for who need answer to take decision into market, processed with multiple sources data and openrouter LLM for describe the market tension, I called this apollo.
Basically this app just collect data from trusted platform who updates related economic topic, wrap it up become one data and analyze with openrouter LLM autoselect free model, then send the result to social chat platform telegram for now.
Errors and structured events are logged via evlog — one wide event per failure with full context, no scattered lines.
For the future plan focusing integrate to stackyrd pkg which diameter-tscd project, frontend and manageable web-content.
- Bun (latest)
- PostgreSQL database / Supabase
- OpenRouter API key
- Telegram bot token (from @BotFather)
# Clone the repository
git clone https://github.com/GabrielTenma/apollo-bun.git
cd apollo-bun
# Install dependencies
bun install
# Configure environment variables
cp .env.example .env
# Edit .env and fill in your credentials# Development — Vite frontend + Elysia backend in separate terminals
bun run dev # Terminal 1: Elysia backend on :3000
bun run web:dev # Terminal 2: Vite frontend on :3001
# Build frontend + start production server (serves frontend from :3000)
bun run web:build # Build React app → dist/web/
bun run start # Start Elysia server (serves API + frontend)The Elysia server serves the React frontend from http://localhost:3000/ using Elysia's native file() helper. API routes are prefixed under /api/v1/, /telegram/, etc. CORS allows localhost:5173, localhost:3001, and localhost:3000.
Build and run with Docker. The image is based on oven/bun:1-distroless.
docker build -t apollo .
docker run -p 3000:3000 --env-file .env apolloEnvironment variables are passed via --env-file or -e. The frontend is baked into the image at build time (served by Elysia file() from /).
Exposed port: 3000. Health check: GET /health → {"status":"ok"}.
For architecture details, see DESIGN.md.
Use Apache 2. See LICENSE for deal your free time.

