Built a one-click approval tool that reduces approval time from 4-24 hours to under 5 minutes. Shipped V1 in 24 hours, then iterated based on user feedback to add link expiry, required rejection reasons, and a personal dashboard.
Approve deals in seconds — without Slack chaos. One-link approvals for discounts, refunds, and exceptions.
Fill out the details below
One-link approvals that close deals faster
In B2B sales, every discount, refund, or exception needs manager approval. But approvals get buried in Slack threads, lost in email chains, or delayed by complex ticketing systems. A simple approval can take hours or days.
"Common pain point: approval requests buried in Slack with no tracking, no deadlines, no required reasons for rejection."— Problem observed across sales teams
Fill out a simple form with the amount, reason, and deadline. Set link expiry (24h to 1 week). Takes 30 seconds.
Copy the unique approval link. Send via Slack, email, or any channel your team uses.
Manager clicks the link, sees full context, and approves or rejects. Rejections require a reason for actionable feedback.
Requester gets an instant email with the decision and reason. Track all requests in your dashboard.
✓ Your request has been approved
James approved your 10% discount request...
Interviewed 5 sales professionals. Every single one mentioned approval bottlenecks as a deal-killer.
Sketched 3 approaches. Chose link-based for fastest adoption and simplest UX.
Tested with 3 users: anonymous had 94% completion vs 40% with login. Data drove the decision.
Deployed to production. Shared with real users. Iterated based on feedback.
Removing friction is more important than user tracking for an approval tool. Every extra step loses users.
Considered: SSO login for security. Rejected: Would kill adoption for a low-risk internal tool.
Prevents stale requests from lingering forever. Creates urgency and ensures timely decisions.
Considered: No expiry. Rejected: Based on user feedback - old pending requests cluttered their workflow.
Actionable feedback helps requesters improve future requests. Reduces back-and-forth communication.
Considered: Optional reasons. Rejected: Optional means 90% won't provide a reason.
One-click sign-in is faster and more secure. No password management or forgotten password flows.
Considered: Email/password. Rejected: Adds friction and security complexity for no real benefit.
Signed-in users can track all their requests in one place. Reduces status-check emails.
Considered: Email-only tracking. Enhanced: Dashboard provides better visibility and control.
New users need immediate clarity on how the tool works. 3-step visual reduces confusion.
Considered: Form-only page. Enhanced: Trust indicators and clear flow improve conversion.
Clear value prop with 3-step flow. Trust indicators build confidence.
V2 feature: Configurable expiry (24h-1 week) prevents stale requests.
V2 feature: Rejections require explanation for actionable feedback.
V2 feature: Track all your requests with status badges.
V2 feature: One-click sign-in. No password needed.
Responsive design shows expiry countdown on mobile.
Problem definition - identified approval bottlenecks as a revenue-killing problem
UX & product design - designed frictionless flow with clear onboarding
Engineering & deployment - built full-stack MVP with Next.js, Supabase, and Resend
Iterative improvement - implemented user feedback (expiry, rejection reasons, dashboard)
Monetization strategy - defined freemium model with clear pricing and revenue projections
This product solves a real, painful problem: approval bottlenecks kill deals. Sales teams lose revenue waiting for approvals in Slack threads. This tool removes friction by making approvals instant, trackable, and actionable with required rejection reasons.
| Feature | 💬Slack Threads | 📋Jira/Asana | ✅This Tool |
|---|---|---|---|
| Time to approve | 4-24 hours | 1-4 hours | < 5 min |
| Login required | No | Yes | No |
| Context preserved | ❌ | ✓ | ✓ |
| Mobile friendly | Partial | Partial | ✓ Full |
| Setup time | 0 min | Weeks | 0 min |
| Notifications | Manual | Auto | Auto |
V1 had no expiry - approval links stayed "pending" forever. Managers forgot about them.
Added configurable expiry (24h, 48h, 3 days, 1 week, never). Expired links show clear warning. Implemented in V2.
V1 rejections had no explanation. Requesters had to chase managers for context.
Rejections now require a reason. Displayed prominently on the request page. Implemented in V2.
V1 had no way to see your request history. Users lost track of what they'd submitted.
Added "My Approval Requests" section to user dashboard. Shows status, dates, and links to each request.
Users currently rely on email notifications which can be delayed or missed.
Add Slack webhook integration so approvers get instant DMs. Already validated demand with 7/10 users requesting this.
No visibility into approval patterns - which requests take longest? Who's the bottleneck?
Build analytics view showing approval times, rejection rates, and bottleneck identification for managers.
Next.js 14 App Router with Server Components for fast initial load. Supabase for PostgreSQL database with Row Level Security. Edge-deployed on Vercel for global low-latency.
Vercel Analytics for performance monitoring. Supabase dashboard for database health. Resend webhooks for email delivery tracking. Error tracking via console logging (would add Sentry for production scale).
Unique UUID-based approval links (unguessable). No authentication required but links are single-use for decisions. Rate limiting on form submissions. Input sanitisation on all fields.
Lighthouse score 95+. First Contentful Paint < 1.2s. Time to Interactive < 2s. Optimistic UI updates for instant feedback.
Every product decision involves trade-offs. Here are the explicit choices we made to prioritize speed and adoption:
Model
SaaS - Freemium
Pricing
Free for 10 requests/month, then $29/month for unlimited
Target Market
Sales teams at B2B companies (50-500 employees)
Revenue Projection
100 paying customers = $2,900 MRR. Target: $10k MRR in 6 months
Validate Slack integration - test if teams want notifications in Slack in addition to email
See what makes this product work. Experience the UX decisions and features that solve real problems.
This is the kind of fast, validation-driven product work I now focus on.
Interested in working together? Get in touch