Skip to content

markrahimi/next-fullstack-portfolio-cms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Mark Rahimi - Professional Portfolio & Blog Platform

A modern, full-stack portfolio website with integrated blog, admin panel, and multilingual support. Built with Next.js 14, TypeScript, MongoDB, and Tailwind CSS.

πŸ”— Live Preview: https://www.markrahimi.com

TypeScript Next.js MongoDB License

Table of Contents


Features

Core Features

  • Multilingual Support - Full English/French localization with seamless language switching
  • Admin Panel - Complete content management system with authentication
  • Blog Platform - Create, edit, and publish blog posts with rich content
  • Project Showcase - Detailed project pages with features, challenges, and metrics
  • Contact System - Form submissions stored in database with admin notifications
  • Analytics Dashboard - Track page views, engagement, and site statistics

Technical Features

  • Type-Safe - 100% TypeScript coverage with strict type checking
  • Responsive Design - Optimized for mobile, tablet, and desktop
  • Dark Theme - Modern UI with glassmorphism effects
  • Smooth Animations - Framer Motion powered transitions and micro-interactions
  • SEO Optimized - Meta tags, Open Graph, and structured data
  • Performance - Optimized images, lazy loading, and code splitting

Tech Stack

Frontend

Backend

  • Database: MongoDB with Mongoose ODM
  • Authentication: NextAuth.js with credentials provider
  • API: Next.js API Routes (RESTful)
  • Validation: Zod schema validation
  • Session Management: JWT-based sessions

Development Tools

  • Package Manager: npm
  • Code Quality: ESLint, Prettier
  • Version Control: Git
  • Deployment: Vercel (recommended)

Project Structure

