commit 3b6c296385a06f484049f2e3e86b7185e9bef893 Author: Michael Mainguy Date: Mon May 11 11:14:57 2026 -0500 Initial commit: lead capture app for small engine repair shops Vue 3 + TypeScript + Vite + Tailwind CSS v4 multi-step lead capture form with config-driven white-labeling, externalized content (content.json), and "starting at" pricing estimates. Mobile-first with camera photo upload. Co-Authored-By: Claude Opus 4.6 (1M context) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..6773541 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,40 @@ +# smallengine + +## Project Intent +Lead capture application for small engine repair shops (lawnmowers, snowblowers, etc.). +Captures: equipment make/model, mobile image upload, preferred date/time, contact info, and pricing estimate. +Designed to be white-labeled and deployed by many different repair shops with minimal configuration. + +## Stack +- Vue 3 with ` + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..0c83e79 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "smallengine", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.5.32" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.0", + "@types/node": "^24.12.2", + "@vitejs/plugin-vue": "^6.0.6", + "@vue/tsconfig": "^0.9.1", + "tailwindcss": "^4.3.0", + "typescript": "~6.0.2", + "vite": "^8.0.10", + "vue-tsc": "^3.2.7" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/shop.config.json b/shop.config.json new file mode 100644 index 0000000..91a2e1c --- /dev/null +++ b/shop.config.json @@ -0,0 +1,30 @@ +{ + "shopName": "Dave's Small Engine Repair", + "tagline": "Trusted local service for all your outdoor power equipment", + "phone": "(555) 123-4567", + "email": "davem@example.com", + "address": "123 Main St, Anytown, USA 12345", + "logo": "", + "primaryColor": "#16a34a", + "services": [ + { "name": "Tune-Up", "startingAt": 75, "description": "Complete engine tune-up and inspection" }, + { "name": "Blade Sharpening", "startingAt": 25, "description": "Professional blade sharpening and balancing" }, + { "name": "Oil Change", "startingAt": 40, "description": "Oil and filter replacement" }, + { "name": "Carburetor Repair", "startingAt": 85, "description": "Carburetor cleaning, rebuild, or replacement" }, + { "name": "Winterization", "startingAt": 60, "description": "Prepare equipment for off-season storage" }, + { "name": "Full Service", "startingAt": 120, "description": "Comprehensive service and safety check" }, + { "name": "Other / Not Sure", "startingAt": null, "description": "We'll assess and provide a quote" } + ], + "equipmentTypes": [ + "Lawn Mower (Push)", + "Lawn Mower (Riding)", + "Snowblower", + "Chainsaw", + "Leaf Blower", + "String Trimmer / Weed Eater", + "Generator", + "Pressure Washer", + "Other" + ], + "formBackend": "" +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..e0691da --- /dev/null +++ b/src/App.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000..02251f4 Binary files /dev/null and b/src/assets/hero.png differ diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/assets/vue.svg b/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/ContactStep.vue b/src/components/ContactStep.vue new file mode 100644 index 0000000..855c48b --- /dev/null +++ b/src/components/ContactStep.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/components/EquipmentStep.vue b/src/components/EquipmentStep.vue new file mode 100644 index 0000000..5761395 --- /dev/null +++ b/src/components/EquipmentStep.vue @@ -0,0 +1,85 @@ + + +