Skip to content

Teacher Bio Pages & Public Visibility

Privacy Issue Fixed

The public calendar no longer shows student names or lesson details to unauthenticated users.

Now shows: - ✅ "Piano Lesson" instead of "Piano - Sarah Johnson" - ✅ Time slots (for availability reference) - ✅ Lesson types (Piano, Guitar, Violin, etc.) - ❌ NO student names - ❌ NO lesson notes/details


Why Teachers Should Be Public:

Unlike students (whose privacy MUST be protected), teachers are: - Marketing their services to prospective students - Public figures within their professional capacity - Need discoverability for studio growth

What to Show on Teacher Bios:

Public Information: - Professional photo/headshot - First name + Last name - Specializations (Piano, Guitar, Vocal, etc.) - Years of experience - Education/credentials - Teaching philosophy - Student testimonials (with permission) - Available time slots - Pricing (optional) - Awards/performances

Private Information: - Home address - Personal phone number (use studio contact) - Personal email (use studio email) - Current student names - Student progress details


1. Public Teacher Directory

Page: /teachers (no auth required)

// Example: /app/teachers/page.tsx
export default function TeachersPage() {
  return (
    <div>
      <h1>Meet Our Instructors</h1>

      {/* Grid of teacher cards */}
      <div className="grid grid-cols-3 gap-6">
        <TeacherCard
          name="John Smith"
          photo="/teachers/john.jpg"
          specialties={['Piano', 'Theory']}
          bio="15 years of teaching experience..."
          link="/teachers/john-smith"
        />
        {/* More teachers */}
      </div>
    </div>
  )
}

2. Individual Teacher Bio Pages

Page: /teachers/[slug] (no auth required)

// Example: /app/teachers/[slug]/page.tsx
export default function TeacherBioPage({ params }) {
  const teacher = getTeacher(params.slug)

  return (
    <div>
      {/* Hero section */}
      <div className="flex gap-6">
        <img src={teacher.photo} className="w-48 h-48 rounded-full" />
        <div>
          <h1>{teacher.full_name}</h1>
          <p className="text-xl">{teacher.specialties.join(', ')}</p>
          <button>Book a Trial Lesson</button>
        </div>
      </div>

      {/* Bio section */}
      <section>
        <h2>About {teacher.first_name}</h2>
        <p>{teacher.bio}</p>
      </section>

      {/* Credentials */}
      <section>
        <h2>Education & Experience</h2>
        <ul>
          <li>{teacher.education}</li>
          <li>{teacher.years_experience} years teaching</li>
        </ul>
      </section>

      {/* Testimonials */}
      <section>
        <h2>What Students Say</h2>
        {teacher.testimonials.map(t => (
          <blockquote key={t.id}>
            "{t.text}"
            <cite>- {t.student_first_name}</cite>
          </blockquote>
        ))}
      </section>

      {/* Availability calendar (generic) */}
      <section>
        <h2>Availability</h2>
        <Calendar
          teacherId={teacher.id}
          showAvailabilityOnly={true}  // Only show open slots
        />
      </section>
    </div>
  )
}

3. Backend Model Additions

Add to Teacher model:

class Teacher(models.Model):
    # Existing fields...

    # Public bio fields
    public_bio = models.TextField(blank=True, help_text="Public-facing biography")
    education = models.TextField(blank=True)
    years_experience = models.IntegerField(default=0)
    awards = models.TextField(blank=True)
    teaching_philosophy = models.TextField(blank=True)

    # Visibility
    public_profile = models.BooleanField(default=True, help_text="Show in public directory")
    accepting_students = models.BooleanField(default=True)

    # Contact (studio contact, not personal)
    public_email = models.EmailField(blank=True, help_text="Studio email for inquiries")

    # SEO
    slug = models.SlugField(unique=True, help_text="URL-friendly name")
    meta_description = models.CharField(max_length=160, blank=True)

4. Public Testimonials

New model:

class Testimonial(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    student_first_name = models.CharField(max_length=50)  # Only first name!
    text = models.TextField()
    rating = models.IntegerField(default=5, validators=[MinValueValidator(1), MaxValueValidator(5)])
    approved = models.BooleanField(default=False)  # Admin approval required
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-created_at']

🔒 Privacy Balance

Students:

  • ❌ Never show names publicly
  • ❌ Never show schedules to other students
  • ❌ Never show contact info without permission
  • ✅ Only show to their teacher and admins

Teachers:

  • ✅ Public profiles for marketing
  • ✅ Show availability (not specific student times)
  • ✅ Show "John is busy 2-3 PM" (not "teaching Sarah")
  • ✅ Professional photo and credentials
  • ❌ Don't expose personal contact info (use studio contact)
  • ❌ Don't list current students by name

📊 Public Calendar Display

For unauthenticated users viewing teacher schedules:

GOOD:

📅 Ms. Smith's Schedule - Tuesday, Dec 20

10:00 AM - 11:00 AM: Available
11:00 AM - 12:00 PM: Busy (Piano lesson)
12:00 PM - 1:00 PM: Available
1:00 PM - 2:00 PM: Busy (Lesson)
2:00 PM - 3:00 PM: Available

BAD:

📅 Ms. Smith's Schedule - Tuesday, Dec 20

10:00 AM - 11:00 AM: Available
11:00 AM - 12:00 PM: Teaching Sarah Johnson (Piano)  ❌
12:00 PM - 1:00 PM: Available
1:00 PM - 2:00 PM: Teaching Mike Chen (Guitar)  ❌


🚀 Next Steps

  1. Create Teacher Directory Page
  2. Public-facing page showing all teachers
  3. Filterable by instrument/specialty
  4. "Book Trial Lesson" call-to-action

  5. Create Individual Teacher Bio Pages

  6. Professional headshot
  7. Biography and credentials
  8. Teaching philosophy
  9. Student testimonials
  10. Availability calendar (generic)

  11. Add Teacher Profile Management

  12. Dashboard section for teachers to update their bio
  13. Upload professional photo
  14. Manage what's public vs private

  15. SEO Optimization

  16. Structured data (schema.org/Person)
  17. Meta descriptions
  18. Friendly URLs (/teachers/john-smith)
  19. Social media open graph tags

📝 Example Teacher Bio Template

# Meet John Smith - Piano & Music Theory Instructor

## About John
With over 15 years of teaching experience, John specializes in classical piano 
and music theory. He holds a Master's degree in Music Education from Juilliard 
and has helped hundreds of students achieve their musical goals.

## Teaching Philosophy
"Every student learns differently. My approach is to meet students where they 
are and guide them on their unique musical journey with patience, expertise, 
and genuine enthusiasm."

## Specialties
- Classical Piano (Beginner to Advanced)
- Music Theory & Composition
- Exam Preparation (ABRSM, RCM)
- Adult Learners Welcome

## What Students Say
⭐⭐⭐⭐⭐ "John made learning piano so much fun!" - Sarah
⭐⭐⭐⭐⭐ "Best teacher I've ever had." - Mike
⭐⭐⭐⭐⭐ "Patient and knowledgeable." - Emma

## Book a Lesson
Ready to start your musical journey? [Book a trial lesson] with John today!

Summary: Teachers should absolutely have public bios! This is industry-standard for music schools and helps with student recruitment while maintaining student privacy.