Site Icon Matthew Raynor
← Back to Services

EJ Art Mover

Job management app built for a professional art moving company. Handles the full workflow — clients, work orders, scheduling, photo documentation, invoicing, and printable PDFs. A drag-and-drop calendar plans daily routes. Built for the field — works on a phone as well as a desktop. Rebuilt from a Django monolith into a decoupled architecture.

Project Overview

A production-grade job management application for an art moving business. It manages the entire workflow from client intake through job scheduling, execution, and invoicing. Originally built as a Django monolith with Bootstrap templates, it was rebuilt as a decoupled system — Django REST Framework API backend with a Next.js/React/TypeScript frontend.

The Challenge

The client was managing logistics, invoicing, and scheduling manually via email and spreadsheets, which caused delays and errors.

The Solution

Built a centralized system that tracks jobs, clients, and invoices with a drag-and-drop calendar for daily route planning, PDF generation for work orders and invoices, and a mobile-first responsive design for field use.

Technology Stack

Backend
Django 5 Django REST Framework PostgreSQL WeasyPrint
Frontend
Next.js React TypeScript Tailwind CSS shadcn/ui FullCalendar
Auth
JWT with automatic token refresh via Axios interceptors
Deployment
Railway Netlify Cloudinary

Key Features

Drag-and-drop calendar with month, week, and day views — reorder stops to plan daily routes

PDF generation for work orders and invoices via WeasyPrint

Invoicing with three-stage status flow (unpaid, in QuickBooks, paid)

Mobile-first: card layouts on phones, table layouts on desktop

Work orders track jobs through pending, in progress, completed, invoiced

File attachments with Cloudinary storage for photos and documents

Google Places address autocomplete for service and billing addresses

Business Impact

Digitized manual scheduling and invoicing

Visual overview of work orders via FullCalendar with drag-and-drop

Mobile-responsive design means the app works in the field on a phone

Rebuilt from monolith to decoupled architecture for maintainability

Technical Achievements

Full monolith-to-decoupled rebuild with direct data migration via pg_dump

Mobile-first UX with bottom sheet drawers on phones, dropdown menus on desktop

Drag-and-drop calendar for daily route planning

Production app used daily by a real business

Technical Implementation

Originally a Django monolith with Bootstrap templates and jQuery deployed on Heroku. Rebuilt as a decoupled system with a DRF API backend and Next.js frontend. Authentication uses JWT with automatic token refresh via Axios interceptors. Server state managed with TanStack Query. Forms use React Hook Form with Zod validation. Same PostgreSQL schema allowed direct data migration via pg_dump.

Interested in This Project?

View the source code or see it in action