Skip to content
TREN
Message on WhatsApp
Black and white portrait of Enes Şahin

Enes Şahin

Full Stack Developer

I build scalable web applications with Node.js and Next.js. Currently extending my backend work into C# and .NET Core.

The logic underneath, before the framework

I am a final-year Software Engineering student. Since January 2022 I have been building the backend of a real e-commerce business from the ground up, and since July 2026 I have worked as a full-stack intern at a digital agency on enterprise-scale projects.

I care about understanding the logic beneath a technology before reaching for it. Being able to explain why I chose a relational database, or why an authorization layer belongs in middleware, matters more to me than the number of libraries I can name.

I am looking for a position where I can deepen a solid backend and data modeling foundation through mentorship, inside a real product development process.

What I have built

Work running in production, and the decisions behind it. Client names are not shared on this page; some projects are described by their architecture only, with representative visuals.

Home screen of the PNR e-commerce platform: a full width product image with the collection headline over it, category menu and cart above

End-to-end development, since 2022

PNR, a bag and accessory e-commerce platform

An e-commerce system I built from scratch for a real business. A relational data model across product, category, order and user entities, a REST API I wrote myself, and a bilingual interface on Next.js App Router. The Design Workshop, where a visitor picks a base and builds their own bag from accessories, runs on the same system.

Why PostgreSQL and Prisma?

The relationship between an order and stock needs transaction integrity: a failed order must never deduct stock. That constraint made a relational database the right call over NoSQL. I chose Prisma to keep one source of truth between the schema and the code.

Why JWT and role-based access control?

Admin, designer and customer roles each needed different permissions. Rather than spreading authorization across controllers, I centralized it in the middleware layer (isAuth, isRole), so adding an endpoint leaves the permission decision in one place.

Next.js (App Router), Node.js, Express, TypeScript, Prisma, PostgreSQL, Docker

Home screen of the school site: enrollment form and branch selector on the right, program categories below

Agency project, 2026

A three-language site for a multi-branch school, more than 200 pages

A site I built from scratch with Next.js App Router and TypeScript for an educational institution with several branches. I set up the SSR architecture, the multilingual infrastructure covering Turkish, English and Arabic, and a design-token-based theming system. Whichever page a visitor lands on, they can pick a branch and submit an enrollment request; the program categories and instant contact over WhatsApp are part of the same flow. I designed an interactive 3D interface component with Three.js and owned the site's search visibility end to end.

Why did search visibility become its own workstream?

Past 200 pages on closely related topics, a site starts competing with itself for the same queries. I found that keyword cannibalization in Google Search Console analysis and separated the pages by intent.

What was done for AI-driven search?

I implemented JSON-LD schemas in Course, FAQPage and BreadcrumbList formats, completed the canonical and hreflang configuration across all three languages, and wrote llms.txt documentation so language models read the site correctly.

Next.js, TypeScript, SSR, Three.js, JSON-LD, i18n, Form flow

Representative visual: home screen of a dark-themed tire shop site, a wheel and tire on the right, headline and call button on the left

Client project, 2026, representative visual

A tire shop website run from its own admin panel

The site's copy, blog posts and FAQs are edited from the business's own admin panel, so updating content never needs a code change. Behind it runs an Express API I wrote; in front, a Next.js app renders that content on the server for every request.

Architecture

  • A REST API in Express and TypeScript on PostgreSQL through Prisma. Blog posts, FAQs and key-value site copy are separate models; read endpoints are public, write endpoints sit behind the isAuth middleware.
  • Admin login is verified with bcrypt. The JWT travels in an httpOnly, sameSite cookie and is never exposed to JavaScript in the browser. The panel uses its own API client that sends requests with that cookie.
  • The API runs on Coolify behind a Traefik reverse proxy. With trust proxy set, rate limiting applies to the real visitor's IP rather than the proxy's.
  • The front end started as a static export. Because every panel change then needed a redeploy, it moved to server rendering: content stays in the raw HTML and updates appear without waiting for a build.
  • The sitemap and llms.txt read blog posts from the API, and the JSON-LD takes business details from the panel copy. Published posts are pushed to Bing and Yandex instantly through IndexNow.

