This weekend, during Formula 1 free practice, Lewis Hamilton crashed and his front wing got stuck underneath the car. From the cockpit, he had no idea what happened. His team could see it and started warning him to stop. Within seconds, the commentator was already looking up the relevant regulations to understand what this meant for the rules. That moment stuck with me.
Try it out here: FIA Rules Assistant
I've watched F1 long enough to know that moments like this happen all the time — some dramatic incident unfolds, and you're left wondering exactly what the rulebook says about it. What if I had the full FIA rulebook sitting right in front of me, with an AI assistant that could actually help me find and understand the exact wording of the regulations, not just what commentators think it says? That seemed worth building.
So I gave myself a weekend goal: get a working RAG pipeline running publicly on AWS, put an interface in front of it, and see if people actually use it. Not perfect. Not a multi-agent masterpiece. Just end-to-end and functional.
When Cloud Means You Actually Have to Care About Everything
At work, there are teams, existing infrastructure, and security policies handling all the cloud complexity. This weekend project was different. I had to figure out IAM permissions, how services should talk to each other, where embeddings should live, which Bedrock models were available in my region, and how to make it all scale later. It was humbling.
The first big choice was embeddings. I could've kept things simple with local embeddings, but if the goal was a proper AWS pipeline, using Amazon Titan Embed Text through Bedrock made more sense. So I rebuilt the whole vector index around that. It meant more AWS dependency, but the production architecture became cleaner and more consistent — a trade-off worth making.
Then came compute. I didn't want to spin up an always-running EC2 instance just to power a chatbot. Lambda seemed obvious: pay only for what you use, and for a small app with sporadic traffic, that felt right. The FAISS index lives in S3 and loads when the Lambda fires up. Not perfect for scale, but perfect for a first version where simplicity wins.
Here's what the basic architecture ended up looking like:
Lambda cold starts are real, there are things I can't completely control about the runtime, and the FAISS approach obviously won't scale forever. But for a first version? It works.
ChatGPT, Some AWS Experience, and 12 Hours
I wanted to see how far I could get with ChatGPT instead of another coding subscription. It went further than I expected. ChatGPT generated a solid foundation for the RAG pipeline — ingestion, embeddings, retrieval, reranking, generation, Lambda wrapper, frontend, the whole thing. The real problems weren't about writing application logic. They were about connecting everything: finding the right AWS model identifiers, figuring out which Bedrock endpoints existed in my region, getting IAM right, making Lambda and API Gateway talk to each other, handling CORS, packaging it all in Docker. Once the basic code existed, I had ChatGPT walk me through AWS deployment step by step.
My previous cloud experience definitely helped. I wasn't learning from zero. But even so, it still took roughly 12 hours from that morning to having the first public version live. And honestly? Pretty fun weekend.
Then came launch day. I wanted to ship by 11 PM but got caught up in AI coding and deployment details. I skipped thorough retriever testing — assumed it would work since it did locally. When I pushed to cloud, it started timing out. What should have been 26 seconds per document retrieval was failing. Spent 3 hours debugging. Turned out my retriever code was tangled up trying to merge reranking and metadata filtering. Dropped both for this first release, got the latency down to 2 seconds, and shipped. They're coming back soon.
What's Actually Happening
Right now, this is a vanilla RAG system. A question comes in, the system finds relevant chunks from the FIA documents, reranks them, and the language model generates an answer grounded in those actual regulations — not guessing what it vaguely remembers. That matters when regulations are involved. You don't want confident-sounding nonsense. You want the rulebook.
The corpus is still small — regulations and International Sporting Code for now — but I'm building in metadata filtering for year, event, document type, session. That'll matter when I add race-specific material. You don't want a 2024 Abu Dhabi question competing with documents from 2020.
This Is Very Much a V1
There's no conversation history yet. No ReAct-style reasoning. No complex agents. But I actually wanted that. Better to have something that works, understand where it fails, and fix those pieces than build complexity too early.
I know ChatGPT, Claude, and other general-purpose assistants can already answer many F1 questions. That's not the differentiation I'm chasing. The real goal is making this genuinely F1-aware — connecting regulations with actual races, steward decisions, penalties, eventually race stats and telemetry. Long way to go, but the first step is live.
What's Next
I want to add a proper reasoning loop. Then improve retrieval before adding anything complicated. After that, imagine asking "Why was a driver penalized at race X?" The system could retrieve the steward's decision, identify which regulation it cited, go back and retrieve that exact provision, then return: what happened, what the stewards decided, which rule applied, what that rule says, and why it led to that decision. That's agentic RAG, not just chatbot stuff.
Try it out here: FIA Rules Assistant
It's independent and not affiliated with the FIA. But if you follow F1 and use it, I'd genuinely love to know what you'd want next.





