Found the real cause of the cross-laptop Gemini failure. The backend fallback fix (876b315) never actually ran for this button: pressing "Test Connection" with Vertex AI enabled always called testModelConnection with one specific model_id, never the provider-level test that has the fallback. That model_id was the currently active model if one was already chosen — or, on a brand-new setup with nothing chosen yet, provider.models[0], which is always GEMINI_MODELS[0]: gemini-3.6-flash, the newest registry entry. Vertex AI Model Garden availability is rolled out per Google Cloud project. Two laptops with an identical API key and an identical, valid Project ID produced opposite results because one had an older model already saved as active (tested that, worked) and the other had nothing saved yet (defaulted to the newest model, which this project's Vertex console had not yet been granted, and failed outright). Now: a chosen model is still tested exactly as itself — this button's job is to confirm the model actually in use still works, and silently swapping it for a different one would hide a real break. With nothing chosen yet, it calls testProviderConnection instead of guessing, which tries every known model and succeeds on the first that works. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
MaskanX Frontend
Independent React, TypeScript, and Vite frontend for MaskanX.
Service Contract
- Default development URL:
http://127.0.0.1:5173 - Backend API: configured with
VITE_MASKANX_API_URL - Local proxy target: configured with
VITE_MASKANX_PROXY_TARGET - Database access: none; this service never receives PostgreSQL credentials
Local Setup
npm install
Copy-Item .env.local.example .env.local
npm run local
Start maskanx-backend on port 8088 before using the full UI.
Campaigns page
The Campaigns page needs VITE_META_AD_ACCOUNT_ID set to the Meta ad account
id (act_<digits>) in your .env.* file.
If it is unset the page still loads and lists campaigns, but four things are
silently unavailable: the ad-account billing panel, the warning shown when no
payment method is attached, ad preview in the wizard, and the account-minimum
budget check (the backend cannot look up min_daily_budget without an
account, so it skips that validation and logs a warning).
Ad preview also requires META_ADS_ACCESS_TOKEN to be configured on the
backend, in Settings > Environments.
Commands
| Command | Purpose |
|---|---|
npm run start |
Preview the production build on port 5173 |
npm run build |
Type-check and build dist/ |
npm run local |
Local Vite server using .env.local |
npm run dev |
Development server using .env.development |
npm run test |
Test-mode type-check and production build |
npm run lint |
ESLint checks |
npm run prod |
Production-mode preview |
Database migration and seed commands intentionally live in
maskanx-backend. A frontend must never own database credentials.
Production
Build the container with the browser-visible backend URL:
docker build `
--build-arg VITE_MASKANX_API_URL=https://api.example.com `
-t maskanx-frontend .
The backend must allow the deployed frontend origin through
MASKANX_CORS_ORIGINS.