iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
A 3-minute AI briefing every morning, with every fact checked against its source. Built by Shreya Deshpande.
MediaHTML · PythonGitHub @shreyad1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A 3-minute AI briefing written every weekday by an AI agent, with every fact checked against its source. MCP server + Gemini agent + guardrails.
Taken from the repository README
Loading the full README.
Read the full README ↗A 3-minute AI briefing, written every morning by an AI agent, with every fact checked against its source.
thedailyaicup.pages.dev · Built by Shreya Deshpande
Every morning at 6–7 AM Central, with no human in the loop until review:
RSS feeds ─┐
Luma (iCal)┤ ┌─────────────┐
├─► MCP server ──►│ digest agent│──► checks.py ──► issue JSON ──► web app (Cloudflare Pages)
│ (6 tools) │ (Gemini) │ numbers, email (Buttondown, soon)
│ └─────────────┘ names, quotes
GitHub Actions: runs it every day, commits the issue, redeploys the app
The guardrails are the core of the project. The model only ever sees story IDs, titles, and summaries, never links. It returns JSON that refers to stories by ID, and the code, not the model, attaches every link, source name, and date. checks.py then verifies that each number, capitalized name, and quoted phrase in the model's text appears in that story's source.
server.py is a Model Context Protocol server, so Claude Desktop or any MCP client can use the same tools as the agent:
| Tool | What it returns |
|---|---|
get_ai_news | Recent AI stories from major tech outlets |
get_company_ai_updates | How real companies are using AI (optionally for one company) |
get_upcoming | Launches, betas, and events still to come, with a date only if the source states one |
get_dev_updates | New AI tools and techniques for engineers |
get_long_reads | Essays from respected AI newsletters |
get_ai_events | AI meetups and hackathons near a US state or Indian city |
Every tool clamps its inputs, times out after 10 seconds per feed, skips feeds that fail and reports which ones, and never crashes the server.
More detail: decisions, trade-offs, failure modes, and what changes at scale are in docs/DESIGN.md.
Python 3.10 · uv · MCP Python SDK · Gemini API · httpx · feedparser · Jinja2 · vanilla JavaScript · GitHub Actions · Cloudflare Pages
uv sync
echo "GEMINI_API_KEY=your-key" > .env # free key from aistudio.google.com
uv run mcp dev server.py # try the tools in MCP Inspector
uv run digest.py --dry-run # write today's issue into issues/
uv run build_site.py # build the web app into site/
uv run pytest # 50 tests, no network needed
uv run evals.py # fact-check the newest issue with the LLM judge
Use the tools in Claude Desktop with uv run mcp install server.py --name "Daily AI Cup" --with feedparser --with httpx --with pyyaml.
| File | Job |
|---|---|
server.py | MCP server: the 6 tools, each a thin wrapper |
feeds.py | Reading sources.yaml and fetching feeds |
filters.py | Text rules: cleaning, sponsored and AI detection, dates, dedupe |
evals.py | LLM-judge faithfulness scores, plus judge calibration |
digest.py | The agent: gather, write with Gemini, check, render |
checks.py | Guardrails for numbers, names, and quotes |
llm.py | The one place that talks to the LLM, with fallback models |
events.py | AI events from Luma city calendars |
build_site.py, templates/, site_static/ | The web app |
tests/ | pytest suite: guardrails, filters, dedupe, feeds, tools, events, agent steps (HTTP mocked) |
sources.yaml | Every feed, by section |
learning_path.yaml, resources.yaml, polls.yaml | Human-reviewed content the agent may copy but never invent |