Skip to content

karabeyogluonur/personel-website

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

91 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Personel Website

A robust, Clean Architecture-based CMS built with modern .NET and PostgreSQL.


πŸ”Ή Overview

Personel Website is a modular web application designed to manage personal portfolios and content with enterprise-grade architectural standards. Built on the principles of Clean Architecture, it ensures a strict separation of concerns, making the system highly maintainable, testable, and scalable.

This project addresses the limitations of rigid, monolithic personal site templates by offering a flexible backend capable of handling complex identity management, dynamic localization, and granular configuration, all wrapped in a professional-grade admin interface.

It is ideal for:

  • .NET developers seeking a real-world reference architecture
  • Professionals needing a self-hosted, customizable CMS for personal branding

πŸ”Ή Key Features

  • Clean Architecture Strict separation into Domain, Application, Infrastructure, and Presentation layers to enforce dependency rules.

  • Role-Based Identity (RBAC) Comprehensive user and role management built on ASP.NET Core Identity.

  • Dynamic Localization Database-driven localization allowing real-time language management without redeployment.

  • Robust Admin Panel Integrated Metronic-based administrative dashboard for managing content, users, and system settings.

  • Modular Design Feature-based organization (e.g., Auth, Language, Configuration) for high extensibility.

  • Docker Ready Fully containerized setup including the application and PostgreSQL database.


πŸ”Ή Tech Stack

Core

  • Language: C#
  • Framework: .NET (ASP.NET Core)
  • Database: PostgreSQL
  • ORM: Entity Framework Core (Npgsql)

Architecture & Libraries

  • Mapping: AutoMapper
  • Validation: FluentValidation
  • Dependency Injection: Native ASP.NET Core DI

Frontend

  • Rendering Engine: ASP.NET Core MVC (Razor Views)
  • Admin Theme: Metronic (HTML5, CSS3, JavaScript)
  • UI Libraries: jQuery, Bootstrap, Flatpickr, Select2

DevOps

  • Containerization: Docker, Docker Compose

πŸ”Ή Architecture & Design

The solution follows the Clean Architecture (Onion Architecture) pattern:

src/
β”œβ”€β”€ Core/
β”‚   β”œβ”€β”€ PW.Domain/          # Enterprise logic, Entities, Enums (No dependencies)
β”‚   └── PW.Application/     # Application logic, DTOs, Interfaces (Depends on Domain)
β”œβ”€β”€ Infrastructure/
β”‚   β”œβ”€β”€ PW.Persistence/     # DbContexts, Repositories, Migrations
β”‚   β”œβ”€β”€ PW.Identity/        # Identity services, Auth context, user logic
β”‚   └── PW.Storage/        # External services (File storage, Email, etc.)
└── Presentation/
    └── PW.Admin.Web/             # MVC app, Controllers, Views, API endpoints

Key Patterns Used

  • Repository & Unit of Work – Abstraction over data access logic
  • Orchestrator Pattern – Used in the Web layer to coordinate Controller and Application logic
  • Dependency Injection – Extensive use for decoupling and testability

πŸ”Ή Installation & Setup

Prerequisites

  • Docker Desktop
  • .NET SDK (version defined in global.json or latest stable)

Option 1: Docker Compose (Recommended)

This option starts both the application and PostgreSQL database automatically.

git clone https://github.com/karabeyogluonur/personel-website.git
cd personel-website
docker-compose up --build

Option 2: Local Development

Configure Database

Ensure PostgreSQL is running and update appsettings.json:

"ConnectionStrings": {
  "DefaultConnection": "Host=localhost;Port=5432;Database=PersonelWebsiteDB;Username=your_user;Password=your_password"
}

Apply Migrations

cd src/Presentation/PW.Admin.Web
dotnet ef database update --context PWDbContext
dotnet ef database update --context AuthDbContext

Run the Application

dotnet run

πŸ”Ή Usage

Admin Panel

  • Default data is seeded during startup (see IdentityInitialiser.cs).
  • Navigate to /Admin to access the dashboard.
  • Use seeded credentials (if available) or create a user and assign roles manually.

Localization

  • Manage languages from the Language section in the Admin Panel.
  • Add or update translation keys dynamically.
  • Localization is handled via a custom LanguageService backed by the database.

πŸ”Ή Configuration

Configuration is handled via appsettings.json and environment variables.

Setting Key Description Environment Variable
ConnectionStrings:DefaultConnection PostgreSQL connection string ConnectionStrings__DefaultConnection
ASPNETCORE_ENVIRONMENT Runtime environment ASPNETCORE_ENVIRONMENT

Application-wide constants such as Roles, Area Names, and Storage Paths are defined under:

PW.Application/Common/Constants

πŸ”Ή Deployment

Docker Deployment

docker build -t personel-website .
docker run -d -p 80:8080 \
  -e ConnectionStrings__DefaultConnection="<PROD_DB_STRING>" \
  personel-website

⚠️ Ensure both PWDbContext and AuthDbContext migrations are applied in production.


πŸ”Ή Roadmap

  • CMS modules (dynamic pages, blog management)
  • Headless CMS support (REST / GraphQL)
  • Unit & integration testing (xUnit)
  • CI/CD with GitHub Actions

πŸ”Ή Contributing

Contributions are welcome.

git checkout -b feature/short-description
git commit -m "feat: add short feature description"
git push origin feature/short-description

Please follow existing architecture rules, naming conventions, and clean code principles.


πŸ”Ή License

This project is open-source. Refer to the repository for license details. If no license file is present, standard copyright laws apply.

About

A fully customizable, multi-language personal website builder and CMS. Features a powerful admin panel to manage portfolios, content, and localization dynamically without code changes.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors