How aocgithub/aoc-estimate-calculator-app works
Always Open Commerce Estimator is a React-based business-intake and fixed-price estimation product. Visitors pass an access gate, enter business details, organize a project description, answer editable scope questions, and receive a server-calculated estimate; optional voice input, AI assistance, and consent-based profile reuse/saving extend that flow. The graph also preserves pricing rules, access controls, and profile persistence as distinct capabilities. Some API and feature implementations were not sampled, so their connections are included only where the README or source index supports them.
Main entry points: App.jsx App entry · api-handlers.mjs Access handlers · Calculator.jsx Calculator form · journey-engine.js Journey engine
Components 26
Web application
- App entry
src/App.jsx
Estimation
- Calculator form
src/features/calculator/Calculator.jsx - Estimator state
src/features/calculator/useEstimator.js - Approved pricing
public/approved-pricing.js - Question bank
public/approved-bank.js - Commercial rules
public/commercial.js - Journey API
api/journey/calculate.mjs - Journey calculation
public/journey-calculation.js - Journey engine
public/journey-engine.js - Pricing engine
public/engine.js - Estimate records
server/calculator/estimate-records.cjs
Access and intake
- Access gate UI
src/features/access/AccessGate.jsx - Access state
src/features/access/useAccessGate.js - Access handlers
server/api-handlers.mjs - Access requests
server/access/access-requests.cjs - reCAPTCHA verification
server/access/recaptcha.cjs
Description tools
- Description input
src/features/calculator/sections/DescriptionSection.jsx - Voice input
src/features/description/VoiceInput.jsx - Description correction
server/description/description-correction.cjs - Transcription API
api/intake/transcribe.mjs
Client profiles
- Profile state
src/features/profiles/useClientProfile.js - Profile review
src/features/profiles/ClientProfileReview.jsx - Profile handlers
server/profiles/client-profiles.mjs - Profile rules
shared/client-profile.mjs
Other components
- Visitor
- OpenAI services
Connections 28
- Visitor → App entry: opens calculator
README.md - App entry → Access state: checks access
src/App.jsx - App entry → Profile state: loads profile state
src/App.jsx - App entry → Access gate UI: shows gate
src/App.jsx - App entry → Calculator form: loads calculator
src/App.jsx - Access state → Access gate UI: provides gate state
src/App.jsx - Access gate UI → Access handlers: submits access
- Access handlers → Access requests: checks requests
server/api-handlers.mjs - Access handlers → reCAPTCHA verification: verifies challenge
server/api-handlers.mjs - Calculator form → Estimator state: uses state
src/features/calculator/Calculator.jsx - Estimator state → Journey API: requests estimate
- Journey API → Journey calculation: calculates answers
- Journey calculation → Journey engine: normalizes and calculates
public/journey-calculation.js - Journey engine → Pricing engine: calculates base price
public/journey-engine.js - Journey engine → Approved pricing: reads pricing
public/journey-engine.js - Journey engine → Commercial rules: reads rules
public/journey-engine.js - Journey calculation → Question bank: validates scope
public/journey-calculation.js - Calculator form → Description input: renders section
src/features/calculator/Calculator.jsx - Description input → Voice input: offers dictation
- Voice input → Transcription API: sends audio
- Transcription API → OpenAI services: transcribes audio
- Estimator state → Description correction: organizes description
- Profile state → Profile handlers: fetches and saves
src/features/profiles/useClientProfile.js - Profile state → Profile rules: checks profile identity
src/features/profiles/useClientProfile.js - Profile handlers → Profile rules: validates profile
server/profiles/client-profiles.mjs - Calculator form → Profile review: renders review
src/features/calculator/Calculator.jsx - Profile handlers → Access handlers: requires access
server/profiles/client-profiles.mjs - Access handlers → Estimate records: stores estimates
server/api-handlers.mjs