Inspiration
We’re students who like markets but don’t have time to live on charts or read 20 headlines per ticker. Most tools assume you already know everything. We wanted something that says “what changed and why” in seconds—no doomscrolling.
The inspiration was related to finance phrase "over the moon" which was a reference for traders hoping to gain profit over their stock that would reach the moon.
What it does
Chang’e turns live headlines into an explainable GOOD / NEUTRAL / BAD signal for any stock.
• Shows a big bullish/bear meter.
• Always lists 1–3 news-backed reasons (e.g., “earnings beat,” “partnership PR,” “regulatory risk”).
• Updates when new stories land; designed to warn busy users when the story flips.
How we built it
There were many tools in the project. We wanted to build the project on a website because we felt that would be great to show off our skills in web development. The project contains various tools such as React, JavaScript, Tailwind, etc. One of the most interesting things we've done was to incorporate Gemini AI into our project.
Challenges we ran into
Scoping in 48 hours. We had a long wish list (chat, alerts, portfolios) and had to cut scope to ship the news → GOOD/NEUTRAL/BAD core.
• API hiccups & rate limits. Different schemas, occasional 429s, and missing fields. We added simple caching, retries, and graceful fallbacks.
• Model/version gotchas. Naming and API versions didn’t always match; we pinned to concrete Gemini model names and wrote a tiny wrapper.
• Streaming on Next.js/Edge. Handling chunked/partial JSON and timeouts required a custom parser and backoff logic.
• Data quality & entity matching. Tickers vs. company names aren’t always 1:1. We added prompts/filters so summaries stayed ticker-relevant.
• State & UX polish. Keeping the meter, reasons, and news list in sync with loading/error states took extra care.
Accomplishments that we're proud of
Shipped a working MVP that turns real headlines into an explainable GOOD / NEUTRAL / BAD signal.
• End-to-end pipeline from news → Gemini summarization → scoring → UI, all in 24– 36 hours.
• Clear, beginner-friendly UX with a big meter and short, news-backed reasons.
• Reliable demo flow with graceful fallbacks (caching/retries) so it works even if an API blips.
• Modular code: swappable news/price sources and a tiny rules engine for scoring.
• Team workflow: feature branches + small PRs; avoided breaking main while moving fast.
• Documentation: quick start steps so judges can run it locally without guessing.
What we learned
Scope > everything at a hackathon: pick one core loop (news → signal) and make it excellent . • Prompt design with Gemini: how to get concise, ticker-relevant summaries without financial advice.
• Next.js App Router + Edge routes: streaming responses, handling chunked JSON, and timeouts.
• API realities: rate limits, inconsistent fields, and why concrete model names beat “latest.”
• Explainability matters: users trust a color more when there are short, specific reasons.
• State management + UX: loading/error states and keeping the meter, reasons, and news list in sync.
• Env & secrets hygiene: separating browser config from server keys to prevent leaks.
What's next for Chang'e
Earnings Tracker (Actuals vs. Analyst Consensus)
• Chart Revenue & EPS by quarter with consensus estimates vs. reported actuals.
• Auto beat / meet / miss tags with % surprise; source shown in tooltip.
Quarterly Financials Snapshot
• Cards for Revenue, Operating Income, Net Income (+ YoY/QoQ arrows & mini-trends).
AI Chat Helper (finish)
• Quick answers like “Did it beat consensus?” and “Summarize the call in plain English,” with cites.
Community Mood & Watchlists
• Simple bullish/neutral/bearish comment tags → mood gauge.
Go mobile
• Ship a React Native/Expo app with real-time push alerts, a home-screen meter widget, quick ticker search, and watchlist management—so busy users get signals on the go.
Built With
- alphavantageapi
- clerk
- docker
- gemini
- javascript
- next.js
- postgresql
- react
- redis
- tailwind

Log in or sign up for Devpost to join the conversation.