Inspiration
Reading is something most people never think about, but for people with dyslexia every email, textbook and form takes extra effort. Most reading tools live in a single browser tab or app, while reading happens everywhere. We wanted a tool that meets you wherever the text is, adapts to how you read, and guides you from A to B without reading for you. That's where the name comes from: Polaris, the North Star.
What it does
Polaris is an AI reading companion for macOS, paired with a web app.
- Select text in any app. Polaris opens a reformatted reading view with your preferred font, size, letter spacing, line spacing and background tint.
- Read aloud with word-by-word highlighting. Each word lights up as it's spoken. Arrows let you step forward and back, and you can set the reading speed.
- Simplify. Gemini rewrites the text to your chosen reading level (simple, standard or advanced).
- Scan images and screenshots. Text inside images is extracted on the device and read the same way.
- Reading assessment quiz. A short quiz on the web app suggests your best settings (font, spacing, voice and reading level) and saves them to your account. The Mac app then picks them up.
- Choose a voice. Preview ElevenLabs voices on the web app and pick the one that sounds right to you.
- Save to your account. A hotkey saves a selection, along with where it came from, to your web dashboard.
How we built it
- Mac app (Swift): the macOS Accessibility API captures selected text and its context (app, window title, URL). Apple's Vision framework (
VNRecognizeTextRequest) handles OCR on the device, so it's free, fast and works offline. - Pipeline: Scanner → Reader (OCR) → Simplifier (Gemini) → Text-to-speech.
- AI: Gemini simplifies text and helps turn quiz answers into recommended settings. ElevenLabs provides natural-sounding voices.
- Web app: a quiz and settings UI built around dyslexia-friendly design guidelines, with an SQL backend, OAuth, and a REST API (
GET/PUT /api/settings,POST /api/save) secured with bearer tokens so the Mac app and website share one profile. - Privacy by design:
- Sensitive apps (password managers, banking, Messages) are blocked from capture.
- Emails, phone numbers and card numbers are redacted on the device before anything reaches the API.
- Data stays on the Mac by default, and syncing is opt-in.
- A visible "paused" indicator and hotkey stop capture.
- Screenshots show a confirmation before being sent to Gemini.
Challenges we ran into
- Not just a wrapper: our first version was "select text, ask an LLM." We pushed past that by focusing on what a chatbot can't do: capturing context from any app, personalized settings, synced read-aloud, and on-device privacy.
- Mixed laptops: only some of us had Macs, so we split the work into a Swift app and a web app that talk through a strict settings format agreed early on.
- Keeping both sides in sync: the Mac app rejected a settings object if any field was missing, and macOS voice IDs mean nothing to a website. We moved voice selection to ElevenLabs voice IDs that work on both sides.
- Syncing the highlight with the audio so the right word lights up at the right moment.
- Security: an app that reads your screen raises fair privacy questions, so we made privacy a core feature instead of an afterthought.
Accomplishments that we're proud of
- A working pipeline from any app on the Mac to a reformatted, read-aloud, simplified view
- One profile shared across the Mac app and the web app
- Design decisions based on dyslexia research, not guesswork
- Privacy features built in from day one
What we learned
- How the macOS Accessibility API and Vision framework work
- That for dyslexia, spacing, contrast and listening while
Built With
- elevenlabs
- geminiapi
- next.js
- nextauth.js
- postgresql
- react
- swift
- tailwindcss
- tigerdata
- typescript
- vercel