markrahimi-v5/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                          # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ api/                      # API Routes
β”‚   β”‚   β”‚   β”œβ”€β”€ about/route.ts        # About section API
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/[...nextauth]/   # NextAuth configuration
β”‚   β”‚   β”‚   β”œβ”€β”€ blogs/                # Blog CRUD operations
β”‚   β”‚   β”‚   β”œβ”€β”€ certificates/         # Certificates management
β”‚   β”‚   β”‚   β”œβ”€β”€ contact/route.ts      # Contact form handler
β”‚   β”‚   β”‚   β”œβ”€β”€ education/            # Education CRUD
β”‚   β”‚   β”‚   β”œβ”€β”€ experiences/          # Experience CRUD
β”‚   β”‚   β”‚   β”œβ”€β”€ projects/             # Projects CRUD
β”‚   β”‚   β”‚   β”œβ”€β”€ settings/route.ts     # Site settings API
β”‚   β”‚   β”‚   β”œβ”€β”€ skills/               # Skills management
β”‚   β”‚   β”‚   β”œβ”€β”€ stats/route.ts        # Analytics API
β”‚   β”‚   β”‚   └── views/route.ts        # Page view tracking
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ admin/                    # Admin Panel Pages
β”‚   β”‚   β”‚   β”œβ”€β”€ about/page.tsx        # Manage about section
β”‚   β”‚   β”‚   β”œβ”€β”€ blogs/                # Blog management
β”‚   β”‚   β”‚   β”œβ”€β”€ certificates/         # Certificates management
β”‚   β”‚   β”‚   β”œβ”€β”€ dashboard/page.tsx    # Admin dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ education/            # Education management
β”‚   β”‚   β”‚   β”œβ”€β”€ experiences/          # Experience management
β”‚   β”‚   β”‚   β”œβ”€β”€ login/page.tsx        # Admin login
β”‚   β”‚   β”‚   β”œβ”€β”€ messages/page.tsx     # Contact messages
β”‚   β”‚   β”‚   β”œβ”€β”€ projects/             # Projects management
β”‚   β”‚   β”‚   β”œβ”€β”€ settings/page.tsx     # Site settings
β”‚   β”‚   β”‚   β”œβ”€β”€ skills/               # Skills management
β”‚   β”‚   β”‚   └── layout.tsx            # Admin layout
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ blog/                     # Public Blog Pages
β”‚   β”‚   β”‚   β”œβ”€β”€ [id]/page.tsx         # Blog post detail
β”‚   β”‚   β”‚   └── page.tsx              # Blog listing
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ contact/page.tsx          # Contact page
β”‚   β”‚   β”œβ”€β”€ projects/                 # Public Project Pages
β”‚   β”‚   β”‚   β”œβ”€β”€ [id]/page.tsx         # Project detail
β”‚   β”‚   β”‚   └── page.tsx              # Projects listing
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ globals.css               # Global styles
β”‚   β”‚   β”œβ”€β”€ layout.tsx                # Root layout
β”‚   β”‚   └── page.tsx                  # Home page
β”‚   β”‚
β”‚   β”œβ”€β”€ components/                   # React Components
β”‚   β”‚   β”œβ”€β”€ about-section.tsx         # About section
β”‚   β”‚   β”œβ”€β”€ certifications-section.tsx # Certifications display
β”‚   β”‚   β”œβ”€β”€ education-section.tsx     # Education timeline
β”‚   β”‚   β”œβ”€β”€ experience-section.tsx    # Work experience
β”‚   β”‚   β”œβ”€β”€ footer.tsx                # Site footer
β”‚   β”‚   β”œβ”€β”€ hero-section.tsx          # Hero/landing section
β”‚   β”‚   β”œβ”€β”€ language-switcher.tsx     # Language toggle
β”‚   β”‚   β”œβ”€β”€ navbar.tsx                # Navigation bar
β”‚   β”‚   β”œβ”€β”€ page-loading.tsx          # Loading component
β”‚   β”‚   └── skills-section.tsx        # Skills display
β”‚   β”‚
β”‚   β”œβ”€β”€ hooks/                        # Custom React Hooks
β”‚   β”‚   └── useLanguage.ts            # Language context hook
β”‚   β”‚
β”‚   β”œβ”€β”€ lib/                          # Utility Functions
β”‚   β”‚   β”œβ”€β”€ auth.ts                   # NextAuth configuration & options
β”‚   β”‚   β”œβ”€β”€ auth-helper.ts            # Authentication utilities
β”‚   β”‚   β”œβ”€β”€ get-localized-data.ts     # Data fetching helpers
β”‚   β”‚   β”œβ”€β”€ mongodb.ts                # MongoDB connection
β”‚   β”‚   └── utils.ts                  # General utilities (cn)
β”‚   β”‚
β”‚   β”œβ”€β”€ locale/                       # Translation Files
β”‚   β”‚   β”œβ”€β”€ en.json                   # English translations
β”‚   β”‚   └── fr.json                   # French translations
β”‚   β”‚
β”‚   β”œβ”€β”€ models/                       # Mongoose Model Instances
β”‚   β”‚   β”œβ”€β”€ About.ts                  # About section model (imports from schemas)
β”‚   β”‚   β”œβ”€β”€ Blog.ts                   # Blog post model
β”‚   β”‚   β”œβ”€β”€ Certificate.ts            # Certificate model
β”‚   β”‚   β”œβ”€β”€ ContactMessage.ts         # Contact message model
β”‚   β”‚   β”œβ”€β”€ Education.ts              # Education model
β”‚   β”‚   β”œβ”€β”€ Experience.ts             # Experience model
β”‚   β”‚   β”œβ”€β”€ Project.ts                # Project model
β”‚   β”‚   β”œβ”€β”€ Settings.ts               # Site settings model
β”‚   β”‚   β”œβ”€β”€ Skill.ts                  # Skill model
β”‚   β”‚   β”œβ”€β”€ User.ts                   # User/admin model
β”‚   β”‚   └── View.ts                   # Page view analytics model
β”‚   β”‚
β”‚   β”œβ”€β”€ providers/                    # Context Providers
β”‚   β”‚   β”œβ”€β”€ language-provider.tsx     # Language context provider
β”‚   β”‚   └── session-provider.tsx      # NextAuth session provider
β”‚   β”‚
β”‚   β”œβ”€β”€ schemas/                      # Mongoose Schema Definitions
β”‚   β”‚   β”œβ”€β”€ index.ts                  # Central schema exports
β”‚   β”‚   β”œβ”€β”€ about.schema.ts           # About section schema
β”‚   β”‚   β”œβ”€β”€ blog.schema.ts            # Blog post schema
β”‚   β”‚   β”œβ”€β”€ certificate.schema.ts     # Certificate schema
β”‚   β”‚   β”œβ”€β”€ contact-message.schema.ts # Contact message schema
β”‚   β”‚   β”œβ”€β”€ education.schema.ts       # Education schema
β”‚   β”‚   β”œβ”€β”€ experience.schema.ts      # Experience schema
β”‚   β”‚   β”œβ”€β”€ project.schema.ts         # Project schema
β”‚   β”‚   β”œβ”€β”€ settings.schema.ts        # Site settings schema
β”‚   β”‚   β”œβ”€β”€ skill.schema.ts           # Skill schema
β”‚   β”‚   β”œβ”€β”€ user.schema.ts            # User/admin schema (with password hashing)
β”‚   β”‚   └── view.schema.ts            # Page view analytics schema
β”‚   β”‚
β”‚   └── types/                        # TypeScript Type Definitions
β”‚       β”œβ”€β”€ index.ts                  # Central type exports
β”‚       β”œβ”€β”€ about.ts                  # About section types
β”‚       β”œβ”€β”€ analytics.ts              # Analytics types (PageView, Stats)
β”‚       β”œβ”€β”€ blog.ts                   # Blog types (BlogPost, Blog)
β”‚       β”œβ”€β”€ certificate.ts            # Certificate types
β”‚       β”œβ”€β”€ challenge.ts              # Project challenge types
β”‚       β”œβ”€β”€ contact.ts                # Contact types (ContactInfo, ContactMessage)
β”‚       β”œβ”€β”€ education.ts              # Education types (Education, EducationDB)
β”‚       β”œβ”€β”€ experience.ts             # Experience types (Experience, ExperienceDB)
β”‚       β”œβ”€β”€ forms.ts                  # Form data types for admin
β”‚       β”œβ”€β”€ language.ts               # Language types
β”‚       β”œβ”€β”€ metric.ts                 # Project metric types
β”‚       β”œβ”€β”€ project.ts                # Project types (Project, ProjectDB, ProjectDetail)
β”‚       β”œβ”€β”€ settings.ts               # Settings types
β”‚       β”œβ”€β”€ skill.ts                  # Skill types (SkillCategory, Skill)
β”‚       β”œβ”€β”€ social.ts                 # Social link types
β”‚       └── stat.ts                   # Stat types
β”‚
β”œβ”€β”€ public/                           # Static Assets
β”‚   β”œβ”€β”€ cv.pdf                        # Resume/CV file
β”‚   β”œβ”€β”€ logo.png                      # Site logo
β”‚   └── profile.jpg                   # Profile image
β”‚
β”œβ”€β”€ scripts/                          # Utility Scripts
β”‚   └── create-admin.js               # Admin user creation script
β”‚
β”œβ”€β”€ .env.sample                       # Environment variables template
β”œβ”€β”€ .env.local                        # Environment variables (not in repo)
β”œβ”€β”€ .gitignore                        # Git ignore rules
β”œβ”€β”€ next.config.mjs                   # Next.js configuration
β”œβ”€β”€ package.json                      # Dependencies
β”œβ”€β”€ postcss.config.mjs                # PostCSS configuration
β”œβ”€β”€ tailwind.config.ts                # Tailwind CSS configuration
└── tsconfig.json                     # TypeScript configuration

