Full-stack PWA · 2026

Articulate

A daily reading practice app for professionals who want to speak with more confidence. Generates a personalised passage every day using AI, then lets you record yourself and get scored on accuracy, fluency and pace.

I built this because a senior engineering manager told me something I couldn't shake. You need to learn how to speak different languages. To customers, to engineers, to execs.

So I built a full-stack PWA that generates a personalised reading passage every day using Claude, records your delivery, and scores your accuracy, fluency, and pace. It's live, free to use, and includes a complete dyslexia-friendly mode built from scratch.

Daily AI passages Speech recording Delivery scoring Streak tracking Favourites library Push notifications

How I built it

01

A coffee chat conversation

Where the idea came from

A senior engineering manager told me something that stuck: "You need to learn how to speak different languages. To customers, to engineers, to execs. They all need something different."

I wanted to build something to practise that, daily and deliberately. Reading aloud in your own voice, on topics that matter to your actual career, felt like the right habit to build.

02

React, Express and the Claude API

Started in Cursor, continued in Claude Code

I started building in Cursor, then moved to Claude Code as the project grew in complexity. The passage generation pipeline, recording flow, and AI scoring were all built end to end. Each passage is personalised to the user's job title, industry, goals, and the speakers they admire, generated fresh every day by Claude.

Recording uses the Web Speech API with real-time transcription. The transcript is compared against the original passage to score accuracy, fluency, and pace, with specific, constructive feedback, not just a number.

The app also tracks streaks, lets users save favourite passages to a library, and supports push notifications as an optional daily reminder.

03

Dyslexia-friendly mode

A complete reading experience redesign, not just a font toggle

I noticed someone struggling to read while I was testing the app and it stuck with me. I didn't want to just add a font toggle and call it accessibility. So I rebuilt the entire reading experience from scratch for dyslexic users: one paragraph at a time, a reading ruler that follows your position, live word highlighting as you speak, syllable break markers, and an OpenDyslexic font option.

The AI passages themselves are adjusted too: shorter sentences, simpler vocabulary, avoiding easily-confused homophones. The accessibility goes all the way through to the content, not just the interface.

Features I'm most proud of

Dyslexia-friendly mode

One paragraph at a time, reading ruler, live word highlighting, syllable breaks, OpenDyslexic font, and AI passages written for it too.

Personalised AI passages

Claude generates each passage around your job, goals, focus areas, and the speakers you want to sound like. New every day.

🎙

Delivery scoring

AI scores your accuracy, fluency and pace after each recording, with specific, constructive feedback.

🔀

Two daily flows

Get straight to the passage, or do a quick energy and theme check-in first. Your choice every morning.

Tech stack

React 18

Frontend with Vite and Tailwind CSS

Node.js + Express

Backend API server

Anthropic Claude

Passage generation and speech scoring

Web Speech API

Real-time speech recognition

PWA

Service worker, offline support, push notifications

Railway + Docker

Deployment and hosting

Cursor

Built the initial version in Cursor

Try it yourself

The app is live and free to use. Set up your profile in about two minutes and get your first passage today.

Open Articulate →
PA

Madiha's Portfolio Assistant

Ask me anything