Looks For Lease

Figma Design

OVERVIEW

Looks For Lease (L4L) is pioneering a new era in fashion, offering a garment‑leasing model that delivers style and sustainability in one seamless package. Through its white‑label SaaS platform and optional 3PL support, L4L empowers fashion brands and designers to rent high‑quality pieces directly to consumers—turning what was once a one‑time sale into a consistent revenue stream. From item tracking and order logistics to circular shipment and environment‑friendly garment care, the system is designed for efficiency and brand control. By leasing rather than selling, L4L extends each garment’s lifecycle, reducing waste and helping brands meet carbon reduction goals—all while offering customers guilt‑free access to designer looks without ownership

Focus Areas

Roles and responsibilities

I worked on the complete design and development lifecycle of the Issue Resolution module. This included low to high fidelity wireframes in Figma, building reusable UI components, handling state management with useEffect, integrating backend APIs, and implementing modal-based interactions for changing issue statuses. I also ensured responsiveness and performance optimization across views.

Design

The design process began with wireframing user flows and layout structures using Balsamiq and Figma. The final UI emphasized clarity and ease of use, showcasing key issue metrics, ticket statuses, and quick actions like "Add Issue" or "Change Issue Status." Components were styled for consistency and accessibility, and feedback modals were incorporated to confirm user actions.

Skills & Tools

  • 🎨 Figma
  • 🖼️ Balsamiq
  • 💻 Sitemaps
  • 📝 Prototyping
  • 🔍 User Research
  • ✏️ Wireframing
  • 📮 Postman (API Testing)

PROBLEM STATEMENT

In the context of a garment leasing platform, customer service teams faced challenges managing and resolving order-related issues due to a lack of a centralized, user-friendly system. The absence of a streamlined interface for tracking, updating, and resolving tickets led to delayed responses, miscommunication, and reduced customer satisfaction. The goal was to design and develop an efficient Issue Resolution module that allows internal teams to monitor issue statuses, view detailed order information, and take quick action—ultimately improving operational workflows and enhancing customer experience.


TECHNICAL DOCUMENTATION

Updated Project: L4L Shop Admin Dashboard

You developed a comprehensive admin dashboard for a luxury fashion rental platform (L4L Shop) that needed to manage:

Technical Challenges Solved

1. Product Creation System - Complex Form Management & State Handling

Problem: Managing multiple interconnected forms with dynamic field visibility and validation.

Solution: Implemented progressive form disclosure where fields appear based on previous selections:

// Progressive field visibility based on selections
const [showCollectionField, setShowCollectionField] = useState(false);
const [showDesignField, setShowDesignField] = useState(false);
const [showSizeField, setShowSizeField] = useState(false);

// Dynamic field loading based on designer selection
const handleDesignerSelection = async (designerId) => {
  setSelectedDesignerId(designerId);
  if (designerId) {
    setShowCollectionField(true);
    // Load collections, designs, and sizes in parallel
    await Promise.all([
      handleGetCollections(designerId),
      handleGetDesigns(designerId),
      handleGetSizes(designerId)
    ]);
  }
};

2. Modal System Architecture

Problem: Need for multiple modal types (create, edit, delete, success) with consistent UX patterns.

Solution: Created a reusable modal system with:

  • Success Modals: Consistent success feedback across all operations
  • Form Modals: Complex forms for creating designers, collections, designs, sizes
  • Confirmation Modals: Delete confirmations with proper validation
  • Status Change Modals: Issue status management with real-time update
// Reusable success modal pattern
function SuccessModal({ isOpen, onClose, message }) {
    return (
        <div className="modal-overlay">
            <div className="success-modal-content">
                <h2 className="success-title">Operation Completed Successfully</h2>
                <p className="success-date">{message}</p>
                <button onClick={onClose} className="ok-button">Ok</button>
            </div>
        </div>
    );
}

3. Issue Management System

Problem: Complex issue tracking system requiring status management, comment threads, and export functionality.

Solution: Built a comprehensive issue management system with:

  • Issue Creation & Assignment:
