TimeStitch - Auto-Capture Billable Work from Calendar and Email
Slack bot that passively watches your calendar, email, and message activity to build a daily billable hours log with one-click confirmation. No manual time entry reconstruction from memory at 5pm.
Difficulty
intermediate
Category
Business Automation
Market Demand
Very High
Revenue Score
8/10
Platform
Web App
Vibe Code Friendly
⚡ YesHackathon Score
🏆 8/10
Validated by Real Pain
— seeded from real developer complaints
Hourly professionals spend significant time reconstructing billable work from memory, email logs, and calendar blocks because they do not capture activities in real-time. Manual end-of-day reconciliation is error-prone and inefficient.
What is it?
Hourly professionals—lawyers, consultants, accountants—lose 3-5 hours per week reconstructing billable time from memory, email threads, and calendar blocks. TimeStitch solves this by running a background observer that tracks calendar meetings, email exchanges, and Slack activity, then surfacing a consolidated daily digest in Slack with pre-filled billable entries ready to confirm. Users click 'confirm' or 'edit', and the time logs automatically sync to their billing software (Harvest, Toggl, or manual export). The MVP connects Google Calendar and Slack, detects meeting blocks and email clusters, asks for client/project tags once per day, and exports CSVs. Why 100% buildable right now: Google Calendar API, Slack Events API, and Claude's structured output (via function calling) all mature and stable. No model training needed. Supabase handles user data, Vercel runs the cron job daily, and Resend sends the morning digest email if needed.
Why now?
Stripe increased payment options in March 2026, making indie SaaS more accessible. Google Calendar API rate limits stabilized, and Claude's function calling enables reliable structured output from unstructured calendar/email data. Slack app distribution is now mature with better discovery.
- ▸Daily auto-detected billable activities from Google Calendar and email (detects meeting blocks, flagged email threads)
- ▸Slack digest with one-click confirm/edit workflow and client/project tagging
- ▸Integration with Harvest, Toggl, or CSV export for billing software sync
- ▸Weekly analytics dashboard showing billable hours trends and gaps
Target Audience
Solo and small-firm lawyers (500k in US), freelance consultants (200k), independent accountants (150k). Targeting 2-5 person practices first. TAM: ~850k professionals in US who bill hourly.
Example Use Case
Sarah, a solo patent attorney, used to spend 90 minutes each Friday reconstructing billable hours. TimeStitch auto-captures her 8 client meetings and 12 email clusters daily, she spends 5 minutes confirming and tagging, and now bills an extra $3,200/month that was previously lost. She upgrades to team plan when she hires her first associate.
User Stories
- ▸As a solo lawyer, I want my billable hours auto-captured from my calendar and email so that I spend < 5 minutes per day confirming instead of 90 minutes on Friday reconstructing.
- ▸As a small consulting firm, I want my team's billable hours synced to Harvest automatically so that I can invoice clients faster and reduce manual data entry errors.
- ▸As a freelance accountant, I want to see weekly trends in billable hours so that I can identify when I am underutilizing time or overcommitting.
Acceptance Criteria
Calendar Sync: done when user authorizes Google Calendar and activities appear in daily digest within 30 minutes of calendar event creation. Email Detection: done when flagged or starred emails are parsed and included in digest with > 70% accuracy. Confirmation Workflow: done when user can confirm all activities with 3 clicks and data persists in Supabase. Export: done when CSV downloads and matches confirmed activities exactly. Payment: done when Stripe checkout converts free user to paid and access persists after renewal.
Is it worth building?
$49/month × 40 solo users = $1,960 MRR at month 3. $129/month × 20 small teams = $2,580 MRR. Combined: $4,540 MRR at month 4.
Unit Economics
CAC: $50 via LinkedIn cold outreach (1 DM per 20 contacts, 1 in 20 converts to paid, $1 cost per contact via time). LTV: $588 (12 months at $49/month, 70% retention year 1). Payback: 1.2 months. Gross margin: 85% (low COGS).
Business Model
SaaS subscription: $49/month for solo, $129/month for teams up to 5
Monetization Path
Free 2-week trial with full features. Conversion triggered by daily usage (confirm > 5 times). Churn is low because it solves a painful daily workflow.
Revenue Timeline
First dollar: week 4 via beta trial upgrade. $1k MRR: month 3. $5k MRR: month 7. $10k MRR: month 14.
Estimated Monthly Cost
Google Calendar API: free tier covers startup load. Slack app: free. Claude API: ~$60 (assume 500 users × 3 API calls/day × 0.01 per call). Supabase: $25. Stripe fees: ~$30 (2% on payments). Vercel: $20. Total: ~$175/month at launch.
Profit Potential
Full-time viable at $3k–$8k MRR. Realistic path to $10k MRR in 8 months.
Scalability
High — can add integrations for Outlook, HubSpot CRM, Notion, and support team collaboration.
Success Metrics
Week 1: 100 Slack installs. Week 2: 20 paid trials. Month 2: 35 paid users, 70% retention.
Launch & Validation Plan
Survey 40 solo lawyers and consultants on LinkedIn and Reddit r/freelance. Build landing page with Webflow. Recruit 8 beta testers (2-3 lawyers, 2-3 consultants, 2-3 accountants) for 2-week free trial before launch. Measure: time saved, accuracy of auto-capture, daily active usage.
Customer Acquisition Strategy
First customer: DM 15 solo practitioners on LinkedIn offering 3 months free in exchange for weekly 15-min feedback calls and testimonial. Second: ProductHunt launch, Reddit r/freelance and r/law, Twitter/X threads targeting freelance communities, cold email to small law firms.
What's the competition?
Competition Level
Low
Similar Products
Harvest and Toggl are manual time tracking with no passive capture. Everhour has calendar sync but requires manual categorization. Timing app (macOS only) auto-tracks desktop activity but has no Slack integration or billable professional workflow. Clockify offers free time tracking with calendar sync but no AI-assisted auto-capture or confirmation workflow.
Competitive Advantage
Purpose-built for billable professionals (not generic time tracking). Passive auto-capture with zero manual entry per activity. Slack-native (where lawyers already work).
Regulatory Risks
GDPR compliance required (user data deletion endpoint, privacy policy on data retention). No HIPAA or financial regulations needed.
What's the roadmap?
Feature Roadmap
V1 (week 3): Google Calendar sync, daily digest, confirm/edit workflow, CSV export, basic dashboard. V2 (month 2-3): Harvest integration, Toggl integration, team collaboration (view teammates' hours), email pattern learning. V3 (month 4+): Outlook integration, invoice generation from logged hours, predictive billing alerts, white-label reselling to practice management software.
Milestone Plan
Phase 1 (Week 1-2): Build Next.js scaffold, Supabase schema, Google Calendar OAuth, Claude parsing endpoint. Done when: local dev environment boots, OAuth token persists, Claude returns structured JSON. Phase 2 (Week 3-4): Slack app integration, daily cron, Lovable modal UI, Stripe billing. Done when: Slack app installs, digest sends daily at 8am, modal opens in Slack, payment flow completes. Phase 3 (Month 2): Beta launch, 8 testers sign up, CSV export verified, first paying customer closes. Done when: 3 beta users confirm daily for 10 days, export matches Supabase logs.
How do you build it?
Tech Stack
Next.js, Google Calendar API, Slack Events API, Claude API, Supabase, Stripe — build with Cursor for backend integrations, Lovable for Slack UI, v0 for dashboard.
Suggested Frameworks
Vercel AI SDK with Zod for Claude structured output and schema validation, node-cron for scheduled digest jobs, Slack Bolt for bot event handling and Block Kit for modal UI
Time to Ship
5 weeks
Required Skills
Slack bot development, Google Calendar API integration, Claude structured output, basic SaaS billing
Resources
Slack Bolt docs, Google Calendar API docs, Claude function calling, Supabase auth, Stripe billing docs
MVP Scope
Create: (1) Next.js app with Supabase auth + Stripe billing. (2) Slack Events API listener (Slack Bolt). (3) Google Calendar API connector (background job). (4) Claude function-calling parser for email/calendar intent. (5) Supabase schema for users, activities, daily digests. (6) Lovable Slack modal for confirm/edit. (7) CSV export endpoint. (8) Basic dashboard in v0 (bar chart of weekly hours). (9) Resend email digest template. (10) Stripe webhook handler.
Core User Journey
Install Slack app -> authorize Google Calendar -> see first digest tomorrow morning -> confirm 3 activities -> bill an extra 2 hours that week -> upgrade to paid.
Architecture Pattern
Slack app receives /install -> Google Calendar OAuth flow -> daily cron triggers at 8am -> Claude parses calendar+email -> Supabase stores activities -> Slack delivers digest modal -> user confirms -> CSV export or webhook to Harvest API.
Data Model
User has one SlackWorkspace. SlackWorkspace has many CalendarActivities. CalendarActivity has one Client and one Project. User has many ConfirmationEvents (daily digest confirmations).
Integration Points
Google Calendar API for event sync, Slack Events API for bot messaging, Claude API for activity parsing, Supabase for user data and activity storage, Stripe for subscription billing, Harvest API (optional) for time export.
V1 Scope Boundaries
V1 excludes: team capacity planning, invoice generation, multi-timezone support, mobile app, Outlook integration, white-label.
Success Definition
A paying solo lawyer discovers the product, connects their calendar, confirms billable hours daily for 2 weeks without founder help, and renews subscription after 30 days.
Challenges
Distinguishing billable from personal activity (false positives on calendar blocks). Managing email parsing at scale without hitting rate limits.
Avoid These Pitfalls
Do not parse email body content for billing context — attorneys have attorney-client privilege concerns and many professionals will reject the product on first read if it reads email body text; stick to subject lines and sender domains only. Do not assume calendar event titles are client-identifiable — 'Call with John' or 'Meeting' are the most common titles; build a one-time client mapping flow where users link email domains or name patterns to client matters before first digest. Do not use Slack's free tier bot message limits as a baseline — Slack limits bots to 1 DM per second and enforces rate limits on `chat.postMessage`; queue digest sends with a 1.5s delay between users or you will get 429 errors at 50+ users. Do not rely on Google Calendar API push notifications (webhooks) for MVP — channel expiry every 7 days requires renewal logic; use polling cron instead until you have bandwidth to handle webhook lifecycle. Do not let users connect to team Slack workspaces without admin approval flows — Slack workspace admins can revoke your app instantly if they did not authorize it, killing all users in that workspace; prompt for admin approval and document this in onboarding. Do not auto-confirm any activity as billable without explicit user action — if a billing dispute ever arises, a lawyer needs to demonstrate that hours were human-confirmed, not AI-assumed.
Security Requirements
Auth: Supabase Auth with Google OAuth for calendar sync. RLS enabled on calendar_activities and confirmations tables (users see only their own). Rate limiting: 100 req/min per user IP via Next.js middleware. Input validation: all form inputs sanitized, Claude output validated against schema. GDPR: data deletion endpoint exposed at /api/user/delete (triggers cascading delete in Supabase).
Infrastructure Plan
Hosting: Vercel (Next.js). Database: Supabase Postgres. Calendar storage: Supabase. File storage: none needed for MVP. CI/CD: GitHub Actions (deploy on push to main). Environments: dev (local with .env.local), staging (Vercel preview), prod (Vercel main). Monitoring: Sentry for error tracking, Vercel Analytics for traffic. Cost: Vercel $20, Supabase $25, Sentry $29, monitoring=$5. Total: $79/month infrastructure.
Performance Targets
Expected DAU at launch: 50, Requests/day: 300. API response time: under 400ms for calendar sync, under 200ms for digest fetch. Page load: under 1.5s (LCP). Caching: Vercel edge caching for static assets, Redis for session tokens if scaling beyond 500 users.
Go-Live Checklist
- ☐✓ Google Calendar OAuth tested with 3 real accounts
- ☐✓ Claude parsing accuracy validated on 50 sample calendars (target > 75%)
- ☐✓ Slack modal confirm/edit workflow tested in sandbox
- ☐✓ Stripe checkout tested end-to-end (free -> paid)
- ☐✓ Supabase RLS rules verified (user isolation)
- ☐✓ Error tracking (Sentry) live and firing test errors
- ☐✓ Monitoring dashboard shows traffic in real-time
- ☐✓ Custom domain timestitch.app configured with SSL
- ☐✓ Privacy policy and terms published
- ☐✓ 8 beta users signed off (5+ daily confirmations)
- ☐✓ Rollback plan: revert Vercel deployment, restore Supabase from backup
- ☐✓ Launch posts drafted for ProductHunt, Reddit r/freelance, Twitter.
How to build it, step by step
1. Bootstrap: `npx create-next-app@latest timestitch --typescript --app` then `npm install @slack/bolt @supabase/supabase-js stripe ai zod node-cron resend`. 2. Supabase schema: create tables — `users (id, slack_user_id, google_refresh_token, stripe_customer_id, plan)`, `calendar_activities (id, user_id, event_id, title, start_time, end_time, client_tag, project_tag, confirmed, billable, source)`, `daily_digests (id, user_id, date, sent_at, confirmed_at)`. Enable RLS on all tables with `auth.uid() = user_id` policies. 3. Google Calendar OAuth: create `/app/api/auth/google/route.ts` using googleapis npm package — request scopes `calendar.readonly` and `gmail.readonly`, store refresh token encrypted in `users.google_refresh_token` via Supabase service role client. 4. Slack app setup: on api.slack.com create app with Bot Token Scopes `chat:write`, `im:write`, `users:read`. Enable Event Subscriptions pointing to `/api/slack/events`. Use Slack Bolt in `/app/api/slack/events/route.ts` to handle `app_home_opened` and `block_actions` events. 5. Calendar sync cron: in `/app/api/cron/sync/route.ts` use `node-cron` to schedule `0 7 * * *` — for each user with a valid refresh token, call Google Calendar API `events.list` with `timeMin=today 00:00` and `timeMax=today 23:59`, insert new events into `calendar_activities` with `confirmed=false`. Secure endpoint with `CRON_SECRET` header check. 6. Claude parsing endpoint: create `/app/api/parse/route.ts` — POST receives array of raw calendar event titles and email subjects, calls Claude API via Vercel AI SDK `generateObject()` with a Zod schema `z.object({ activities: z.array(z.object({ title: z.string(), estimated_minutes: z.number(), likely_billable: z.boolean(), suggested_client: z.string().optional() })) })`. System prompt: 'You are a billing assistant for hourly professionals. Given these calendar events and email subjects, identify which are likely billable client work, estimate duration, and suggest client name from context.' 7. Slack digest delivery: after cron sync, build a Slack Block Kit message with a `section` block per activity showing title/duration and `confirm` + `edit` buttons using `actions` blocks. Use `client.chat.postMessage` to DM each user. Store `message_ts` in `daily_digests` for later updates. 8. Block Kit confirm/edit modal: use Slack Block Kit Builder (block.kitbuilder.com) to design the edit modal with `plain_text_input` for client tag, `static_select` for project, and `timepicker` for duration override. Handle `view_submission` in Bolt to update `calendar_activities` row. 9. Stripe billing: create `/api/stripe/checkout` that calls `stripe.checkout.sessions.create` with `price_id` for $49/month solo plan. Create `/api/stripe/webhook` to handle `customer.subscription.created` and `customer.subscription.deleted` events — update `users.plan` accordingly. Test with `stripe listen --forward-to localhost:3000/api/stripe/webhook`. 10. CSV export: create `/app/api/export/route.ts` — query confirmed activities for date range, format as RFC 4180 CSV with columns `date,client,project,hours,description`, return with `Content-Type: text/csv` and `Content-Disposition: attachment` headers. 11. Basic dashboard: use shadcn/ui BarChart component (built on Recharts) to display weekly confirmed hours grouped by client — query Supabase `calendar_activities` grouped by `client_tag` and `date`. 12. Deploy: push to GitHub, connect Vercel, set env vars (`SLACK_BOT_TOKEN`, `SLACK_SIGNING_SECRET`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `ANTHROPIC_API_KEY`, `SUPABASE_SERVICE_ROLE_KEY`, `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `CRON_SECRET`). Add Vercel Cron Job in `vercel.json` pointing to `/api/cron/sync` at `0 7 * * *`.
Generated
March 30, 2026
Model
claude-haiku-4-5-20251001 · reviewed by Claude Sonnet