FROM FIRST CHOICE TO SAVED REQUEST
A small workflow.
A useful whole.
A self-initiated quote-request system for a fictional painting company. Designed and built by Cory Smallegan using AI-assisted development.
What works
A three-step estimate builder shares its pricing logic with the server. Submissions are validated, recalculated, and saved to Cloudflare D1. Unique receipt links retrieve saved requests after a reload.
A password-protected owner workspace supports status changes, search, filters, request details, and CSV export. The public dashboard tour is separate, read-only, and uses fictional example records.
What is deliberately disabled
Email notifications are disabled. No appointment, payment, or actual painting service is offered. The company, rates, contacts, and project examples are fictional.
The estimate uses floor area as a simplified sample input. It is not a professional measurement tool or a commercial quote.
The sample pricing model
- Project setup: $95.
- Standard finish: $2.20 per floor sq ft; premium: $2.75.
- Preparation: light included; moderate +$0.55; heavy +$0.95 per floor sq ft.
- Ceilings: +$0.60 per floor sq ft.
- Trim: +$18 per room.
- $350 minimum; ±10% allowance, rounded outward to $5.
Sample taxes, travel, actual site conditions, and scheduling are excluded.
Data and privacy
Use fictional details only. The form supplies named sample contacts and does not ask for your email, phone, address, or payment details. It saves project selections, sample notes, calculated range, timestamps, and workflow status.
A receipt link acts as access to its sample record: anyone holding it can reopen it. Requests become unavailable through receipts after 7 days and may then be removed during later submissions. The owner workspace requires sign-in. No third-party analytics or tracking scripts are included.
Implementation
Semantic HTML, shared CSS, browser JavaScript modules, and a Cloudflare Pages backend. Prepared D1 statements store records; the server ignores client-supplied prices and calculates its own.
Request body limits, strict origin checks, rate limits, sample-only contacts, and idempotent submissions bound the demo. Owner sessions use signed, expiring, HttpOnly cookies. CSV output escapes cells and neutralizes spreadsheet formula prefixes.
A clear handoff
The source package includes the database migration, pricing module, API, frontend, tests, deployment instructions, and verification record. The detailed interior hero artwork was generated with AI for this fictional concept and is served as an optimized local WebP. SVG branding and system fonts keep the interface self-contained.
This is a portfolio demonstration, not a certification of production security or accessibility. A real client rollout needs approved rates and content, privacy requirements, integration testing, and audience-appropriate device and assistive-technology checks.
Try the request journey from the beginning.
Build a sample estimate ↗