// Dynamic issue creation with department assignment
const [assignToDept, setAssignToDept] = useState('Sales');
const [assignToPerson, setAssignToPerson] = useState('John Doe');
const [additionalItems, setAdditionalItems] = useState([]);

// Dynamic additional items management
const handleAddAdditionalItem = () => {
    if (additionalItems.length < 10) {
        setAdditionalItems([...additionalItems, '']);
    }
};
  • Issue Status Management:
// Real-time status updates with audit trail
const handleChangeStatus = ({ userName, changeStatus }) => {
    console.log(`Status changed by ${userName} to ${changeStatus}`);
    setOrderDetails(prevDetails => ({
        ...prevDetails,
        issueStatus: changeStatus,
    }));
};
  • Comment System with Resolution Tracking:
// Comment system with resolution status
const commonComments = [
    {
        id: 1,
        author: 'Kristin Watson',
        date: '9/18/21 12:23',
        text: 'Great news! Your item has successfully completed the cleaning process...',
        resolved: true, // Track resolution status
    }
];

4. Data Export System

Problem: Need for flexible data export functionality for both users and issues.

Solution: Implemented a robust CSV export system:

const convertToCsv = (data) => {
    if (!data || data.length === 0) return '';
    
    const headers = Object.keys(data[0]).join(',');
    const rows = data.map(row => 
        Object.values(row).map(value => {
            const stringValue = String(value);
            if (stringValue.includes(',') || stringValue.includes('"') || stringValue.includes('\n')) {
                return `"${stringValue.replace(/"/g, '""')}"`;
            }
            return stringValue;
        }).join(',')
    );
    
    return [headers, ...rows].join('\n');
};

// Dynamic file naming and download
const handleExport = () => {
    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    const link = document.createElement('a');
    link.setAttribute('download', exportAll ? 'all_registered_issues.csv' : `issue_${issueId.replace('#', '')}.csv`);
    link.click();
};

5. Data Relationship Management

Problem: Complex hierarchical data relationships (Designer → Collection → Design → Size) with cascading dependencies.

Solution: Implemented intelligent data fetching and state management:

// Cascading data loading with proper error handling
useEffect(() => {
    const fetchCollectionsByDesigner = async () => {
        if (selectedDesigner && selectedDesigner !== "") {
            setCollectionsLoading(true);
            try {
                const response = await fetch('/api/get-collections-by-designer-id', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({ designerId: selectedDesigner }),
                });
                const data = await response.json();
                setCollectionsList(data.data || []);
            } catch (error) {
                console.error('Error fetching collections:', error);
                setCollectionsList([]);
            } finally {
                setCollectionsLoading(false);
            }
        }
    };
    fetchCollectionsByDesigner();
}, [selectedDesigner]);

6. Image Management System

Problem: Handling multiple image uploads, previews, and associations with products/collections.

Solution: Built a comprehensive image management system:

// Image upload with preview and validation
const handleFileLoaded = (e) => {
    const file = e.target.files[0];
    if (file) {
        const reader = new FileReader();
        reader.onloadend = () => setBaseImage(reader.result);
        reader.readAsDataURL(file);
        
        const objectUrl = URL.createObjectURL(file);
        setPreview(objectUrl);
    }
};

// Image association with products
const onHandleImageId = async (imageId) => {
    setUploadedImageId(imageId);
};

7. Registered User Management System

Problem: Complex user registration with multiple data types (personal info, billing, documents, measurements).

Solution: Created a comprehensive user management system with:

  • Form Validation: Multi-step validation with proper error handling
  • Document Upload: File management with preview and removal
  • Data Persistence: Proper state management and API integration
// Comprehensive user form state management
const [form, setForm] = useState({
    userType: "",
    accountStatus: "",
    numberOfSlots: "",
    // ... 20+ fields
    password: "",
    confirmPassword: "",
});

