You’re building a small frontend product that mimics a modern digital library or book discovery platform.
The app allows users to browse a large catalog of books, open a dedicated book page, and share it with others in a way that looks great on social platforms.
The goal is not just “to make it work”, but to show how you design, structure, optimize, and ship a real-world frontend app.
This product is independent of any existing service, but lives in a realistic domain: books, authors, genres, reading, and content discovery.
Create a web application that:
-
Shows a list of “books” (mocked or fetched from a public API you choose)
-
Each book has:
- title
- author
- short description / blurb
- cover image
- number of pages
- genre
-
Clicking a book opens a book page with richer details
-
Each book page can be shared and renders a proper Open Graph preview
-
The app supports multiple languages
-
The UI must be accessible, performant, and production-minded
You may choose:
- Next.js or
- Vite + React
But the app must run with both npm and docker, so make sure you dockerize it.
Both setups must work without code changes.
-
Books list page
- Render at least 50 items
- Avoid rendering bottlenecks (virtualization or similar)
-
Book details page
-
Has its own URL
-
Displays all book data
-
Includes proper Open Graph metadata:
og:titleog:descriptionog:image
-
-
Navigation between pages
-
Global layout (header/footer)
-
Demonstrate awareness of:
- Large lists
- Expensive re-renders
- Bundle size
-
Use at least one memoization technique:
React.memouseMemouseCallback
-
Show that you thought about:
- LCP
- CLS
- INP
Add a short PERFORMANCE.md explaining:
- What you optimized
- What you would optimize in production
-
Use:
- Redux (Toolkit preferred) or
- A well-structured alternative
-
Demonstrate:
- Separation of UI and state
- Scalable slice/module structure
- Async data handling
-
Use SCSS
-
Show:
- Variables
- Mixins
- Placeholders (
%)
-
Organize styles in a way that scales
-
Avoid “one giant file”
-
Support at least two languages
-
Include:
- Static UI text
- Dynamic content
- Pluralization (e.g. “1 page”, “350 pages”)
- Semantic HTML
- Keyboard navigation
- Proper labels and roles
- Color contrast awareness
Include an A11Y.md with:
- Principles you followed
- How you tested (manual or tools)
Implement:
- At least 2 unit tests
- At least 1 integration test
- (Optional) e2e test
Explain your testing strategy in TESTING.md.
In SECURITY.md, briefly explain:
- How your app avoids XSS
- How CSRF would be handled in a real system
- What clickjacking is and how you’d prevent it
We’re looking for:
-
Thoughtful folder structure
-
Clear separation of:
- UI
- State
- Services
- Hooks
-
Meaningful component boundaries
-
Reusable atoms/molecules where appropriate
-
Clean data flow
We are not looking for “perfect visuals”. We care about:
-
Code quality
-
Structure and scalability
-
Performance thinking
-
Ability to reason about:
- React behavior
- Rendering
- State
- Async flows
-
Awareness of:
- Event loop implications
- Closures in hooks and callbacks
- Hydration (if using Next.js)
-
Production mindset
- Server-side rendering for book pages
- Skeleton loaders
- Prefetching
- Dark mode
- Lighthouse score > 90
- Client-side filtering by genre or author
The application must be deployed to one of the following platforms:
- Vercel
- Netlify
- Cloudflare Pages
- GitHub Pages (only if your setup supports static export cleanly)
Requirements:
- The deployed app must be publicly accessible
- The deployed version must behave the same as the local one
- Book pages must be directly accessible via URL (deep links work)
- Open Graph metadata should be verifiable on the deployed URLs
Add a DEPLOYMENT.md with:
- Which platform you chose and why
- The production URL
- Any trade-offs or limitations you encountered
- What you would change for a real production environment (CDN, caching, env vars, secrets, etc.)
We evaluate:
- Whether the app actually runs in production
- How well you understand build vs runtime environments
- Your awareness of SSR/SSG implications (if using Next.js)
- Your ability to reason about real-world delivery, not just local dev