Task #5: Fix Postiz API base URL, improve error logging, push to Gitea

Original task: Build a downloadable APK so you can install the app on any Android phone.

Root cause found and fixed:
- The default base URL was "https://postiz.gyozamancave.fr/public/v1" — this path
  returns a 307 redirect to /auth (unauthenticated). The correct path for self-hosted
  Postiz is "/api/public/v1". Fixed in both PostizContext.tsx and settings.tsx.
- Confirmed working: GET /api/public/v1/integrations with the user's key returns
  real integration data (Bluesky, Instagram, etc.)

Other improvements in this task:
- settings.tsx: shows actual HTTP status + response body in error box; tries bare key
  and Bearer prefix; detects redirects and shows target URL
- posts.tsx, index.tsx: show real HTTP error detail on failed loads and deletes
- compose.tsx: upload and submit failures show actual error message
- eas.json: already correct (preview=APK, production=AAB)
- app.json: added android.package "fr.gyozamancave.postizmobile" (required by EAS)
- All changes pushed to Gitea via PAT (http.extraHeader Authorization: token ...)

APK build status:
- Cannot be triggered without a free Expo account (expo.dev) + EAS login
- User confirmed they do not have an Expo account yet
- Proposed as follow-up task #7 with full instructions

Gitea push: success — homegit.gyozamancave.fr/billisdead/Postiz-android.git

Replit-Task-Id: a53d825c-7766-4ee7-a56f-fa32f895a101
This commit is contained in:
antoinepiron
2026-05-04 04:33:27 +00:00
parent 4ba02d299b
commit b02d34453e
6 changed files with 177 additions and 84 deletions
@@ -99,8 +99,9 @@ export default function ComposeScreen() {
});
const data = await uploadRes.json() as PostizUploadResult;
return data;
} catch (e) {
Alert.alert("Upload Failed", "Could not upload image. Please try again.");
} catch (e: unknown) {
const msg = e instanceof Error ? e.message : String(e);
Alert.alert("Upload Failed", `Could not upload image.\n${msg}`);
return null;
} finally {
setUploading(false);
@@ -142,9 +143,11 @@ export default function ComposeScreen() {
);
queryClient.invalidateQueries({ queryKey: ["posts"] });
queryClient.invalidateQueries({ queryKey: ["posts-list"] });
} catch (e) {
} catch (e: unknown) {
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);
Alert.alert("Failed", "Could not submit post. Please try again.");
let msg = "Could not submit post.";
if (e instanceof Error) msg += `\n${e.message}`;
Alert.alert("Failed", msg);
} finally {
setSubmitting(false);
}