You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.4 KiB
3.4 KiB
| title | status | type | priority | created_at | updated_at | blocked_by | |
|---|---|---|---|---|---|---|---|
| Add Trunk proxy config to Trunk.toml: forward /api/* to local API server | completed | task | high | 2026-03-10T23:32:04Z | 2026-03-10T23:32:12Z |
|
Triage a9534d resolved this: use Trunk's built-in [[proxy]] to forward /api/* requests to the API server.
No CORS configuration is required anywhere — the proxy makes all API calls appear same-origin to the browser.
Rationale:
- Mirrors the production architecture: in production, Cloudflare routes
/api/*to the Worker at the same domain as the Pages site. - Frontend uses relative URLs (
/api/quotes, nothttp://localhost:3000/api/quotes) — the same URLs work in both dev and production without any configuration. - Zero CORS configuration needed in the API or the frontend. Tower-http CORS middleware is not required.
- Standard, well-supported pattern for SPA development with a separate API backend.
[build]
target = "index.html"
[[proxy]]
rewrite = "/api"
backend = "http://localhost:3000"
This configuration means:
- Requests from the browser to
http://localhost:8080/api/quotesare forwarded tohttp://localhost:3000/api/quotes. - The
/apiprefix is preserved in the forwarded URL (Trunk appends the matched path tobackend). trunk servehandles the proxying automatically — no manual setup required by developers.- The API server port
3000matches the plain Axumcargo rundev server (see ticket 6e829e).
# Terminal 1 — start the API server
cd quotesdb
cargo run
# Terminal 2 — start the UI dev server with proxy
cd quotesdb
trunk serve
# Browser opens at http://localhost:8080
# API calls go to /api/* (proxied transparently to localhost:3000)
No environment variables, no hardcoded URLs, no CORS headers needed.
In production (Cloudflare Pages + Workers), the same `/api/*` path prefix is used. Cloudflare can route `example.com/api/*` to the Worker and `example.com/*` to Pages via a Custom Domain or a Worker route rule. This is configured in infra/. The frontend code does not change. - API port must be `3000` — this must be consistent with however ticket 6e829e configures the local Axum server. - If the API port changes, update `Trunk.toml` accordingly and document the change. - Do not use `trunk.serve.proxy` (legacy format) — use `proxy` table array format. - This ticket's change is 3 lines in `Trunk.toml`. Keep it minimal. From the `quotesdb/` directory (requires `cargo run` running in another terminal):trunk serve &
curl http://localhost:8080/api/quotes # should proxy to http://localhost:3000/api/quotes
At minimum, verify trunk build succeeds:
trunk build
`chore(quotesdb): add Trunk proxy config to forward /api/* to local API server`