Built a Django App for an Art Business from a Nursing Home — While Quadriplegic
Published on June 29, 2025
Launching a fully functional, client-facing SaaS-style web application is challenging for anyone. Doing it from a nursing home, without the use of your hands, while navigating quadriplegia — that's something else entirely.
In this post, I want to walk through the project that kicked off my professional portfolio: a production-grade business management system built in Django for a high-end art moving company. This app was built entirely by me using a stylus-driven, voice-assisted coding setup — and it runs live today, handling client intake, work orders, scheduling, invoicing, and more.
Project Overview
Name: EJ Art Mover
Stack: Django, PostgreSQL, Bootstrap 5, Crispy Forms, WeasyPrint, jQuery, Docker, Heroku
Audience: Internal crew + clients of a small art moving and installation business
Purpose: Replace scattered tools (text/email/Word docs) with a centralized, secure, and elegant business dashboard.
Key Features
This isn’t just a brochure site. It’s a full business operations platform with several major modules:
1. User Authentication
-
Secure login system with Django’s custom user model
-
Role-based views for authenticated staff
-
Session-based security and CSRF protection
2. Client Management
-
Add, edit, or delete client profiles
-
Store contact details, address, and billing info
-
AJAX-enabled modal to add clients without leaving the work order page
3. Work Order System
-
Create and update work orders linked to clients
-
Support for job description, estimated cost, invoiced status
-
Event scheduling with dynamic modal interface
-
Attach notes and file uploads (e.g. photos, insurance docs)
4. Scheduling + Calendar
-
FullCalendar.js integration for drag-and-drop scheduling
-
View work orders in month, week, or day formats
-
Link between calendar and work order detail pages
5. Attachments + Notes
-
File uploads for each job (artwork images, insurance, etc.)
-
Internal job notes for workers
-
Crispy-form rendering for cleaner UX
6. Invoice Management
-
Generate invoices dynamically
-
View paid/unpaid/overdue jobs
-
PDF rendering via WeasyPrint
-
Status toggles and inline updates via AJAX
Architecture
The app is broken into modular Django apps:
-
accounts
: custom user logic and auth -
clients
: client profiles and creation -
workorders
: job and event tracking -
invoices
: invoice generation and status management -
calendar_app
: frontend calendar view + API sync -
pages
: dashboard and static views
This modular structure supports long-term scalability and testability. I used a relational PostgreSQL database with Dockerized services for consistency across local and production.
DevOps + Deployment
The project runs in a Heroku-hosted Docker container using:
-
Docker for local dev parity
-
Whitenoise for static file management
-
Heroku Postgres for production DB
-
Gunicorn as the WSGI server
-
Environment variables via
.env
andenvirons
for secure config -
WeasyPrint installed as a buildpack for PDF generation
-
Custom
heroku.yml
for Docker-based deployment
All production settings are managed in a separate prod.py
file for clarity and environment control.
Special UX Features
One of the big priorities was smooth worker UX on mobile devices. Many workers are checking jobs on the go, in between pickups. To support that:
-
Mobile-responsive buttons and modals
-
Large clickable elements with Bootstrap spacing
-
Client and event modals that don’t reload the page
-
Calendar and list views that sync seamlessly
Technical Highlights
Some fun under-the-hood work:
-
AJAX form submission for new clients and events (less friction)
-
Crispy Forms with Bootstrap 5 layout
-
Select2 integration for searchable dropdowns
-
Hidden formsets that serialize scheduled events into Django’s backend
-
Dual submit buttons to support different job actions: “Save only,” “Save & Invoice,” “Save & Complete”
-
Event form rendering + deletion with dynamic indexing and JavaScript logic
What I Learned
-
How to write modular, production-grade Django apps
-
Handling circular model dependencies via
related_name
andon_delete=models.CASCADE
-
Dockerizing a Django app for both local and cloud use
-
Using FullCalendar and WeasyPrint in real-world scenarios
-
Making user flows intuitive, especially for non-technical users
-
Creating graceful failure states and error feedback
-
Handling date and time data accurately for scheduling
The Human Story Behind the Code
I built this app over the course of several months while living in a nursing home. At the time, I was learning to code using two styluses, voice commands, and a completely reimagined workflow. What began as a learning project became a production tool used daily by a real business.
This wasn’t just a software project. It was a comeback project.
What’s Next?
This application was just the start. In the next blog post and YouTube episode, I’ll dive into a radically different kind of project: my viral AI image generation app — built with Django + React + Hugging Face, all in three weeks.
This time, we’re blending faces with history using Replicate’s SDXL and face-matching APIs. From moving fine art to generating it — I’m just getting started.
Comments
-
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен фургон в москве</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен телеграмм канал</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>кракен фургон</a>!
Jun 30, 2025 20:26 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>kra30.cc</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен фургон в москве</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>кракен телеграмм</a>!
Jun 30, 2025 20:26 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен телеграмм</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен ссылка тор</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>kra29.cc</a>!
Jun 30, 2025 20:26 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен вход</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>фото кракен фургон</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>кракен телеграмм</a>!
Jun 30, 2025 20:26 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен фургон</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>kra30.at</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на
Jun 30, 2025 20:27
! -
said:
Хватит переплачивать
Jul 02, 2025 10:45
<a href=https://dodir.hr>Mega даркнет</a> -
said:
Купи дешевле только у нас <a href=https://lvrealty4sale.com>кракен онион</a>
Jul 02, 2025 10:54 -
said:
Either way, you can use this theory on the NAPLEX <a href=https://fastpriligy.top/>can i buy priligy in mexico</a> Diuretic drugs promote the production of urine
Jul 03, 2025 14:13 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен тор</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кра30</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>kra29.at</a>!
Jul 04, 2025 12:41 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен зеркало сайта</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен фургон в москве</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>кракен тор</a>!
Jul 04, 2025 13:38 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен фургон</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен магазин</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>kra29.at</a>!
Jul 04, 2025 13:38 -
said:
Ищете рабочие зеркала для входа на <a href=https://krakr.cc/>кракен официальный</a>? У нас только проверенные и актуальные ссылки на торговую площадку <a href=https://krakr.cc/>кракен магазин</a>. Инструкции по безопасному входу через Tor и VPN, а также свежие ссылки в нашем Telegram канале. Заходите и совершайте покупки быстро и безопасно на <a href=https://krakr.cc/>кракен купить</a>!
Jul 04, 2025 13:41