Getting Started

Prerequisites

  • Node.js 18.x or higher
  • npm or yarn
  • MongoDB (local installation or MongoDB Atlas account)

Installation

  1. Clone the repository

    git clone https://github.com/markrahimi/markrahimi-v5.git
    cd markrahimi-v5
  2. Install dependencies

    npm install
  3. Set up environment variables

    Copy the sample environment file and fill in your values:

    cp .env.sample .env.local

    Then edit .env.local with your configuration:

    Variable Description Example
    MONGODB_URI MongoDB connection string mongodb://localhost:27017/markrahimi
    NEXTAUTH_SECRET Secret key for NextAuth (generate with openssl rand -base64 32) your-secret-key
    NEXTAUTH_URL Base URL of your application http://localhost:3000
    ADMIN_EMAIL Admin user email admin@example.com
    ADMIN_PASSWORD Admin user password your-secure-password
    ADMIN_NAME Admin user display name Admin
  4. Create admin user

    npm run create-admin
  5. Run development server

    npm run dev
  6. Open your browser

    Navigate to http://localhost:3000

Available Scripts

npm run dev          # Start development server
npm run build        # Build for production
npm start            # Start production server
npm run lint         # Run ESLint
npm run create-admin # Create admin user

Database Architecture

The project follows a clean separation between Schemas and Models for better maintainability and reusability.

