Mini Project 3: API-Powered App
Released: Wednesday, 6/24. Proposal due: Wednesday, 7/1. Final due: Friday, 7/10.
The Challenge
Build a web app that fetches real data from an external API and presents it in a useful, well-designed interface. This is where your sites go from static to connected, pulling live data from the real world.
Start Here: Create Your Project Repo
Your first step, before any planning or code, is to create a new, separate public GitHub repo for this project. Do not put it inside your oim3690 repo or your username.github.io repo. Everything for this project lives here, and you will deploy it from this repo with GitHub Pages (or Vercel if your API needs a hidden key), so your live URL becomes username.github.io/repo-name. Name the repo in lowercase with hyphens, after what the app does (for example, weather-dashboard). Once it exists, add a link to it from your oim3690 repo README.
What to Build
Choose an API and build something around its data. Here are some ideas:
No API key required (easiest to start with):
| API | What You Could Build | URL |
|---|---|---|
| Open-Meteo | Weather dashboard, trip planner | open-meteo.com |
| PokéAPI | Pokédex browser, team builder | pokeapi.co |
| REST Countries | Country explorer, travel quiz, flag game | restcountries.com |
| Open Library | Book search, reading list builder | openlibrary.org/developers |
| TheMealDB | Recipe search, meal planner | themealdb.com/api.php |
| Dog CEO | Dog breed gallery, random dog viewer | dog.ceo/dog-api |
| Art Institute of Chicago | Art gallery browser, artist explorer | api.artic.edu |
Free API key required (quick signup):
| API | What You Could Build | URL |
|---|---|---|
| OMDB | Movie search, watchlist builder | omdbapi.com |
| NASA APOD | Space photo viewer, astronomy calendar | api.nasa.gov |
| Spoonacular | Recipe finder by ingredients | spoonacular.com/food-api |
| The Movie Database | Movie/TV show browser | themoviedb.org |
Recommended: use a no-key API. No-key APIs (PokéAPI, Open-Meteo, REST Countries, etc.) work directly from GitHub Pages with zero setup. If your API requires a key, you must deploy through a platform like Vercel that can hide the key server-side. Never commit API keys to your repo. See the API Keys and Safety session (Monday, 6/22) for details.
Or find your own. Browse github.com/public-apis/public-apis for hundreds of free APIs.
Requirements (Base)
- Fetch data from at least one external API using
fetch() - Display the data dynamically (rendered with JavaScript, not hard-coded)
- Include a search, filter, or browse feature (the user chooses what data to see)
- Handle loading state (show something while the data loads)
- Handle error state (show a friendly message if the API fails)
- Responsive design
- Deployed on GitHub Pages
Extensions
Push further if you want:
- Use multiple API endpoints or combine data from two APIs
- localStorage to save favorites, history, or preferences
- Pagination or infinite scroll for large datasets
- Detail view (click an item to see more info)
- Visual data display (charts, progress bars, color-coding)
- Unit conversion or data transformation (Celsius/Fahrenheit, currency, etc.)
- Animations on data load or transitions between views
Iteration Plan
Milestone 0: Proposal
Goal: Choose your API and define what you'll build.
Commit a PROPOSAL.md with:
- What I'm building: (one sentence)
- Which API I'm using: (name and URL)
- Why I chose this: (what interests you about this data?)
- Core features: (3-5 things it will do)
- What I don't know yet: (what about fetch/async/JSON is new to you?)
Before proposing: Open your API URL in the browser. Look at the raw JSON. Make sure you understand what data is available.
Optional but recommended: Paste your proposal into AI and ask it to interview you. "Here is my project proposal. Act as a product manager. Ask me clarifying questions one at a time to help turn this into a detailed PRD." In the industry, this is called a Product Requirements Document (PRD). Save the result as PRD.md in your project repo. When you use AI to build features, point it to this file: "Read PRD.md and implement the first feature."
Iteration 1: Fetch and Display
Goal: Get data from the API and show it on the page.
Tasks:
- Create the basic HTML page with placeholder layout
- Write a
fetch()call to your API console.logthe response. Understand the JSON structure.- Display at least 3-5 data items on the page
- Hard-code any parameters for now (e.g., a specific city, a default search term)
Write about this in your weekly log: What does the API response look like? What fields did you use? What was the trickiest part of getting fetch to work? If AI helped, what did it explain about async/await?
Iteration 2: Interactivity and Design
Goal: Let the user control what data they see, and make it look good.
Tasks:
- Add search, filter, or browse functionality
- Style the data display with CSS (cards, grid, list, whatever fits your data)
- Make it responsive (test on mobile)
- Add loading state (show a spinner or "Loading..." while fetching)
- Add error handling (show a message if the API call fails)
Write about this in your weekly log: How did you connect user input to API calls? What CSS layout did you use for displaying data? What design decisions did you make?
Iteration 3: Polish and Extend
Goal: Make it feel like a real app.
Tasks:
- Add at least one extension (localStorage favorites, detail view, pagination, etc.)
- Handle edge cases (no results found, API rate limit, empty search)
- Run Lighthouse audit
- Get feedback from a classmate
- Final polish
Write about this in your weekly log: What extension did you add? What edge cases did you handle? What surprised you about working with a real API?
Submission
- Create a new, separate public GitHub repo for this project (do NOT put it inside your
oim3690repo or yourusername.github.iorepo) - Deploy on GitHub Pages (your live URL will be
username.github.io/repo-name) - Include in your repo:
PROPOSAL.mdwith all sectionsREADME.mdwith:- What your app does
- Which API you used (with link)
- Link to live site
- Screenshot
- What you learned about working with APIs
- Link from your
oim3690repo README - Weekly log entries covering your project work
This project is reviewed as part of your checkpoints.
Helpful Resources
- MDN: Using Fetch
- MDN: Working with JSON
- Public APIs list
- Ask AI: "Explain this API response" (paste the JSON you get back)
Tips
- Start in the console. Before writing any HTML, paste the API URL in your browser to see the raw JSON. Then use
console.login your JS to explore the response object. - Hard-code first, fetch later. Build your HTML/CSS with fake data. Once it looks good, replace the hard-coded values with real API data.
- Read the API docs. Every API is different. Spend 10 minutes reading the documentation before asking AI for help.
- Pick an API you find interesting. You'll spend more time looking at this data than you expect. Choose something you enjoy.
- No-key APIs are your friend. Open-Meteo, PokéAPI, and REST Countries all work without signup or authentication.
Due Friday, 7/10
Last updated: Saturday, 6/13/2026