Internal Tool — Visuals are representative

VetCar24
Staff App

Native Android app for the VetCar24 team: bookings, customers, messaging, analytics, and blog management — one app, fully offline-capable.

Internal business tool. All visuals shown are representative mockups without real customer data, at the explicit request of the client.

React Native 0.81 Expo 54 Supabase TypeScript 5.9
2.11
Current Version
In production for 3 months
5
Main Tabs
Dashboard, Bookings, Messages, Analytics, More
100%
Offline Ready
SQLite cache + action queue
0
Crashes (7d)
via Firebase Crashlytics

Privacy & Confidentiality

This app is an internal business tool belonging to the client. All visuals on this page are representative illustrations — no real app screenshots, no real customer data. Only architecture, tech stack, and feature scope are shown.

VetCar24 Staff App – Dashboard (representative mockup)

Dashboard view (representative mockup)

VetCar24 Staff App – Bookings view (representative mockup)

Bookings view (representative mockup)

Feature Scope

Everything a mobile veterinary team needs, day to day.

Dashboard

At-a-glance overview: today's bookings, next appointment, unread messages, quick actions

Booking Management

Week calendar strip, filter by status, swipe to cancel or complete, real-time status updates

Customer CRM

Full customer profiles, booking history, notes, per-booking messaging thread

Message Inbox

Per-booking messaging between customers and the practice, real-time via Supabase Realtime

Analytics

Revenue charts, booking statistics, period-over-period comparisons, all data cached locally

Blog Editor

Full rich text editor on mobile — create articles with SEO settings, publish directly to vetcar24.de

Time Blocker

Block time slots, set vacation days or breaks, instantly synced to the booking system

Permission System

Owner vs. staff roles: granular rights per feature — who sees what, who can edit what

Offline Mode

Fully functional without network: SQLite cache, action queue, automatic sync on reconnect

Biometric Lock

Automatic app lock after inactivity, unlock via fingerprint or Face ID

Push Notifications

Push alerts for new bookings, messages, cancellations — via Expo + Firebase

Staff Management

Invite team members, assign roles, manage access — all from mobile

<TechStack />

Tech Stack in Detail

React Native 0.81 Framework

Native Android experience, real native components — no WebView

Expo 54 + Router Platform

Expo Router v6 with file-based navigation, OTA updates via EAS

TypeScript 5.9 Language

Strict mode, branded types, complete type safety end-to-end

Supabase Backend

Auth, Realtime updates, Row-Level Security, file storage

expo-sqlite + Drizzle ORM Offline DB

Local SQLite database, full offline capability with sync engine

TanStack Query v5 Data Fetching

Query persistence via AsyncStorage, optimistic updates, background sync

Reanimated 4 + Moti Animation

60fps animations on the JS thread, spring physics, layout transitions

TipTap Editor Blog CMS

Full rich text editor inside the app — create and publish blog posts on mobile

Victory Native + Skia Charts

GPU-accelerated analytics charts with React Native Skia

Firebase Crashlytics Monitoring

Real-time crash reporting, performance monitoring, stack traces

expo-local-authentication Security

Biometric unlock: fingerprint or face recognition

MMKV + Zustand 5 State

Native key-value store 10× faster than AsyncStorage, global state

ENTWICKLUNGSPROZESS

Development Phase by Phase

01

Analysis & Architecture

Week 1–2
Requirements workshop with client Workflow analysis Tech stack decision Database schema & API design
02

Auth & Core

Week 3–4
Supabase Auth + Google Sign-In Biometric unlock Navigation with Expo Router v6 Permission system (owner/staff)
03

Bookings & Customers

Week 5–7
Booking list with calendar strip Status management with swipe gestures Customer CRM & booking history Per-booking messaging with Realtime
04

Offline & Sync

Week 8–9
expo-sqlite + Drizzle ORM setup Action queue for offline operations Conflict resolver for sync conflicts TanStack Query persistence adapter
05

Advanced Features

Week 10–12
Analytics dashboard with Skia charts TipTap blog editor on mobile Time blocker modal App update system via EAS
06

Testing & Deploy

Week 13–14
Firebase Crashlytics integration Performance profiling (Skia + FlashList) APK build via Gradle Internal release process

Offline Architecture

SQLite Cache

expo-sqlite + Drizzle ORM store all critical data locally. The app remains fully usable without a network connection.

Action Queue

Mutations are buffered in a local queue and automatically synced with Supabase when connectivity is restored.

Conflict Resolver

Optimistic updates with server-side validation. Conflicts resolved via last-write-wins strategy with rollback support.