Tech Stack
Managed services, minimal moving parts, billed only for actual use.
1. Static sites — Cloud Storage + Global Load Balancer
The zojax family of sites and gyumri.coffee are pure static hosting:
- Google Cloud Storage buckets hold the HTML/CSS/JS — one bucket per site or subdomain
- Buckets are configured as websites (main page suffix
index.html) and publicly readable viaobjectViewer - A Global HTTPS Load Balancer routes each hostname to its bucket through Backend Buckets with CDN — content cached at Google edge locations worldwide
- Google-managed SSL certificates cover all domains; an HTTP→HTTPS redirect URL map handles port 80
- A shared
shared/bucket serves common stylesheets and scripts so all sites use identical styling and fonts
Why: zero maintenance, no servers, near-zero cost, effectively unlimited scale for content that changes occasionally.
2. The dynamic platform — Flask on Cloud Run
| Service | Region | Role |
|---|---|---|
| Main site | us-central1 | All pages, auth, analytics, cron triggers, AI-visibility checker |
| Scanner | europe-west1 | Coin scanning — rising coins, grid opportunities, market regime detection |
| Trader | europe-west1 | Bybit API integration — grid bots, futures orders, compounding, position tracking |
The scanner and trader talk to each other over authenticated internal HTTP — score weights flow from trader to scanner; scan results flow from scanner to trader. Subdomains map to Cloud Run services via domain mappings (scan., charts., thumbnails., positions.).
3. GCS buckets as the data layer
The main data bucket is mounted into the service as a volume at /data and accessed through a transparent storage adapter — identical code runs on local disk in development and GCS in production. It holds user accounts, settings, scan results, learned score-weight history, grid bot records, P/L history, equity snapshots, and AI-visibility answer history.
4. Supporting Google Cloud services
- Secret Manager — all credentials as versioned secrets (Bybit keys, Telegram token, Cloudflare tokens, Turnstile, SMTP password, cron secret, seven LLM API keys), injected at deploy time, never stored in code
- Cloud Scheduler — the cron backbone: 15-minute scan jobs, alert flushing, and the daily AI-visibility check, all calling secret-protected endpoints
- Cloud Logging — every request and trade event queryable from the terminal
5. External integrations
- Cloudflare — DNS for all zones, Turnstile CAPTCHA on contact forms, and the GraphQL Analytics API powering the visitor and crawler panels
- Bybit API — spot and USDT-perpetual futures trading, grid bots, wallet queries
- Telegram Bot API — multi-channel alerting (new grids, closures, profits, futures events)
- Seven LLM APIs — OpenAI, Anthropic, Perplexity, Gemini, DeepSeek, xAI, and Mistral, probed daily by the AI visibility checker
- Google Analytics + tawk.to — per-site analytics and live chat; Zoho SMTP for contact-form email
6. Dev workflow
- Source lives in two repos at git.sr.ht
- Deploy is a single
gcloud run deploy --sourcecommand per service — Cloud Build containerizes and ships it - Frontend is server-rendered templates with vanilla JS — no framework, no build step