resbuilder_app/README.md

3.7 KiB

ResBuilder Android

Native Android client for ResBuilder AI — an AI-powered resume and cover letter generator.

Overview

This app connects to the ResBuilder backend API to let users:

  • Authenticate via Google Sign-In
  • Paste or scrape job descriptions (including SEEK URLs)
  • Upload existing resumes/cover letters (PDF/DOCX)
  • Submit AI generation jobs
  • View generated documents as rendered HTML
  • Export results as PDF or DOCX

Architecture

com.example.resbuilder
├── data
│   ├── model          # Pydantic-style data classes (User, Job, etc.)
│   └── remote         # OkHttp API client with Bearer token auth
└── ui
    ├── LoginActivity      # Google Sign-In via Credential Manager
    ├── MainActivity       # Tab navigation + fragment container
    ├── JobFormFragment    # Job details, upload, scrape, submit
    ├── JobStatusFragment  # Poll job status (2s interval, 10min max)
    ├── ResultFragment     # HTML preview, copy, export
    └── AdminActivity      # Admin user management (optional)

Authentication

Uses Google Sign-In for Android (compliant with Google OAuth policy):

  1. User taps Sign In → native Google account picker
  2. App receives a Google ID token
  3. Token is exchanged for a backend session token via POST /auth/google-token
  4. Session token is sent as Authorization: Bearer <token> on every API call

No WebView. No embedded user-agents. No cookies.

Requirements

  • Android SDK 29+ (Android 10)
  • Compile SDK 36
  • Java 11
  • Gradle 9.4.1

Dependencies

Library Purpose
OkHttp 4.12.0 HTTP client, cookie jar, interceptor
Gson 2.10.1 JSON serialization
Material Components 1.10.0 UI components (M3)
Play Services Auth 20.7.0 Google Sign-In

Configuration

Set your Google Web Client ID in LoginActivity.kt:

private val webClientId = "YOUR_WEB_CLIENT_ID.apps.googleusercontent.com"

This must match the GOOGLE_CLIENT_ID configured on the backend.

Build

./gradlew assembleDebug

APK output: app/build/outputs/apk/debug/app-debug.apk

API

The app talks to https://resume.aridgwayweb.com (configurable in ApiClient.kt).

Key endpoints used:

  • POST /auth/google-token — exchange Google ID token for session
  • GET /auth/me — current user info
  • POST /build_resume | /build_cover_letter — submit generation job
  • GET /job/{id} — poll job status
  • POST /upload/resume | /upload/cover_letter — extract text from PDF/DOCX
  • POST /scrape-job — extract text from SEEK URL
  • GET /export/{id}/pdf | /export/{id}/docx — download generated document

Project Structure

app/src/main/
├── java/com/example/resbuilder/
│   ├── data/
│   │   ├── model/Models.kt
│   │   └── remote/ApiClient.kt
│   └── ui/
│       ├── LoginActivity.kt
│       ├── MainActivity.kt
│       ├── JobFormFragment.kt
│       ├── JobStatusFragment.kt
│       ├── ResultFragment.kt
│       ├── AdminActivity.kt
│       └── AdminUserAdapter.kt
├── res/layout/
│   ├── activity_login.xml
│   ├── activity_main.xml
│   ├── fragment_job_form.xml
│   ├── fragment_job_status.xml
│   ├── fragment_result.xml
│   └── activity_admin.xml
└── res/values/
    ├── colors.xml
    ├── strings.xml
    └── themes.xml

Design System

See .agents/design/DESIGN.md for the Material Design 3 + Amazon/Google design guidelines used across the app.

License

Same as the backend project.