Inspiration

What it does## Inspiration

Across African micro-commerce, "co-sellers" buy stock from wholesalers and resell to their network for a markup. There are plenty of tools for writing the listing - almost none for the question that actually decides whether they make money: what should I stock this week?

What it does

Kajota Pulse is a live dashboard whose every card is a SQL query against AWS Aurora Serverless v2. Its headline feature is a one-click Gemini advisor: it reads the live signals - trending demand, category margins, competitor stock-outs, price position - and returns a ranked buy-list with a quantified action and a one-line reason for each pick ("Stock 10-15 units - +27 favorites, 18% Beauty margin, and a rival just sold out"). Tap any trending product and a second Gemini call explains why it's moving.

How we built it

Built entirely on the zero stack:

  • Vercel - Next.js 16 (App Router), shadcn/v0 UI, Recharts. /api/recommend + /api/explain (Gemini) and /api/ingest are serverless functions.
  • AWS Aurora Serverless v2 (PostgreSQL) - every dashboard number is real SQL (a trending window-function view, a percentile_cont median for the price waterfall, a latest-stock view, a 30-day margin aggregate). Scales to zero on idle.
  • Gemini 2.5 Flash - the advisor uses structured JSON output with a deterministic heuristic fallback, so the card is never empty.
  • MongoDB Atlas Database Triggers - three live triggers stream the real Kajota catalogue into Aurora via /api/ingest as it changes.
  • Passwordless - Vercel reaches Aurora with short-lived IAM auth tokens; no stored DB password anywhere.

Challenges we ran into

  • The new Aurora networking model forces IAM auth - static passwords are rejected and the RDS Data API isn't supported. We mint a fresh 15-minute IAM token per connection.
  • Vercel's Lambda injects its own AWS credentials that shadow yours, so the signer used the wrong identity; fixed with custom PULSE_AWS_* env names passed explicitly to the signer.
  • Real change-streams are messier than seed data: Extended JSON decoding ({"$oid"}, {"$numberInt"}), a cosell_products (underscore) collection name, and out-of-order events tripping foreign keys - all surfaced only against live data.
  • Free-tier Gemini rate-limits under bursty use; we added bounded retry-on-429 before the heuristic fallback.

Accomplishments that we're proud of

A genuinely live, passwordless, AWS-Aurora-backed dashboard on Vercel; a Gemini advisor that turns a dashboard into a decision tool; ingesting real production data through MongoDB change streams; and one-command verifiability (node scripts/verify-live.mjs - 5/5).

What we learned

  1. The new Aurora model forces passwordless IAM auth - lean into it; it's a better posture than a stored password.
  2. To know whether your pipeline works, point it at real data, not a seed.
  3. For an LLM feature in a live demo, use structured output and always ship a deterministic fallback. "Never empty" beats "usually impressive."

What's next for Kajota Pulse

Pulse is the monitor pillar of the 3-app Kajota AI Stack - Coach drafts the listing, Pulse says what to stock, Mesh settles the deal on-chain. Next: a unified "Build with Gemini" submission, and putting the advisor in front of real co-sellers.

Built With

Share this project:

Updates