This is a submission for the Postmark Challenge: Inbox Innovators.
What I Built š
MarketMail ā a crowdsourced produceāprice exchange for Uganda & East Africa that runs entirely by eāmail.
Farmers or enumerators send a simple price list to prices@your-domain.com; Postmarkās inbound webhook feeds the data into a Node.js API, which:
- Parses and validates the eāmail (body or CSV/XLSX attachment).
- Normalises units/currency and stores records in MongoDB.
- Calculates daily deltas and 7āday averages.
- Sends the sender an automated marketātrend report.
- Publishes an open JSON API and a React dashboard so anyone can view live prices.
The flow works from any basic eāmail client, so even users on feature phones with intermittent data can contribute and benefit.
Demo š¹
Live URL: https://marketmail.vercel.app
Test: eāmail the sample below to send@marketmail.canktech.com.
Country: Uganda
Market: Nakasero
Date: 2025ā05ā28
Maize (kg): 1850
Beans (kg): 2950
Tomatoes (crate): 9800
Youāll receive a reply within ~10āÆs containing a cleaned table and a mini market report. The dashboard at https://marketmail.vercel.app/dashboard?market=Nakasero will update automatically.
Code Repository šļø
https://github.com/Cank256/market-mail Ā (MIT licence)
How I Built It š§
- Email layer: Postmark inbound/outbound (signature verification, bounce hooks).
- Backend: Node.jsĀ 20, Express, TypeScript, Zod validation.
-
Parsing: RegEx + optional OpenAI for fuzzy headers;
papaparse/xlsxfor attachments. -
Data: MongoDB Atlas (
MarketPriceschema, aggregation pipelines). - Frontāend: ReactĀ 18 + Vite, Recharts, TailwindĀ CSS + shadcn/ui.
- CI/CD: GitHub Actions ā Vercel.
- Accessibility: Plainātext fallbacks, semantic HTML, dashboard passes WCAGĀ 2.1Ā AA.
-
Devāexperience: Detailed
PROJECT.md, Jest tests cover parser & API routes.
Team: solo submission ā Caleb Nkunze @cank256.
Top comments (0)