EcoContent Auditor

SustainabilityIntermediateFeb 20, 2026

EcoContent Auditor

Analyze and reduce the digital carbon footprint of your website content.

The Problem

Solo developers, indie hackers, and small marketing teams spend countless hours creating and optimizing product pages, blog posts, and documentation. While focused on SEO and conversion, they often overlook the environmental impact of their digital assets. Large, unoptimized images and videos, inefficient fonts, and heavy CSS/JS files lead to increased data transfer and storage, contributing directly to a higher digital carbon footprint. There's no simple, budget-friendly tool specifically designed for this audience to easily quantify, track, and reduce the environmental impact of their content, leading to slower page loads, higher hosting costs, and a missed opportunity to market their commitment to sustainability. They lack actionable insights tailored to content assets, wasting time trying to manually identify and fix issues.

The Solution

EcoContent Auditor provides a simple, actionable platform for solo developers and small teams to assess and optimize their website's content for sustainability. Users input a URL, and our system scans for digital assets (images, videos, fonts, scripts). It then generates a 'Digital Carbon Score' based on asset size, type, and estimated data transfer. The core feature provides specific, prioritized recommendations: suggesting WebP conversion for images, identifying oversized videos, recommending font subsetting, and highlighting areas for lazy loading. A dashboard tracks progress over time, showing the reduction in estimated carbon footprint. What makes it unique is its focus on content assets specifically, offering a 'sustainability score' rather than just a performance score, enabling creators to align their digital presence with their environmental values and communicate that commitment to their audience.

Tech Stack

Frontend
Next.js 14ReactTailwind CSS
Backend
Next.js API RoutesNode.js (for web scraping/analysis libs)
Database
PostgreSQL (Supabase)
APIs
Stripe (payments)Resend (transactional emails)

System Architecture

Database Schema

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email TEXT UNIQUE NOT NULL,
    password_hash TEXT NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

CREATE TABLE audits (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id) ON DELETE CASCADE,
    url TEXT NOT NULL,
    status TEXT NOT NULL DEFAULT 'pending', -- pending, processing, completed, failed
    estimated_carbon_g_initial NUMERIC(10, 2), -- estimated carbon footprint before optimization
    estimated_carbon_g_optimized NUMERIC(10, 2), -- estimated carbon footprint if recommendations applied
    score NUMERIC(5, 2), -- e.g., 0-100 score, higher is better
    report_summary JSONB, -- Store high-level report data
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_audits_user_id ON audits(user_id);
CREATE INDEX idx_audits_status ON audits(status);

CREATE TABLE audit_assets (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    audit_id UUID REFERENCES audits(id) ON DELETE CASCADE,
    asset_type TEXT NOT NULL, -- e.g., 'image', 'video', 'font', 'css', 'js'
    asset_url TEXT NOT NULL,
    original_size_kb NUMERIC(10, 2) NOT NULL,
    potential_savings_kb NUMERIC(10, 2) DEFAULT 0,
    estimated_carbon_impact_g NUMERIC(10, 2) DEFAULT 0,
    recommendation TEXT, -- e.g., 'Compress to WebP', 'Lazy Load', 'Sub-set font'
    is_optimized BOOLEAN DEFAULT FALSE, -- To track if recommendation was applied (future feature)
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_audit_assets_audit_id ON audit_assets(audit_id);

CREATE TABLE subscriptions (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID REFERENCES users(id) ON DELETE CASCADE,
    stripe_customer_id TEXT UNIQUE NOT NULL,
    stripe_subscription_id TEXT UNIQUE,
    plan TEXT NOT NULL, -- e.g., 'free', 'basic', 'pro'
    status TEXT NOT NULL, -- e.g., 'active', 'canceled', 'past_due'
    current_period_end TIMESTAMP WITH TIME ZONE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE INDEX idx_subscriptions_user_id ON subscriptions(user_id);
CREATE INDEX idx_subscriptions_stripe_customer_id ON subscriptions(stripe_customer_id);

API Endpoints

POST/api/auth/signupRegisters a new user with email and password.
POST/api/auth/loginAuthenticates a user and returns a session token.
GET/api/userRetrieves the currently authenticated user's profile.
POST/api/auditSubmits a URL for a new content sustainability audit. Initiates background processing.
GET/api/auditsRetrieves a list of all audits performed by the authenticated user.
GET/api/audits/[id]Retrieves a detailed report for a specific audit by ID.
POST/api/stripe/checkout-sessionCreates a Stripe checkout session for a new subscription.
POST/api/stripe/webhookStripe webhook endpoint to handle subscription status changes and payments.
πŸ€–

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.

Sustainability
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