I learned so much. Genuinely.
Context
Before I tell you what I learned though, a little context. I interned this summer at Art of Problem Solving, a company that makes competition math curriculum. My journey with AoPS started much earlier though. I grew up going to AoPS classes at the in person campus in San Diego, taking AMC prep, Algebra, Geometry, and Probability courses every year. I spent many summers going to math camps and even English camps when they began doing that.
So, I was already super familiar with what AoPS did as an organization. When I got the internship, I was so excited to get to make an impact on the same community that made me who I am today.
At AoPS, I was a Software Engineer Intern within the Web Foundations Pod. I worked closely with another intern in a project that we had free reign with. After doing some quick udemy courses on MCP servers, we talked with many employees at the HQ to see what pain points we can alleviate.
One problem that stood out to us was the process of importing lessons from detailed Google Doc outlines into the AoPS lesson platform. The GUI was outdated and takes a lot of manual effort for the curriculum team to input the lesson--about 20 hours worth.
So, we set out to create an MCP server using Claude Desktop that takes in Google Docs as inputs, and outputs the exact JSON schema required for the lessons within the AoPS platform. From there, it's just one paste away from the lesson being in the AoPS Platform.
Technical process
For an overall tech stack overview, we created a Node.js backend hosting the MCP Server, the API endpoints and websockets, and the temporary AI chat data stored in memory. We also created a Next.js frontend with an OpenAI Chat interface, a code view to see the JSON created, and a chart view to see the structure of the lesson on a larger scale.
Learnings
What did I actually learn this summer? I want to split my learnings into two categories: tech stack learnings and tech process learnings.
Tech stack learnings
Almost the entire stack we used in this internship I was new to. I was new to Node.js, MCP, Kubernetes, and SCSS. While I had a little experience in Next.js (with TailwindCSS not SCSS) and using Docker, I really wasn't that comfortable with starting something from scratch with them.
I learned about the intricacies of Next.js, how server side and client side rendering works and the reasoning behind both. I learned about React contexts, about styling with SCSS, and so many little details about how Model Context Protocol actually works.
I began using Kubernetes with docker containers, learned how to set up automated CI/CD pipelines so that every commit to main auto creates the new Docker image for us to push to deployment. I learned how to make dockerfiles and how to use docker-compose properly.
The list goes on and on—each technology was like unlocking a segment of SWE. If you're curious about the nitty-gritty technical details and want to dive deeper, I've written a comprehensive breakdown in this other blog.
Tech process learnings
The more influential things I learned though weren't hard skills with new technology. It was learnings about the processes within a larger company.
This was my first time having structured mentorship, where every PR I created was read in detail, tested in detail, and criticized in detail. My mentor provided so much help for me to learn proper styling and coding habits. My first PRs were filled with comments about fixing this and fixing that. Without holding me to these high standards though, how would I ever learn. He was a person I could ask any questions to without feeling embarrassed of my inexperience--someone I could talk through challenges with, and decide on the correct way to approach a solution.
I learned the process of creating within a large company--where scalability and code quality really matters. Where the code needs to be read and maintained for many years to come. Every line of code had to be vetted before being pushed into the repo.
This is the only way companies can maintain good coding standards--by vetting everything. I wasn't used to this, but it was an amazing experience for me to have. It helped me build habits of creating maintainable code.
I also learned so much from talking to other employees. I got to hear about their own projects, the cool things they're doing and the challenges they've run into.
Talking to others allowed me to have access to a whole new source of information and help. Each person has encountered challenges, solved them in unique ways, and is more than willing to share how they did so. Talking to others let me fast-track a lot of my issues because instead of being stuck on an issue for days, someone else might be able to help me.
This doesn't mean I didn't try and solve my issues first. All it means is if I was really struggling, I wasn't alone and could reach out for help.
Takeaway
I had an amazing time this summer. I loved how they hosted events for us interns, loved staying at home in sunny San Diego, and I learned so much along the way. The culture at AoPS is extremely unique and I'm glad to have been a part of it. It's a culture focused on collaboration, progress, and so much learning. The fact that it's a company dedicated to teaching makes it an amazing place to work at, where everyone is equally dedicated to helping grow the generation of the future. Everyone is super nice, super helpful, and always willing to chat with me even though I was just an intern.