Case study 06 · SaaS · AI
1:1 Digital
Prepares manager–employee one-on-ones with AI and turns notes into a report signed off by both.
- Role
- Full-stack development, integrations and AI orchestration
- Category
- SaaS · AI
- Stack
- Laravel 13 · React 19 · Claude API
- Quality
- 53 tests


01 — Context
Weekly manager–employee meetings required finding previous commitments, checking goal progress and writing up decisions, with information spread across an OKR tool, notes and emails.
02 — Problem
Goals in one tool, notes elsewhere, emails on the side: one week's commitments got lost the next.
03 — Solution
The manager sets up a follow-up cycle and selects Perdoo goals. The app creates the sessions, carries over previous commitments and drafts an agenda with Claude. Notes are typed or dictated, the AI produces a structured report that is reviewed and signed off by both manager and employee; the double sign-off triggers sending.
04 — Features
Cycles and sessions
Weekly sessions generated, with no overlapping cycles.
Perdoo goals
Progress and key results, stale goals flagged.
AI preparation
Questions and topics proposed from OKRs and commitments.
Dictation
Native speech recognition, in-browser Whisper as a fallback.
Report
Commitments, goals, blockers and decisions, editable before sending.
Sign-off and history
Timestamped sign-offs, SHA-256 fingerprint and locked content.
05 — Screenshots

Completed session with commitment tracking
06 — Architecture
- React interfacedictation · Whisper
- Laravel · Inertiaactions · authorisation
- Jobs and schedulerprogressive retries
- Perdoo · ClaudeOKRs · agendas · reports
- Relational databasesessions · snapshots
Dedicated services isolate calls to Perdoo and Claude; long-running work is handed to jobs.
Claude is called with an enforced tool and JSON schema, so it returns data the interface can use rather than free text.
07 — Technical challenges
Challenge
Match Perdoo data with internal tracking.
Solution
Dedicated GraphQL queries, typed objects and snapshots attached to each session.
Challenge
Get usable results from the AI.
Solution
An enforced Claude tool with a JSON schema, separating assumptions, suggestions and confirmed facts.
Challenge
Coordinate long-running work and final sign-off.
Solution
Jobs, interface refresh, status-based checks and a fingerprint of the final content.
08 — My contribution
- Architecture and data model
- Laravel backend and React / TypeScript interfaces
- Perdoo, Claude, Google OAuth and email integration
- Background processing and voice input
- Access rules, tests and continuous integration
09 — Stack
- Backend
- PHP 8.3, Laravel 13, Socialite, Laravel Mail
- Frontend
- React 19, TypeScript, Inertia.js, Tailwind CSS 4, shadcn/ui
- AI and voice
- API Claude, Whisper (Transformers.js), Web Speech API
- Integrations
- Perdoo GraphQL, Google OAuth 2.0, Brevo
- Quality
- PHPUnit, GitHub Actions
10 — Results
53
passing tests and 159 assertions
2
timestamped sign-offs before each report is sent