Develop a user interface for a Python web application
This project was completed as part of the "Python Developer" path at OpenClassrooms.
The goal was to develop the front-end interface of a Python web application capable of:
- Visualizing a real-time ranking of interesting films.
- Getting datas form 'OCMovies-API' API Rest
- Displaying UI accordingly to the graphic design from Figma
index.html
- Dynamic movie loading with
createElement() - Sorting by category (+ best movie)
- Image caching and preloading
- "See more / See less" responsive system
- User-friendly modal management
- Clean, modular code → clear architecture
The JS part loads the movies dataset dynamically into the HTML page. Indeed, the 'moviesContent' sections are generated dynamically as shown in the screenshots below. You will see appear the 'moviesImageBlock' balises after html generation :
async function createImage(movie, target) {
const placeholder = "./assets/images/placeholder.png";
const img = document.createElement("img");
img.alt = `${movie.title} - image ${target}`;
const url = movie?.imageUrl;
if (imageCache.has(url)) {
img.src = imageCache.get(url) ? url : placeholder;
return img;
}
try {
await preload(url);
imageCache.set(url, true);
img.src = url;
} catch {
imageCache.set(url, false);
img.src = placeholder;
}
return img;
}
/* Mobile */
@media (max-width: 480px) { ... }
/* Tablet */
@media (min-width: 481px) and (max-width: 1024px) { ... }
/* Desktop */
@media (min-width: 1025px) { ... }
The display is adapted automatically with css as below.
- 2 movies by category : mobile
- 4 movies by category : tablet
- 6 movies by category : desktop
- Local storage (local API cache)
- Possible migration to React/Vue
- Unit testing (Jest or Pytest API-side)
- Optimized loading (lazy loading)
Name: Nicolas MARIE
Track: Python Developer – OpenClassrooms
Project – Develop the user interface of a web app : OCMovies – November 2025













