Mahdi ElahipourELAHIPOUR.IR
Design and development for your business

Professional websites
and custom applications
I turn your ideas into
working software.

I'm Mahdi Elahipour, a web designer and developer
for websites and custom applications.

I design and build web solutions around the way your business works.

Designed around your needs From idea to launch
Mahdi Elahipour, web designer and full-stack developer
Mahdi ElahipourDesigner & Developer
From idea to launchThoughtful design, reliable development
Learn more
Design with purpose. Build with care.
FRONTENDBACKENDWEB APPLICATIONS
Services / 01

The right tools for your idea.

From your first website to a custom application,
I can help you build the next step for your business.

01

Business website design

A professional website that presents your services clearly and builds trust with customers.

02

E-commerce development

An online store tailored to your business, with a straightforward shopping experience.

03

Custom web applications

Software designed around your workflows to make day-to-day operations easier.

04

Education platforms

A shared space for learning and administration that connects teachers, students, and your team.

Selected work / 02

Projects I have built.

Software that solves real problems
ostadki.ir
Homepage of Ostadki, a private tutoring platform
Education platform

Ostadki | Private tutor discovery platform

A Persian-language tutoring platform built with Next.js, NestJS, MySQL, and Redis. It covers tutor profiles and dashboards, contact requests, media management, technical SEO, and production releases with rollback support.

  • Next.js 15
  • NestJS 11
  • MySQL
  • Redis
Technical details

Ostadki connects students and language learners with private tutors for online and in-person lessons. Tutors can complete a profile, publish listings, set weekly availability, and share résumés, handouts, and videos. Learners can browse by subject or city and send contact requests.

The platform runs in production. My work spans the frontend, API, data modeling, authentication, media management, technical SEO, and server deployment.

Architecture and technology

The frontend and backend are separate applications in one repository. The modular backend communicates with the frontend through a REST API.

Architecture and technology — Ostadki | Private tutor discovery platform
AreaTechnology and purpose
FrontendNext.js 15 App Router, React 18, JavaScript, and TypeScript
User interfaceTailwind CSS, CSS Modules, Material UI, and Emotion
Interaction and animationFramer Motion, interactive components, and responsive carousels
Client data managementTanStack Query, React Context, and custom hooks
BackendNestJS 11, TypeScript, and Express
DatabaseMySQL and TypeORM
CachingRedis, Cache Manager, and Keyv
AuthenticationJWT, Passport, Google OAuth 2.0, and one-time passcodes
Input validationDTOs, class-validator, and class-transformer
Media storageS3-compatible storage and the AWS SDK
Image processingSharp
Live updatesServer-Sent Events for video like counts
External servicesSMS.ir, Zarinpal, and ArvanCloud
TestingJest, NestJS testing tools, and the Node.js test runner
Deployment infrastructureUbuntu, Nginx, PM2, HTTPS, and CDN

Product features

  • Tutor discovery by teaching subject, nested categories, and city, with pagination and featured listings.
  • Tutor profiles with biographies, qualifications, experience, hourly rates, lesson formats, résumés, weekly availability, and learning resources.
  • A tutor dashboard for profile settings, listing management, media uploads, scheduling, and contact requests.
  • Contact requests with phone verification by one-time passcode, followed by subject and time selection.
  • Dedicated video pages with responsive playback, descriptions, comments, likes, and view counts.
  • Related tutor recommendations based on the subject of the current profile.
  • Tutor controls for whether their contact number appears on public pages.
  • Persian RTL interface with responsive layouts, light and dark themes, and the Solar Hijri calendar.

Technical SEO and content structure

Next.js renders public pages on the server so search engines can access their main content. Category, profile, and video pages include dynamic titles, descriptions, and canonical URLs.

  • Landing pages for teaching subjects and cities, with relevant internal links among categories, subjects, and tutor profiles.
  • Periodic page regeneration and data caching through revalidation.
  • JSON-LD for BreadcrumbList, ItemList, Course, and FAQPage on relevant pages.
  • Separate sitemaps for listings, videos, and cities, plus robots rules and indexing controls for private pages.
  • Compatibility for legacy URLs when category structures and slugs change.

Technical challenges and solutions

Technical challenges and solutions — Ostadki | Private tutor discovery platform
ChallengeImplemented solution
Irrelevant listings matching a subject mentioned in the descriptionTaxonomy-first matching with stricter subject rules and mappings for legacy categories
Multiple requests to check category branchesBatch checks for listing availability across categories
Extra data returned for listing cardsA dedicated card response with only the fields needed by the interface
Repeated processing of public requestsRedis caching for listing and taxonomy results
Live events conflicting with a user's liked stateSeparate public counts from personal like status and guard response ordering
Likes becoming inconsistent when IP addresses changeVerified account identity and signed browser identifiers for guests
Routes missing from a release buildCheck existing routes and their compiled files before activation

