A showcase of the canvas editor for smooth and responsive image annotation.
Try the application here: Live Demo
- Overview
- Key Features
- Focus Areas
- Getting Started
- Configuration
- Mock Mode vs API Mode
- Technologies Used
- Acknowledgments
This repository was created as technical assignment expertise in building a high-performance Next.js application. It focuses on two main areas:
- Optimized Image Listing: Implementing advanced performance techniques for smooth, responsive image galleries.
- Canvas Annotation Editor: Designing an intuitive canvas tool using React Konva.
The project showcases skills in React, React Query, dynamic UI optimization, and virtualized list handling.
For further details, refer to the files in the docs
directory.
- Optimized Image Listing:
- Fully responsive, smooth-scrolling virtualized list with
react-window
. - Filters by name, metadata, and category with dynamic UI elements.
- Fully responsive, smooth-scrolling virtualized list with
- Canvas Annotation Editor:
- Tools for drawing annotations like rectangles with customizable colors.
- Synchronization with a mock backend using UUID-based annotations.
- Smooth transitions, state management, and loading indicators.
- General:
- Category Management: Full CRUD operations with real-time syncing.
- Image filtering: by name, metadata, or categories.
- Fully mobile-friendly design.
- Mock server support for easy testing.
-
Image Listing Optimization:
- Leveraged
react-window
for a responsive and performant virtualized list. - Optimized image loading with placeholders and smooth transitions.
- Leveraged
-
Canvas Annotation:
- Designed an interactive canvas editor using React Konva.
- Implemented features for annotation creation, deletion, and syncing.
- Provided loading indicators and user feedback for better UX.
- Node.js >= 20.0.0
- npm >= 11.0.0
-
Clone the repository:
git clone https://github.com/ahmadmhdyones/image-annotation-manager-nextjs.git cd image-annotation-manager-nextjs
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
Create a .env
file with the following:
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_API_URL=https://api.example.com
This app supports running in two modes:
-
Mock Mode:
-
Ideal for testing without a backend.
-
Enable mock mode in
src/configs/global.config.ts
:export const API_MOCK_ENABLED = true; // Enable mock mode export const API_MOCK_DELAY = 1000; // Simulate network delay
-
-
API Mode:
-
Connect to a real backend.
-
Disable mock mode:
export const API_MOCK_ENABLED = false; // Use live API
-
- Framework: Next.js 15
- State Management: React Query
- Virtualization: React Window
- Canvas Library: React Konva
- UI Library: Material UI
This project was developed to demonstrate my ability to handle complex UI challenges and optimize performance. I appreciate the opportunity to showcase these skills as technical assignment.
For further technical documentation, please see the files in the docs
directory.