Skip to content
Back
Closed· Operated until Aug 2026Creator Marketplace

PixEarn

A creator marketplace for digital art and wallpapers that I designed, built, and ran solo, growing it to 2,200+ creators, 6,000+ artworks, and 15k+ monthly active users before it closed in Aug 2026.

[01]Overview

Independently designed, built, and operated PixEarn, a creator marketplace for digital art and wallpapers. It grew to 2,200+ registered creators, 6,000+ artworks, 15k+ monthly active users, and 6M image impressions, and ran until August 2026.

Challenge

Every image view was logged as an impression for creator analytics and earnings, so a solo-run platform had to absorb high-concurrency write traffic, keep each creator's data isolated, and stay cheap enough to run on a tiny budget.

Solution

Edge-optimized SSR, PostgreSQL row-level security with indexes tuned to the real query paths, and a Sharp image pipeline that cut storage costs by 40%. Creator payment workflows, a no-cut Support Me button, and fraud detection using visitor fingerprints and IP signals made earnings trustworthy. The whole platform ran on about $38/month of infrastructure.

Tech Stack
Next.jsTypeScriptNode.jsExpressSupabasePostgreSQLAWS S3RazorpayResendSharpZustandTailwind CSSRailway
[02]Screens
The public feed
Creator profile
Dashboard: Support Me links
Analytics, 28 days to Jun 2026
[03]Architecture
pixearn — architecture.mmd
Click to zoom · drag to pan
[04]Decisions
PostgreSQL row-level security for tenant isolation

WhyHigh-concurrency creator/viewer traffic needed per-creator data isolation enforced consistently.

ApproachPostgreSQL RLS policies enforce row-level access control alongside custom indexing for the analytics query paths.

Outcome1.2M+ monthly queries at <150ms avg response.

Sharp-driven image pipeline for storage cost

WhyStorage costs scaled directly with creator uploads.

ApproachA Sharp-based image processing pipeline handles uploads before they hit storage.

Outcome40% reduction in storage costs.

Fraud detection for view-based earnings

WhyCreators earned from views, so view counts had to hold up against inflated traffic.

ApproachFraud detection scored traffic using visitor fingerprints and IP-based signals.

Sargable predicate + CREATE INDEX CONCURRENTLY on a hot table

Whylog_impression threw 57014 statement timeouts at 1.4M calls a day on a ~5.9M-row table that already had a matching index.

ApproachRewrote the predicate so created_at stayed bare and usable as an index bound, built indexes with CREATE INDEX CONCURRENTLY by hand (the migration tool wraps everything in a transaction) and mirrored them with an IF NOT EXISTS migration, then capped the client retry loop at 40 ids per flush and 3 retries.

TradeoffCONCURRENTLY builds slower and can leave an invalid index if it fails partway, and the hand-run step sits outside the normal migration flow.

OutcomeTimeouts resolved. Full write-up in the related article.

[05]Timeline
  1. Apr 2026View post

    One creator's Story drove 5,400 views in a day

    A single Instagram Story from a creator with 5.6K followers sent daily views to 5,400, up 773.8% on the comparison day. By then 100+ creators had pixearn.com in their bio, and the library held 3K+ wallpapers in up to 8K resolution.

  2. Apr 2026View post

    Notification service: 4 months untouched, zero failures

    The notification system, built with Express, Supabase, and Resend, ran for four months without a code change, an error, or a failed send.

  3. May 2026View post

    Shipped the Support Me button

    Creators could add PayPal, UPI, Paytm, or any custom link to their profile and get paid directly by their audience, with no platform cut and no hidden fees.

  4. May 2026View post

    4.1M image impressions, 12K+ MAU, 52K+ downloads

    Team of one, working from a bedroom, $0 in funding. The impressions table had just passed 4.1M rows.

    Database table view showing 4.1M records (estimated)
  5. Jun 2026View post

    AdSense approved on the 25th application

    After 24 rejections over a year, the 25th application was approved and view-based earnings came back for creators.

  6. Aug 2026View post

    Statement timeouts on a 5.9M-row table

    log_impression started throwing Postgres 57014 timeouts even though the table had the right index. Fixed the predicate, built indexes with CREATE INDEX CONCURRENTLY, and capped a retry loop that kept requeuing failed batches.

  7. Aug 2026

    PixEarn closed

    Shut down after running it solo, with 2,200+ creators, 6,000+ artworks, and 6M image impressions.

[06]Impact
  • →2.5M+ API requests and 1.2M+ database queries per month
  • →97%+ request success rate at sub-150ms latency
  • →~$38/month total infrastructure cost
  • →Creator payment workflows and a no-cut Support Me button
  • →Fraud detection using visitor fingerprints and IP-based signals
  • →98+ Lighthouse performance score
[07]Writing
Related article

I Had the Index. My Query Was Still Timing Out.

A Postgres RPC with the exact right index still threw 57014 statement timeouts at 1.4M calls a day. The index was fine — the predicate wrapped the column in arithmetic and made it unusable.