DevSpend Pro
DevSpend Pro
Effortless project expense tracking for solo builders.
Solo developers and indie hackers often juggle multiple projects, each with its own set of recurring subscriptions (SaaS tools, APIs, hosting), one-off purchases (themes, licenses), and even time-based costs. Tracking these expenses accurately and attributing them to specific projects for profitability analysis and tax purposes is a significant headache. Generic accounting software is often too complex and expensive, while spreadsheets become unwieldy and error-prone. This leads to wasted hours manually reconciling costs, inaccurate project profit assessments, and potential missed tax deductions. A builder might spend 2-3 hours monthly just on expense categorization, losing valuable development time and clarity on which projects are truly profitable, impacting their ability to scale or make informed business decisions.
DevSpend Pro provides a focused solution for solo developers to easily log and attribute expenses to specific projects. Users can quickly add expenses, categorize them, and tag them to one or more ongoing projects. The unique value lies in its simplicity and developer-centric features: quick entry for common dev tools/subscriptions, intuitive project-based views, and basic profitability reports per project. Imagine seeing at a glance the total spend for 'Project X' and its net revenue. This allows builders to understand their true project costs, optimize their tech stack spend, and simplify tax preparation, freeing them up to build more.
Tech Stack
System Architecture
βββββββββββββββββββ ββββββββββββββββββββββββ
β Client β β External β
β (Web Browser) β β Services β
βββββββββ¬ββββββββββ ββββββββββββ¬ββββββββββββ
β HTTP Request β
βΌ β
βββββββββββββββββββ β
β Next.js Backend β β
β (API Routes) β β
βββββββββββββββββββ€ β
β Authentication β β
β Expense Logic β β
β Project Logic β β
β Reporting Logicβ β
βββββββββ¬ββββββββββ β
β β
β DB Queries β
βΌ β
βββββββββββββββββββ β
β Supabase β β
β (PostgreSQL) β β
βββββββββββββββββββ€ β
β users table β β
β projects table β β
β expenses table β β
β categories tableβ β
βββββββββββββββββββ β
β² βΌ
β β
β Payment Gateway β Email Service
β (for SaaS subscription) β (transactional)
β β
β β
β β
βββββββββ΄ββββββββββ ββββββββββ΄βββββββββββ
β Stripe β β Resend β
βββββββββββββββββββ βββββββββββββββββββββDatabase Schema
-- Users table for authentication
CREATE TABLE users (
id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
email TEXT UNIQUE NOT NULL,
display_name TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX users_email_idx ON users (email);
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can view their own data." ON users FOR SELECT USING (auth.uid() = id);
CREATE POLICY "Users can update their own data." ON users FOR UPDATE USING (auth.uid() = id);
-- Projects table
CREATE TABLE projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name TEXT NOT NULL,
description TEXT,
status TEXT DEFAULT 'active' CHECK (status IN ('active', 'archived', 'completed')),
revenue_model TEXT, -- e.g., 'SaaS', 'Consulting', 'One-time sale'
expected_revenue DECIMAL(10, 2) DEFAULT 0.00,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX projects_user_id_idx ON projects (user_id);
ALTER TABLE projects ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can manage their own projects." ON projects FOR ALL USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id);
-- Expense Categories table
CREATE TABLE expense_categories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name TEXT UNIQUE NOT NULL, -- e.g., 'Hosting', 'SaaS Subscriptions', 'API Costs', 'Marketing'
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX expense_categories_user_id_idx ON expense_categories (user_id);
ALTER TABLE expense_categories ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can manage their own categories." ON expense_categories FOR ALL USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id);
-- Expenses table
CREATE TABLE expenses (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
project_id UUID REFERENCES projects(id) ON DELETE SET NULL, -- Can be null if general expense
category_id UUID REFERENCES expense_categories(id) ON DELETE SET NULL,
amount DECIMAL(10, 2) NOT NULL,
currency TEXT DEFAULT 'USD' NOT NULL,
description TEXT,
transaction_date DATE NOT NULL,
is_recurring BOOLEAN DEFAULT FALSE,
recurrence_interval TEXT, -- e.g., 'monthly', 'annually'
vendor TEXT,
receipt_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX expenses_user_id_idx ON expenses (user_id);
CREATE INDEX expenses_project_id_idx ON expenses (project_id);
CREATE INDEX expenses_category_id_idx ON expenses (category_id);
ALTER TABLE expenses ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can manage their own expenses." ON expenses FOR ALL USING (auth.uid() = user_id) WITH CHECK (auth.uid() = user_id);API Endpoints
/api/userGet current user profile/api/userUpdate user profile/api/projectsList all projects for the authenticated user/api/projectsCreate a new project/api/projects/[id]Get a specific project by ID/api/projects/[id]Update a specific project/api/projects/[id]Delete a specific project/api/expensesList all expenses for the authenticated user, with optional filters (project_id, category_id, date_range)/api/expensesAdd a new expense/api/expenses/[id]Get a specific expense by ID/api/expenses/[id]Update a specific expense/api/expenses/[id]Delete a specific expense/api/categoriesList all expense categories for the authenticated user/api/categoriesCreate a new expense category/api/reports/project-summaryGet summary of expenses per project/api/reports/category-summaryGet summary of expenses per categoryStart Building with AI
Copy this prompt for Cursor, v0, Bolt, or any AI coding assistant
BuilderDaily Team
VerifiedIndie hackers and full-stack engineers creating validated Micro-SaaS blueprints with production-ready tech stacks.
Related Blueprints
More Micro-SaaS ideas you might like to build
ProfitPulse
Unify your indie product revenue. See all your income streams in one dashboard.
GreenPage Guardian
Monitor website efficiency, reduce digital carbon footprint, and display a verifiable green badge.
CarePath Flow
Personalize patient education with dynamic, interactive care flows. Boost compliance.
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!)