← All projects

Intern Developer Assessment Pack — Four Real Take-Home Builds (Mobile, LLM API & Backend)

Source: Derived from Resources/Intern_dev_assessment.pdf — a multi-track intern hiring assessment bundle (a single document offering four role-specific take-homes: a React Native Frontend assessment, a Python Backend LLM assessment, and a Java Backend assessment). The format (public GitHub repo, README, deploy to a public server, "Brownie Points" bonuses) matches the take-home style used by Indian product/startup engineering teams hiring SDE interns.

Skills Required

Background a Student Needs

A student should be comfortable in at least one of the three stacks (React Native + JS, Python + FastAPI, or Java + Spring Boot) and understand the universal idea of a REST API: a client sends HTTP requests, a server processes them, talks to a database, and returns JSON with appropriate status codes. For the mobile track they need React fundamentals (components, props, state, Hooks) plus how to call a public API and render lists/images. For the FastAPI track they need async Python, basic database modeling, and the conceptual model of calling an LLM through an HTTP API with a prompt. No deep ML knowledge is required — the LLM is consumed as a black-box service. Familiarity with Git/GitHub, writing a README, and deploying to a free hosting tier is expected throughout, since every track requires a public repo and (for backends) a public deployment.

Task Summary

This is a pick-your-track intern assessment: candidates complete one role-specific take-home and submit it as a public GitHub repo with a clear README. The React Native track builds a Movie Search mobile app on the OMDb API. The Python Backend LLM track builds a FastAPI Chat Summarization & Insights API that ingests, stores, retrieves, and LLM-summarizes conversations under heavy CRUD load. The Java Backend track builds a referral-tracking signup API where a referral only counts as "successful" once the referred user completes their profile.

The Task

> Submission rules apply to every track: create a public GitHub repository, add a clear README with build/run instructions, and (for backend tracks) deploy to a public server or provide a Dockerized build and share a sample curl request.

Track A — React Native Frontend: Movie Search Mobile App

Objective: Build a Movie Search mobile app in React Native (Android or iOS) using a public API.

Problem statement: A user wants to search for movies and read about them — viewing ratings, poster, and details.

Requirements:

  1. Implement a search bar to search movies by title.
  2. Use the OMDb API (https://www.omdbapi.com/) to fetch movie data.
  3. Render searched movies in a list view showing name and poster, on the same screen as the search bar.
  4. On tapping a movie, open a separate details screen showing poster, title, year, genre, and rating.

Bonus:

Track B — Python Backend LLM: Chat Summarization & Insights API

Problem description: Build a FastAPI REST API that processes user chat data, stores conversations in a database, and generates summaries & insights using an LLM-powered summarization model. It must support real-time chat ingestion (store raw messages), conversation retrieval & filtering (by user, date, or keywords), and LLM-based summarization. It must be optimized for heavy CRUD operations with efficient query handling, use a database of your choice (MongoDB / any NoSQL preferred for scalability, or MySQL/PostgreSQL), and implement proper error handling with meaningful status codes.

Expected API endpoints:

Deployment notes: Deploy on a public server or provide a Dockerized build; store code in GitHub with clear setup instructions.

Coding guidelines: Follow FastAPI best practices; use async DB queries for scalability; implement indexing & optimized queries for heavy SELECTs; provide a README.md with install & usage; keep code modular and documented; use an LLM of your choice via its API.

Brownie points:

Track C — Java Backend: Successful Referral API

Problem description: Create an API for user signup with referral-code tracking, where a referral counts as successful only after the referred user completes their profile. (Example: if user A signs up with user B's referral code, the referral is successful only once A completes their profile.)

Expected output:

  1. User Signup endpoint — allow signup with/without a referral code, generate a unique referral code per user, and validate any provided referral code.
  2. Referral tracking — track referral status, link referrer and referred user, and mark the referral complete upon profile completion.
  3. API endpoints — Signup API, Profile Completion API, Get Referrals API, and a Referral Report API (bonus).

Deployment notes: Deploy on a public server, share the GitHub repo and a sample curl request; choose your own tools (SQL/NoSQL, cloud provider, etc.).

Coding guidelines: Clean, readable code with meaningful comments, a comprehensive README, and unit tests.

Brownie points: An endpoint that generates a report of all users and their referrals in CSV format.

Alternate Tasks (Mini-Project Variations)

  1. (Beginner — source domain, Mobile) Build a stripped-down Movie Search screen in React Native using the OMDb API: a single screen with a search bar and a FlatList of results showing poster and title, plus loading and "no results found" states. Skip navigation and persistence entirely. The learning goal is mastering the core loop — controlled input → fetch to a public API → parse JSON → render a list of cards with remote images — and handling the three states every API screen needs (loading, empty, error). This is the right entry point for a student who has never wired a real network call into a mobile UI.
  2. (Beginner→Intermediate — source domain, Backend) Build a minimal FastAPI chat-storage API without the LLM: implement POST /chats, GET /chats/{conversation_id}, and GET /users/{user_id}/chats?page=1&limit=10 backed by SQLite or MongoDB, with Pydantic models, proper status codes, and pagination. The goal is to internalize REST CRUD, request validation, and pagination before adding any AI. Once it works, add a single POST /chats/summarize endpoint that concatenates a conversation and returns a naive non-LLM summary (e.g., first + last message and a message count) so the contract is in place for a future LLM swap.
  3. (Intermediate — source domain, full LLM build) Implement the full Track B Chat Summarization & Insights API: heavy-CRUD endpoints over MongoDB or PostgreSQL with async drivers and indexes, a real LLM summarization call on POST /chats/summarize, and one insights feature (sentiment or keyword extraction). Add a Dockerfile and deploy to a free tier (Render/Railway/Fly.io). The learning goal is realistic backend engineering under a performance constraint — designing indexes for heavy reads, doing async I/O so LLM latency doesn't block the event loop, and treating the LLM as an external dependency with timeouts and error handling.
  4. (Intermediate→Advanced — MERN twist) Recast the Chat Summarization API as a MERN full-stack app: build the API in Node.js + Express + MongoDB (Mongoose) instead of FastAPI, then add a React frontend where a user pastes or types a conversation, hits "Summarize," and sees the LLM summary plus extracted keywords rendered live. Wire the React client to the Express backend with environment-configured API URLs, handle CORS, and deploy frontend (Vercel) + backend (Render) + database (MongoDB Atlas). This bridges the source's Python backend into the MERN stack the program emphasizes, while keeping the same LLM-summarization domain.
  5. (Advanced — Agentic AI twist) Evolve the summarizer into an agentic conversation-insights service. Instead of one summarization prompt, build a small agent loop (LangChain, LlamaIndex, or a hand-rolled tool-calling loop) that, given a conversation, decides which tools to invoke — summarize, extract_action_items, detect_sentiment, flag_followups — and composes a structured insights report. Persist conversations in a vector store so the agent can answer follow-up questions like "what did this user complain about last week?" via retrieval (RAG). Expose it through FastAPI with a streaming WebSocket endpoint and a Streamlit chat UI. The goal is hands-on agentic-AI engineering: tool definitions, an orchestration loop, retrieval grounding, and streaming output — a direct ladder from "call an LLM once" to "build an autonomous, tool-using agent."

Reference Links