Back to portfolio
PlatformClient workFeatured

BCA Solution

A web and PWA platform that centralizes companies, equipment, support subscriptions, technical tickets, conversations with agents, documents, and parts orders, complemented by an AI assistant grounded in each case's manuals and history.

BCA Solution

Core stack

Node.js
Express 5
Sequelize 6
MySQL
REST APIJSON Web Tokensbcryptexpress-validatorMulterSocket.IOServer-Sent EventsOpenAI Responses APIOpenAI Vector StoresOpenAI File SearchMultimodal AISvelteKit 2Svelte 5TypeScriptTailwind CSS 4Vite 7Progressive Web AppService WorkerWeb Push / VAPIDNodemailer / SMTPWinstonPM2

The challenge

The product had to coherently tie companies, users, equipment, and the right to open support requests to a technical process that includes conversations, photos, documents, and parts orders. The customer, the agent, and the administrator have different paths and responsibilities, and the AI assistant must receive exactly the right machine and ticket context without mixing documents across cases. The main challenge was turning an activity fragmented across phone calls, email, PDFs, and photos into a flow tracked end-to-end.

The solution

The Node.js backend uses Express 5, Sequelize, and MySQL, with routes and interfaces separated by role and a relational model for users, companies, equipment, subscriptions, activation requests, tickets, messages, attachments, manuals, and orders. Business rules verify the machine and its active subscription before support can be opened. The SvelteKit frontend uses a shared API client, reactive stores, and reusable components for the customer, agent, and administrator portals. The OpenAI integration is split into services for upload, vector stores, file search, multimodal input, the Responses API, streaming, and cleanup, and the initialization operation has a persistent status tracked via polling. Files are stored on the server, emails are sent via SMTP, and notifications can be delivered in-app, via Web Push, and via Socket.IO.

Notable complexity

BCA Solution digitalizes the after-sales relationship between equipment operators and the team that provides their technical support. After registration, email confirmation, and administrative approval, the customer can manage their profile, companies, and associated equipment. Each machine keeps identification data, the company and owner, images, technical manuals, and subscription history, and opening a support request is only allowed for an owned machine that has an active subscription.

The support flow brings together, in a single case, the ticket number, the affected equipment, the problem description, priority, state, files, and the conversation between the customer and the technical team. The customer can track their requests in a dedicated portal, while agents and administrators use separate areas for triage, assignment, changing priority and status, reviewing documents, and managing the parts orders resulting from the intervention. Orders are linked to the ticket and the machine and can contain multiple line items, quantities, codes, and price estimates.

The AI assistant is integrated into the agent's and administrator's workspace. When a case is initialized, the backend builds context from the machine's data, PDF manuals, equipment images, ticket attachments, and the conversation transcript. Manuals can be automatically reused for machines with the same brand and model. Files are uploaded to OpenAI, the conversation gets a vector store for file search, and relevant images can be included as multimodal input. Initialization state is tracked in the database, responses use the Responses API with message chaining, and are streamed incrementally to the interface via Server-Sent Events.

The frontend is built with SvelteKit 2, Svelte 5, and TypeScript and offers distinct responsive interfaces for the customer, the agent, and the administrator. The app is configured as an installable PWA and includes a service worker, persistent notifications, real-time updates via Socket.IO, VAPID-based Web Push, and SMTP emails for account confirmation, password reset, and user approval. The deployment demonstrated by the repository uses a Vite build and separate PM2 processes for the frontend and API.

Key results

  • 3 operational roles: customer, agent, and administrator, with differentiated portals, navigation, and actions
  • B2B registry for companies and equipment, with identification data, owner, company, images, and technical documentation
  • Historical subscriptions per machine, with a separate request, approval, or rejection flow and expiration tracking
  • Support access conditioned on machine ownership and an active subscription
  • Technical tickets with a unique number, 4 priority levels, 4 operational states, search, filters, and pagination
  • Persistent customer–support conversations, with real-time updates and attachments separated between the form and the chat
  • PDF manual library with multiple upload, download, replacement, deletion, and association to machines
  • Automatic manual reuse for machines with the same brand and model
  • Per-ticket contextualized AI assistant using manuals, images, attachments, and the conversation transcript
  • Vector store and AI history per conversation, with Responses API, file search, multimodal input, and SSE streaming
  • Parts orders linked to the ticket and the machine, with multiple items, quantities, codes, and price estimates
  • Persistent notifications, Web Push, transactional emails, and an installable PWA

Related projects

Want something similar?

Start with the estimate wizard — answer a few questions and get a realistic price range and timeline.