Next.js, Express, TypeScript, Prisma, PostgreSQL, JWT, Coolify

Representative visual: home screen of a light-toned counseling site, a calm sunlit room and an appointment button

Client project, 2026, representative visual

A content-managed site for a psychologist's practice

Therapy areas, local search pages, the blog, videos and client reviews are all fed from one admin panel. A Laravel API and a Next.js front end run as separate services, and the front end renders its pages on the server from the API's content.

Architecture

  • A REST API and Filament admin panel on Laravel 13. Therapies, therapy pages, SEO pages, blog posts, videos, reviews, contact messages and newsletter subscribers are managed as separate resources.
  • Client reviews are imported from the Google Business Profile API by a scheduled daily command, with the access token held in cache.
  • WhatsApp, phone and form interactions are written to the API as events under an anonymous visitor ID. Form submissions are stored with their referrer, UTM parameters and landing page.
  • On the Next.js side, every therapy area and local search gets its own landing page. Images from Laravel storage are served through next/image as AVIF and WebP, and security headers and 301 redirects are defined in the configuration.
  • The sitemap, robots and llms.txt are generated by the front-end application, which is deployed on Coolify.

Next.js, TypeScript, Laravel, Filament, Google Business Profile API, Coolify

Home screen of the transport service site: full width coastal photograph with the headline and booking button over it

Client project, 2026

A booking-focused site for a transport service

A site built for one purpose: getting the visitor to a booking. The service description stays short and the booking call is reachable from every point on the page. It was built mobile-first, because nearly all of its traffic arrives by phone from social media.

Next.js, TypeScript, Mobile-first

Projects where I worked on fundamentals

  • React Movie Explorer

    Asynchronous data fetching against the TMDB REST API, URL-based state management and dynamic pagination. React Router v6.

  • WhereAmI-Earth

    An asynchronous app combining the Geolocation, OpenCage Geocode and REST Countries APIs to do reverse geocoding. Vanilla JavaScript.

  • Staff Management System

    A console application written in C++ following object-oriented programming principles. Role separation and record management.

Where I have worked

July 2026, ongoing

Full Stack Developer Intern

ideaZone Digital, Avcılar, Istanbul

200+

pages

3

languages

4

concurrent client projects

  • Built a three-language corporate site of more than 200 pages from scratch with Next.js App Router and TypeScript.
  • Set up dynamic metadata, canonical, hreflang, sitemap and robots configuration, plus Course, FAQPage and BreadcrumbList JSON-LD schemas.
  • Improved Lighthouse and Core Web Vitals metrics, image optimization and WCAG accessibility compliance.
  • Reviewed inherited codebases and picked up development where it had left off, adapting quickly to a Laravel-based project.
  • Ran the deployment pipeline end to end: Hostinger VPS, CI/CD with Coolify, Cloudflare DNS, Vercel previews and cPanel.

January 2022, ongoing

E-commerce Operations Specialist and Web Developer

Pnrcantaksesuar, Freelance

  • Building the company's e-commerce backend from scratch with Node.js, Express, TypeScript, Prisma ORM and PostgreSQL.
  • Designed the relational data model across product, category, order and user entities.
  • Designed a custom middleware layer (isAuth, isRole) with JWT authentication, password hashing and role-based access control.
  • Developing a MongoDB-based inventory management system to automate stock and category handling.
  • Tested and maintained virtual POS and shipping API integrations.

Education

September 2022, ongoing

B.Sc. in Software Engineering, Istanbul Sabahattin Zaim University

What I reach for

Backend
Node.js, Express.js, RESTful API, JWT, RBAC, Prisma ORM
Databases
PostgreSQL, MongoDB, Relational data modeling, Query optimization
Frontend
TypeScript, React, Next.js (App Router), Three.js, HTML5, CSS3
DevOps
Git, Docker, Coolify (CI/CD), Vercel, Hostinger VPS, Cloudflare, Linux
SEO and GEO
Dynamic metadata, hreflang, canonical, JSON-LD, Core Web Vitals, WCAG, llms.txt
Currently learning
C#, .NET Core

Let's talk

I am looking for a team where I can go deeper on backend and data modeling inside a real product development process.

Need a website for a small business? You can message me on WhatsApp too.

Enes Şahin2026