projects/Clofel Creates
A shop and commission portal for an independent artist: live stock, live order tracking, and an intake form that filters out spam and lowball requests.

The problem. An independent artist was taking commissions through scattered messages. Requests arrived without reference photos, with budgets too low to be realistic, or as spam, and there was no clean way to sell prints and track orders.
What I built. Clofel Creates, a full-stack storefront and portfolio. Customers buy through the shop with live stock, and request commissions through a form that requires reference photos for art requests, enforces a minimum budget per commission type, and silently drops bot submissions without a CAPTCHA. Customers can follow their order status, and an admin panel handles products, portfolio, media, coupons and reports.
The result. Every art commission request now arrives with the information needed to quote it, and spam never reaches the inbox. The whole stack is self-hosted with Docker and Traefik, with uploads handled safely through Cloudflare R2.
Key architectural decisions, concrete code implementations, and performance wins behind this project.
Client commission requests were frequently submitted with unrealistic lowball budgets or missing reference photos for custom portrait art, alongside unsolicited spam submissions targeting public intake endpoints.
Built a specialized multi-tiered validation engine in CommissionsService that programmatically classifies commission categories (art vs. software/web) and enforces custom minimum budget constraints (e.g. ₱500 chibi up to ₱2,600+ large canvas) along with mandatory reference assets. Integrated a zero-friction honeypot field that silently drops automated bot submissions without burdening legitimate clients with intrusive CAPTCHAs.
Preventing internal database schemas, Prisma queries, and stack traces from leaking to client responses across unexpected runtime failures while ensuring actionable tracing for operators.
Engineered an application-wide NestJS ExceptionFilter that generates unique request correlation IDs (`requestId`), traps both known HTTP exceptions and raw uncaught runtime errors, logs complete stack traces server-side with structured logging, and formats safe, sanitized JSON contract payloads for the client.
Self-hosting multi-tier services (Next.js client and NestJS API) behind a shared Traefik ingress while supporting large multipart media uploads up to 50MB and maintaining zero-downtime health dependencies.
Configured Docker Compose service definitions with automated HTTP healthcheck probes, Traefik dynamic labels with router priority isolation, automatic Let's Encrypt TLS termination, and custom request buffering with network error retries for high-volume uploads.
Preventing hotlinking, unauthenticated external image injection, or arbitrary URL storage in portfolio and commission records.
Enforced strict origin URL verification against configured Cloudflare R2 public endpoints prior to persisting database records, ensuring all media assets pass through authenticated presigned upload pipelines.
// community_discussion
Have thoughts, questions, or ideas regarding this system's architecture? Leave a comment below with your GitHub account.