// File upload handling
const handleFileUpload = (event) => {
    const files = Array.from(event.target.files);
    const newDocuments = files.map((file, index) => ({
        id: Date.now() + index,
        name: file.name,
        url: URL.createObjectURL(file),
        file: file
    }));
    setUploadedDocuments(prev => [...prev, ...newDocuments]);
};

Technical Architecture Decisions

1. Context API for State Management

Why: Chose React Context over Redux for simpler state management across components.

// UserContext for global user state
const UserContext = createContext();
export const UserProvider = ({ children }) => {
    const GetCustomers = async () => {
        // API integration logic
    };
    return (
        <UserContext.Provider value={{ GetCustomers }}>
            {children}
        </UserContext.Provider>
    );
};

2. Component Composition Pattern

Why: Used composition over inheritance for better reusability and maintainability.

// Reusable styled components
const StyledInput = ({ label, name, placeholder, value, onChangeText }) => (
    <div className="field-group">
        <label className="label">{label.toUpperCase()}</label>
        <input
            className="text-input"
            name={name}
            placeholder={placeholder}
            value={value}
            onChange={(e) => onChangeText && onChangeText(e.target.value)}
        />
    </div>
);

3. Progressive Enhancement

Why: Implemented progressive form disclosure to improve UX and reduce cognitive load.


Key Features Implemented


Complete File Structure Covered

User Management System

  • pages/ccc/registered_user/[id].jsx - User detail view with comprehensive data display
  • pages/ccc/registered_user/create.jsx - User creation form with 20+ fields
  • components/Users.js - User listing with search, filter, and export functionality
  • components/modals/DeleteUserModal.js - User deletion with confirmation
  • components/modals/ExportUserList.js - User data export functionality

Issue Management System

  • pages/ccc/issues/index.jsx - Issue listing page with search and filters
  • pages/ccc/issues/[id].jsx - Issue detail view with comments and status management
  • components/Issues.js - Issue listing component with export functionality
  • components/modals/AddIssueModal.js - Issue creation with dynamic fields
  • components/modals/ChangeIssueModal.js - Issue status management
  • components/modals/ExportIssueList.js - Issue data export functionality

Product Management System

  • components/CreateProduct.js - Complex product creation with progressive disclosure
  • components/modals/AddNewCollectionModal.js - Collection creation
  • components/modals/AddNewDesignModal.js - Design creation with image upload
  • components/modals/AddNewSizeModal.js - Size creation with measurements
  • components/modals/AddProductModal.js - Product creation success feedback

Context & State Management

  • context/OrderContext.js - Order management context
  • context/UserContext.js - User management context

Technologies Used


Performance Optimizations


Business Logic Implemented

Issue Resolution Workflow

  • Issue Creation: Multi-department assignment with dynamic field management
  • Status Tracking: Real-time status updates with user attribution
  • Comment System: Threaded comments with resolution tracking
  • Export Functionality: Individual or bulk export with proper formatting

User Management Workflow

  • Registration: Comprehensive form with validation
  • Profile Management: Detailed user information with measurements
  • Document Management: File upload and association
  • Export System: Flexible data export options

This project demonstrates your ability to handle complex business logic, manage state effectively, create reusable components, build comprehensive admin interfaces with excellent UX patterns, and implement sophisticated data management systems including issue tracking and resolution workflows.


WIREFRAMES

Issue Resolution System

The interactive prototype I developed showcases a comprehensive issue resolution system within an admin panel, seamlessly integrated with a user-facing website. The prototype's core functionality revolves around a series of key user interactions, primarily driven by button clicks. I've included a clear "Add Issue" button that triggers a modal to collect details like the order number, item number, and a description of the problem. After filling out the form, clicking the "Add" button successfully logs the issue. When a specific issue is selected, another button, "Change Issue Status," allows for dynamic state transitions. This button opens a dropdown menu to select new states (e.g., from "Limbo" to "Cleaning"), demonstrating the logical flow of resolving an issue. These interactive elements, along with the detailed issue view and the transition to the Moda Operandi website, highlight a complete end-to-end user journey for both the administrators and the end customers, all within a cohesive and clickable prototype.

