Floor Plan Visuals CRM
Project
Floor Plan Visuals CRM — staff ops + public client portal
Full-stack engineer
An end-to-end operations platform for a real-estate floor plan / visuals operator. A two-tier Laravel 6 + Nuxt 2 system that runs the whole order pipeline — lead intake, property capture with Google Maps coordinates, on-site surveying, scope-of-work pricing in two modes (line-item and square-foot brackets), designer assignment, scheduling and timesheets, payroll, invoicing, and payments — alongside a public client portal that lets agents place orders directly without going through a salesperson. Built as a freelance full-stack engagement during the 2019–2021 client-projects era.
Designed the relational data model and the Laravel 6 / JWT API, built the Nuxt 2 + Vuetify SPA on top of it (with both staff-admin and client-portal layouts shipped from one codebase), and shipped the end-to-end order pipeline — lead → property + survey → scope of work → final scope → invoice → payment — alongside the two-mode pricing catalogue, the field-team scheduling / timesheets / payroll engine, and the public client order flow.
- Designed the relational schema for the operations from scratch — leads, orders, properties (with lat/lng), surveys, appointments, scopes, final scopes, items, SQFT items with editable square-foot brackets, designers, schedules, timesheets, payrolls, invoices, payments, documents, and the email-template + notifications surfaces — across roughly 96 migrations layered as the product matured.
- Built the Laravel 6 API with JWT auth via tymon/jwt-auth, soft-delete-with-restore across users / orders / payrolls / documents via askedio/laravel-soft-cascade, a CORS contract for a separately-hosted SPA, and bespoke single-transaction update endpoints (comprehensive order update, bulk scope-item update, SQFT-bracket update) so the staff app could save a multi-section form atomically rather than chaining N calls.
- Shipped the Nuxt 2 + Vuetify SPA with two layouts — staff admin (default) and public client portal (client) — out of one codebase, plus a chrome-less sign-in layout, JWT-refresh middleware, and role-based route gating (admin, employee).
- Built the public client order flow as a multi-step Vuex builder against unauthenticated client-portal API endpoints (`/items`, `/sqft_items/client/getSqftItems`, `/locations`, `/company/settings`, `/email/validate`, `/client_orders`) so agents and property owners can place orders directly without account creation, backed by the live items catalogue and per-item visibility flags curated from the staff side.
- Designed the two-mode pricing catalogue — the same items table drives both line-item scope mode and square-foot bracket pricing, with three independent visibility toggles per item (available-in-scope, available-in-SQFT, shown-to-client-orders) so the staff can tune surfaces independently without forking the catalogue.
- Shipped the field-team operational backbone — schedules and the calendar / assignment surface, full timesheet flow (clock in, start break, end break, start lunch break, end lunch break, clock out, save notes, set prescheduled date), and the payroll engine (periods, payrolls, payroll items, paystubs) with PDF paystub generation via jsPDF.
- Wired property capture against Google Maps autocomplete with stored coordinates and a dedicated update endpoint, plus the survey + appointment chain (pre-survey scheduling, on-site in/out timestamp capture, post-appointment write-up).
- Built the staff-side dashboards — animated KPIs (vue-number-animation), Google Charts, trend chart, and CSV / PDF exports — and the email-template editor on CKEditor 5 (vue2-editor) with explicit transactional emails off the order surface (order confirmation, order instructions, client invoice).
- Stood up the production deployment for both tiers — the Laravel API on Heroku (heroku-php-apache2, fideloper/proxy, Redis-backed cache and queues) and the Nuxt SPA on Firebase Hosting — and maintained the system through ongoing feature work over the engagement.