Back to projects
Canvs

Canvs.ai Text Analytics Platform

I spent four years building Canvs.ai, a US platform that helps enterprise teams make sense of open-ended survey responses. I built dashboards with Highcharts, D3 and word clouds, a Storybook design system, Auth0 SSO, pen-test fixes and a batched GraphQL layer. I also built Canvs IQ, the AI chat assistant, and took it from requirements to production.

Project
Canvs.ai (via Tkxel)
Role
Software Engineer · Frontend & Node.js
Period
2021 – 2025

[ Overview ]

Canvs is a text-analytics platform used by enterprise insights teams to code and analyze large volumes of open-ended survey responses. I worked on it from September 2021 to August 2025 through Tkxel, alongside a US product team.

Across the platform I built dashboards and visualisations, the shared Storybook component library, Auth0 single sign-on, security fixes from penetration tests, the GraphQL data layer and Word/PowerPoint exports. From 2024 I was the main engineer on Canvs IQ, the platform's AI chat assistant, writing about 60% of the commits in its codebase.

[ My role ]

  • Built and maintained frontend features across the Canvs.ai platform for four years.
  • Took Canvs IQ from product requirements to production: the React client, the Node.js integration layer and the export pipeline.
  • Implemented Auth0 SSO and fixed findings from penetration tests and SonarQube scans.
  • Reviewed code, contributed shared frontend patterns and coordinated releases with the US product team.

[ What I built ]

Canvs IQ, the AI chat assistant

  • Users ask questions like "What's driving negative sentiment among Gen Z respondents?" and get answers grounded in their own dataset instead of building filters and charts by hand.
  • Answers stream over server-sent events with a live status line ("Collecting data…", "Thinking…", "Generating response…"). Tokens are batched every 80 ms so long answers render smoothly, and runs can be cancelled mid-answer.
  • When the model returns structured chart data, it renders as an interactive Highcharts chart inside the message.
  • Every claim links to the survey responses behind it, with a popover showing the quote and its metadata, and a "See all citations" view per answer.
  • Conversations export to a formatted Word document with a citation appendix, or to an Executive Brief PowerPoint.
  • A prompt library for saving and reusing prompts, filter-aware sessions, warnings before very large analyses, and persistent threads with signed session tokens.
  • Node.js backend first built on the OpenAI Assistants API, then moved to LangChain with function calling and RAG over Qdrant and Pinecone.
  • Refactored into a self-contained component so it could also ship in the Projects area, with an auto-summary on first load.

Dashboards & data visualisation

  • Interactive charts with Highcharts and D3.js for exploring survey results.
  • Word clouds that surface the most frequent themes in open-ended responses.
  • Virtualised large tables and Web Workers to keep heavy data screens fast.

Design system

  • Accessible, reusable Storybook components shared across teams.
  • Shared frontend patterns that kept features consistent across the platform.

Authentication & security

  • Auth0 single sign-on for enterprise customers.
  • Fixed findings from penetration tests and SonarQube security scans.

Data layer & APIs

  • Combined bulk rename, merge, move and delete operations into a single batched GraphQL request.
  • Server state managed with React Query and Apollo Client.

Reports & exports

  • Word and PowerPoint exports so analysis goes straight into client-ready reports.

Quality & delivery

  • Jest, React Testing Library, Playwright and Cypress tests running in CI/CD.
  • Yarn Workspaces monorepo, and a Next.js accounts management application.

[ Impact ]

  • Questions about a dataset went from manual filtering and charting to a single chat interaction with Canvs IQ.
  • AI answers became trustworthy enough for client-facing work because every claim cites the responses behind it.
  • Word and PowerPoint exports removed the copy-and-paste step between analysis and the final report.

[ Stack ]

  • React
  • TypeScript
  • Node.js
  • GraphQL
  • Highcharts
  • D3.js
  • LangChain
  • OpenAI Assistants API
  • Qdrant
  • Pinecone
  • Storybook
  • Auth0
  • Redux
  • React Query
  • Apollo Client
  • styled-components
  • Server-Sent Events
  • Next.js
  • Jest
  • Playwright
  • Cypress

[ What I learned ]

  • Keeping data-heavy dashboards fast with virtualisation and Web Workers
  • Making LLM responses feel fast by batching streamed tokens and showing what the assistant is doing
  • Earning user trust with citations that trace every claim back to the source data