Skip to content

ThomasHoussin/AdoptAI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# 🤖 Adopt AI Grand Palais 2025 - API

> An AI-friendly REST API for the Adopt AI Grand Palais conference schedule

[![AWS Lambda](https://img.shields.io/badge/AWS-Lambda-orange)](https://aws.amazon.com/lambda/)
[![Python 3.14](https://img.shields.io/badge/python-3.14-blue)](https://www.python.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## 🎯 Why?

The official [Adopt AI Grand Palais](https://adoptai.artefact.com) website uses infinite-scroll JavaScript rendering that's impossible for AI assistants to parse. 

This API provides **clean, structured, filterable endpoints** so AI assistants like Claude and ChatGPT can actually help attendees navigate the conference.

**The irony**: An AI summit without AI-readable data. This fixes that.

## 🚀 Quick Start

### For AI Assistants

Just tell Claude/ChatGPT:
```
"Fetch https://adoptai.codecrafter.fr and help me find sessions
about AI in banking on November 25"
```

The API is designed to be self-documenting. AI assistants can read the `/llms.txt` endpoint for full instructions.

**Fallback Strategy**: If an AI assistant cannot access the API directly (common limitation when URLs aren't user-provided), it can ask you to copy/paste the complete JSON from:
- https://adoptai.codecrafter.fr/sessions (all 240+ sessions)
- https://adoptai.codecrafter.fr/speakers (all 200+ speakers)

The assistant will then process the data locally to answer your questions. The full dataset is small enough (~500KB) to be easily shared this way.

### For Developers
```bash
# What's happening right now?
curl https://adoptai.codecrafter.fr/now

# Get all sessions
curl https://adoptai.codecrafter.fr/sessions

# Filter by date and stage
curl "https://adoptai.codecrafter.fr/sessions?date=2025-11-25&stage=CEO%20Stage"

# Search sessions
curl "https://adoptai.codecrafter.fr/sessions?search=banking"

# Get speakers
curl https://adoptai.codecrafter.fr/speakers
```

## 🤖 AI Assistant Usage Patterns

This API supports two data access methods for AI assistants:

### Method 1: Direct API Access (Preferred)

When an AI assistant can make HTTP requests (URL provided by user or found via web search):
```
User: "What's happening right now at Adopt AI?"
AI: *Fetches https://adoptai.codecrafter.fr/now*
AI: "Currently there are 3 sessions ongoing and 5 starting soon..."

User: "Find AI banking sessions at Adopt AI"
AI: *Fetches https://adoptai.codecrafter.fr/sessions?search=banking*
AI: "I found 5 sessions about AI in banking..."
```

### Method 2: User-Provided Data (Fallback)

When an AI assistant cannot access external URLs independently:
```
User: "Find AI banking sessions at Adopt AI"
AI: "I don't have direct access to the API. Please copy/paste the JSON from:
     https://adoptai.codecrafter.fr/sessions"
User: *Copies and pastes JSON data*
AI: *Processes data locally and filters for "banking"*
AI: "I found 5 sessions about AI in banking..."
```

**Why this dual approach works:**
- ✅ **Small dataset**: Full data is only ~500KB (240 sessions + 200 speakers)
- ✅ **Single request**: No pagination needed - entire dataset in one call
- ✅ **Client-side processing**: AI can filter, search, and analyze locally
- ✅ **Always helpful**: Users get assistance regardless of API access limitations

This design ensures **maximum accessibility** for all AI assistants, even those with URL access restrictions.

## 📚 API Documentation

### Endpoints

| Endpoint | Description | Filters | Cache |
|----------|-------------|---------|-------|
| `GET /sessions` | All conference sessions | `date`, `stage`, `time`, `search` | 1h |
| `GET /now` | Sessions happening now or starting soon | - | None (real-time) |
| `GET /speakers` | All speakers | `search` | 1h |
| `GET /` | API documentation | - | 1h |
| `GET /health` | Health check | - | None (real-time) |

### Query Parameters

#### `/sessions`

- **`date`**: `2025-11-25` or `2025-11-26`
- **`stage`**: `CEO Stage`, `Mainstage South`, `Mainstage North`, `Mainstage East`, `Masterclass South`, `Masterclass North`, `Startup Stage`
- **`time`**: `morning` (before 12:00) or `afternoon` (12:00+)
- **`search`**: Full-text search in titles, descriptions, speaker names

#### `/speakers`

- **`search`**: Search by name, company, or role

### Examples
```bash
# What's happening right now?
curl "https://adoptai.codecrafter.fr/now"

# Nobel Prize keynote
curl "https://adoptai.codecrafter.fr/sessions?search=Aghion"

# All morning sessions on Nov 25
curl "https://adoptai.codecrafter.fr/sessions?date=2025-11-25&time=morning"

# Finance-related sessions
curl "https://adoptai.codecrafter.fr/sessions?search=finance"

# Speakers from Anthropic
curl "https://adoptai.codecrafter.fr/speakers?search=Anthropic"
```

## 🏗️ Architecture
```
┌─────────────┐
│   Client    │
│ (AI/Human)  │
└──────┬──────┘
       │
       ▼
┌─────────────────┐
│  CloudFront     │
│  + Custom       │
│  Domain         │
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  Lambda         │
│  Function URL   │
│  (Python 3.14)  │
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│  S3 Bucket      │
│  sessions.json  │
│  speakers.json  │
└─────────────────┘
```

**Tech Stack:**
- **AWS Lambda** (Python 3.14) - Serverless compute
- **S3** - Data storage
- **Lambda Function URL** - Direct HTTPS endpoint (no API Gateway)
- **CloudFront** - CDN + custom domain + 1h caching

## ⚡ CloudFront Caching

**Cache Strategy:**
- **Cached (1 hour)**: `/sessions`, `/speakers`, `/`, `/llms.txt`, `/robots.txt`
  - 90% reduction in Lambda invocations for repeated queries
  - 5-10x faster response times (10-50ms vs 100-500ms)
  - Cache keys include query parameters: `date`, `stage`, `time`, `search`

- **Real-time (no cache)**: `/now`, `/health`
  - Always hits Lambda for fresh data
  - Current sessions and health status

**Why 1 hour TTL?**
- Data is static (scraped Nov 19, 2025)
- Conference is only 2 days (Nov 25-26)
- Balances performance with flexibility

**Cache Invalidation:**
If you update data in S3, invalidate CloudFront cache:
```bash
aws cloudfront create-invalidation \
  --distribution-id <DISTRIBUTION_ID> \
  --paths "/sessions*" "/speakers*" "/" "/llms.txt"
```

## 📊 Data

- **240+ sessions** across 8 stages
- **200+ speakers** from leading AI companies
- **2 days**: November 25-26, 2025
- **Venue**: Grand Palais, Paris

### Notable Speakers

- **Philippe Aghion** - 2025 Nobel Prize in Economics
- **Guillaume Princen** - Anthropic Head of EMEA
- **Dr. Najwa Aaraj** - Technology Innovation Institute CEO
- And many more...

## 💰 Cost

Essentially **free** with AWS Free Tier:
- Lambda: 1M requests/month free
- S3: Negligible storage + GET costs
- CloudFront: 1TB transfer/month free

Estimated cost beyond free tier: **~$0.10/month** for typical usage.

## 🚀 Deployment

### Prerequisites

- AWS account
- AWS CLI configured
- Python 3.14
- Domain configured (codecrafter.fr)

### Deploy
```bash
# Clone the repo
git clone https://github.com/ThomasHoussin/adoptai-api.git
cd adoptai-api

# Run deployment script
./deploy.sh

# Configure custom domain (CloudFront)
# See DEPLOYMENT.md for details
```

## 🤝 Contributing

Found incorrect data? Session changed? Open an issue or PR!
```bash
# Update sessions data
vi data/sessions.json

# Redeploy
./deploy.sh
```

## 📝 License

MIT License - feel free to use this for other conferences!

## 👨‍💻 Author

**Thomas Houssin**
- GitHub: [@ThomasHoussin](https://github.com/ThomasHoussin)
- Website: [codecrafter.fr](https://codecrafter.fr)

Because AI events should be AI-accessible.

## 🙏 Acknowledgments

- Data scraped from [Adopt AI Grand Palais](https://adoptai.artefact.com)
- Inspired by the llms.txt convention
- Built with the best serverless tools AWS offers

---

**"Adopt AI... but make it actually adoptable by AI"** 🤖
Built with ❤️ and irony: an AI summit without AI-readable data.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •