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/ingestare serverless functions. - AWS Aurora Serverless v2 (PostgreSQL) - every dashboard number is real SQL (a trending window-function view, a
percentile_contmedian 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/ingestas 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"}), acosell_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
- The new Aurora model forces passwordless IAM auth - lean into it; it's a better posture than a stored password.
- To know whether your pipeline works, point it at real data, not a seed.
- 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
- amazon-aurora
- amazon-web-services
- google-gemini
- mongodb
- mongodb-atlas
- next.js
- node.js
- postgresql
- recharts
- tailwindcss
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.