APK_SERVER_URL=http://192.168.0.103:5000
No auth token is currently set — omit the Authorization header.
weather, budget-tracker).
APKs use PascalCase (e.g. MarketAnalyst, BudgetTracker). Don't mix them up.
When asked to "deploy" or "serve" a web app (React, Vue, static site, etc.):
npm run build (or yarn build, pnpm build)dist/ or build/No build tool? (plain HTML/CSS/JS) — skip this step and zip the source files directly.
The server automatically injects a <base> tag so asset paths work under /apps/<name>/. No need to configure base in vite or homepage in package.json.
python3 -c "import shutil; shutil.make_archive('app', 'zip', 'dist')"
On Windows without Python: powershell -c "Compress-Archive -Path 'dist/*' -DestinationPath app.zip"
On Linux/macOS with zip: cd dist && zip -r ../app.zip . && cd ..
The zip must contain index.html at the root (or in a single subdirectory).
curl -F "file=@app.zip" \
-F "app=<appname>" \
-F "notes=<short description>" \
"${APK_SERVER_URL}/api/webapps/upload"
${APK_SERVER_URL}/apps/<appname>/${APK_SERVER_URL}weather, budget-tracker) — the name becomes the URL pathWhen asked to "build and serve the APK":
./gradlew assembleDebugflutter build apk --debugcd android && ./gradlew assembleDebugapp/build/outputs/apk/debug/app-debug.apkcurl -F "file=@<path-to-apk>" \
-F "app=<AppName>" \
-F "version=<version>" \
-F "notes=<short description of what changed>" \
"${APK_SERVER_URL}/api/upload"
${APK_SERVER_URL}/apks/<AppName>/<version>/<filename>.apk${APK_SERVER_URL}MarketAnalyst, BudgetTracker)app-debug.apk)MAJOR.MINOR.PATCH) — read version from the project's build configcurl -s ${APK_SERVER_URL}/api/apps | python3 -m json.toolnotes--clean on expo prebuild and just re-run ./gradlew assembleDebug. Gradle does incremental compilation — first build may take ~8 min, subsequent builds with code changes should be under 2 min.