Common Issues

Registered User Management System

The prototype also features a robust user management system within the admin panel, again heavily relying on interactive buttons. This prototype is centered on a "Registered User" dashboard where administrators can manage user accounts. Clicking on a specific user, such as "Jason Wilson," brings up a detailed profile view. From this view, a user can be deleted by clicking the "Delete User" button, which triggers a confirmation modal to ensure the action is intentional. I've also included a "Restrict User" button, which functions similarly by opening a confirmation modal before applying a restriction. Additionally, the dashboard includes an "Export User List" button to simulate generating a user data file and a "Create User" button to lead to a detailed form for adding new users. These buttons, along with the detailed profile views and confirmation modals, demonstrate a secure and efficient way to handle user data, from creation and viewing to restriction and deletion, all through a series of clear, actionable prompts and controls.

Common Issues

Create Product System

This prototype is designed to demonstrate how an administrator would add a new item to the system. The interaction begins on a form with multiple fields for product information, such as "Designer Name," "Collection," and "Product Information." The key interactions are driven by various clickable elements. For instance, the "Add New Category / Sub-Category" button brings up a modal where an administrator can define and add a new category, a process that concludes with a success message after clicking the "Add" button. The prototype also includes a "Product photo" section with clickable image placeholders to simulate uploading images. The ultimate goal of this form is to add a new product, and the final "Add product" button at the bottom of the page would complete the process, saving all the entered information. The entire flow, from filling out the product details to adding a new category on the fly, is designed to be intuitive and efficient, showcasing a comprehensive product management tool

Common Issues

INTERACTIVE PROTOTYPES

Issue Resolution System

The interactive prototype I developed showcases a comprehensive issue resolution system within an admin panel, seamlessly integrated with a user-facing website. The prototype's core functionality revolves around a series of key user interactions, primarily driven by button clicks. I've included a clear "Add Issue" button that triggers a modal to collect details like the order number, item number, and a description of the problem. After filling out the form, clicking the "Add" button successfully logs the issue. When a specific issue is selected, another button, "Change Issue Status," allows for dynamic state transitions. This button opens a dropdown menu to select new states (e.g., from "Limbo" to "Cleaning"), demonstrating the logical flow of resolving an issue. These interactive elements, along with the detailed issue view and the transition to the Moda Operandi website, highlight a complete end-to-end user journey for both the administrators and the end customers, all within a cohesive and clickable prototype.

Registered User Management System

The prototype also features a robust user management system within the admin panel, again heavily relying on interactive buttons. This prototype is centered on a "Registered User" dashboard where administrators can manage user accounts. Clicking on a specific user, such as "Jason Wilson," brings up a detailed profile view. From this view, a user can be deleted by clicking the "Delete User" button, which triggers a confirmation modal to ensure the action is intentional. I've also included a "Restrict User" button, which functions similarly by opening a confirmation modal before applying a restriction. Additionally, the dashboard includes an "Export User List" button to simulate generating a user data file and a "Create User" button to lead to a detailed form for adding new users. These buttons, along with the detailed profile views and confirmation modals, demonstrate a secure and efficient way to handle user data, from creation and viewing to restriction and deletion, all through a series of clear, actionable prompts and controls.

Create Product System

This prototype is designed to demonstrate how an administrator would add a new item to the system. The interaction begins on a form with multiple fields for product information, such as "Designer Name," "Collection," and "Product Information." The key interactions are driven by various clickable elements. For instance, the "Add New Category / Sub-Category" button brings up a modal where an administrator can define and add a new category, a process that concludes with a success message after clicking the "Add" button. The prototype also includes a "Product photo" section with clickable image placeholders to simulate uploading images. The ultimate goal of this form is to add a new product, and the final "Add product" button at the bottom of the page would complete the process, saving all the entered information. The entire flow, from filling out the product details to adding a new category on the fly, is designed to be intuitive and efficient, showcasing a comprehensive product management tool

View Zinged Project Back to Home