Overview
TickBase is a developer-first market data platform for FX rates, precious metals, historical time-series, and conversion workflows. It collects market data inputs, normalizes them into a unified schema, caches fresh snapshots, stores history, and exposes the result through a rate-limited API.
This is a self-directed SaaS product that I planned, designed, implemented, deployed, and maintain. The product is built for developers who need reliable market data infrastructure without wiring together separate data ingestion, account systems, quota enforcement, and deployment plumbing themselves.
Product Architecture
- Polyglot monorepo - The project combines Go services (
apps/api-go,apps/collector-go,apps/monitor-go), a Laravel account service (apps/account), a React Router v7 dashboard (apps/dashboard), an Astro website (apps/website), and shared package contracts for plans, types, and API documentation. - Market data collection -
collector-gopolls FX and metals data through an ingestion adapter layer, then normalizes, validates, deduplicates, and persists both latest snapshots and historical ticks. - USD-pivot model - TickBase collects USD-denominated data only. Non-USD FX pairs, metal prices, and conversion results are derived on read through the latest USD cross-rates, keeping the collection surface compact while the API remains flexible.
- Cache-first public API -
api-goserves a read-only REST API for FX, metals, symbols, status, historical data, conversion, and OHLC queries. It prefers Redis for low-latency reads and falls back to PostgreSQL / TimescaleDB when needed. - Entitlements and billing - The Laravel account service owns registration, Sanctum SPA authentication, API key lifecycle, plan state, Stripe billing via Cashier, and entitlement distribution to Redis.
api-govalidates API keys without reading the account database directly. - Rate limits and quota - Requests are controlled by per-IP safeguards, per-key rate limits, and per-account monthly quota. Live keys are metered; test keys can be used for integration without consuming monthly quota.
- Production deployment -
thetickbase.comanddashboard.thetickbase.comrun on Cloudflare Pages, whileapi.thetickbase.comandaccount.thetickbase.comreach a Docker Compose stack on a VPS through Cloudflare Tunnel. The origin exposes no public inbound ports. - Data separation - Account data and market data live in separate PostgreSQL databases. The Go API uses a read-only role for market data and has no grants on the Laravel-owned account database.
Key Features
- Unified market data API - Latest and historical FX rates, precious metals spot prices, conversion endpoints, symbol metadata, data status, and OHLC aggregation.
- Developer onboarding - Dashboard-based API key creation, rotation, revocation, usage visibility, and billing plan management.
- Plan-based access control - Free, Developer, and Business plans map to monthly quota, rate limits, history depth, multi-base access, OHLC support, and active key caps.
- Operational monitoring - Internal monitoring checks API health, Redis, TimescaleDB freshness, and public status data so production issues can be surfaced quickly.
- Low-ops infrastructure - Static frontends at the edge, containerized backends, GHCR image releases, one-shot migrators, and Cloudflare Tunnel keep the production footprint small and maintainable.






