Recommended: Install nvm and install npm LTS using nvm install lts/* and make this default.
Or follow npm documentation
Then cd to this root directy and install the dependencies:
pnpm installRun:
pnpm prepareThe project uses separate environment files for different build modes:
.env.dev- Development configuration (automatically loaded bypnpm dev).env.staging- Staging configuration (must includeVITE_STAGING=true).env.production- Production configuration (must includeVITE_STAGING=false)
Copy env.example to create your local environment files:
cp env.example .env.devEdit the files with your configuration values. Environment variables are accessed via the typed processEnv export, which wraps import.meta.env at runtime.
Build Process:
- Development:
pnpm devautomatically loads.env.devvia Quasar/Vite - Production builds:
pnpm build:stagingandpnpm build:productionuseenv-cmdto load the appropriate env file before building
We use env-cmd because:
- Quasar has no built-in support for staging environments (only dev/production)
- It's consistent with Docker environments
- It ensures all variables (including
VITE_STAGING) are available whenquasar.config.tsevaluates
Environment variables are validated using a multi-layer approach:
-
Schema Definition (src/utils/processEnv.ts):
- Single source of truth using zod schema
- Defines required vs optional variables with types and descriptions
- Includes production safety checks (e.g., dev-only variables must not be set in production)
-
TypeScript Types (src/env.d.ts):
- Types automatically derived from zod schema using
z.infer<typeof envSchema> - Provides IDE autocomplete and compile-time type checking
- Types automatically derived from zod schema using
-
Build-Time Validation (custom Vite plugin in quasar.config.ts):
- Runs during
pnpm dev/pnpm buildbefore app starts - Calls
validateEnv()function during Vite's config phase - Build fails immediately if validation fails (missing/invalid variables)
- Env object generated dynamically from schema keys (line 247-249)
- Runs during
-
Runtime Access (src/utils/processEnv.ts):
- Exported
processEnvobject castsimport.meta.envtoProcessEnvtype - Provides typed access to environment variables in browser runtime
- No validation at import time (validation already completed at build time)
- Exported
For full documentation including variable descriptions and validation rules, see src/utils/processEnv.ts.
Start the app with:
pnpm dev in the services/agora directory or running make dev-app at the root of this project.
Currently we are not bundling company logos in the source code due to copyright. Please add them manually to the following folder:
public/development/logos
New builds have the following requirements:
- Version number to be updated in the
build.gradlefile for the app module - The signed bundle needs to be a release build instead of a debug build
quasar dev -m capacitor -T android
quasar dev -m capacitor -T ios
pnpm lintpnpm formatquasar buildSee Configuring quasar.config.js.
Generate the json configuration file:
icongenie profile --output icongenie-profile-png.json --assets spa,capacitor --icon ./icongenie/appIcon.png --theme-color 090f53 --filter png --background ./icongenie/splash-background.png
icongenie profile --output icongenie-profile-splashscreen.json --assets spa,capacitor --icon ./icongenie/splash-set.png --theme-color 090f53 --filter splashscreen --background ./icongenie/splash-background.png
Generate the actual icons:
icongenie generate -p ./icongenie-profile-png.json
icongenie generate -p ./icongenie-profile-splashscreen.json
See COPYING