Schema/Model Pattern

src/
β”œβ”€β”€ schemas/              # Mongoose Schema definitions
β”‚   β”œβ”€β”€ project.schema.ts # Schema + TypeScript interface
β”‚   β”œβ”€β”€ blog.schema.ts
β”‚   └── ...
β”‚
└── models/               # Mongoose Model instances
    β”œβ”€β”€ Project.ts        # Imports schema, exports model
    β”œβ”€β”€ Blog.ts
    └── ...

Schema Files (src/schemas/)

Each schema file exports:

  • Interface (IProject, IBlog, etc.) - TypeScript type for the document
  • Schema (projectSchema, blogSchema, etc.) - Mongoose schema definition
// src/schemas/project.schema.ts
import { Schema } from "mongoose";

export interface IProject {
  id: string;
  title: { en: string; fr: string };
  description: { en: string; fr: string };
  // ... other fields
  published: boolean;
  createdAt: Date;
  updatedAt: Date;
}

export const projectSchema = new Schema<IProject>({
  id: { type: String, required: true, unique: true },
  title: { en: String, fr: String },
  // ... schema definition
}, { timestamps: true });

Model Files (src/models/)

Each model file imports the schema and creates the model:

// src/models/Project.ts
import mongoose, { Model } from "mongoose";
import { IProject, projectSchema } from "@/schemas/project.schema";

const Project = (mongoose.models.Project as Model<IProject>)
  || mongoose.model<IProject>("Project", projectSchema);

export type { IProject };
export default Project;

Benefits of This Pattern

  • Separation of Concerns - Schemas define structure, models handle database operations
  • Reusability - Schemas can be imported independently for validation or testing
  • Type Safety - Interfaces are co-located with their schemas
  • Hot Reload Friendly - Prevents "model already defined" errors in development

Key Schema Files

Schema Interface Description
project.schema.ts IProject Portfolio projects with multilingual support
blog.schema.ts IBlog Blog posts with categories and tags
experience.schema.ts IExperience Work experience entries
education.schema.ts IEducation Education history
skill.schema.ts ISkill Skills organized by category
certificate.schema.ts ICertificate Certifications and awards
user.schema.ts IUser Admin users with password hashing
settings.schema.ts ISettings Site-wide settings
about.schema.ts IAbout About section content
contact-message.schema.ts IContactMessage Contact form submissions
view.schema.ts IView Page view analytics

Type System

The project uses a comprehensive type system with clear separation:

  • Schema Interfaces (IProject, IBlog) β†’ Located in src/schemas/ - Used with Mongoose models
  • Public Types (Project, BlogPost) β†’ Located in src/types/ - Used in frontend components
  • Database Types (ProjectDB, Blog) β†’ Located in src/types/ - Used in admin panel
  • Form Types (ProjectFormData) β†’ Located in src/types/forms.ts - Used in admin forms

Type Organization

// Public Types (for frontend display)
export interface Project {
  id: string;
  title: string; // Localized
  description: string; // Localized
  // ... other localized fields
}

// Database Types (for admin panel)
export interface ProjectDB {
  _id: string;
  title: { en: string; fr: string };
  description: { en: string; fr: string };
  // ... multilingual fields
  published: boolean;
  createdAt: Date;
  updatedAt: Date;
}

// Form Data Types (for admin forms)
export interface ProjectFormData {
  // Same structure as ProjectDB but optimized for form state
}

Key Type Files


Admin Panel

Accessing the Admin Panel

  1. Navigate to /admin/login
  2. Enter your admin credentials
  3. Access the dashboard at /admin/dashboard

Admin Features

Dashboard (/admin/dashboard)

  • Overview of site statistics
  • Quick access to all management sections
  • Total counts for projects, blogs, messages, views

Content Management

  • Projects (/admin/projects) - Create, edit, delete, and publish projects
  • Blog (/admin/blogs) - Manage blog posts with rich content editor
  • Experience (/admin/experiences) - Add work experience entries
  • Education (/admin/education) - Manage education history
  • Skills (/admin/skills) - Organize skills by categories
  • Certificates (/admin/certificates) - Add certifications and awards

