AI-powered tool that transforms complex Base blockchain upgrade announcements into structured, easy-to-understand insights.
https://baselens-psi.vercel.app
BaseLens sits between raw blockchain technical information and user understanding. When protocols like Base publish upgrades, the information is often dense, scattered, or written for developers. Most users — especially airdrop farmers, creators, or casual Web3 participants — don't fully grasp what changed or why it matters.
BaseLens solves that gap.
Paste an upgrade announcement, click Analyze, and get a structured breakdown instantly — or browse the public feed, which is fetched and analyzed automatically with no input needed.
- AI-powered analysis using OpenAI GPT-4o-mini
- Structured output: title, summary, what changed, why it changed, user impact, developer impact, significance, and impact level
- Public feed of auto-analyzed Base upgrades, paginated, filterable by impact level, searchable — no login required
- Per-user dashboard — paste your own announcements and build a private feed
- Daily email digest (opt-in) when new upgrades land in the public feed
- Email and Google authentication
- Duplicate prevention (input and title level)
- Persistent storage with Supabase (RLS-scoped per user)
- Live reveal animation on new analyses, accordion-style card expand/collapse
- Dynamic OG image and apple touch icon for link previews
- Deployed on Vercel
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (App Router) + TypeScript |
| AI | OpenAI API (GPT-4o-mini) |
| Database | Supabase (PostgreSQL) |
| Auth | Supabase Auth (Email + Google) |
| Resend | |
| Deployment | Vercel |
git clone https://github.com/2TheMoom/baselens.git
cd baselensnpm installCreate a .env.local file in the root of the project:
OPENAI_API_KEY=your_openai_api_key
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
RESEND_API_KEY=your_resend_api_key
SUPABASE_SERVICE_ROLE_KEY is the service_role secret from Project Settings → API — never the anon key. It's server-only and bypasses RLS, used by the digest subscribe/confirm/unsubscribe/send routes. RESEND_API_KEY comes from resend.com. Note: until you verify a domain you own in Resend, its default sender can only deliver to the email address on your own Resend account, not to arbitrary subscribers.
Create a table called upgrades (per-user private feed) with these columns:
id— uuid (primary key)user_id— uuidtitle— textsummary— textcategory— textwhat_changed— textwhy_it_changed— textuser_impact— textdeveloper_impact— textsignificance_reason— textimpact_level— textcreated_at— timestamp (default: now())
Enable RLS and add policies for SELECT, INSERT, and DELETE using auth.uid() = user_id.
Create a second table called public_upgrades (public auto-fetched feed) with the same columns, minus user_id, plus:
source_url— text (the originating GitHub release URL, used for dedup)notified_at— timestamptz, nullable (marks an upgrade as already included in a sent digest)
Enable RLS with a public SELECT policy (anyone can read) and restrict INSERT to what /api/auto-fetch needs.
Create a third table called digest_subscribers for the email digest:
id— uuid (primary key, defaultgen_random_uuid())email— text, uniqueuser_id— uuid, nullable (referencesauth.users)confirmed— boolean, default falseconfirm_token— uuid, defaultgen_random_uuid()unsubscribe_token— uuid, defaultgen_random_uuid()created_at— timestamptz, default now()confirmed_at— timestamptz, nullable
Enable RLS with a single policy: authenticated users can SELECT/INSERT/UPDATE where auth.uid() = user_id (their own row only). Deliberately no anon policy — the public subscribe/confirm/unsubscribe flows and the digest sender all go through server routes using the service role key, so the anon key (public, embedded in client JS) can never be used to list subscriber emails.
npm run devPrivate dashboard
- User signs in with email or Google
- Paste a Base upgrade announcement, changelog, or release note
- AI analyzes the content and returns structured JSON
- Results are saved to Supabase and displayed as a card in the user's own feed
Public feed
/api/auto-fetchpolls a set of Base GitHub repos for new releases- New releases are analyzed by AI and saved to
public_upgrades, deduplicated by release URL - Anyone can browse the result at
/feed— no login required
Email digest
- Anyone can subscribe from the public feed (double opt-in: confirms via an emailed link) or toggle it on from the dashboard if logged in (auto-confirmed, since Supabase Auth already verified that email)
/api/send-digestrolls up everypublic_upgradesrow not yet included in a digest and emails it to confirmed subscribers, skipped entirely if nothing's new- Every digest includes a one-click unsubscribe link
To keep things current, schedule two recurring GET requests against your deployed URL (e.g. via cron-job.org or Vercel Cron):
/api/auto-fetch— fetches and analyzes new Base releases/api/send-digest— sends the daily digest to confirmed subscribers
- Auto-fetch Base upgrade announcements automatically
- Filter feed by impact level (High / Medium / Low)
- Public upgrade discovery feed
- Email notifications for new upgrades
- Mobile app