Functional DemoConsumer Application

WFH

Charitable e-commerce platform where every purchase raises publicly visible donation impact counters.

Overview

Wardrobe for Humanity is a charitable e-commerce platform built around impact tracking. Shoppers browse and buy products, and every purchase increases publicly visible donation impact counters. It pairs a Next.js storefront with a Node.js/Express API, storing data in PostgreSQL through Prisma. Stripe handles checkout, Printify handles fulfillment, media is stored in AWS S3, and Sentry captures errors.

What this demonstrates

Combines a storefront, payment capture, and a donation impact ledger that ties giving to individual orders. Integrates a print-on-demand fulfillment provider and cloud media storage behind an authenticated API, all runnable via Docker Compose.

What makes it different

Most charity storefronts ask you to trust a promise. This one turns every paid order into a publicly visible donation counter that ticks up automatically — backed by an auditable, append-only impact ledger.

  • The ledger is the source of truthEvery impact change is one ledger row; public totals are summed from it.
  • Impact only counts once payment is confirmedOrders contribute impact after Stripe confirms payment, not before.
  • Refunds and chargebacks reverse impactReversal entries subtract units so totals stay honest.
  • Custom impact system, not ShopifyThe counter and admin control are things Shopify cannot deliver cleanly.
  • Provider-agnostic fulfillmentAn abstraction layer lets new print providers plug in beyond Printify.
  • Role-based control with audit trailsFinance actions are logged and permissioned.

Core capabilities · 18

  • Impact LedgerAppend-only ledger

    Append-only ledger where every impact change is stored as a row, with reversal entries for full history.

  • Impact Engine

    On paid orders, matches donation rules to items and writes ledger entries where units = units per item × quantity.

  • Donation Lines

    Customer-facing impact categories (Meals, Water, Shelter) with unit label, goal target, and payout config.

  • Donation RulesFixed units per item

    Configurable rules that convert purchases into units, starting with fixed units per item sold.

  • Refund & Chargeback Reversal

    Negative ledger entries reverse impact on refunds and disputes, with restoration if a dispute is won.

  • Stripe Checkout

    Hosted secure payment flow with webhook-confirmed orders and idempotent event handling.

  • Printify Sync & Fulfillment

    Imports products and variants, publishes selected items, and routes paid orders for fulfillment.

  • Provider Framework

    Abstraction layer (importProducts, createFulfillmentOrder, getOrderStatus, mapVariants) for future providers.

  • Product Management

    Products, variants, pricing, collections, tags, images, and provider mapping fields.

  • Content Management

    Section-based page editor to add, remove, reorder, and edit homepage and policy blocks.

  • Media Library

    Upload and manage brand images and assets for pages and products.

  • Donation Payout Tracking

    Payout records with date, amount, method, reference, receipt upload, and planned/sent/confirmed status.

  • Reporting Dashboard

    Revenue, orders, average order value, top products, impact by line, and impact over time.

  • Authentication & Roles

    Owner, Admin, Editor, Finance, and Support roles with two-factor auth for Owner and Admin.

  • Orders & Ledger Views

    Order list by status with detail views showing units generated and ledger entries per order.

  • Customer Impact Dashboard

    Public totals per donation line with descriptions and optional progress toward goals.

  • Idempotent Webhook Processing

    Signature-verified Stripe and Printify webhooks that never double-apply an event.

  • Data Exports

    CSV exports for the impact ledger, orders, and payouts.

How it works

Customer

  1. Browse shop and collections
  2. Open product, see donation impact
  3. Select variant and add to cart
  4. Check out via Stripe hosted flow
  5. Receive confirmation with impact generated
  6. See updated public totals

Impact engine

  1. Payment confirmed by Stripe webhook
  2. Identify donation rules per order item
  3. Compute units per donation line
  4. Write ImpactLedgerEntry rows
  5. Update cached rollup totals
  6. Reverse units on refund or chargeback

Admin

  1. Create donation lines and set goals
  2. Define donation rules per product or collection
  3. Sync and publish Printify products
  4. Monitor orders and ledger
  5. Track and confirm donation payouts
  6. Export reports and CSVs

Key screens

  • HomeMission hero, featured collection, and Impact Dashboard placement.
  • ShopCollections and filters.
  • Product detailVariant selection with a clear per-purchase impact statement.
  • CartQuantity editing, remove items, totals.
  • CheckoutMinimal secure Stripe hosted checkout.
  • Order confirmationOrder summary plus impact generated and updated totals.
  • Impact DashboardDonation line totals, descriptions, and progress visualization.
  • AboutMission page.
  • FAQ
  • Contact
  • PoliciesShipping, returns, privacy, and terms.
  • Admin portalSidebar navigation over products, orders, donation lines, rules, payouts, and reporting.

Data model

  • User
  • Page
  • MediaAsset
  • Collection
  • Product
  • ProductVariant
  • DonationLine
  • DonationRule
  • Order
  • OrderItem
  • ImpactLedgerEntry
  • DonationPayout

How it is built

A Next.js App Router frontend talks to a separate Node.js/Express backend API. Data lives in PostgreSQL accessed through Prisma, with Docker Compose provisioning local services.

APIs and services

AWS
Stripe
Printify
AWS S3
Auth.js
Sentry

Classification

Industries
NonprofitRetail

Related work

ONE FOR ONE

Functional Demo

Production-grade buy-one-give-one soccer-ball ecommerce site with a live donation tracker on every order.

RE ABL APP

Functional Demo

Automated land acquisition platform: lead sourcing, valuation, outreach, contracts, CRM, and a buyer auction marketplace.

Building something with similar Payments, Authentication, Analytics functionality?

Start a project and reference this one — the conversation begins with what you have already seen.

Start a project