HomeProjectsPortakal

Portakal

Published Jun 22, 2025
Updated Dec 26, 2025
2 minutes read

Portakal

Education should be accessible, intuitive, and engaging. Portakal is a learning management system designed to transform the way instructors deliver content and students consume it.

The name comes from the Turkish word for "orange" — a symbol of freshness, energy, and growth.

The Challenge

Building a modern LMS requires balancing multiple concerns: content delivery, user engagement, payment processing, and administrative oversight. Each of these presents its own set of challenges, and they all need to work together seamlessly.

Most existing solutions feel bloated, outdated, or overly complex. The goal was to create something that feels as natural to use as it is powerful under the hood.

How It Works

The platform is built around a simple hierarchy: Courses → Chapters → Lessons. This structure is intuitive for both instructors and students.

Instructors can create rich content using a TipTap-powered editor, upload video content to AWS S3, and organize their material into digestible chapters. Students get a clean dashboard showing their enrolled courses, progress, and next steps.

The progress tracking is granular. As students complete lessons, their progress is stored and visualized. This creates a sense of accomplishment and helps identify where students might be struggling.

Technical Decisions

Building on Next.js 15 with the App Router was a deliberate choice. Server components allow for efficient data fetching, and the new architecture provides a clean separation between server and client logic.

Better Auth handles authentication with both GitHub OAuth and email-based verification. The system is secure without being cumbersome — users can sign in with one click or use magic links.

For payments, Stripe handles the complexity of transactions, refunds, and subscription management. The integration is straightforward: purchase a course, and you're immediately enrolled.

The database layer uses Prisma with PostgreSQL. The schema is designed around the core entities:

  • Users with profiles and authentication data
  • Courses with metadata, pricing, and publication status
  • Chapters that organize content logically
  • Lessons containing the actual learning material
  • Enrollments linking students to purchased courses
  • Progress records tracking completion status

Security & Protection

Security isn't an afterthought. Arcjet provides bot detection and rate limiting, protecting against automated attacks without impacting legitimate users.

File uploads go directly to S3 with presigned URLs, keeping sensitive credentials off the client. All API routes are protected with proper authentication checks.

What's Next

The platform continues to evolve. Future plans include interactive quizzes, certificates of completion, and instructor analytics. The foundation is solid — built to scale and adapt as needs grow.

Portakal is a personal project exploring the intersection of education and modern web development. The code prioritizes clarity and maintainability over premature optimization.