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