HR and Recruiting Mobile App Development

TRUETECH is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
HR and Recruiting Mobile App Development
Medium
from 1 week to 3 months
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Developing a Mobile App for HR and Recruiting

An HR app serves two fundamentally different scenarios simultaneously: recruiters manage candidate funnels and schedule interviews, while new employees go through onboarding and fill documents. Both scenarios require different UX patterns, different access rights, and different push notifications. Most architectural decisions arise at this intersection.

Role-Based Model and Architecture

Minimum three roles: HR Manager/Recruiter, Candidate, Employee (after offer). Each has its own navigation flow and set of screens.

// iOS — NavigationRouter based on role
enum AppRole {
    case recruiter
    case candidate
    case employee
}

func buildRootNavigation(for role: AppRole) -> UIViewController {
    switch role {
    case .recruiter: return RecruiterTabBarController()
    case .candidate: return CandidateOnboardingFlow()
    case .employee: return EmployeePortalController()
    }
}

User role comes in JWT token after login. When role changes (candidate becomes employee) — rebuild navigation without app restart.

Candidate Funnel: Kanban for Recruiters

Recruiting funnel is Kanban: New → Phone Screening → Technical Interview → Offer → Rejection. On mobile — horizontally scrollable columns.

// Android — funnel state via ViewModel
data class RecruitingFunnelState(
    val stages: List<FunnelStage>,
    val selectedStageIndex: Int = 0,
    val candidates: Map<String, List<Candidate>> // stageId → candidates
)

class FunnelViewModel(private val repo: CandidateRepository) : ViewModel() {
    val state = MutableStateFlow(RecruitingFunnelState(stages = emptyList()))

    fun moveCandidateToStage(candidateId: String, targetStageId: String) {
        viewModelScope.launch {
            repo.updateCandidateStage(candidateId, targetStageId)
            // Optimistic UI update
            state.update { current ->
                val updated = current.candidates.toMutableMap()
                // move candidate between lists
                current.copy(candidates = updated)
            }
        }
    }
}

Drag-and-drop between columns — via ItemTouchHelper with custom ViewHolder.onDragOver. Simpler — tap-to-move via bottom sheet with stage selection.

Interview Scheduling

Interview requires: slot selection, interviewer invitation, meeting link send, 15-minute push reminder.

Integration with Google Calendar via Google Calendar API or CalDAV, with Microsoft via Graph API. Mobile client requests available slots:

func fetchAvailableSlots(interviewerId: String, date: Date) async throws -> [TimeSlot] {
    // Request to backend that aggregates Google Calendar + internal calendar
    return try await api.getAvailableSlots(interviewerId: interviewerId, date: date)
}

Push reminder scheduled when interview created — scheduled notification via FCM or OneSignal with deliver_after.

Employee Onboarding

Onboarding is sequential flow: fill personal data, upload documents (passport, ID, employment contract), review company policies, complete first-day tasks.

Onboarding progress — checklist with status of each item. Server stores JSON schema of onboarding (set of steps), client renders it dynamically:

data class OnboardingStep(
    val id: String,
    val type: StepType, // FORM, DOCUMENT_UPLOAD, QUIZ, VIDEO, TASK
    val title: String,
    val isRequired: Boolean,
    val completedAt: Long?
)

enum class StepType { FORM, DOCUMENT_UPLOAD, QUIZ, VIDEO, TASK }

Document upload — multipart form data with progress:

func uploadDocument(_ data: Data, type: DocumentType) async throws -> DocumentId {
    return try await api.upload(
        endpoint: "/employee/documents",
        file: data,
        filename: "\(type.rawValue)_\(Date().timestamp).pdf",
        mimeType: "application/pdf"
    ) { progress in
        self.uploadProgress = progress
    }
}

Push Notifications in HR Context

Event Recipient Priority
New vacancy response HR Manager High
Interview scheduled Candidate + Interviewer High
Interview reminder (15 min) All participants Critical
Offer sent to candidate Candidate High
Onboarding step requires action New employee Medium
Probation period expires HR Manager Medium

Corporate Communication

Internal chat or integration with existing tools (Slack API, Microsoft Teams webhooks). For MVP — internal chat via WebSocket:

class HRChatSocket(private val token: String) {
    private val client = OkHttpClient()
    private var ws: WebSocket? = null

    fun connect(roomId: String, onMessage: (ChatMessage) -> Unit) {
        val request = Request.Builder()
            .url("wss://api.yourhr.app/ws/chat/$roomId")
            .header("Authorization", "Bearer $token")
            .build()
        ws = client.newWebSocket(request, object : WebSocketListener() {
            override fun onMessage(webSocket: WebSocket, text: String) {
                onMessage(json.decodeFromString(text))
            }
        })
    }
}

Timeline

MVP HR app (candidate funnel, candidate cards, basic onboarding, push notifications) — 10–14 weeks. Full functionality with interview scheduler, calendar integrations, corporate chat, and analytics — 20–28 weeks.