Solo product · 2026
OneFeeOKR
OKR software with one flat fee per company and unlimited users.
- Live site
- Live preview· No signup
- Code walkthrough on request
- Role
- Product, design and full-stack engineering (solo)
- Timeline
- 2026
- Type
- Independent product

- Postgres tables
- 23Postgres tables
- RLS policies
- 39RLS policies
- integrations
- 9integrations
- OKR templates
- 37OKR templates
Overview
The problem
Teams rarely quit OKRs because the method fails. They quit because nobody updates the numbers, and per-seat pricing makes rolling OKRs out to a whole company expensive.
OneFeeOKR charges one flat fee per company with unlimited users and keeps goals alive by bringing the weekly check-in to people's inbox, so nobody has to remember to open another tool.
What I built
Highlights
Multi-tenant by design
23 Postgres tables isolated with 39 row-level-security policies. Five workspace roles (Owner, Admin, Member, Viewer, Coach), plus a platform superadmin whose every action lands in an audit log.
Billing enforced in the database
Paddle subscription webhooks drive plan state. Expired-trial, unpaid or cancelled workspaces turn read-only through SQL guard functions, Starter's three-team cap is a trigger, and data always stays exportable.
Check-ins that run themselves
Hourly scheduled jobs send reminders, nudges and a Monday summary through Resend. Owners update a key result from a one-click email link without logging in.
The OKR engine
Cycles that carry unfinished work forward, four key-result types, progress roll-up, suggested status with manual override, @mention comments, an activity log and 37 templates.
Real-time workspace
A single Zustand store with optimistic updates, kept in sync through Supabase Realtime, so dashboards, the alignment tree and the zoomable map stay live for every user.
Integrations and API
Slack, Teams, Google Sheets, HubSpot, Pipedrive, Jira and Linear update key results hourly. Signed outbound webhooks for Zapier and Make, a bearer-key REST API, and tokens encrypted with AES-256-GCM.
Coach console
One view across every client workspace with health scores, a template library that pushes to any client, private notes, branded PDF reports and one-click handover.
Reports and data portability
CSV and Excel import; CSV, Excel and JSON export; printable quarterly and weekly PDF reports; end-of-cycle scoring with retrospectives.
A live demo that is the real app
Visitors get a populated workspace in one click. The server signs them into a seeded demo account with a one-time magic-link token, and restrictive RLS policies keep it read-only.
Engineering
Decisions that shaped it
- Authorization and plan limits live in Postgres (RLS, guard functions, triggers), not only in API code, so the web app, REST API and cron jobs all obey the same rules.
- Typed end to end: a Drizzle schema pulled from the live database, Zod at every boundary and TypeScript on both server and client.
- Background work stays simple and observable: hourly Netlify scheduled functions for check-ins and integration syncs, plus a health endpoint.
- The public demo runs on production infrastructure and is made safe by database-level read-only policies instead of a mocked copy that can drift.
Screens
A closer look
Responsive
Built for every screen
The whole workspace collapses to a single column with a mobile navigation, so people can check in and review progress from a phone.


