GAYA stands for Government Auction Yield Analytics.
An automated analytics system for Indonesia's FR and PBS bond auctions, combining a private per-series machine-learning engine, weekly data orchestration, and a continuously deployed public dashboard.
GAYA turns the next government bond auction into a compact, series-level view. Select an FR or PBS series to compare awarded weighted-average yield (WAY) history against the model path and its published lower and upper bounds.
The dashboard shows:
- the instruments listed for the upcoming DJPPR auction;
- one independently fitted model for each eligible bond series;
- historical actual WAY versus the corresponding backtest prediction;
- the next prediction with lower and upper bounds;
- coupon, remaining tenor, maturity date, and auction window.
Auction coverage and realized yields are anchored to announcements published by the Directorate General of Budget Financing and Risk Management (DJPPR), Ministry of Finance of the Republic of Indonesia. The source is kept visible so every series, auction date, and realized WAY shown by GAYA can be traced back to an official release.
Direct screenshot of the official DJPPR auction-result announcement, captured in Mozilla Firefox on 9 August 2026. Click the image to open the source page.
| Official publication | Role in GAYA |
|---|---|
Rencana Lelang |
Establishes the upcoming auction date, settlement date, eligible series, coupon, and maturity. |
Hasil Lelang |
Supplies realized weighted-average yield, awarded nominal, incoming bids, and bid-to-cover for historical observations. |
| Public GAYA release | Exposes only the auction context, actual history, model projection, and published bounds required by the dashboard. |
The dashboard is the delivery surface; the GAYA Engine is the private machine-learning computation layer behind it. Every auction cycle is rebuilt from source data, evaluated per eligible bond series, and passed through a release gate before any public artifact is produced.
| Cycle | Schedule | Public-safe outcome |
|---|---|---|
| Auction preparation | Monday · 08:15 WIB | Resolve the next auction and persist the eligible FR/PBS universe. |
| Engine refresh | Tuesday · 09:05 WIB | Refresh validated inputs, rebuild eligible series models, and evaluate the release. |
| Actual-result refresh | Tuesday · 16:05, 19:05, 22:05 WIB; Wednesday · 09:05 retry | Match official realized WAY by auction date and series, including when the following week's series universe changes. |
| Continuous delivery | Successful release only | Publish one sanitized payload and trigger the production dashboard build. |
| Engine stage | Responsibility | Exposure |
|---|---|---|
| Auction intake | Resolve the next auction, settlement schedule, and eligible FR/PBS universe from official publications. | Private |
| Data layer | Assemble and validate model-ready histories and contextual inputs for each series. | Private |
| Per-series ML forecasting | Fit, evaluate, and generate an independent projection for every eligible bond code. | Private |
| Release gate | Check observation sufficiency, output validity, and diagnostics; retain the last valid release when a run is not publishable. | Private |
| Prediction contract | Serialize only display-ready actuals, projections, bounds, instrument metadata, and timestamps. | Public |
Model boundary: no training dataset, feature recipe, fitted parameter, diagnostic output, serialized model, or callable inference code is shipped to the browser. The public application receives only the sanitized prediction contract. Client-side C++, WebAssembly, and minification are not treated as model protection because browser-delivered code remains inspectable.
If a scheduled auction is unavailable or a series does not have enough observations, the last valid public release remains in place.
SPN, SPNS, and PBSG instruments are intentionally excluded from the public model board.
The public application has no login, browser-side model, secret key, or user input form. It reads the current sanitized release from public/data/predictions.json. Dated public-safe snapshots remain under public/data/releases, so realized results are retained even when the next auction contains different series. Model fitting and sensitive inputs remain in the private pipeline.
GAYA is designed to operate at $0 per month on the current schedule and traffic profile. The estimate uses successful workflow durations, configured timeout ceilings, and vendor free-tier limits available on 9 August 2026.
| Cost center | Free allowance | GAYA operating estimate | Reset |
|---|---|---|---|
| GitHub Actions | 2,000 Linux runner minutes/month | Approximately 17–20 minutes/month under normal runs; below 200 minutes even if both weekly jobs reach their configured timeouts. | Billing cycle |
| Cloudflare Workers Builds | 3,000 build minutes/month | Approximately 4–5 production builds/month; at most 100 minutes if every weekly build reaches the 20-minute timeout. | Monthly |
| Cloudflare Static Assets | Free and unlimited requests | Dashboard HTML, JavaScript, CSS, images, and the public prediction payload are served as static assets. | Not applicable |
| Cloudflare Workers runtime | 100,000 requests/day | Reserved headroom if a request invokes Worker code instead of matching a static asset. | Daily at 00:00 UTC |
The zero-cost policy assumes GitHub Free, Cloudflare Workers Free, a $0 GitHub Actions paid-usage budget, and no paid database, API, VM, container, or external scheduler. If a free limit is exhausted, the preferred failure mode is to pause the run or deployment rather than allow paid overage. Vendor pricing and limits may change; the linked official documentation remains authoritative.
Production is served by Cloudflare from the main branch:
gaya.mohammad-raffy.workers.dev
Build command : npm run build
Output : dist
No frontend environment variable is required.
GAYA provides statistical estimates for research and monitoring. It is not an investment recommendation.
