Technoyun is a responsive publishing platform that brings technology news, software guides, practical solutions, gaming coverage and curated discovery content together in one focused reading experience.
Designed, developed, deployed and maintained end-to-end by Yusuf Uğuz: public reading experience, editorial administration, ASP.NET Core API, SQL Server data layer, analytics, SEO infrastructure and production deployment.
- Product overview
- Core experiences
- Editorial and administration
- Architecture
- Current project structure
- Engineering highlights
- Technology stack
- Screenshots
- Author
Technoyun is a live, independent publication for readers interested in technology, software development, games and the wider digital world. Its public experience is organized around fast discovery: a featured story, current news, step-by-step guides, practical solutions and list-style content are surfaced in distinct sections without making the reader navigate a traditional archive first.
The platform is split into two production applications. A Blazor Server web application renders the public site and authenticated administration interface; a separate ASP.NET Core REST API owns identity, content, categories, tags, uploads and analytics. Entity Framework Core persists application data in SQL Server.
The interface supports Turkish and English localization. Published editorial content currently focuses on Turkish readers.
| Area | What it provides |
|---|---|
| Home | Featured content, recent news, guide and solution collections, discovery lists and social links. |
| Categories | Slug-based archives, category navigation, featured stories, sorting and pagination. |
| Articles | Clean reading layout, author and date metadata, view totals, tags, breadcrumbs and native sharing. |
| Search | Server-backed full-site content search with result totals and paginated cards. |
| Discovery | Curated lists for trends, popular stories, gaming coverage and evergreen technical content. |
| Localization | Turkish and English interface resources with a persistent language switcher. |
| Responsive UI | Desktop and mobile layouts built from a shared design-token and component system. |
- Discover a featured story or browse a focused section on the home page.
- Narrow the catalog through category, tag or search pages.
- Open a canonical, human-readable article URL based on its slug.
- Read Editor.js content rendered on the server with responsive images and structured article metadata.
- Continue through related categories and tags or share the current article.
The authenticated administration area is part of the same Blazor application, while all durable operations go through the API.
| Workspace | Capability |
|---|---|
| Dashboard | Editorial overview and direct access to management tools. |
| Content management | Create, edit, preview, publish, unpublish and feature articles. |
| Editor | Block-based Editor.js authoring, main-image upload and automatic local draft recovery. |
| Taxonomy | Create and manage categories; rename, merge and remove tags safely. |
| Users | Role-aware user administration, locking, unlocking and password reset controls. |
| Analytics | Page views, unique visitors, sessions, top pages, referrers and device distribution. |
| Statistics | Content and platform-level operational summaries. |
| Release history | Changelog-backed version KPIs, charts, filters and a release timeline. |
Public self-registration and self-service password reset are feature-flagged off for the current editorial release. Authentication remains available to approved administrators and editors.
┌──────────────────────────────────────────────────────────────────────┐
│ Blazor Server web application │
│ │
│ Public pages + SEO ⇄ reusable components ⇄ typed data services │
│ Admin/editor UI ⇄ auth state + token refresh │
│ │ │ │
│ └─ localization / Sentry / consent-aware analytics ──────────┤
└────────────────────────────────────┬─────────────────────────────────┘
│ HTTPS + JSON + Bearer JWT
▼
┌──────────────────────────────────────────────────────────────────────┐
│ ASP.NET Core REST API │
│ │
│ Controllers → validation / authorization → EF Core │
│ │ │ │ │
│ ├─ content ├─ access + refresh ├─ image processing │
│ ├─ taxonomy ├─ roles ├─ analytics │
│ └─ search └─ rate limiting └─ output caching │
└────────────────────────────────────┬─────────────────────────────────┘
│
▼
Microsoft SQL Server
The web project uses typed API clients and feature-level data services instead of placing HTTP details in Razor pages. Public pages are server-rendered for search engines and progressively become interactive through Blazor Server.
BlogWebApp/ Blazor Server web application
├─ ApplicationRoots/ App shell, routing and document head
├─ Components/ Cards, grids, navigation, SEO and states
│ └─ Seo/ Article, breadcrumb and website JSON-LD
├─ Core/ Routes, SEO URLs, feature flags, SemVer
├─ Data/
│ ├─ ApiClient/ Typed REST clients
│ ├─ DTOs/ Web/API contracts
│ └─ Models/ View-facing content models
├─ Layout/ Public, auth and admin layouts
├─ Pages/
│ ├─ Home/ CategoryContents/ TagContents/
│ ├─ ContentDetails/ SearchResults/
│ ├─ ContactAboutMe/ Legal/ User/
│ └─ AdminPanel/
│ ├─ Manage/ Contents, categories, tags and users
│ ├─ Analytics/ Statistics/
│ └─ Versioning/ Changelog-backed release history
├─ Resources/ Turkish and English localization
├─ Services/ Auth, content, analytics and release data
├─ Styles/ Tailwind input and design system styles
├─ tests/ xUnit and bUnit coverage
├─ CHANGELOG.md Runtime source for release history
└─ Program.cs DI, middleware, SEO routes and endpoints
BlogWebAPI/ ASP.NET Core REST API
├─ Analytics/ User-agent and device classification
├─ Controllers/ Auth, content, taxonomy, users, uploads
│ analytics and health/status endpoints
├─ Data/
│ ├─ DTOs/ Explicit request/response contracts
│ ├─ Models/ Content, tags, visits and refresh tokens
│ └─ AppDbContext.cs Identity + application persistence
├─ Infrastructure/
│ ├─ Images/ Validation, resize and WebP conversion
│ ├─ ImageStorage/ Storage abstraction and local provider
│ ├─ RefreshTokenService.cs Secure issue, rotation and revocation
│ ├─ SlugGenerator.cs Canonical content identifiers
│ └─ GlobalExceptionHandler.cs Problem-details error boundary
├─ Migrations/ EF Core schema history
├─ tests/ API integration and unit tests
└─ Program.cs Auth, caching, CORS, limits and pipeline
- Editor.js content is rendered server-side, keeping article text visible to crawlers and available before Blazor interactivity connects.
- Uploaded image type is detected from magic bytes instead of trusting the file extension or browser-provided MIME type.
- EXIF, GPS, ICC and XMP metadata are removed before storage.
- Every accepted upload is normalized to content-addressed WebP variants at
400, 1024, 1920 and up to 2560 pixels; responsive
srcsetmarkup lets the browser download the appropriate size. - Tailwind CSS is compiled and minified during the .NET build. Public routes do not pay the cost of the admin component library unless it is required.
- Persistent component state avoids a second data-loading flash when the prerendered page connects to its interactive server circuit.
- ASP.NET Core Identity and role-based authorization protect editorial and administration endpoints.
- Short-lived bearer access tokens are paired with cryptographically random, rotating refresh tokens; only SHA-256 token hashes are persisted.
- Logout revokes the active refresh token, while expired and revoked tokens are rejected by the rotation flow.
- Upload, analytics and global API policies use fixed-window rate limiting.
- Request size limits, DTO validation, centralized exception handling and problem details keep failure behavior explicit and consistent.
- Swagger can be disabled or protected with HTTP Basic authentication in production configuration.
- Each indexable page emits a canonical URL, title, description, robots rules, Open Graph metadata and Twitter card metadata.
- Article, breadcrumb and website JSON-LD are rendered alongside page metadata.
- Slug-only article routes are canonical; legacy ID-based routes permanently redirect to the current address.
sitemap.xml,robots.txt, health checks and canonical HTTPS/host redirects are built into the web application.- Analytics activates only after cookie consent, filters recognized bots and deduplicates content views per visitor over a 12-hour window.
- Sentry captures server and browser-side failures; Serilog provides structured API request and application logging.
- The deployed version and release dashboard are driven from the same semantic
version and
CHANGELOG.mdhistory used by the build.
| Layer | Technologies |
|---|---|
| Web | Blazor Server, Razor components, .NET 10 |
| UI | Tailwind CSS, custom design tokens, MudBlazor for focused admin/auth surfaces |
| State & networking | Typed HttpClient API clients, Blazor authentication state, token refresh service |
| API | ASP.NET Core REST controllers, OpenAPI / Swagger, problem details |
| Identity & security | ASP.NET Core Identity, JWT Bearer, rotating refresh tokens, role authorization, rate limiting |
| Persistence | Entity Framework Core Code First, SQL Server, migrations |
| Media | ImageSharp, content-addressed storage, responsive WebP variants |
| SEO | Server rendering, canonical URLs, Open Graph, JSON-LD, sitemap and robots |
| Observability | Sentry, Serilog, health checks and consent-aware first-party analytics |
| Testing | xUnit, bUnit and ASP.NET Core integration tests |
| Deployment | IIS out-of-process hosting, GitHub Actions and environment-based configuration |
Every image below was captured directly from the live v1.2.1 deployment. The
gallery shows real public data and current production layouts rather than design
mockups.
This repository is the public product showcase. The production web and API codebases are maintained separately.
Yusuf Uğuz — Full-stack web and mobile developer