Settings & Configuration

  • Site Settings (/admin/settings) - Configure site-wide settings
  • About Section (/admin/about) - Edit about page content
  • Messages (/admin/messages) - View and manage contact form submissions

Authentication

The admin panel uses NextAuth.js with:

  • Credentials-based authentication
  • Session-based authorization
  • Role-based access control
  • Protected API routes with middleware

API Documentation

Base URL

http://localhost:3000/api

Endpoints

Projects

GET    /api/projects         // Get all published projects
GET    /api/projects/:id     // Get single project
POST   /api/projects         // Create project (admin only)
PUT    /api/projects/:id     // Update project (admin only)
DELETE /api/projects/:id     // Delete project (admin only)

Blog

GET    /api/blogs            // Get all published blogs
GET    /api/blogs/:id        // Get single blog post
POST   /api/blogs            // Create blog (admin only)
PUT    /api/blogs/:id        // Update blog (admin only)
DELETE /api/blogs/:id        // Delete blog (admin only)

Other Endpoints

GET / api / about; // Get about section
PUT / api / about; // Update about (admin only)

GET / api / skills; // Get all skills
POST / api / skills; // Create skill (admin only)

GET / api / experiences; // Get all experiences
GET / api / education; // Get all education entries
GET / api / certificates; // Get all certificates

POST / api / contact; // Submit contact form
GET / api / messages; // Get messages (admin only)

GET / api / settings; // Get site settings
PUT / api / settings; // Update settings (admin only)

GET / api / stats; // Get site statistics (admin only)
POST / api / views; // Track page view

Query Parameters

// Language parameter for localized content
?lang=en | fr

// Example:
GET /api/projects?lang=en
GET /api/blogs?lang=fr

Deployment

Vercel (Recommended)

  1. Push to GitHub

    git push origin main
  2. Import to Vercel

    • Go to vercel.com
    • Import your repository
    • Configure environment variables
    • Deploy
  3. Environment Variables

    Add these in Vercel dashboard:

    MONGODB_URI
    NEXTAUTH_SECRET
    NEXTAUTH_URL
    ADMIN_EMAIL
    ADMIN_PASSWORD
    

Custom Server

# Build for production
npm run build

# Start production server
npm start

Development Workflow

Adding a New Content Type

  1. Create MongoDB Model in src/models/
  2. Define TypeScript Types in src/types/
  3. Create API Routes in src/app/api/
  4. Build Admin Pages in src/app/admin/
  5. Create Public Display in src/components/

Code Organization Principles

  • No inline interfaces - All types in src/types/
  • Centralized exports - Use src/types/index.ts
  • Separated concerns - Public types vs Database types vs Form types
  • Consistent naming - Public types (e.g., Project), DB types (e.g., ProjectDB), Form types (e.g., ProjectFormData)

Roadmap & Future Features

🎨 User Experience & Design

  • Light/Dark Theme Toggle - System preference detection with manual override
  • Reading Progress Indicator - Show reading progress on blog posts
  • Table of Contents - Auto-generated TOC for long blog posts
  • Smooth Page Transitions - Enhanced animations between pages
  • Skeleton Loading States - Better loading experience with content placeholders
  • Custom 404/500 Pages - Branded error pages with helpful navigation
  • Print-Friendly Styles - Optimized print layouts for blog posts and resume

πŸ” Search & Discovery

  • Full-Text Search - Search across blogs, projects, and content
  • Project Filtering - Filter by technology, category, or year
  • Blog Categories & Tags Pages - Dedicated pages for each category/tag
  • Related Posts - AI-powered related content suggestions
  • Popular Posts Widget - Show most viewed content
  • Archive Page - Chronological listing of all content

πŸ“ Content & Blog Features

  • Rich Text Editor - TipTap or Slate.js for better content editing
  • MDX Support - Write blog posts with JSX components
  • Code Syntax Highlighting - Prism.js with copy-to-clipboard
  • Blog Comments - Giscus (GitHub Discussions) integration
  • Newsletter Subscription - Email capture with Mailchimp/ConvertKit
  • RSS Feed - Auto-generated RSS for blog posts
  • Reading Time Estimation - Accurate reading time calculation
  • Social Share Buttons - Share to Twitter, LinkedIn, Facebook
  • Draft/Preview Mode - Preview unpublished content

