Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Tutor Lesson Planner Profile Block for React

A tutor profile as a lesson planner: a subject menu, lessons a week on a slider, a block of 4, 8 or 12 weeks, the cost worked out line by line, and the next free times for a trial lesson.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Let a family see what lessons would cost before they ask, with this tutor profile for React with Base UI. A compact header holds the title and a Native Select for the subject, and the hairline frame under it opens on the tutor: initials, name, role and place. A band names the levels taught as outline Badges with the rate for that subject. Lessons a week sit on a Slider from one to five, and the length of the block on a Segment Group of 4, 8 and 12 weeks, the longer ones carrying their discount. The cost is worked out in the open in a Data List: lessons, price, discount, a total for the block and what that comes to a month. The next two free times are two radio chips for the trial lesson, and the foot, ruled by Guides, holds a status line beside a Shine Button that asks for it. Every date is a typed day, never the clock. It's built from Native Select, Slider, Segment Group, Data List, Badge, Avatar, Shine Button and Guides, with a CSS entrance only. For a tutoring marketplace, a coaching page or any profile that sells lessons by the block.

FAQ

How do I fill it with my own subjects and times?

Edit the constants at the top. SUBJECTS lists each subject with its levels, its rate per lesson and the weekly times on offer (a weekday, 0 for Sunday, and a time). LENGTHS lists the blocks with their discount, and TAKEN lists lessons already booked so the free times skip them. AS_OF is the day the page treats as today, so the first free time is always the next one after it. In a real app set it from the server's date and read the taken lessons from your calendar.

How is the cost worked out?

Lessons are the weekly count times the weeks. The price is the lessons times the rate, the discount is a share of that price rounded to the cent, and the total is the price less the discount. The month figure is the total spread over the weeks in groups of four, so the 8-week block shows half its total. Every line comes from the same few numbers, so nothing is typed twice and the lines always add up.

What does Request a trial lesson do?

Nothing leaves the page. It records the request in the page and the status line says so: Requested in this demo, nothing was sent. Changing the subject, the lessons, the length or the time clears that line, because the request no longer matches what you see. To make it real, send the subject, the plan and the chosen time to your own API in the submit handler and show its answer in the same status line.

Where do the free times come from?

They're worked out, not typed: from the day after AS_OF the block walks forward up to four weeks, keeps the weekly times that fall on a day the tutor teaches and have not been taken, and lists the first two. Pick the other one and the choice stays until you change the subject. The two times are native radio buttons, so arrow keys move between them and the choice is announced as one of two.

Is the planner accessible?

Every control is named: the subject menu by its label, the slider as Lessons a week with the value read out as "2 lessons a week", the length group by its heading and the trial times as a radio group. The working is a description list, so each figure is read with its label, and the status line is a polite live region present from the start. Prices keep their order in a right-to-left layout. Here the slider is named by its label through aria-labelledby.

How does it look on a phone?

The bands stack: the slider above the length chips, the working under them, the two trial times one over the other. The action foot stays pinned to the bottom of the screen while the panel scrolls, so the request is always in reach, and settles at the panel's end from the medium breakpoint. The status line stays on one line.

  • Pro

    A tattoo artist profile as a piece estimator: placement, size and style in, a price range, hours and sessions out, with the sum written out and the studio's hours beside it.

  • Pro

    Week Grid Tutoring Contact

    Visits and services

    A tutor request for a tutoring service: a subject and a grade, then a Monday to Sunday grid of times that shows how many tutors are free in each, a live count, and a form that checks itself and confirms in place.

  • Pro

    An electrician profile as a flat-rate job estimate: a menu of services in three category tabs with an Add toggle each, and a start cell that works out the subtotal, call-out fee, an emergency surcharge switch, the total and the time on site.

  • Pro

    An illustrator profile as a commission builder beside her drawn pieces: eight pieces as one radio group, and a size, a character count, a background and a turnaround that work the price and the delivery day out line by line.

  • Pro

    A vet profile as a species-by-service matrix: a group of five species, a table of ten services marked Offered or Not offered with the words and an icon and a price from, and figures for the count, the cheapest service and the emergency hours.

  • Pro

    An animator profile as a frame scrubber: a drawn stage worked out from the frame number, a slider through 96 frames at 24 a second with the timecode and shot name, shots as buttons that jump to their first frame, and the credits.