andres@maracaibo:~/portfolio
cd ../redacopiovnzla
cat redacopiovnzla.md

drwxr-- Red Acopio Vnzla

NextJSNestJSRedisPostgresSQLRailwayDocker

cat README.md

Red Acopio Venezuela

Emergency logistics platform for donation collection centers

🌐 Live site (https://www.redacopiovnzla.com) · 💻 Source (https://github.com/Chappie21/VnzlCentrosDeInsumos)

▎ Connects donors with collection centers across Venezuela and gives every center an auditable, real-time inventory. Built in 6 days with one teammate, in the aftermath of an earthquake.


The problem

After an earthquake in Venezuela, the aid exists but gets wasted for lack of coordination. People want to donate and have no idea where to take things or what is actually needed, so ten boxes of clothing arrive at a center that needed water. Collection centers, spun up overnight by volunteers, keep their records on paper: they don't know what they have, what is running out, or what they shipped. And nobody can tell a legitimate center from a made-up one.

The solution

A free, mobile-first web platform — no app to install, no login required to look around — that solves for four audiences separately:

Donors land on a nationwide map and a searchable directory with combinable filters: near me, currently open, high urgency, verified. Each center shows the real distance and its needs classified as urgent / normal / sufficient, with a category (water, medicine, clothing, food, tools) and whether it is accepting donations right now. No account needed.

People dropping off donations build a cart of supplies and get a QR code generated entirely in the browser. At the center, a volunteer scans it with the camera, checks off what was actually received, and confirms: inventory updates in a single atomic movement. Physical intake stops being a notebook.

Center operators register their center through a two-step wizard with an interactive map, then load the opening inventory by hand or by importing a spreadsheet. From there they run everything from a phone: inventory with thresholds that recalculate urgency automatically, audited stock adjustments, volunteer invitations by QR or link with roles (chief / volunteer), outbound shipments with a printable waybill and tracking QR, inventory export to PDF, and a social media flyer generator that produces a 1080×1350 image with the center's urgent needs and a mini-map, ready for Instagram.

The verification team works a moderation queue that shows, for each center, the photo of the premises, the operator's details, the result of cross-checking their national ID against the civil registry, the distance between the GPS captured at registration and the declared address (flagged red beyond 2 km), a mini-map, and the community report count. Anyone can report a center anonymously; three reports push it to the top of the queue but never hide it — so a coordinated group can't take down a legitimate center.


Architecture

A Turborepo + pnpm monorepo with two applications (Next.js App Router · NestJS) and two shared packages: the Prisma client, and a Venezuela domain package (24 states and 335 municipalities, national ID validation, geo calculations) consumed by both sides so validation rules never diverge.

Decisions that shaped the project

Inventory is a ledger, not a counter. cantidadTotal is never written directly: every change creates an entry in the Historial table and performs the increment inside a single transaction. That buys full traceability, safety under concurrency, and a donation metric that is auditable rather than debatable. The invariant is protected in three layers — the transaction, the ValidationPipe whitelist, and a test proving the bypass fails.

Verification is a label, not a gate. A center is created in pending status and operates normally from second one; the verified badge signals trust but blocks nothing. In an emergency, gating centers until they're approved kills the legitimate ones: the cost of one fake center visible for a few hours is lower than twenty real centers invisible for a full day.

The threat model shaped the product. A center's public page does not show quantities, only urgency level, because publishing the inventory of a humanitarian aid depot is publishing where the worthwhile loot is. For the same reason, the OpenAPI documentation exposes only public endpoints, with transitive pruning of internal schemas: a complete doc covering admin, moderation, and PII would be a reconnaissance map.

Aggressive simplicity where complexity adds nothing. The PDF is window.print() plus a print: stylesheet — zero dependencies, zero backend, and the user gets a real PDF from the native dialog. Invitations are a self-contained one-hour JWT, no table. The donation QR never touches the server. Maps are Leaflet + OpenStreetMap, no API key or billing. Cache invalidation is one INCR. Every shortcut is documented with the ceiling it carries and what it would take to raise it — the difference between a shortcut and managed debt.

Red Acopio Vnzla — 1Red Acopio Vnzla — 2Red Acopio Vnzla — 3Red Acopio Vnzla — 4Red Acopio Vnzla — 5Red Acopio Vnzla — 6Red Acopio Vnzla — 7Red Acopio Vnzla — 8Red Acopio Vnzla — 9Red Acopio Vnzla — 10Red Acopio Vnzla — 11Red Acopio Vnzla — 12Red Acopio Vnzla — 13Red Acopio Vnzla — 14Red Acopio Vnzla — 15Red Acopio Vnzla — 16Red Acopio Vnzla — 17Red Acopio Vnzla — 18Red Acopio Vnzla — 19Red Acopio Vnzla — 20Red Acopio Vnzla — 21Red Acopio Vnzla — 22Red Acopio Vnzla — 23Red Acopio Vnzla — 24Red Acopio Vnzla — 25Red Acopio Vnzla — 26Red Acopio Vnzla — 27Red Acopio Vnzla — 28Red Acopio Vnzla — 29