πŸš€ Performance & SEO

  • Image Optimization - Next.js Image component with blur placeholders
  • ISR (Incremental Static Regeneration) - Faster page loads with caching
  • Dynamic Sitemap - Auto-generated sitemap.xml
  • Structured Data (JSON-LD) - Rich snippets for Google
  • Open Graph Images - Auto-generated OG images for social sharing
  • Lazy Loading - Defer loading of off-screen content
  • Bundle Analysis - Optimize JavaScript bundle size
  • Edge Functions - Deploy API routes to edge for faster response

πŸ“Š Analytics & Insights

  • Google Analytics 4 - GA4 integration with events tracking
  • Custom Analytics Dashboard - Detailed view analytics in admin
  • Heatmaps - Track user interactions with Hotjar/Clarity
  • A/B Testing - Test different versions of content
  • Performance Monitoring - Real-time performance metrics
  • Error Tracking - Sentry integration for error monitoring

πŸ” Security & Authentication

  • Two-Factor Authentication - TOTP-based 2FA for admin
  • Rate Limiting - Protect API routes from abuse
  • CAPTCHA - reCAPTCHA or hCaptcha for forms
  • Content Security Policy - Strict CSP headers
  • Audit Logs - Track admin actions
  • Session Management - View and manage active sessions

πŸ› οΈ Admin Panel Enhancements

  • Image Upload & Gallery - Media library with drag-and-drop
  • Scheduled Publishing - Schedule content for future dates
  • Content Versioning - Track changes with version history
  • Bulk Operations - Select and edit multiple items
  • Import/Export - Backup and restore content as JSON
  • Keyboard Shortcuts - Power user shortcuts in admin
  • Activity Dashboard - Recent changes and activity feed

πŸ“§ Notifications & Communication

  • Email Notifications - Send emails for new messages
  • Email Templates - Beautiful HTML email templates
  • Webhook Integration - Send data to external services
  • Slack/Discord Bot - Notifications to team channels
  • Auto-Reply - Automatic response for contact forms

🌍 Internationalization

  • More Languages - Add Spanish, German, Arabic, Persian
  • RTL Support - Right-to-left layout for Arabic/Persian
  • Auto Language Detection - Detect browser language
  • URL-Based Routing - /en/, /fr/ URL prefixes
  • Translation Management - Admin UI for translations

πŸ”— Integrations

  • GitHub Integration - Show latest repositories and contributions
  • Twitter/X Feed - Display recent tweets
  • LinkedIn Integration - Import profile data
  • Spotify Now Playing - Show currently playing track
  • Discord Presence - Show online status
  • Cal.com Integration - Meeting scheduling
  • Stripe Integration - Accept donations/payments

πŸ“± PWA & Mobile

  • Service Worker - Offline support with caching
  • Web App Manifest - Install as native app
  • Push Notifications - Notify users of new content
  • App-like Navigation - Bottom navigation on mobile
  • Gesture Support - Swipe gestures for navigation

β™Ώ Accessibility

  • WCAG 2.1 Compliance - Full accessibility audit
  • Screen Reader Optimization - Proper ARIA labels
  • Keyboard Navigation - Full keyboard support
  • High Contrast Mode - Accessibility theme option
  • Font Size Controls - User-adjustable text size
  • Reduced Motion - Respect prefers-reduced-motion

πŸ§ͺ Testing & Quality

  • Unit Tests - Jest + React Testing Library
  • E2E Tests - Playwright or Cypress
  • Visual Regression - Percy or Chromatic
  • API Tests - Supertest for API routes
  • CI/CD Pipeline - GitHub Actions workflow
  • Code Coverage - Track test coverage
  • Lighthouse CI - Automated performance testing

🎯 Advanced Features

  • AI Content Suggestions - GPT-powered writing assistant
  • Automatic Image Alt Text - AI-generated descriptions
  • Content Recommendations - ML-based personalization
  • Voice Search - Search with voice commands
  • Command Palette - Cmd+K quick navigation
  • Changelog - Public changelog for site updates
  • Status Page - System status and uptime monitoring

Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.


Contact

Mark Rahimi


Acknowledgments


Made with ❀️ by Mark Rahimi

Releases

No releases published

Packages

No packages published