Security, testing, and deployment

The project includes API access controls, token and session checks, OTP limits, input validation, and private route protection. The image proxy restricts allowed hosts, response types, request duration, and file size.

Releases use backups, targeted SCP transfers, tests and builds in a separate release directory, health checks, and PM2 activation. The previous runnable build is retained for rollback.

Visit Ostadki | Private tutor discovery platform (opens in a new tab)
FAMOOZ
Login screen of Famooz, a school management platform
Custom multi-school application

Famooz | Integrated school management platform

A multi-school platform built with Laravel, React, and MariaDB. It supports administrator, teacher, and parent dashboards, timetables, attendance, assessments, finance, and absence notifications by SMS. It is deployed on Liara.

  • Laravel 12
  • React 19
  • Inertia.js
  • MariaDB 12
Technical details

Famooz is a Persian-language web application for academic and administrative work across multiple schools. It provides dashboards for platform administrators, school staff, teachers, and parents, and brings enrollment, scheduling, attendance, assessments, finance, and communications into one system.

Technology stack

Technology stack — Famooz | Integrated school management platform
AreaTechnology
BackendPHP 8.2 and Laravel 12
FrontendReact 19, React DOM, and Inertia.js
Frontend build and bundlingVite and React Compiler
Production databaseMariaDB 12
Data accessEloquent ORM and Query Builder
User interfaceCustom CSS, Tailwind CSS, Lucide icons, and Vazirmatn
Dates and localizationSolar Hijri dates with Morilog Jalali, Persian numerals, and the Tehran time zone
TestingPHPUnit, Mockery, JavaScript tests, and Playwright browser testing
DeploymentLiara's Laravel platform and persistent storage
External servicesSMS.ir, SMTP email, and the MET Norway weather API

Architecture and technical design

  • Multiple schools share a database. Records are separated by school_id, and the server identifies the current school from the user's verified membership and enforces access restrictions.
  • The backend organizes academic, financial, enrollment, and attendance rules into domain services.
  • Inertia connects Laravel to the React interface and enables navigation without full page reloads. Downloads, exports, and print pages retain their own behavior.
  • The gradual migration from Blade to React includes dedicated components for login, dashboards, and panel layouts. Other pages convert server-generated presentation structures to React elements. Blade remains available as a fallback without JavaScript.

Product features

  • Manage schools, school administrators, plans, and subscriptions from the platform administration dashboard.
  • Set up academic years, grades, classes, and capacity. Enroll and transfer students while retaining records.
  • Manage teacher profiles and subject specialties, and connect profiles to login accounts.
  • Create recurring weekly timetables and generate lessons.
  • Record attendance, absences, late arrivals, and excused absences with an edit history.
  • Define assessment periods, record grades, and display results.
  • Record student development observations and disciplinary matters.
  • Parent dashboard with verified links between guardian accounts and student records.
  • Track charges, payments, expenses, and balances with printable reports and receipts.
  • Manage announcements, read status, school calendars, and administrative reports.
  • Send individual and bulk absence SMS alerts with previews, message IDs, and recorded delivery-provider acceptance status.
  • Responsive login screen with seasonal artwork and Neyshabur weather.

Access control and data integrity

  • Role-based permissions with Laravel Gates and middleware restrict teachers to their own schedules and activities.
  • Parents can access only verified, linked student records.
  • CSRF protection, login rate limits, password hashing, and password setup and recovery flows.
  • Database transactions and locks for sensitive operations, including class capacity and financial entries.
  • Record version checks prevent stale forms from overwriting newer changes.
  • Request keys prevent duplicate financial entries.
  • Actor and change history are recorded for administrative follow-up.
  • Duplicate absence messages for the same student on the same day are prevented.

Testing and release preparation

Automated tests cover role access, school isolation, enrollment, attendance, assessments, finance, parent access, and SMS integration. Browser checks cover user workflows, React navigation, mobile layouts, and network errors.

Release preparation includes production builds, excluding development dependencies, secrets, and the local database from the ZIP archive, verifying SHA-256 hashes, and running the application from the final archive. Server readiness and database backup tools are also included.

About me / 03

Behind the code
is a focus on your needs.

I'm Mahdi Elahipour, a web designer and full-stack developer. I combine practical design with reliable engineering to build software that's clear and easy to use.

I work across frontend and backend development, custom web applications, and education platforms. Every project starts with understanding your goals and how your business works.

Frontend development Backend development Custom web applications Education platforms
Let's talk about your idea
Mahdi Elahipour, web designer and full-stack developer
Mahdi ElahipourDesigner & Developer
Work with me / 04

Ready to start your next project?

If your business needs a professional website or a custom application,
I'd be happy to discuss your idea.

EmailContact details coming soon
Email
WhatsApp+98 937 551 2798
WhatsApp
GitHubContact details coming soon
GitHub
Send me a message on WhatsApp to discuss your project.