DevRoutine

ProductivityIntermediateJan 23, 2026

DevRoutine

Automate your daily dev workflows, conquer context switching.

The Problem

Solo developers and indie hackers often juggle multiple small projects, leading to constant context switching and forgotten operational tasks. Imagine a developer who has 3-5 micro-SaaS products. Each product requires routine checks: monitoring logs, updating dependencies, checking analytics dashboards, renewing SSL certificates, sending out monthly updates, or even just checking email support queues. These seemingly small tasks, when scattered across projects and contexts, lead to significant mental overhead and wasted time. There's no centralized system to define and consistently execute these crucial 'maintenance' or 'operational' routines. This results in missed deadlines, security vulnerabilities from outdated dependencies, decreased efficiency, and overall burnout, costing hours each week in re-learning context for each project's operational tasks.

The Solution

DevRoutine provides a focused platform for solo developers to define, manage, and execute custom 'Playbooks' for their recurring operational tasks. Users can create playbooks for specific routines (e.g., 'Daily Project Health Check', 'Weekly SaaS Maintenance', 'New Project Onboarding'). Each playbook consists of ordered steps, allowing developers to list specific actions, attach relevant links (e.g., 'Check Vercel logs for Project X', 'Update dependencies for Repo Y'), and track their progress. The unique angle is the 'routine-first' approach, guiding users through their defined operational sequences project-by-project, minimizing context switching, and ensuring consistency. Features include scheduling, progress tracking, and reminders, making sure no critical operational task is ever forgotten again. It's a structured way to ensure the 'invisible' work of maintaining a dev portfolio gets done efficiently.

Tech Stack

Frontend
Next.js 14ReactTailwind CSSTremor (for dashboards/charts)
Backend
Next.js API RoutesTypeScriptZod (validation)
Database
PostgreSQL (Supabase)Supabase Auth
APIs
Stripe (for subscriptions)Resend (for email notifications)

System Architecture

Database Schema

-- Users table for authentication and user profiles
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  email VARCHAR(255) UNIQUE NOT NULL,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Projects table to categorize playbooks (optional, for shared routines)
CREATE TABLE projects (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  name VARCHAR(255) NOT NULL,
  description TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Playbooks table to define routines
CREATE TABLE playbooks (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  project_id UUID REFERENCES projects(id) ON DELETE SET NULL, -- Nullable for general routines
  name VARCHAR(255) NOT NULL,
  description TEXT,
  frequency VARCHAR(50) NOT NULL, -- e.g., 'daily', 'weekly', 'monthly', 'custom'
  is_archived BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_playbooks_user_id ON playbooks(user_id);

-- Playbook steps table for individual actions within a playbook
CREATE TABLE playbook_steps (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  playbook_id UUID REFERENCES playbooks(id) ON DELETE CASCADE,
  order_index INTEGER NOT NULL, -- Order of steps within a playbook
  description TEXT NOT NULL,
  tool_link VARCHAR(2048), -- Optional link to external tool/resource
  expected_duration_minutes INTEGER, -- Optional estimate for step completion
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  CONSTRAINT unique_playbook_order UNIQUE (playbook_id, order_index)
);
CREATE INDEX idx_playbook_steps_playbook_id ON playbook_steps(playbook_id);

-- Routine executions table to track instances of a playbook being run
CREATE TABLE routine_executions (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  playbook_id UUID REFERENCES playbooks(id) ON DELETE CASCADE,
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  scheduled_at TIMESTAMPTZ NOT NULL, -- When the routine was expected to run
  started_at TIMESTAMPTZ, -- When the user actually started it
  completed_at TIMESTAMPTZ, -- When all steps were completed
  status VARCHAR(50) NOT NULL DEFAULT 'pending', -- 'pending', 'in_progress', 'completed', 'skipped'
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_routine_executions_user_id ON routine_executions(user_id);
CREATE INDEX idx_routine_executions_scheduled_at ON routine_executions(scheduled_at);

-- Step completions table to track individual step progress for an execution
CREATE TABLE step_completions (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  routine_execution_id UUID REFERENCES routine_executions(id) ON DELETE CASCADE,
  playbook_step_id UUID REFERENCES playbook_steps(id) ON DELETE CASCADE,
  completed_at TIMESTAMPTZ,
  is_completed BOOLEAN DEFAULT FALSE,
  notes TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW(),
  CONSTRAINT unique_step_completion UNIQUE (routine_execution_id, playbook_step_id)
);
CREATE INDEX idx_step_completions_routine_execution_id ON step_completions(routine_execution_id);

-- Subscriptions table for Stripe integration
CREATE TABLE subscriptions (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id UUID REFERENCES users(id) ON DELETE CASCADE,
  stripe_customer_id VARCHAR(255) UNIQUE NOT NULL,
  stripe_subscription_id VARCHAR(255) UNIQUE NOT NULL,
  plan_id VARCHAR(255) NOT NULL,
  status VARCHAR(50) NOT NULL, -- e.g., 'active', 'canceled', 'trialing'
  current_period_end TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_subscriptions_user_id ON subscriptions(user_id);

API Endpoints

POST/api/auth/signupRegister a new user.
POST/api/auth/signinSign in an existing user.
GET/api/userGet current user's profile.
GET/api/projectsList all projects for the authenticated user.
POST/api/projectsCreate a new project.
GET/api/playbooksList all playbooks for the authenticated user, optionally filtered by project.
POST/api/playbooksCreate a new playbook with initial steps.
GET/api/playbooks/[id]Get a specific playbook and its steps by ID.
PUT/api/playbooks/[id]Update an existing playbook's details.
DELETE/api/playbooks/[id]Delete a playbook and all its associated steps/executions.
POST/api/playbooks/[id]/stepsAdd a new step to an existing playbook.
PUT/api/playbooks/[id]/steps/[step_id]Update a specific step within a playbook.
DELETE/api/playbooks/[id]/steps/[step_id]Delete a step from a playbook.
GET/api/routines/todayGet all routine executions scheduled for today for the user.
GET/api/routines/[id]Get a specific routine execution with its steps and completion status.
POST/api/routines/[id]/startMark a routine execution as 'in_progress'.
POST/api/routines/[routine_id]/steps/[step_id]/completeMark a specific step within a routine execution as 'completed'.
POST/api/routines/[id]/completeMark an entire routine execution as 'completed'.
POST/api/routines/[id]/skipMark a routine execution as 'skipped'.
POST/api/webhook/stripeStripe webhook endpoint for subscription updates.
πŸ€–

Start Building with AI

Copy this prompt for Cursor, v0, Bolt, or any AI coding assistant

πŸ‘·

...

builders copied today

Found this useful? Share it with your builder friends!

BD

BuilderDaily Team

Verified

Indie hackers and full-stack engineers creating validated Micro-SaaS blueprints with production-ready tech stacks.

Productivity
Code TestedSchema ValidatedProduction Ready
Coming Soon in Beta

Gap Alert

Today's gap expires in ~14 hours

Get tomorrow's blueprint delivered to your inbox so you never miss a profitable idea.

(Email delivery launching soon β€” sign up to be first!)

No spam, everβ€’Unsubscribe anytime