-
connected to github.
-
cleaned the project with additional files and code.
-
installed tailwind for style.
-
installed react-router-dom.
-
Created Home page and added as Route ,also added * which means all routes that are not written will be forwarded to / this path
-
added lazy/loading for faster first retrieve. page will display through Loader before all data retrieved and than will display landing page
stacks: react.js, typescript, tailwind
- retrieved images and icons for home page
- Created Main layout which consists Header,main part and footer
- tailwind.config.ts added for saving oftenly used colors
- build Header correctly for not authorized case
- added more colors in tailwind.config.ts and finished header part for unauthorized case
- build hero Section and added button ui component
- started startLearning component and card needs to be added
- installed axios and tanstack query since It will need CRUD methods to be used and added necessary folders and files for using them (currently for card's data fetching in home page).
- displayed fetched data in StartLearning so currently it displays correctly. Since index 2 data avgRating was null I made it zero and adjusted also starts with the next logic if avgRating is null than empty start (it will not be yellow) else if it is less than or is same as 4 than half star and if it is above 4 than full start (fully yellow).Hope this is what the goal was .
- building continue Learning section and blarred it. First fetch data using Tanstack query and axios and than will display it but since currently it is not authentificated I will display this case .
- added in progress courses endpoint hook types and simple continue learning section rendering than imported it on ContinueLearning component and it returns GET https://api.redclass.redberryinternship.ge/api/courses/in-progress 401 (Unauthorized). Also Imported necessary icons for footer as well and built part of it's design in advance .
- I build a mock "continue learning" with 3 cards .than blarred it and added log in suggestion component
- footer is finished as well and by this Home Page visual part done .Moving forward I will start logic part from now on
- Added real routes for
/courses/catalogand/courses/:id, plus a dedicated Not Found page instead of redirecting every unknown route to/. - Wired course details flow from cards so users can actually reach course detail pages.
- Continue Learning now keeps showing for authenticated users with empty enrollments and displays the required empty state text with a Browse Courses action.
See Allin Continue Learning andEnrolled Coursesin the authenticated header now open the enrolled courses modal flow (guest users are redirected to login through protected action logic).- Enrolled courses modal now has an empty state, enrolled list, summary, total price, and a non-browser confirmation UI for complete enrollment action.
- Hero section is now a 3-slide carousel with slide-based text, background image, indicators, and arrow states.
- Authorized Home dashboard Continue Learning now uses live
/courses/in-progressdata and shows up to 3 cards only when authenticated users actually have courses.
- Created src/features/auth/components/AuthModalHeader.tsx.
- Added a reusable header component with title and subtitle props.
- Inserted the current sign up header content.
- Created src/features/auth/components/AuthStepIndicator.tsx.
- Added a 3-step progress indicator for the sign up flow.
- Prepared spacing for the next section below it.
- adjusted sign up modal top content spacing
- fixed create account header and step indicator sizes
- Created src/features/auth/components/AuthSignUpStepOneSection.tsx.
- Added the email field, Next button, and footer actions.
- Kept this step focused on UI only.
- adjusted sign up modal footer layout to match figma
- aligned divider row and login action row
- Created src/hooks/use-lock-body-scroll.ts.
- Added reusable body scroll lock logic for modal state.
- Connected it to LoginModal.
- Added local currentStep: 1 | 2 | 3 state inside LoginModal.
- Connected Step 1 Next to open Step 2 in the same modal.
- Added back navigation from Step 2 to Step 1.
- Added Step 2 fields and updated step indicator state.
- replaced inline back arrow with provided svg asset
- kept auth modal back button simple and reusable
- Kept the sign up flow inside a single modal.
- Switched only the inner content based on the current step.
- Preserved the same modal structure while moving between steps.
- Added shared sign up state for email, password, and confirmPassword.
- Added validation for required fields, minimum length, and password match.
- Added inline error messages.
- Added separate password visibility toggle for both fields.
- Prevented moving to the next step until validation passes.
- Reset sign up state when the modal is closed.
- Added a dedicated Step 3 section component with username input, upload avatar block, Sign Up button, and footer.
- Fixed Step 3 modal flow rendering so step 3 has its own content and correct back navigation to step 2.
- Matched Step 3 wrapper/layout structure to Figma spacing: 460 modal with 50 padding, 12 gap, and 360 inner content alignment.
- Built upload avatar area with existing upload icon asset, centered content, inline upload action, and helper text.
- Connected sign up to backend
POST /registerusing shared axios and TanStack Query mutation. - Sign up now sends multipart form data (with optional avatar), stores
access_tokenandauth_userin localStorage, and closes modal on success.
- Split auth modals: Log In now opens
LoginModalonly, and Sign Up now opensRegisterModalwith the existing 3-step registration flow. - Connected LoginModal to backend login API with TanStack Query mutation, pending button state, and simple inline error message.
- Login form now uses React Hook Form + Zod schema validation from a separate auth schemas folder.
- RegisterModal now uses React Hook Form + Zod schema for core validation and real register submit flow.
- Unified auth input error visuals (label, border, placeholder, helper text in red) for Login and Register, and split modal internals into child components to keep modal files smaller.
- After Login the visual part of header's right side changes. Also when profile icon is clicked displays modal but currently nothing written inside.
- Currently no enrolled course wilbe so nothing will be displayed after login . I will get back to this part later after finishing all major parts
- Corrected the upload text styles using the exact Figma values.
- Applied the main upload row as a centered 14px medium Inter text block.
- Styled the regular text with Greyscale/500 and the upload link with Purple/600.
- Added the exact 8px gap between the main upload text and the helper text.
- Matched the helper text to the 12px regular Inter style and Greyscale/300 color.
- Reused the existing shared Button component for the profile submit action.
- Adjusted the button usage to match the Figma width, height, radius, spacing, and purple background.
- Added
profile.schema.tswith Zod fields for full name, email, mobile number, age, and avatar. - Added Georgian mobile normalization for validation (spaces are ignored without mutating the original input value).
- Added
normalizeGeorgianMobileandisProfileCompletehelpers for profile logic foundation. - Added
useProfileModalFormhook with React Hook Form +zodResolver(profileSchema)inonBlurmode. - Hook now reads
auth_userfrom localStorage for default values with safe empty fallbacks. - Added logic-only close confirmation and avatar change handler without touching profile modal visuals.
- profile modal now uses react-hook-form.
- profile fields now have real blur validation.
- email is visible but not editable.
- profile completeness now syncs after profile save.
- enroll now is blocked for incomplete profiles.
- incomplete profiles now open the profile modal before enrollment.
- profile feedback states were polished.
- profile indicator now reflects completion state.
- modal close behavior now respects incomplete profile rules.
- Replaced the inline incomplete-profile close prompt with a centered 476x486 feedback dialog, matched the exact Figma spacing, and used the new profile user icon asset.
- Finished the additional turn off modal
- removed StartLearning component and added breadcrumb
- Created Filter component and starting building it. I finished building visual part and now it's card time to be built. It's finished and moving forward on a pagination
- Added typed catalog filter models for categories, topics, and instructors in the shared course types file.
- Added
/categories,/topics, and/instructorsAPI endpoint functions for the catalog filter data. - Added TanStack Query hooks for categories, topics, and instructors to prepare the filter sidebar data flow.
- Connected the new hooks inside the related catalog filter components and logged their states for the first integration step only.
- Checked and aligned the shared
/coursescatalog response types for the cards and pagination metadata. - Connected the catalog courses response to simple console logging in the grid area without changing the current static card UI.
- Kept the current catalog UI unchanged for now; real rendering and filter behavior will be implemented next.
- Replaced the static catalog sidebar content with real backend-driven categories, topics, and instructors.
- Replaced the static catalog course cards with mapped
/coursesdata from the API. - Connected the catalog results text and pagination UI to the real response metadata.
- Removed temporary mock catalog content that was previously written by hand.
- Kept the catalog layout unchanged while making the page use real fetched data.
- Increased the custom sort dropdown width so
Price: Low to HighandPrice: High to Lowfit cleanly in both trigger and menu. - Kept the same custom dropdown behavior and aligned the top row layout so the wider control still stays stable next to the results text.
- left parts filter works and cards are filtered by categories , mentor and topics
- built visual (left part and right part)
- Added backend foundation for course detail with new endpoint layer + query hooks for:
/courses/{id},/courses/{id}/weekly-schedules,/courses/{id}/time-slots,/courses/{id}/session-types. - Course detail page now reads route
id, fetches real detail + weekly schedules, and uses real detail loading/error/not-found states without changing the current UI layout. - Connected right-side schedule selection to real backend flow (weekly schedule -> time slot -> session type) with dependent reset logic.
- Total price card now reacts to real base price + selected session type modifier, and unavailable session types are shown as disabled with seat-status text.
- Left-side course detail now binds to the exact route course from
GET /courses/{id}for title, image, description, category/topic text, instructor name, and duration weeks. - Time Slot and Session Type cards now visibly render backend values in-place (real labels/times, session names, modifiers, seats, and location text).
- Unavailable options now stay visible but use disabled UI colors across weekly schedule, time slot, and session type cards.
- Right-side detail sections (Weekly Schedule, Time Slot, Session Type) now support independent open/close accordion behavior with smooth arrow/content animation, while keeping the same backend-driven selections and reset logic.
- Breadcrumb receives relevant category and display's it on the head of the left part also when home or browse clicked it will move on relevant page
- implementing enrollment backend GET/POST/PATCH/DELETE
- Now implemented post on enroll now button but Currently I will write only static text and after creating the design I retrieve data through GET method
- retrieves data correctly and dispays it
- correctly added the rating block and retake button for the completed state.
- After Enroll Now succeeds, the right panel switches from the schedule selection flow to the enrolled state and shows the selected weekly schedule, time slot, session type, optional location, and backend-driven progress in the existing design.
- After Complete Course succeeds and the backend progress becomes 100, the same panel switches to the completed state and shows the Completed badge, full progress, the Retake Course action, and the one-time rating section.
- When retake is clicked it get's back on the stage of "enroll now" and if it is again clicked do the same process. Also rating is only one time. (retake => delete)
- adding 3 modal (congratulations, conflict ,confirmed)
- refactored pages => home => components and added 3 folder
- refactored pages => courses => components and added 3 folder and sub folders as well
- Enrolled Courses now uses a dedicated animated right sidebar shell (overlay fade + right slide), and currently renders the empty-state panel layout for the next UI step.
- Enrolled Courses sidebar now reads real enrollments count and conditionally shows empty state or a single filled-state placeholder block.
- built the empty case version similar how it looks in figma file
- built the enrolled case when cards are displayed.
- renamed tab and added relevant logo as an icon
- sturcturized in a better way
- improved style
- removed junk files
- instead of many use of useState , wrote useReducer where needed
- moved similar or same code out of 2 or more components and than imported it so same code will not be written two or more times
- Solving missed logic about enroll now (When someone is not authentificated or authentificated but not fully filled profile enroll now button still has to be functional and that is done)
- on start learning in carousel it will show enrolled list's if person is authentificated and if not it will not login modal
- added cursor pointers to all buttons when necessary it will show relevant pointer
- enrolledCourseModal now correctly be moved and do not cause refresh