Inspiration

What we call "the world's trends" is quietly biased. News apps show what editors chose to report. A single platform's trending tab mixes niche community chatter with genuinely global stories. And you only ever see your own country's trends — what people in the US, Germany, or France actually looked up today is invisible.

We wanted to answer one simple question that no product really answered: "What did people around the world actually pay attention to today?" Not what got reported — what people genuinely searched, read, watched, and talked about.

What it does

TrendCross collects four behavioral signals every day from four regions (🇺🇸 🇯🇵 🇩🇪 🇫🇷):

Signal Source The human action
Searching Google Trends started looking something up
Reading Wikipedia (per-language top articles) tried to understand it
Watching YouTube (popular charts) watched it
Posting Bluesky (trending topics) talked about it

AI then merges the same topic across languages, sources, and regions (e.g. the search term "earthquake Japan", the ja.wikipedia article「地震」, and a YouTube video become one topic) and computes a TrendCross score from how many sources × how many regions × what rank. The result is a daily world Top 20 + regional Top 10.

  • Topics that appear across many signals and many regions = genuinely global stories
  • Topics in only one source/region = community-specific

Crucially, the AI explains the "why," not a summary: why now (the trigger, fact-checked via web search), why here (the regional mix), and why in this signal (e.g. "spiking in search but not yet on social") — each with evidence and a confidence %. There's also an "AI Usage Trends" feature built on the Anthropic Economic Index: a fifth signal — "what the world is asking AI to do."

And there's AI's Picks, which flips the whole lens. Every day a separate AI pass independently picks "the most important events of the day" using web search — deliberately without seeing any of the behavioral data — and we place its picks next to what people actually did. The gap is the point: important-but-overlooked (a central-bank move, a conflict roadmap) versus attention-grabbing-but-not-pivotal (a TV appearance, a game update), shown without judging which is "right."

Free forever: the full world Top 20 ranking, viewable offline. TrendCross Plus (subscription) unlocks the AI "why" analysis, AI's Picks, per-region views, daily summaries, AI trends, and read tracking.

How we built it

  • iOS: Swift / SwiftUI (MVVM), SwiftData for read state, async/await, offline file cache. Fully localized in Japanese / English / Spanish (UI and the ranking/analysis data). Built with XcodeGen.
  • Subscriptions: RevenueCat SDK. A custom SwiftUI paywall (we isolated the SDK behind a single SubscriptionProviding protocol so the rest of the app only sees a PlusStatus enum). Entitlement-based gating, anonymous App User IDs (no account required), 30-day free trial + $2.99/month (¥300 in Japan). Available worldwide (except mainland China).
  • Backend: Serverless on AWS — CDK (Python), Lambda, Step Functions, EventBridge, API Gateway, S3, AppConfig, delivered via CloudFront + WAF. A two-phase daily pipeline (snapshot collection at a fixed UTC time, then normalize → analyze → publish).
  • AI: Claude (Opus + Sonnet + Haiku, selected per-task via AppConfig profiles). Topic normalization is deliberately two-stage — Claude Haiku for entity-name canonicalization, then mechanical grouping (no AI) for the final merge — to structurally eliminate the ID-mixups we saw in early prototypes. Analysis runs through the Batch API (50% cost).
  • AI's Picks (independence by construction): a separate Claude Opus pass does its own web_search to choose the day's most important events. It runs in an earlier pipeline phase, so it literally cannot read the behavioral data — independence is guaranteed by structure (and a regression test that the generator has no S3 read path), not by a prompt that says "don't look." The diff against the behavioral ranking is again computed mechanically (same normalization key), so no AI ever copies an ID.
  • Data: official APIs / feeds only — no scraping. Google Trends RSS, Wikimedia Pageviews API, YouTube Data API, Bluesky AT Protocol, and the Anthropic Economic Index (CC-BY).

Challenges we ran into

  • Merging "the same topic" across languages and scripts without false joins. Our fix was to refuse to let any step copy an ID onto another item: Stage 1 only canonicalizes names, Stage 2 groups purely by a normalized key (NFKC + casefold + symbol strip) exact match.
  • Degradation as the normal path. Any single source can fail on any day; the pipeline had to keep publishing from whatever's left, and the app had to treat missing fields as "hide," never "error" or blank screen.
  • A subtle subscription bug: purchases succeeded but the paywall wouldn't unlock. The product was attached to the wrong RevenueCat entitlement identifier — a reminder that Offering attachment and Entitlement attachment are separate, and the entitlement ID must match the code byte-for-byte.
  • Keeping the store submission clean: privacy manifest, generic wording for App Review, and proving no debug/test code leaks into the Release binary (verified via strings).

Accomplishments that we're proud of

  • A cross-signal, cross-region ranking that genuinely surfaces "global vs. local" at a glance.
  • AI that argues why — with evidence and confidence — instead of summarizing.
  • AI's Picks: an AI "editorial control group" that, by construction, never sees the behavioral data — turning the importance-vs-attention gap into a first-class, honest feature.
  • A clean subscription architecture: RevenueCat fully isolated behind one protocol, a free tier that's genuinely useful offline, and a paywall that's honest about what's free.
  • Cost-disciplined AI (per-task model tiers + Batch API) running a real daily pipeline.

What we learned

  • Behavioral data tells a different story than editorial data — and the gaps between signals ("searched but not watched") are often the most interesting insight.
  • Importance and attention don't correlate. Building an AI "control group" that ignores behavior surfaced genuinely important events that no behavioral signal showed that day (a record equity move, a conflict roadmap), and conversely showed that much of the top behavioral data was TV appearances and game updates. The gap became a feature (AI's Picks), not a bug.
  • For subscription apps, the store/dashboard configuration (entitlements, tax category, privacy declarations) is as much of the work as the code.
  • Structurally preventing a class of AI error (ID mixups) beats trying to prompt your way out of it.

What's next for TrendCross

  • Adopt the official Google Trends API to improve analysis quality (awaiting its general release / alpha-access approval).
  • As revenue grows, upgrade to stronger AI models and widen web-search coverage for deeper analysis.
  • Per-region Bluesky analysis (pending API support).
  • Continuous improvement of prompts and sources.
  • More regions (UK, Canada, Australia, and more).
  • More analyses — monthly and yearly wrap-ups.

Built With

Share this project:

Updates

Submission history